Skip to content
Snippets Groups Projects
Commit 14c5bccb authored by wenqing's avatar wenqing
Browse files

[LF] Replaced individual fluid properties with FluidProperties

parent f0f9e0c4
No related branches found
No related tags found
No related merge requests found
...@@ -160,9 +160,9 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>:: ...@@ -160,9 +160,9 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>::
// Compute viscosity: // Compute viscosity:
const double mu = _material_properties.getViscosity(p, _temperature); const double mu = _material_properties.getViscosity(p, _temperature);
LaplacianGravityVelocityCalculator LaplacianGravityVelocityCalculator::calculateVelocity(
::calculateVelocity(_darcy_velocities, local_p_vec, sm, perm, _darcy_velocities, local_p_vec, sm, perm, ip, mu, rho_g,
ip, mu, rho_g, _gravitational_axis_id); _gravitational_axis_id);
} }
} }
......
...@@ -24,6 +24,10 @@ ...@@ -24,6 +24,10 @@
#include "MaterialLib/Fluid/FluidProperty.h" #include "MaterialLib/Fluid/FluidProperty.h"
#include "MaterialLib/PorousMedium/Porosity/Porosity.h" #include "MaterialLib/PorousMedium/Porosity/Porosity.h"
#include "MaterialLib/PorousMedium/Storage/Storage.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 namespace ProcessLib
{ {
...@@ -39,14 +43,7 @@ LiquidFlowMaterialProperties::LiquidFlowMaterialProperties( ...@@ -39,14 +43,7 @@ LiquidFlowMaterialProperties::LiquidFlowMaterialProperties(
//! \ogs_file_param{prj__processes__process__LIQUID_FLOW__material_property__fluid} //! \ogs_file_param{prj__processes__process__LIQUID_FLOW__material_property__fluid}
auto const& fluid_config = config.getConfigSubtree("fluid"); auto const& fluid_config = config.getConfigSubtree("fluid");
_fluid_properties = MaterialLib::Fluid::createFluidProperties(fluid_config);
// 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);
// Get porous properties // Get porous properties
std::vector<int> mat_ids; std::vector<int> mat_ids;
...@@ -98,7 +95,8 @@ double LiquidFlowMaterialProperties::getLiquidDensity(const double p, ...@@ -98,7 +95,8 @@ double LiquidFlowMaterialProperties::getLiquidDensity(const double p,
ArrayType vars; ArrayType vars;
vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::T)] = T; vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::T)] = T;
vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::p)] = p; 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, double LiquidFlowMaterialProperties::getViscosity(const double p,
...@@ -107,7 +105,8 @@ double LiquidFlowMaterialProperties::getViscosity(const double p, ...@@ -107,7 +105,8 @@ double LiquidFlowMaterialProperties::getViscosity(const double p,
ArrayType vars; ArrayType vars;
vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::T)] = T; vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::T)] = T;
vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::p)] = p; 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( double LiquidFlowMaterialProperties::getMassCoefficient(
...@@ -118,9 +117,11 @@ double LiquidFlowMaterialProperties::getMassCoefficient( ...@@ -118,9 +117,11 @@ double LiquidFlowMaterialProperties::getMassCoefficient(
ArrayType vars; ArrayType vars;
vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::T)] = T; vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::T)] = T;
vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::p)] = p; vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::p)] = p;
const double drho_dp = _liquid_density->getdValue( const double drho_dp = _fluid_properties->getdValue(
vars, MaterialLib::Fluid::PropertyVariableType::p); MaterialLib::Fluid::FluidPropertyType::Density, vars,
const double rho = _liquid_density->getValue(vars); MaterialLib::Fluid::PropertyVariableType::p);
const double rho = _fluid_properties->getValue(
MaterialLib::Fluid::FluidPropertyType::Density, vars);
assert(rho > 0.); assert(rho > 0.);
const double porosity = const double porosity =
......
...@@ -13,9 +13,18 @@ ...@@ -13,9 +13,18 @@
#pragma once #pragma once
#include <memory> #include <memory>
#include <Eigen/Dense>
#include "MaterialLib/Fluid/FluidPropertyHeaders.h" #include "MaterialLib/Fluid/FluidProperty.h"
#include "MaterialLib/PorousMedium/PorousPropertyHeaders.h" #include "MaterialLib/Fluid/FluidProperties/FluidProperties.h"
namespace MaterialLib
{
namespace Fluid
{
class FluidProperties;
}
}
namespace MaterialLib namespace MaterialLib
{ {
...@@ -26,6 +35,11 @@ class Storage; ...@@ -26,6 +35,11 @@ class Storage;
} }
} }
namespace BaseLib
{
class ConfigTree;
}
namespace MeshLib namespace MeshLib
{ {
template <typename PROP_VAL_TYPE> template <typename PROP_VAL_TYPE>
...@@ -80,8 +94,7 @@ public: ...@@ -80,8 +94,7 @@ public:
double getViscosity(const double p, const double T) const; double getViscosity(const double p, const double T) const;
private: private:
std::unique_ptr<MaterialLib::Fluid::FluidProperty> _liquid_density; std::unique_ptr<MaterialLib::Fluid::FluidProperties> _fluid_properties;
std::unique_ptr<MaterialLib::Fluid::FluidProperty> _viscosity;
/// A flag to indicate whether the reference member, _material_ids, /// A flag to indicate whether the reference member, _material_ids,
/// is not assigned. /// is not assigned.
......
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include <memory> #include <memory>
#include "BaseLib/ConfigTree.h"
#include "Tests/TestTools.h" #include "Tests/TestTools.h"
#include "MeshLib/Mesh.h" #include "MeshLib/Mesh.h"
...@@ -20,6 +22,7 @@ ...@@ -20,6 +22,7 @@
#include "ProcessLib/Parameter/SpatialPosition.h" #include "ProcessLib/Parameter/SpatialPosition.h"
#include "ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h" #include "ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h"
#include "ProcessLib/LiquidFlow/CreateLiquidFlowMaterialProperties.h"
#include "MaterialLib/Fluid/FluidProperty.h" #include "MaterialLib/Fluid/FluidProperty.h"
#include "MaterialLib/PorousMedium/Porosity/Porosity.h" #include "MaterialLib/PorousMedium/Porosity/Porosity.h"
...@@ -30,7 +33,7 @@ using namespace MaterialLib::Fluid; ...@@ -30,7 +33,7 @@ using namespace MaterialLib::Fluid;
using ArrayType = MaterialLib::Fluid::FluidProperty::ArrayType; using ArrayType = MaterialLib::Fluid::FluidProperty::ArrayType;
using Matrix = Eigen::MatrixXd; using Matrix = Eigen::MatrixXd;
TEST(ProcessLibLiquidFlow, checkLiquidFlowMaterialProperties) TEST(MaterialProcessLibLiquidFlow, checkLiquidFlowMaterialProperties)
{ {
const char xml[] = const char xml[] =
"<material_property>" "<material_property>"
...@@ -76,14 +79,14 @@ TEST(ProcessLibLiquidFlow, checkLiquidFlowMaterialProperties) ...@@ -76,14 +79,14 @@ TEST(ProcessLibLiquidFlow, checkLiquidFlowMaterialProperties)
"MaterialIDs", MeshLib::MeshItemType::Cell, 1); "MaterialIDs", MeshLib::MeshItemType::Cell, 1);
const bool has_material_ids = false; const bool has_material_ids = false;
LiquidFlowMaterialProperties lprop(sub_config, has_material_ids, const auto lprop = createLiquidFlowMaterialProperties(
*dummy_property_vector); sub_config, has_material_ids, *dummy_property_vector);
ProcessLib::SpatialPosition pos; ProcessLib::SpatialPosition pos;
pos.setElementID(0); pos.setElementID(0);
// Check permeability // 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(2.e-10, perm(0, 0));
ASSERT_EQ(0., perm(0, 1)); ASSERT_EQ(0., perm(0, 1));
ASSERT_EQ(0., perm(0, 2)); ASSERT_EQ(0., perm(0, 2));
...@@ -96,6 +99,6 @@ TEST(ProcessLibLiquidFlow, checkLiquidFlowMaterialProperties) ...@@ -96,6 +99,6 @@ TEST(ProcessLibLiquidFlow, checkLiquidFlowMaterialProperties)
const double T = 273.15 + 60.0; const double T = 273.15 + 60.0;
const double p = 1.e+6; 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); ASSERT_NEAR(0.000100000093, mass_coef, 1.e-10);
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment