From 25581ae2a071c7416273045443d3542ef0931ecd Mon Sep 17 00:00:00 2001 From: renchao_lu <renchao.lu@gmail.com> Date: Wed, 5 May 2021 11:03:40 +0200 Subject: [PATCH] [PL/RCT] check material properties. --- ...reateRichardsComponentTransportProcess.cpp | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp b/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp index ec6f6cc6e0f..9aa8f3c2d12 100644 --- a/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp +++ b/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp @@ -24,6 +24,61 @@ namespace ProcessLib { namespace RichardsComponentTransport { +namespace +{ +void checkMPLProperties( + MeshLib::Mesh const& mesh, + MaterialPropertyLib::MaterialSpatialDistributionMap const& media_map) +{ + std::array const required_properties_medium = { + MaterialPropertyLib::PropertyType::porosity, + MaterialPropertyLib::PropertyType::transversal_dispersivity, + MaterialPropertyLib::PropertyType::longitudinal_dispersivity, + MaterialPropertyLib::PropertyType::permeability, + MaterialPropertyLib::PropertyType::saturation, + MaterialPropertyLib::PropertyType::storage, + MaterialPropertyLib::PropertyType::relative_permeability}; + + std::array const required_properties_liquid_phase = { + MaterialPropertyLib::PropertyType::density, + MaterialPropertyLib::PropertyType::viscosity}; + + std::array const required_properties_components = { + MaterialPropertyLib::PropertyType::retardation_factor, + MaterialPropertyLib::PropertyType::decay_rate, + MaterialPropertyLib::PropertyType::pore_diffusion}; + + for (auto const& element : mesh.getElements()) + { + auto const element_id = element->getID(); + + auto const& medium = *media_map.getMedium(element_id); + checkRequiredProperties(medium, required_properties_medium); + + // check if liquid phase definition and the corresponding properties + // exist + auto const& liquid_phase = medium.phase("AqueousLiquid"); + checkRequiredProperties(liquid_phase, required_properties_liquid_phase); + + // check if components and the corresponding properties exist + auto const number_of_components = liquid_phase.numberOfComponents(); + for (std::size_t component_id = 0; component_id < number_of_components; + ++component_id) + { + if (!liquid_phase.hasComponent(component_id)) + { + OGS_FATAL( + "The component {:d} in the AqueousLiquid phase isn't " + "specified.", + component_id); + } + auto const& component = liquid_phase.component(component_id); + checkRequiredProperties(component, required_properties_components); + } + } +} +} // namespace + std::unique_ptr<Process> createRichardsComponentTransportProcess( std::string name, MeshLib::Mesh& mesh, @@ -104,6 +159,11 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess( auto media_map = MaterialPropertyLib::createMaterialSpatialDistributionMap(media, mesh); + DBUG( + "Check the media properties of RichardsComponentTransport process ..."); + checkMPLProperties(mesh, *media_map); + DBUG("Media properties verified."); + RichardsComponentTransportProcessData process_data{ std::move(media_map), std::move(porous_media_properties), -- GitLab