diff --git a/Applications/ApplicationsLib/ProjectData.cpp b/Applications/ApplicationsLib/ProjectData.cpp index 5a549a34bca9ae4f8835711d9861ed7ea8f128b6..79a40b8ccbcdccfe1711cf77e2d4e23528338d80 100644 --- a/Applications/ApplicationsLib/ProjectData.cpp +++ b/Applications/ApplicationsLib/ProjectData.cpp @@ -810,7 +810,7 @@ void ProjectData::parseProcesses( createRichardsComponentTransportProcess( name, *_mesh_vec[0], std::move(jacobian_assembler), _process_variables, _parameters, integration_order, - process_config); + process_config, _media); } else #endif diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_permeability.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_permeability.md deleted file mode 100644 index 075c8a48fde6b9a1d7682d9cc08e6bcaa9feeb93..0000000000000000000000000000000000000000 --- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_permeability.md +++ /dev/null @@ -1 +0,0 @@ -A tag for the relative permeability model of a porous medium. \ No newline at end of file diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_porosity.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_porosity.md deleted file mode 100644 index d90fcba994c498eb7f7c82b6052cf4619ef7735b..0000000000000000000000000000000000000000 --- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_porosity.md +++ /dev/null @@ -1 +0,0 @@ -A tag for the porosity model of a porous medium. \ No newline at end of file diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_relative_permeability.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_relative_permeability.md deleted file mode 100644 index fd2a51343fb9e4a7a8ce38bdc88c31f400c1b7e7..0000000000000000000000000000000000000000 --- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_relative_permeability.md +++ /dev/null @@ -1 +0,0 @@ -A tag for the relative permeability model. diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_storage.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_storage.md deleted file mode 100644 index 756a75cbc74b625cca84e3b6b15dcc29b36026b5..0000000000000000000000000000000000000000 --- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/porous_medium/porous_medium/t_storage.md +++ /dev/null @@ -1 +0,0 @@ -A tag for the storage model of a porous medium. \ No newline at end of file diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_decay_rate.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_decay_rate.md deleted file mode 100644 index 66473d364e13a2cbd454db05f258f25be4197899..0000000000000000000000000000000000000000 --- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_decay_rate.md +++ /dev/null @@ -1 +0,0 @@ -The decay rate \f$\vartheta\f$ used in the transport process. diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_fluid.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_fluid.md deleted file mode 100644 index 00aef4b95e01a85c9fb21ee4e2f36860cefd7dc1..0000000000000000000000000000000000000000 --- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_fluid.md +++ /dev/null @@ -1 +0,0 @@ -Defines fluid properties. diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_fluid_reference_density.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_fluid_reference_density.md deleted file mode 100644 index 7a9d865b220af527c3d672b644f8875d8b924c75..0000000000000000000000000000000000000000 --- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_fluid_reference_density.md +++ /dev/null @@ -1 +0,0 @@ -Parameter for the specification of the reference density of the fluid. diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_molecular_diffusion_coefficient.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_molecular_diffusion_coefficient.md deleted file mode 100644 index ba1c95fe91099233c51072710d9817f7dfeac8e8..0000000000000000000000000000000000000000 --- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_molecular_diffusion_coefficient.md +++ /dev/null @@ -1,2 +0,0 @@ -Molecular diffusion coefficient \f$D_d\f$ used to compute the hydrodynamic -dispersion tensor. diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_retardation_factor.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_retardation_factor.md deleted file mode 100644 index 418ad86524af0595f76fcaa2a209f440e5227b33..0000000000000000000000000000000000000000 --- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_retardation_factor.md +++ /dev/null @@ -1 +0,0 @@ -Parameter for the specification of the retardation factor. diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_solute_dispersivity_longitudinal.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_solute_dispersivity_longitudinal.md deleted file mode 100644 index 31b59b61b5f888522149c2bb4c47b192d41b84df..0000000000000000000000000000000000000000 --- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_solute_dispersivity_longitudinal.md +++ /dev/null @@ -1,2 +0,0 @@ -The longitudinal dispersivity of chemical species \f$\beta_L\f$ used to compute -the hydrodynamic dispersion tensor. diff --git a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_solute_dispersivity_transverse.md b/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_solute_dispersivity_transverse.md deleted file mode 100644 index e4b2f6360e7d9053f5ce04455d4cc6ce022aab81..0000000000000000000000000000000000000000 --- a/Documentation/ProjectFile/prj/processes/process/RichardsComponentTransport/t_solute_dispersivity_transverse.md +++ /dev/null @@ -1,2 +0,0 @@ -The transverse dispersivity of chemical species \f$\beta_T\f$ used to compute -the hydrodynamic dispersion tensor. diff --git a/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp b/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp index b5baad1c71ced0a21bf95fec2a2889854ee35455..4a8b0155acf3c6c0338e40ce5099338c870bdece 100644 --- a/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp +++ b/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.cpp @@ -11,11 +11,7 @@ #include "CreatePorousMediaProperties.h" #include "BaseLib/Algorithm.h" -#include "MaterialLib/PorousMedium/Permeability/createPermeabilityModel.h" -#include "MaterialLib/PorousMedium/Porosity/createPorosityModel.h" -#include "MaterialLib/PorousMedium/Storage/createStorageModel.h" #include "MaterialLib/PorousMedium/UnsaturatedProperty/CapillaryPressure/CreateCapillaryPressureModel.h" -#include "MaterialLib/PorousMedium/UnsaturatedProperty/RelativePermeability/CreateRelativePermeabilityModel.h" #include "MeshLib/Mesh.h" namespace ProcessLib @@ -23,23 +19,13 @@ namespace ProcessLib namespace RichardsComponentTransport { PorousMediaProperties createPorousMediaProperties( - MeshLib::Mesh& mesh, BaseLib::ConfigTree const& porous_medium_configs, - std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters) + MeshLib::Mesh& mesh, BaseLib::ConfigTree const& porous_medium_configs) { DBUG("Create PorousMediaProperties."); - std::vector<std::unique_ptr<MaterialLib::PorousMedium::Permeability>> - intrinsic_permeability_models; - std::vector<std::unique_ptr<MaterialLib::PorousMedium::Porosity>> - porosity_models; - std::vector<std::unique_ptr<MaterialLib::PorousMedium::Storage>> - storage_models; std::vector< std::unique_ptr<MaterialLib::PorousMedium::CapillaryPressureSaturation>> capillary_pressure_models; - std::vector< - std::unique_ptr<MaterialLib::PorousMedium::RelativePermeability>> - relative_permeability_models; std::vector<int> mat_ids; for ( @@ -51,28 +37,6 @@ PorousMediaProperties createPorousMediaProperties( auto const id = porous_medium_config.getConfigAttribute<int>("id"); mat_ids.push_back(id); - auto const& porosity_config = - //! \ogs_file_param{prj__processes__process__RichardsComponentTransport__porous_medium__porous_medium__porosity} - porous_medium_config.getConfigSubtree("porosity"); - porosity_models.emplace_back( - MaterialLib::PorousMedium::createPorosityModel(porosity_config, - parameters)); - - // Configuration for the intrinsic permeability - auto const& permeability_config = - //! \ogs_file_param{prj__processes__process__RichardsComponentTransport__porous_medium__porous_medium__permeability} - porous_medium_config.getConfigSubtree("permeability"); - intrinsic_permeability_models.emplace_back( - MaterialLib::PorousMedium::createPermeabilityModel( - permeability_config, parameters)); - - // Configuration for the specific storage. - auto const& storage_config = - //! \ogs_file_param{prj__processes__process__RichardsComponentTransport__porous_medium__porous_medium__storage} - porous_medium_config.getConfigSubtree("storage"); - storage_models.emplace_back( - MaterialLib::PorousMedium::createStorageModel(storage_config)); - auto const& capillary_pressure_config = //! \ogs_file_param{prj__processes__process__RichardsComponentTransport__porous_medium__porous_medium__capillary_pressure} porous_medium_config.getConfigSubtree("capillary_pressure"); @@ -80,19 +44,8 @@ PorousMediaProperties createPorousMediaProperties( MaterialLib::PorousMedium::createCapillaryPressureModel( capillary_pressure_config); capillary_pressure_models.emplace_back(std::move(capillary_pressure)); - - auto const& krel_config = - //! \ogs_file_param{prj__processes__process__RichardsComponentTransport__porous_medium__porous_medium__relative_permeability} - porous_medium_config.getConfigSubtree("relative_permeability"); - auto krel = MaterialLib::PorousMedium::createRelativePermeabilityModel( - krel_config); - relative_permeability_models.emplace_back(std::move(krel)); } - BaseLib::reorderVector(intrinsic_permeability_models, mat_ids); - BaseLib::reorderVector(porosity_models, mat_ids); - BaseLib::reorderVector(storage_models, mat_ids); - std::vector<int> material_ids(mesh.getNumberOfElements()); if (mesh.getProperties().existsPropertyVector<int>("MaterialIDs")) { @@ -103,11 +56,7 @@ PorousMediaProperties createPorousMediaProperties( material_ids.begin()); } - return PorousMediaProperties{std::move(porosity_models), - std::move(intrinsic_permeability_models), - std::move(storage_models), - std::move(capillary_pressure_models), - std::move(relative_permeability_models), + return PorousMediaProperties{std::move(capillary_pressure_models), std::move(material_ids)}; } diff --git a/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.h b/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.h index 9c101d82cae53838c68b74b07d074ea7976851d3..f56fd14a0d70ca3d7b640752d8433351ff973a71 100644 --- a/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.h +++ b/ProcessLib/RichardsComponentTransport/CreatePorousMediaProperties.h @@ -23,8 +23,6 @@ namespace ProcessLib namespace RichardsComponentTransport { PorousMediaProperties createPorousMediaProperties( - MeshLib::Mesh& mesh, BaseLib::ConfigTree const& porous_medium_configs, - std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& - parameters); + MeshLib::Mesh& mesh, BaseLib::ConfigTree const& porous_medium_configs); } } diff --git a/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp b/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp index b0decfb7f26e23209dfb8633f0d30762fd07d969..1175e3a80bc729a1559c2f93db332bd7c7c0527c 100644 --- a/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp +++ b/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.cpp @@ -9,9 +9,10 @@ */ #include "CreateRichardsComponentTransportProcess.h" - #include "CreatePorousMediaProperties.h" -#include "MaterialLib/Fluid/FluidProperties/CreateFluidProperties.h" + +#include "MaterialLib/MPL/CreateMaterialSpatialDistributionMap.h" +#include "MaterialLib/MPL/MaterialSpatialDistributionMap.h" #include "ParameterLib/ConstantParameter.h" #include "ParameterLib/Utils.h" #include "ProcessLib/Output/CreateSecondaryVariables.h" @@ -23,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, @@ -30,7 +86,8 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess( std::vector<ProcessVariable> const& variables, std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters, unsigned const integration_order, - BaseLib::ConfigTree const& config) + BaseLib::ConfigTree const& config, + std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media) { //! \ogs_file_param{prj__processes__process__type} config.checkConfigParameter("type", "RichardsComponentTransport"); @@ -58,10 +115,18 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess( "concentration", //! \ogs_file_param_special{prj__processes__process__RichardsComponentTransport__process_variables__pressure} "pressure"}); + if (per_process_variables.size() > 2) + { + OGS_FATAL( + "By now RichardsComponentTransport process only supports " + "single component transport simulation."); + } process_variables.push_back(std::move(per_process_variables)); } else // staggered scheme. { + OGS_FATAL("The staggered coupling scheme is not implemented."); + using namespace std::string_literals; for (auto const& variable_name : {"concentration"s, "pressure"s}) { @@ -75,60 +140,7 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess( //! \ogs_file_param{prj__processes__process__RichardsComponentTransport__porous_medium} config.getConfigSubtree("porous_medium"); PorousMediaProperties porous_media_properties{ - createPorousMediaProperties(mesh, porous_medium_configs, parameters)}; - - //! \ogs_file_param{prj__processes__process__RichardsComponentTransport__fluid} - auto const& fluid_config = config.getConfigSubtree("fluid"); - - auto fluid_properties = - MaterialLib::Fluid::createFluidProperties(fluid_config); - - // Parameter for the density of the fluid. - auto const& fluid_reference_density = ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__RichardsComponentTransport__fluid_reference_density} - "fluid_reference_density", parameters, 1, &mesh); - DBUG("Use '{:s}' as fluid_reference_density parameter.", - fluid_reference_density.name); - - // Parameter for the longitudinal solute dispersivity. - auto const& molecular_diffusion_coefficient = ParameterLib::findParameter< - double>( - config, - //! \ogs_file_param_special{prj__processes__process__RichardsComponentTransport__molecular_diffusion_coefficient} - "molecular_diffusion_coefficient", parameters, 1, &mesh); - DBUG("Use '{:s}' as molecular diffusion coefficient parameter.", - molecular_diffusion_coefficient.name); - - // Parameter for the longitudinal solute dispersivity. - auto const& solute_dispersivity_longitudinal = ParameterLib::findParameter< - double>( - config, - //! \ogs_file_param_special{prj__processes__process__RichardsComponentTransport__solute_dispersivity_longitudinal} - "solute_dispersivity_longitudinal", parameters, 1, &mesh); - DBUG("Use '{:s}' as longitudinal solute dispersivity parameter.", - solute_dispersivity_longitudinal.name); - - // Parameter for the transverse solute dispersivity. - auto const& solute_dispersivity_transverse = ParameterLib::findParameter< - double>( - config, - //! \ogs_file_param_special{prj__processes__process__RichardsComponentTransport__solute_dispersivity_transverse} - "solute_dispersivity_transverse", parameters, 1, &mesh); - DBUG("Use '{:s}' as transverse solute dispersivity parameter.", - solute_dispersivity_transverse.name); - - // Parameter for the retardation factor. - auto const& retardation_factor = ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__RichardsComponentTransport__retardation_factor} - "retardation_factor", parameters, 1, &mesh); - - // Parameter for the decay rate. - auto const& decay_rate = ParameterLib::findParameter<double>( - config, - //! \ogs_file_param_special{prj__processes__process__RichardsComponentTransport__decay_rate} - "decay_rate", parameters, 1, &mesh); + createPorousMediaProperties(mesh, porous_medium_configs)}; // Specific body force parameter. Eigen::VectorXd specific_body_force; @@ -150,15 +162,17 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess( std::copy_n(b.data(), b.size(), specific_body_force.data()); } + 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), - fluid_reference_density, - std::move(fluid_properties), - molecular_diffusion_coefficient, - solute_dispersivity_longitudinal, - solute_dispersivity_transverse, - retardation_factor, - decay_rate, specific_body_force, has_gravity}; diff --git a/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.h b/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.h index 0f236ed986a016c66350f85fcf075b4e3f73d15a..5b633de3036bba75f503dc182c84f607d5687332 100644 --- a/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.h +++ b/ProcessLib/RichardsComponentTransport/CreateRichardsComponentTransportProcess.h @@ -11,8 +11,14 @@ #pragma once #include <memory> + #include "ProcessLib/Process.h" +namespace MaterialPropertyLib +{ +class Medium; +} + namespace ProcessLib { namespace RichardsComponentTransport @@ -24,7 +30,8 @@ std::unique_ptr<Process> createRichardsComponentTransportProcess( std::vector<ProcessVariable> const& variables, std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters, unsigned const integration_order, - BaseLib::ConfigTree const& config); + BaseLib::ConfigTree const& config, + std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media); } // namespace RichardsComponentTransport } // namespace ProcessLib diff --git a/ProcessLib/RichardsComponentTransport/PorousMediaProperties.cpp b/ProcessLib/RichardsComponentTransport/PorousMediaProperties.cpp index c8f8f0cfafeb859a352a98f732c552e9bfc9371e..bc9d029a7ad54f2ba8717361da811832e4955830 100644 --- a/ProcessLib/RichardsComponentTransport/PorousMediaProperties.cpp +++ b/ProcessLib/RichardsComponentTransport/PorousMediaProperties.cpp @@ -10,6 +10,8 @@ #include "PorousMediaProperties.h" +#include "ParameterLib/SpatialPosition.h" + namespace ProcessLib { namespace RichardsComponentTransport @@ -21,38 +23,11 @@ int PorousMediaProperties::getMaterialID( return _material_ids[element_id]; } -MaterialLib::PorousMedium::Porosity const& PorousMediaProperties::getPorosity( - double /*t*/, ParameterLib::SpatialPosition const& pos) const -{ - return *_porosity_models[getMaterialID(pos)]; -} - -MaterialLib::PorousMedium::Permeability const& -PorousMediaProperties::getIntrinsicPermeability( - double /*t*/, ParameterLib::SpatialPosition const& pos) const -{ - return *_intrinsic_permeability_models[getMaterialID(pos)]; -} - -MaterialLib::PorousMedium::Storage const& -PorousMediaProperties::getSpecificStorage( - double /*t*/, ParameterLib::SpatialPosition const& pos) const -{ - return *_specific_storage_models[getMaterialID(pos)]; -} - MaterialLib::PorousMedium::CapillaryPressureSaturation const& PorousMediaProperties::getCapillaryPressureSaturationModel( double /*t*/, ParameterLib::SpatialPosition const& pos) const { return *_capillary_pressure_saturation_models[getMaterialID(pos)]; } - -MaterialLib::PorousMedium::RelativePermeability const& -PorousMediaProperties::getRelativePermeability( - double /*t*/, ParameterLib::SpatialPosition const& pos) const -{ - return *_relative_permeability_models[getMaterialID(pos)]; -} } // namespace RichardsComponentTransport } // namespace ProcessLib diff --git a/ProcessLib/RichardsComponentTransport/PorousMediaProperties.h b/ProcessLib/RichardsComponentTransport/PorousMediaProperties.h index ac0a87a503f43c9710c596be774c8dc3f8dcd8d8..32cac790d0a631e8e7b0b6f86673ccab7908fa7a 100644 --- a/ProcessLib/RichardsComponentTransport/PorousMediaProperties.h +++ b/ProcessLib/RichardsComponentTransport/PorousMediaProperties.h @@ -12,13 +12,8 @@ #include <memory> #include <vector> -#include <Eigen/Dense> -#include "MaterialLib/PorousMedium/Permeability/Permeability.h" -#include "MaterialLib/PorousMedium/Porosity/Porosity.h" -#include "MaterialLib/PorousMedium/Storage/Storage.h" #include "MaterialLib/PorousMedium/UnsaturatedProperty/CapillaryPressure/CapillaryPressureSaturation.h" -#include "MaterialLib/PorousMedium/UnsaturatedProperty/RelativePermeability/RelativePermeability.h" namespace ParameterLib { @@ -34,77 +29,34 @@ class PorousMediaProperties { public: PorousMediaProperties( - std::vector<std::unique_ptr<MaterialLib::PorousMedium::Porosity>>&& - porosity_models, - std::vector<std::unique_ptr<MaterialLib::PorousMedium::Permeability>>&& - intrinsic_permeability_models, - std::vector<std::unique_ptr<MaterialLib::PorousMedium::Storage>>&& - specific_storage_models, std::vector<std::unique_ptr< MaterialLib::PorousMedium::CapillaryPressureSaturation>>&& capillary_pressure_saturation_models, - std::vector< - std::unique_ptr<MaterialLib::PorousMedium::RelativePermeability>>&& - relative_permeability_models, std::vector<int>&& material_ids) - : _porosity_models(std::move(porosity_models)), - _intrinsic_permeability_models( - std::move(intrinsic_permeability_models)), - _specific_storage_models(std::move(specific_storage_models)), - _capillary_pressure_saturation_models( + : _capillary_pressure_saturation_models( std::move(capillary_pressure_saturation_models)), - _relative_permeability_models( - std::move(relative_permeability_models)), _material_ids(std::move(material_ids)) { } PorousMediaProperties(PorousMediaProperties&& other) - : _porosity_models(std::move(other._porosity_models)), - _intrinsic_permeability_models( - std::move(other._intrinsic_permeability_models)), - _specific_storage_models(std::move(other._specific_storage_models)), - _capillary_pressure_saturation_models( + : _capillary_pressure_saturation_models( std::move(other._capillary_pressure_saturation_models)), - _relative_permeability_models( - std::move(other._relative_permeability_models)), _material_ids(other._material_ids) { } - MaterialLib::PorousMedium::Porosity const& getPorosity( - double t, ParameterLib::SpatialPosition const& pos) const; - - MaterialLib::PorousMedium::Permeability const& getIntrinsicPermeability( - double t, ParameterLib::SpatialPosition const& pos) const; - - MaterialLib::PorousMedium::Storage const& getSpecificStorage( - double t, ParameterLib::SpatialPosition const& pos) const; - MaterialLib::PorousMedium::CapillaryPressureSaturation const& getCapillaryPressureSaturationModel( double t, ParameterLib::SpatialPosition const& pos) const; - MaterialLib::PorousMedium::RelativePermeability const& - getRelativePermeability(double t, - ParameterLib::SpatialPosition const& pos) const; - private: int getMaterialID(ParameterLib::SpatialPosition const& pos) const; private: - std::vector<std::unique_ptr<MaterialLib::PorousMedium::Porosity>> - _porosity_models; - std::vector<std::unique_ptr<MaterialLib::PorousMedium::Permeability>> - _intrinsic_permeability_models; - std::vector<std::unique_ptr<MaterialLib::PorousMedium::Storage>> - _specific_storage_models; std::vector< std::unique_ptr<MaterialLib::PorousMedium::CapillaryPressureSaturation>> _capillary_pressure_saturation_models; - std::vector< - std::unique_ptr<MaterialLib::PorousMedium::RelativePermeability>> - _relative_permeability_models; std::vector<int> _material_ids; }; diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h index a970aa99c957301003dd4b1e2b77025604ed50be..2e135774a68ac1df6ffdb57edd8fb59e40c82d07 100644 --- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h +++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM-impl.h @@ -10,6 +10,11 @@ #include "RichardsComponentTransportFEM.h" +#include "MaterialLib/MPL/MaterialSpatialDistributionMap.h" +#include "MaterialLib/MPL/Medium.h" +#include "MaterialLib/MPL/Property.h" +#include "MaterialLib/MPL/Utils/FormEigenTensor.h" + namespace ProcessLib { namespace RichardsComponentTransport @@ -22,10 +27,12 @@ LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>:: std::size_t const local_matrix_size, bool is_axially_symmetric, unsigned const integration_order, - RichardsComponentTransportProcessData const& process_data) + RichardsComponentTransportProcessData const& process_data, + ProcessVariable const& transport_process_variable) : _element_id(element.getID()), _process_data(process_data), - _integration_method(integration_order) + _integration_method(integration_order), + _transport_process_variable(transport_process_variable) { // This assertion is valid only if all nodal d.o.f. use the same shape // matrices. @@ -56,7 +63,7 @@ LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>:: template <typename ShapeFunction, typename IntegrationMethod, unsigned GlobalDim> void LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::assemble( - double const t, double const /*dt*/, std::vector<double> const& local_x, + double const t, double const dt, std::vector<double> const& local_x, std::vector<double> const& /*local_xdot*/, std::vector<double>& local_M_data, std::vector<double>& local_K_data, std::vector<double>& local_b_data) @@ -84,11 +91,17 @@ void LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::assemble( auto const& b = _process_data.specific_body_force; - MaterialLib::Fluid::FluidProperty::ArrayType vars; + MaterialPropertyLib::VariableArray vars; GlobalDimMatrixType const& I( GlobalDimMatrixType::Identity(GlobalDim, GlobalDim)); + // Get material properties + auto const& medium = *_process_data.media_map->getMedium(_element_id); + auto const& phase = medium.phase("AqueousLiquid"); + auto const& component = + phase.component(_transport_process_variable.getName()); + auto KCC = local_K.template block<concentration_size, concentration_size>( concentration_index, concentration_index); auto MCC = local_M.template block<concentration_size, concentration_size>( @@ -103,12 +116,6 @@ void LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::assemble( { pos.setIntegrationPoint(ip); - // \todo the argument to getValue() has to be changed for non - // constant storage model - auto const specific_storage = - _process_data.porous_media_properties.getSpecificStorage(t, pos) - .getValue(0.0); - auto const& ip_data = _ip_data[ip]; auto const& N = ip_data.N; auto const& dNdx = ip_data.dNdx; @@ -119,50 +126,65 @@ void LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::assemble( // Order matters: First C, then p! NumLib::shapeFunctionInterpolate(local_x, N, C_int_pt, p_int_pt); - double const pc_int_pt = -p_int_pt; - double const Sw = _process_data.porous_media_properties - .getCapillaryPressureSaturationModel(t, pos) - .getSaturation(pc_int_pt); + vars[static_cast<int>( + MaterialPropertyLib::Variable::capillary_pressure)] = -p_int_pt; + auto const Sw = medium[MaterialPropertyLib::PropertyType::saturation] + .template value<double>(vars, pos, t, dt); double const dSw_dpc = 1. / _process_data.porous_media_properties .getCapillaryPressureSaturationModel(t, pos) .getdPcdS(Sw); + vars[static_cast<int>(MaterialPropertyLib::Variable::concentration)] = + C_int_pt; + vars[static_cast<int>(MaterialPropertyLib::Variable::phase_pressure)] = + p_int_pt; + + // \todo the argument to getValue() has to be changed for non + // constant storage model + auto const specific_storage = + medium[MaterialPropertyLib::PropertyType::storage] + .template value<double>(vars, pos, t, dt); // \todo the first argument has to be changed for non constant // porosity model auto const porosity = - _process_data.porous_media_properties.getPorosity(t, pos).getValue( - t, pos, 0.0, C_int_pt); + medium[MaterialPropertyLib::PropertyType::porosity] + .template value<double>(vars, pos, t, dt); auto const retardation_factor = - _process_data.retardation_factor(t, pos)[0]; + component[MaterialPropertyLib::PropertyType::retardation_factor] + .template value<double>(vars, pos, t, dt); auto const solute_dispersivity_transverse = - _process_data.solute_dispersivity_transverse(t, pos)[0]; + medium[MaterialPropertyLib::PropertyType::transversal_dispersivity] + .template value<double>(vars, pos, t, dt); auto const solute_dispersivity_longitudinal = - _process_data.solute_dispersivity_longitudinal(t, pos)[0]; + medium[MaterialPropertyLib::PropertyType::longitudinal_dispersivity] + .template value<double>(vars, pos, t, dt); // Use the fluid density model to compute the density - vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::C)] = - C_int_pt; - vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::p)] = - p_int_pt; - auto const density = _process_data.fluid_properties->getValue( - MaterialLib::Fluid::FluidPropertyType::Density, vars); - auto const decay_rate = _process_data.decay_rate(t, pos)[0]; - auto const molecular_diffusion_coefficient = - _process_data.molecular_diffusion_coefficient(t, pos)[0]; - - auto const& K = _process_data.porous_media_properties - .getIntrinsicPermeability(t, pos) - .getValue(t, pos, 0.0, 0.0); - auto const k_rel = _process_data.porous_media_properties - .getRelativePermeability(t, pos) - .getValue(Sw); + auto const density = phase[MaterialPropertyLib::PropertyType::density] + .template value<double>(vars, pos, t, dt); + auto const decay_rate = + component[MaterialPropertyLib::PropertyType::decay_rate] + .template value<double>(vars, pos, t, dt); + auto const pore_diffusion_coefficient = + MaterialPropertyLib::formEigenTensor<GlobalDim>( + component[MaterialPropertyLib::PropertyType::pore_diffusion] + .value(vars, pos, t, dt)); + + auto const K = MaterialPropertyLib::formEigenTensor<GlobalDim>( + medium[MaterialPropertyLib::PropertyType::permeability].value( + vars, pos, t, dt)); + vars[static_cast<int>( + MaterialPropertyLib::Variable::liquid_saturation)] = Sw; + auto const k_rel = + medium[MaterialPropertyLib::PropertyType::relative_permeability] + .template value<double>(vars, pos, t, dt); // Use the viscosity model to compute the viscosity - auto const mu = _process_data.fluid_properties->getValue( - MaterialLib::Fluid::FluidPropertyType::Viscosity, vars); + auto const mu = phase[MaterialPropertyLib::PropertyType::viscosity] + .template value<double>(vars, pos, t, dt); auto const K_times_k_rel_over_mu = K * (k_rel / mu); GlobalDimVectorType const velocity = @@ -176,16 +198,14 @@ void LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>::assemble( GlobalDimMatrixType const hydrodynamic_dispersion = velocity_magnitude != 0.0 ? GlobalDimMatrixType( - (porosity * molecular_diffusion_coefficient + - solute_dispersivity_transverse * velocity_magnitude) * - I + + porosity * pore_diffusion_coefficient + + solute_dispersivity_transverse * velocity_magnitude * I + (solute_dispersivity_longitudinal - solute_dispersivity_transverse) / velocity_magnitude * velocity * velocity.transpose()) - : GlobalDimMatrixType( - (porosity * molecular_diffusion_coefficient + - solute_dispersivity_transverse * velocity_magnitude) * - I); + : GlobalDimMatrixType(porosity * pore_diffusion_coefficient + + solute_dispersivity_transverse * + velocity_magnitude * I); // matrix assembly KCC.noalias() += @@ -237,7 +257,11 @@ LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>:: ParameterLib::SpatialPosition pos; pos.setElementID(_element_id); - MaterialLib::Fluid::FluidProperty::ArrayType vars; + MaterialPropertyLib::VariableArray vars; + + // Get material properties + auto const& medium = *_process_data.media_map->getMedium(_element_id); + auto const& phase = medium.phase("AqueousLiquid"); auto const p_nodal_values = Eigen::Map<const NodalVectorType>( &local_x[ShapeFunction::NPOINTS], ShapeFunction::NPOINTS); @@ -250,36 +274,38 @@ LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>:: pos.setIntegrationPoint(ip); - auto const& K = _process_data.porous_media_properties - .getIntrinsicPermeability(t, pos) - .getValue(t, pos, 0.0, 0.0); - auto const mu = _process_data.fluid_properties->getValue( - MaterialLib::Fluid::FluidPropertyType::Viscosity, vars); + auto const dt = std::numeric_limits<double>::quiet_NaN(); + auto const K = MaterialPropertyLib::formEigenTensor<GlobalDim>( + medium[MaterialPropertyLib::PropertyType::permeability].value( + vars, pos, t, dt)); + auto const mu = phase[MaterialPropertyLib::PropertyType::viscosity] + .template value<double>(vars, pos, t, dt); double C_int_pt = 0.0; double p_int_pt = 0.0; NumLib::shapeFunctionInterpolate(local_x, N, C_int_pt, p_int_pt); // saturation - double const pc_int_pt = -p_int_pt; - double const Sw = _process_data.porous_media_properties - .getCapillaryPressureSaturationModel(t, pos) - .getSaturation(pc_int_pt); + vars[static_cast<int>( + MaterialPropertyLib::Variable::capillary_pressure)] = -p_int_pt; + auto const Sw = medium[MaterialPropertyLib::PropertyType::saturation] + .template value<double>(vars, pos, t, dt); - auto const k_rel = _process_data.porous_media_properties - .getRelativePermeability(t, pos) - .getValue(Sw); + vars[static_cast<int>( + MaterialPropertyLib::Variable::liquid_saturation)] = Sw; + auto const k_rel = + medium[MaterialPropertyLib::PropertyType::relative_permeability] + .template value<double>(vars, pos, t, dt); cache_mat.col(ip).noalias() = -dNdx * p_nodal_values; if (_process_data.has_gravity) { vars[static_cast<int>( - MaterialLib::Fluid::PropertyVariableType::C)] = C_int_pt; + MaterialPropertyLib::Variable::concentration)] = C_int_pt; vars[static_cast<int>( - MaterialLib::Fluid::PropertyVariableType::p)] = p_int_pt; - - auto const rho_w = _process_data.fluid_properties->getValue( - MaterialLib::Fluid::FluidPropertyType::Density, vars); + MaterialPropertyLib::Variable::phase_pressure)] = p_int_pt; + auto const rho_w = phase[MaterialPropertyLib::PropertyType::density] + .template value<double>(vars, pos, t, dt); auto const b = _process_data.specific_body_force; // here it is assumed that the vector b is directed 'downwards' cache_mat.col(ip).noalias() += rho_w * b; @@ -314,6 +340,10 @@ LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>:: ParameterLib::SpatialPosition pos; pos.setElementID(_element_id); + MaterialPropertyLib::VariableArray vars; + + auto const& medium = *_process_data.media_map->getMedium(_element_id); + unsigned const n_integration_points = _integration_method.getNumberOfPoints(); @@ -337,10 +367,11 @@ LocalAssemblerData<ShapeFunction, IntegrationMethod, GlobalDim>:: NumLib::shapeFunctionInterpolate(local_x, N, C_int_pt, p_int_pt); // saturation - double const pc_int_pt = -p_int_pt; - double const Sw = _process_data.porous_media_properties - .getCapillaryPressureSaturationModel(t, pos) - .getSaturation(pc_int_pt); + vars[static_cast<int>( + MaterialPropertyLib::Variable::capillary_pressure)] = -p_int_pt; + auto const dt = std::numeric_limits<double>::quiet_NaN(); + auto const Sw = medium[MaterialPropertyLib::PropertyType::saturation] + .template value<double>(vars, pos, t, dt); cache_vec[ip] = Sw; } diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM.h b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM.h index 7eb886954f9f7ce6aa089950dcedee0fa2527875..490eaf139e83ece2f869dd57aad5739c455e74fa 100644 --- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM.h +++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportFEM.h @@ -24,6 +24,7 @@ #include "ParameterLib/Parameter.h" #include "ProcessLib/LocalAssemblerInterface.h" #include "RichardsComponentTransportProcessData.h" +#include "ProcessLib/ProcessVariable.h" namespace ProcessLib { @@ -102,7 +103,8 @@ public: std::size_t const local_matrix_size, bool is_axially_symmetric, unsigned const integration_order, - RichardsComponentTransportProcessData const& process_data); + RichardsComponentTransportProcessData const& process_data, + ProcessVariable const& transport_process_variable); void assemble(double const t, double const dt, std::vector<double> const& local_x, @@ -131,6 +133,8 @@ private: RichardsComponentTransportProcessData const& _process_data; IntegrationMethod const _integration_method; + ProcessVariable const& _transport_process_variable; + std::vector< IntegrationPointData<NodalRowVectorType, GlobalDimNodalMatrixType, NodalMatrixType>, diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp index eed7ba8752911c2cda200d8a1907877c0268ad45..ecbb8ac3ac194309077fdd5d4d742588286d641c 100644 --- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp +++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp @@ -44,10 +44,11 @@ void RichardsComponentTransportProcess::initializeConcreteProcess( const int monolithic_process_id = 0; ProcessLib::ProcessVariable const& pv = getProcessVariables(monolithic_process_id)[0]; + ProcessLib::createLocalAssemblers<LocalAssemblerData>( mesh.getDimension(), mesh.getElements(), dof_table, pv.getShapeFunctionOrder(), _local_assemblers, - mesh.isAxiallySymmetric(), integration_order, _process_data); + mesh.isAxiallySymmetric(), integration_order, _process_data, pv); _secondary_variables.addSecondaryVariable( "darcy_velocity", diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcessData.h b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcessData.h index 92e233d1ce89c984d3e8cb24b6d12c1f0e5f529b..450cd3aa5e889cdc089f9444c65030eed3e65f3c 100644 --- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcessData.h +++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcessData.h @@ -12,12 +12,13 @@ #include <memory> -#include "MaterialLib/Fluid/FluidProperties/FluidProperties.h" -#include "MaterialLib/PorousMedium/Porosity/Porosity.h" -#include "MaterialLib/PorousMedium/Storage/Storage.h" - #include "PorousMediaProperties.h" +namespace MaterialPropertyLib +{ +class MaterialSpatialDistributionMap; +} + namespace ProcessLib { template <typename ReturnType> @@ -27,14 +28,9 @@ namespace RichardsComponentTransport { struct RichardsComponentTransportProcessData { + std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap> + media_map; PorousMediaProperties porous_media_properties; - ParameterLib::Parameter<double> const& fluid_reference_density; - std::unique_ptr<MaterialLib::Fluid::FluidProperties> fluid_properties; - ParameterLib::Parameter<double> const& molecular_diffusion_coefficient; - ParameterLib::Parameter<double> const& solute_dispersivity_longitudinal; - ParameterLib::Parameter<double> const& solute_dispersivity_transverse; - ParameterLib::Parameter<double> const& retardation_factor; - ParameterLib::Parameter<double> const& decay_rate; Eigen::VectorXd const specific_body_force; bool const has_gravity; }; diff --git a/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1.prj b/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1.prj index 1f0bd189dc6c97abb2aeed6a24e6aa7b1bbc6acf..667b9621af079488be5adbc19de8c54f06810cd2 100644 --- a/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1.prj +++ b/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1.prj @@ -12,30 +12,8 @@ <concentration>concentration</concentration> <pressure>pressure</pressure> </process_variables> - <fluid> - <density> - <type>Constant</type> - <value>1000</value> - </density> - <viscosity> - <type>Constant</type> - <value>1.0e-3</value> - </viscosity> - </fluid> <porous_medium> <porous_medium id="0"> - <permeability> - <permeability_tensor_entries>kappa1</permeability_tensor_entries> - <type>Constant</type> - </permeability> - <porosity> - <type>Constant</type> - <porosity_parameter>constant_porosity_parameter</porosity_parameter> - </porosity> - <storage> - <type>Constant</type> - <value>0</value> - </storage> <capillary_pressure> <type>vanGenuchten</type> <m>0.789029535864979</m> @@ -44,21 +22,8 @@ <smax>1</smax> <sr>0.1689</sr> </capillary_pressure> - <relative_permeability> - <type>WettingPhaseVanGenuchten</type> - <krel_min>1e-12</krel_min> - <m>0.789029535864979</m> - <smax>1</smax> - <sr>0.1689</sr> - </relative_permeability> </porous_medium> </porous_medium> - <decay_rate>decay_rate</decay_rate> - <fluid_reference_density>rho_fluid</fluid_reference_density> - <retardation_factor>retardation_factor</retardation_factor> - <solute_dispersivity_longitudinal>alpha_l</solute_dispersivity_longitudinal> - <solute_dispersivity_transverse>alpha_l</solute_dispersivity_transverse> - <molecular_diffusion_coefficient>Dm</molecular_diffusion_coefficient> <specific_body_force>-9.81</specific_body_force> <secondary_variables> <secondary_variable internal_name="saturation" output_name="saturation"/> @@ -66,6 +31,101 @@ </secondary_variables> </process> </processes> + <media> + <medium id="0"> + <phases> + <phase> + <type>AqueousLiquid</type> + <components> + <component> + <name>concentration</name> + <properties> + <property> + <name>pore_diffusion</name> + <type>Parameter</type> + <parameter_name>Dm</parameter_name> + </property> + <property> + <name>retardation_factor</name> + <type>Parameter</type> + <parameter_name>retardation_factor</parameter_name> + </property> + <property> + <name>decay_rate</name> + <type>Parameter</type> + <parameter_name>decay_rate</parameter_name> + </property> + </properties> + </component> + </components> + <properties> + <property> + <name>density</name> + <type>Constant</type> + <value>1e3</value> + </property> + <property> + <name>viscosity</name> + <type>Constant</type> + <value>1e-3</value> + </property> + </properties> + </phase> + </phases> + <properties> + <property> + <name>permeability</name> + <type>Parameter</type> + <parameter_name>kappa1</parameter_name> + </property> + <property> + <name>porosity</name> + <type>Parameter</type> + <parameter_name>constant_porosity_parameter</parameter_name> + </property> + <property> + <name>storage</name> + <type>Constant</type> + <value>0</value> + </property> + <property> + <name>capillary_pressure</name> + <type>CapillaryPressureVanGenuchten</type> + <residual_liquid_saturation>0.1689</residual_liquid_saturation> + <residual_gas_saturation>0</residual_gas_saturation> + <exponent>0.789029535864979</exponent> + <p_b>3633.33</p_b> + <maximum_capillary_pressure>36333.30</maximum_capillary_pressure> + </property> + <property> + <name>relative_permeability</name> + <type>RelativePermeabilityVanGenuchten</type> + <residual_liquid_saturation>0.1689</residual_liquid_saturation> + <residual_gas_saturation>0</residual_gas_saturation> + <minimum_relative_permeability_liquid>1e-12</minimum_relative_permeability_liquid> + <exponent>0.789029535864979</exponent> + </property> + <property> + <name>saturation</name> + <type>SaturationVanGenuchten</type> + <residual_liquid_saturation>0.1689</residual_liquid_saturation> + <residual_gas_saturation>0</residual_gas_saturation> + <exponent>0.789029535864979</exponent> + <p_b>3633.33</p_b> + </property> + <property> + <name>longitudinal_dispersivity</name> + <type>Parameter</type> + <parameter_name>alpha_l</parameter_name> + </property> + <property> + <name>transversal_dispersivity</name> + <type>Parameter</type> + <parameter_name>alpha_l</parameter_name> + </property> + </properties> + </medium> + </media> <time_loop> <processes> <process ref="HusC"> @@ -265,7 +325,7 @@ <vtkdiff> <regex>Padilla_NaCl1_ts_.*.vtu</regex> <field>concentration</field> - <absolute_tolerance>1e-12</absolute_tolerance> + <absolute_tolerance>2e-12</absolute_tolerance> <relative_tolerance>0</relative_tolerance> </vtkdiff> <vtkdiff> diff --git a/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1_quadratic.prj b/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1_quadratic.prj index b899df8123589dd2cd40b721640b3a72ed3489cc..e7316030fb2cccc59801fd9da6dd87a38108aab2 100644 --- a/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1_quadratic.prj +++ b/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl1/Padilla_NaCl1_quadratic.prj @@ -12,30 +12,8 @@ <concentration>concentration</concentration> <pressure>pressure</pressure> </process_variables> - <fluid> - <density> - <type>Constant</type> - <value>1000</value> - </density> - <viscosity> - <type>Constant</type> - <value>1.0e-3</value> - </viscosity> - </fluid> <porous_medium> <porous_medium id="0"> - <permeability> - <permeability_tensor_entries>kappa1</permeability_tensor_entries> - <type>Constant</type> - </permeability> - <porosity> - <type>Constant</type> - <porosity_parameter>constant_porosity_parameter</porosity_parameter> - </porosity> - <storage> - <type>Constant</type> - <value>0</value> - </storage> <capillary_pressure> <type>vanGenuchten</type> <m>0.789029535864979</m> @@ -44,21 +22,8 @@ <smax>1</smax> <sr>0.1689</sr> </capillary_pressure> - <relative_permeability> - <type>WettingPhaseVanGenuchten</type> - <krel_min>1e-12</krel_min> - <m>0.789029535864979</m> - <smax>1</smax> - <sr>0.1689</sr> - </relative_permeability> </porous_medium> </porous_medium> - <decay_rate>decay_rate</decay_rate> - <fluid_reference_density>rho_fluid</fluid_reference_density> - <retardation_factor>retardation_factor</retardation_factor> - <solute_dispersivity_longitudinal>alpha_l</solute_dispersivity_longitudinal> - <solute_dispersivity_transverse>alpha_l</solute_dispersivity_transverse> - <molecular_diffusion_coefficient>Dm</molecular_diffusion_coefficient> <specific_body_force>-9.81</specific_body_force> <secondary_variables> <secondary_variable internal_name="saturation" output_name="saturation"/> @@ -66,6 +31,101 @@ </secondary_variables> </process> </processes> + <media> + <medium id="0"> + <phases> + <phase> + <type>AqueousLiquid</type> + <components> + <component> + <name>concentration</name> + <properties> + <property> + <name>pore_diffusion</name> + <type>Parameter</type> + <parameter_name>Dm</parameter_name> + </property> + <property> + <name>retardation_factor</name> + <type>Parameter</type> + <parameter_name>retardation_factor</parameter_name> + </property> + <property> + <name>decay_rate</name> + <type>Parameter</type> + <parameter_name>decay_rate</parameter_name> + </property> + </properties> + </component> + </components> + <properties> + <property> + <name>density</name> + <type>Constant</type> + <value>1e3</value> + </property> + <property> + <name>viscosity</name> + <type>Constant</type> + <value>1e-3</value> + </property> + </properties> + </phase> + </phases> + <properties> + <property> + <name>permeability</name> + <type>Parameter</type> + <parameter_name>kappa1</parameter_name> + </property> + <property> + <name>porosity</name> + <type>Parameter</type> + <parameter_name>constant_porosity_parameter</parameter_name> + </property> + <property> + <name>storage</name> + <type>Constant</type> + <value>0</value> + </property> + <property> + <name>capillary_pressure</name> + <type>CapillaryPressureVanGenuchten</type> + <residual_liquid_saturation>0.1689</residual_liquid_saturation> + <residual_gas_saturation>0</residual_gas_saturation> + <exponent>0.789029535864979</exponent> + <p_b>3633.33</p_b> + <maximum_capillary_pressure>36333.30</maximum_capillary_pressure> + </property> + <property> + <name>relative_permeability</name> + <type>RelativePermeabilityVanGenuchten</type> + <residual_liquid_saturation>0.1689</residual_liquid_saturation> + <residual_gas_saturation>0</residual_gas_saturation> + <minimum_relative_permeability_liquid>1e-12</minimum_relative_permeability_liquid> + <exponent>0.789029535864979</exponent> + </property> + <property> + <name>saturation</name> + <type>SaturationVanGenuchten</type> + <residual_liquid_saturation>0.1689</residual_liquid_saturation> + <residual_gas_saturation>0</residual_gas_saturation> + <exponent>0.789029535864979</exponent> + <p_b>3633.33</p_b> + </property> + <property> + <name>longitudinal_dispersivity</name> + <type>Parameter</type> + <parameter_name>alpha_l</parameter_name> + </property> + <property> + <name>transversal_dispersivity</name> + <type>Parameter</type> + <parameter_name>alpha_l</parameter_name> + </property> + </properties> + </medium> + </media> <time_loop> <processes> <process ref="HusC"> diff --git a/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl6/Padilla_NaCl6.prj b/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl6/Padilla_NaCl6.prj index 65f27ab59fc7f2e5b6a93d4d45acc7d08d188658..8c03a8cdbc394ce1c5e2529b94a6ee920e2c46df 100644 --- a/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl6/Padilla_NaCl6.prj +++ b/Tests/Data/Parabolic/RichardsComponentTransport/Padilla/Padilla_NaCl6/Padilla_NaCl6.prj @@ -12,30 +12,8 @@ <concentration>concentration</concentration> <pressure>pressure</pressure> </process_variables> - <fluid> - <density> - <type>Constant</type> - <value>1000</value> - </density> - <viscosity> - <type>Constant</type> - <value>1.0e-3</value> - </viscosity> - </fluid> <porous_medium> <porous_medium id="0"> - <permeability> - <permeability_tensor_entries>kappa1</permeability_tensor_entries> - <type>Constant</type> - </permeability> - <porosity> - <type>Constant</type> - <porosity_parameter>constant_porosity_parameter</porosity_parameter> - </porosity> - <storage> - <type>Constant</type> - <value>0</value> - </storage> <capillary_pressure> <type>vanGenuchten</type> <m>0.789029535864979</m> @@ -44,21 +22,8 @@ <smax>1</smax> <sr>0.1689</sr> </capillary_pressure> - <relative_permeability> - <type>WettingPhaseVanGenuchten</type> - <krel_min>1e-12</krel_min> - <m>0.789029535864979</m> - <smax>1</smax> - <sr>0.1689</sr> - </relative_permeability> </porous_medium> </porous_medium> - <decay_rate>decay_rate</decay_rate> - <fluid_reference_density>rho_fluid</fluid_reference_density> - <retardation_factor>retardation_factor</retardation_factor> - <solute_dispersivity_longitudinal>alpha_l</solute_dispersivity_longitudinal> - <solute_dispersivity_transverse>alpha_l</solute_dispersivity_transverse> - <molecular_diffusion_coefficient>Dm</molecular_diffusion_coefficient> <specific_body_force>-9.81</specific_body_force> <secondary_variables> <secondary_variable internal_name="saturation" output_name="saturation"/> @@ -66,6 +31,101 @@ </secondary_variables> </process> </processes> + <media> + <medium id="0"> + <phases> + <phase> + <type>AqueousLiquid</type> + <components> + <component> + <name>concentration</name> + <properties> + <property> + <name>pore_diffusion</name> + <type>Parameter</type> + <parameter_name>Dm</parameter_name> + </property> + <property> + <name>retardation_factor</name> + <type>Parameter</type> + <parameter_name>retardation_factor</parameter_name> + </property> + <property> + <name>decay_rate</name> + <type>Parameter</type> + <parameter_name>decay_rate</parameter_name> + </property> + </properties> + </component> + </components> + <properties> + <property> + <name>density</name> + <type>Constant</type> + <value>1e3</value> + </property> + <property> + <name>viscosity</name> + <type>Constant</type> + <value>1e-3</value> + </property> + </properties> + </phase> + </phases> + <properties> + <property> + <name>permeability</name> + <type>Parameter</type> + <parameter_name>kappa1</parameter_name> + </property> + <property> + <name>porosity</name> + <type>Parameter</type> + <parameter_name>constant_porosity_parameter</parameter_name> + </property> + <property> + <name>storage</name> + <type>Constant</type> + <value>0</value> + </property> + <property> + <name>capillary_pressure</name> + <type>CapillaryPressureVanGenuchten</type> + <residual_liquid_saturation>0.1689</residual_liquid_saturation> + <residual_gas_saturation>0</residual_gas_saturation> + <exponent>0.789029535864979</exponent> + <p_b>3633.33</p_b> + <maximum_capillary_pressure>36333.30</maximum_capillary_pressure> + </property> + <property> + <name>relative_permeability</name> + <type>RelativePermeabilityVanGenuchten</type> + <residual_liquid_saturation>0.1689</residual_liquid_saturation> + <residual_gas_saturation>0</residual_gas_saturation> + <minimum_relative_permeability_liquid>1e-12</minimum_relative_permeability_liquid> + <exponent>0.789029535864979</exponent> + </property> + <property> + <name>saturation</name> + <type>SaturationVanGenuchten</type> + <residual_liquid_saturation>0.1689</residual_liquid_saturation> + <residual_gas_saturation>0</residual_gas_saturation> + <exponent>0.789029535864979</exponent> + <p_b>3633.33</p_b> + </property> + <property> + <name>longitudinal_dispersivity</name> + <type>Parameter</type> + <parameter_name>alpha_l</parameter_name> + </property> + <property> + <name>transversal_dispersivity</name> + <type>Parameter</type> + <parameter_name>alpha_l</parameter_name> + </property> + </properties> + </medium> + </media> <time_loop> <processes> <process ref="HusC">