diff --git a/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h b/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h index d7a984a2b459381adbe634e467e54fbf15fca344..b872373d1f438b6c67a984b4a9219fad8c299853 100644 --- a/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h +++ b/ProcessLib/LiquidFlow/LiquidFlowLocalAssembler-impl.h @@ -160,9 +160,9 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>:: // Compute viscosity: const double mu = _material_properties.getViscosity(p, _temperature); - LaplacianGravityVelocityCalculator - ::calculateVelocity(_darcy_velocities, local_p_vec, sm, perm, - ip, mu, rho_g, _gravitational_axis_id); + LaplacianGravityVelocityCalculator::calculateVelocity( + _darcy_velocities, local_p_vec, sm, perm, ip, mu, rho_g, + _gravitational_axis_id); } } diff --git a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp index f3d335e43d13bcbba7efe44a52a25293de73f153..325ef7de4a712e122530c7430760b39df1954a9a 100644 --- a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp +++ b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp @@ -24,6 +24,10 @@ #include "MaterialLib/Fluid/FluidProperty.h" #include "MaterialLib/PorousMedium/Porosity/Porosity.h" #include "MaterialLib/PorousMedium/Storage/Storage.h" +#include "MaterialLib/Fluid/FluidProperties/CreateFluidProperties.h" + +#include "MaterialLib/Fluid/FluidPropertyHeaders.h" +#include "MaterialLib/PorousMedium/PorousPropertyHeaders.h" namespace ProcessLib { @@ -39,14 +43,7 @@ LiquidFlowMaterialProperties::LiquidFlowMaterialProperties( //! \ogs_file_param{prj__processes__process__LIQUID_FLOW__material_property__fluid} auto const& fluid_config = config.getConfigSubtree("fluid"); - - // Get fluid properties - //! \ogs_file_param{prj__processes__process__LIQUID_FLOW__material_property__fluid__density} - auto const& rho_conf = fluid_config.getConfigSubtree("density"); - _liquid_density = MaterialLib::Fluid::createFluidDensityModel(rho_conf); - //! \ogs_file_param{prj__processes__process__LIQUID_FLOW__material_property__fluid__viscosity} - auto const& mu_conf = fluid_config.getConfigSubtree("viscosity"); - _viscosity = MaterialLib::Fluid::createViscosityModel(mu_conf); + _fluid_properties = MaterialLib::Fluid::createFluidProperties(fluid_config); // Get porous properties std::vector<int> mat_ids; @@ -98,7 +95,8 @@ double LiquidFlowMaterialProperties::getLiquidDensity(const double p, ArrayType vars; vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::T)] = T; vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::p)] = p; - return _liquid_density->getValue(vars); + return _fluid_properties->getValue( + MaterialLib::Fluid::FluidPropertyType::Density, vars); } double LiquidFlowMaterialProperties::getViscosity(const double p, @@ -107,7 +105,8 @@ double LiquidFlowMaterialProperties::getViscosity(const double p, ArrayType vars; vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::T)] = T; vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::p)] = p; - return _viscosity->getValue(vars); + return _fluid_properties->getValue( + MaterialLib::Fluid::FluidPropertyType::Vicosity, vars); } double LiquidFlowMaterialProperties::getMassCoefficient( @@ -118,9 +117,11 @@ double LiquidFlowMaterialProperties::getMassCoefficient( ArrayType vars; vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::T)] = T; vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::p)] = p; - const double drho_dp = _liquid_density->getdValue( - vars, MaterialLib::Fluid::PropertyVariableType::p); - const double rho = _liquid_density->getValue(vars); + const double drho_dp = _fluid_properties->getdValue( + MaterialLib::Fluid::FluidPropertyType::Density, vars, + MaterialLib::Fluid::PropertyVariableType::p); + const double rho = _fluid_properties->getValue( + MaterialLib::Fluid::FluidPropertyType::Density, vars); assert(rho > 0.); const double porosity = diff --git a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h index 923a9adb358ac07e7062170109dd9404efbc51bb..2b3c1f0807a2b10e374fd0d99fe047bf462c4dab 100644 --- a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h +++ b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h @@ -13,9 +13,18 @@ #pragma once #include <memory> +#include <Eigen/Dense> -#include "MaterialLib/Fluid/FluidPropertyHeaders.h" -#include "MaterialLib/PorousMedium/PorousPropertyHeaders.h" +#include "MaterialLib/Fluid/FluidProperty.h" +#include "MaterialLib/Fluid/FluidProperties/FluidProperties.h" + +namespace MaterialLib +{ +namespace Fluid +{ +class FluidProperties; +} +} namespace MaterialLib { @@ -26,6 +35,11 @@ class Storage; } } +namespace BaseLib +{ +class ConfigTree; +} + namespace MeshLib { template <typename PROP_VAL_TYPE> @@ -80,8 +94,7 @@ public: double getViscosity(const double p, const double T) const; private: - std::unique_ptr<MaterialLib::Fluid::FluidProperty> _liquid_density; - std::unique_ptr<MaterialLib::Fluid::FluidProperty> _viscosity; + std::unique_ptr<MaterialLib::Fluid::FluidProperties> _fluid_properties; /// A flag to indicate whether the reference member, _material_ids, /// is not assigned. diff --git a/Tests/ProcessLib/LiquidFlow/TestLiquidFlowMaterialProperties.cpp b/Tests/ProcessLib/LiquidFlow/TestLiquidFlowMaterialProperties.cpp index 3c2c40b25e1a71bcba655c69ede6ccdb6924d065..92cfbe4c5051614b06b19701b1784ba4691ae690 100644 --- a/Tests/ProcessLib/LiquidFlow/TestLiquidFlowMaterialProperties.cpp +++ b/Tests/ProcessLib/LiquidFlow/TestLiquidFlowMaterialProperties.cpp @@ -13,6 +13,8 @@ #include <gtest/gtest.h> #include <memory> +#include "BaseLib/ConfigTree.h" + #include "Tests/TestTools.h" #include "MeshLib/Mesh.h" @@ -20,6 +22,7 @@ #include "ProcessLib/Parameter/SpatialPosition.h" #include "ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h" +#include "ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.h" #include "MaterialLib/Fluid/FluidProperty.h" #include "MaterialLib/PorousMedium/Porosity/Porosity.h" @@ -30,7 +33,7 @@ using namespace MaterialLib::Fluid; using ArrayType = MaterialLib::Fluid::FluidProperty::ArrayType; using Matrix = Eigen::MatrixXd; -TEST(ProcessLibLiquidFlow, checkLiquidFlowMaterialProperties) +TEST(MaterialProcessLibLiquidFlow, checkLiquidFlowMaterialProperties) { const char xml[] = "<material_property>" @@ -76,14 +79,14 @@ TEST(ProcessLibLiquidFlow, checkLiquidFlowMaterialProperties) "MaterialIDs", MeshLib::MeshItemType::Cell, 1); const bool has_material_ids = false; - LiquidFlowMaterialProperties lprop(sub_config, has_material_ids, - *dummy_property_vector); + const auto lprop = createLiquidFlowMaterialProperties( + sub_config, has_material_ids, *dummy_property_vector); ProcessLib::SpatialPosition pos; pos.setElementID(0); // Check permeability - const Eigen::MatrixXd& perm = lprop.getPermeability(0., pos, 1); + const Eigen::MatrixXd& perm = lprop->getPermeability(0., pos, 1); ASSERT_EQ(2.e-10, perm(0, 0)); ASSERT_EQ(0., perm(0, 1)); ASSERT_EQ(0., perm(0, 2)); @@ -96,6 +99,6 @@ TEST(ProcessLibLiquidFlow, checkLiquidFlowMaterialProperties) const double T = 273.15 + 60.0; const double p = 1.e+6; - const double mass_coef = lprop.getMassCoefficient(0., pos, p, T, 0., 0.); + const double mass_coef = lprop->getMassCoefficient(0., pos, p, T, 0., 0.); ASSERT_NEAR(0.000100000093, mass_coef, 1.e-10); }