Skip to content
Snippets Groups Projects
Commit 5c8f13ac authored by wenqing's avatar wenqing
Browse files

[LF] Changed the names of one file and some variables, corrected a typo in

one variable name, and made some other minor improvements
according to the comments by Dima and Tom.
parent 6f3998d4
No related branches found
No related tags found
No related merge requests found
...@@ -14,7 +14,7 @@ APPEND_SOURCE_FILES(SOURCES Parameter) ...@@ -14,7 +14,7 @@ APPEND_SOURCE_FILES(SOURCES Parameter)
add_subdirectory(GroundwaterFlow) add_subdirectory(GroundwaterFlow)
APPEND_SOURCE_FILES(SOURCES GroundwaterFlow) APPEND_SOURCE_FILES(SOURCES GroundwaterFlow)
append_source_files(SOURCES LiquidFlow) APPEND_SOURCE_FILES(SOURCES LiquidFlow)
APPEND_SOURCE_FILES(SOURCES SmallDeformation) APPEND_SOURCE_FILES(SOURCES SmallDeformation)
......
...@@ -10,8 +10,8 @@ ...@@ -10,8 +10,8 @@
* Created on August 19, 2016, 2:28 PM * Created on August 19, 2016, 2:28 PM
*/ */
#ifndef OGS_LIQUIDFLOWLOCALASSEMBLER_IMP_H #ifndef OGS_LIQUIDFLOWLOCALASSEMBLER_IMPL_H
#define OGS_LIQUIDFLOWLOCALASSEMBLER_IMP_H #define OGS_LIQUIDFLOWLOCALASSEMBLER_IMPL_H
#include "LiquidFlowLocalAssembler.h" #include "LiquidFlowLocalAssembler.h"
...@@ -45,7 +45,7 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>:: ...@@ -45,7 +45,7 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>::
const unsigned mat_id = 0; // TODO for heterogeneous medium const unsigned mat_id = 0; // TODO for heterogeneous medium
const Eigen::MatrixXd& perm = const Eigen::MatrixXd& perm =
_material_properties.intrinsic_permeabiliy[mat_id]; _material_properties.intrinsic_permeability[mat_id];
// Note: For Inclined 1D in 2D/3D or 2D element in 3D, the first item in // Note: For Inclined 1D in 2D/3D or 2D element in 3D, the first item in
// the assert must be changed to perm.rows() == _element->getDimension() // the assert must be changed to perm.rows() == _element->getDimension()
...@@ -81,8 +81,7 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>:: ...@@ -81,8 +81,7 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>::
const double mu = _material_properties.getViscosity(p, _temperature); const double mu = _material_properties.getViscosity(p, _temperature);
// Assemble Laplacian, K, and RHS by the gravitational term // Assemble Laplacian, K, and RHS by the gravitational term
if (perm.size() == if (perm.size() == 1) //Save the computing time for isotropic permeability.
1) // Save the computing time for isotropic permeability.
{ {
// Use scalar number for isotropic permeability // Use scalar number for isotropic permeability
// to save the computation time. // to save the computation time.
......
...@@ -65,17 +65,17 @@ public: ...@@ -65,17 +65,17 @@ public:
LiquidFlowLocalAssembler( LiquidFlowLocalAssembler(
MeshLib::Element const& element, MeshLib::Element const& element,
std::size_t const /*local_matrix_size*/, std::size_t const /*local_matrix_size*/,
bool is_axially_symmetric, bool const is_axially_symmetric,
unsigned const integration_order, unsigned const integration_order,
const bool compute_gravitational_term, bool const compute_gravitational_term,
LiquidFlowMaterialProperties const& matetial_propertries) LiquidFlowMaterialProperties const& material_propertries)
: _element(element), : _element(element),
_integration_method(integration_order), _integration_method(integration_order),
_shape_matrices(initShapeMatrices<ShapeFunction, ShapeMatricesType, _shape_matrices(initShapeMatrices<ShapeFunction, ShapeMatricesType,
IntegrationMethod, GlobalDim>( IntegrationMethod, GlobalDim>(
element, is_axially_symmetric, _integration_method)), element, is_axially_symmetric, _integration_method)),
_compute_gravitational_term(compute_gravitational_term), _compute_gravitational_term(compute_gravitational_term),
_material_properties(matetial_propertries) _material_properties(material_propertries)
{ {
} }
...@@ -127,12 +127,12 @@ private: ...@@ -127,12 +127,12 @@ private:
const bool _compute_gravitational_term; const bool _compute_gravitational_term;
LiquidFlowMaterialProperties const& _material_properties; LiquidFlowMaterialProperties const& _material_properties;
double _temperature; ///< Temperature. double _temperature;
}; };
} // end of namespace } // end of namespace
} // end of namespace } // end of namespace
#include "LiquidFlowLocalAssembler-imp.h" #include "LiquidFlowLocalAssembler-impl.h"
#endif /* LIQUIDFLOWLOCALASSEMBLER_H */ #endif /* LIQUIDFLOWLOCALASSEMBLER_H */
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "MeshLib/Mesh.h" #include "MeshLib/Mesh.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"
...@@ -34,7 +35,7 @@ LiquidFlowMaterialProperties::LiquidFlowMaterialProperties( ...@@ -34,7 +35,7 @@ LiquidFlowMaterialProperties::LiquidFlowMaterialProperties(
// Get fluid properties // Get fluid properties
//! \ogs_file_param{prj__material_property__fluid__density} //! \ogs_file_param{prj__material_property__fluid__density}
auto const& rho_conf = fluid_config.getConfigSubtree("density"); auto const& rho_conf = fluid_config.getConfigSubtree("density");
density_l = MaterialLib::Fluid::createFluidDensityModel(rho_conf); liquid_density = MaterialLib::Fluid::createFluidDensityModel(rho_conf);
//! \ogs_file_param{prj__material_property__fluid__viscosity} //! \ogs_file_param{prj__material_property__fluid__viscosity}
auto const& mu_conf = fluid_config.getConfigSubtree("viscosity"); auto const& mu_conf = fluid_config.getConfigSubtree("viscosity");
viscosity = MaterialLib::Fluid::createViscosityModel(mu_conf); viscosity = MaterialLib::Fluid::createViscosityModel(mu_conf);
...@@ -47,7 +48,7 @@ LiquidFlowMaterialProperties::LiquidFlowMaterialProperties( ...@@ -47,7 +48,7 @@ LiquidFlowMaterialProperties::LiquidFlowMaterialProperties(
{ {
//! \ogs_file_param{prj__material_property__porous_medium__porous_medium__permeability} //! \ogs_file_param{prj__material_property__porous_medium__porous_medium__permeability}
auto const& perm_conf = conf.getConfigSubtree("permeability"); auto const& perm_conf = conf.getConfigSubtree("permeability");
intrinsic_permeabiliy.emplace_back( intrinsic_permeability.emplace_back(
MaterialLib::PorousMedium::createPermeabilityModel(perm_conf)); MaterialLib::PorousMedium::createPermeabilityModel(perm_conf));
//! \ogs_file_param{prj__material_property__porous_medium__porous_medium__porosity} //! \ogs_file_param{prj__material_property__porous_medium__porous_medium__porosity}
...@@ -62,18 +63,36 @@ LiquidFlowMaterialProperties::LiquidFlowMaterialProperties( ...@@ -62,18 +63,36 @@ LiquidFlowMaterialProperties::LiquidFlowMaterialProperties(
} }
} }
double LiquidFlowMaterialProperties::getLiquidDensity(const double p,
const double T) const
{
ArrayType vars;
vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::T)] = T;
vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::pl)] = p;
return liquid_density->getValue(vars);
}
double LiquidFlowMaterialProperties::getViscosity(const double p,
const double T) const
{
ArrayType vars;
vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::T)] = T;
vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::pl)] = p;
return viscosity->getValue(vars);
}
double LiquidFlowMaterialProperties::getMassCoefficient( double LiquidFlowMaterialProperties::getMassCoefficient(
const double porosity_variable, const double storage_variable, const double porosity_variable, const double storage_variable,
const double p, const double T, const unsigned material_group_id) const const double p, const double T, const unsigned material_group_id) const
{ {
ArrayType vars; ArrayType vars;
vars[0] = T; vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::T)] = T;
vars[1] = p; vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::pl)] = p;
return porosity[material_group_id]->getValue(porosity_variable, T) * return porosity[material_group_id]->getValue(porosity_variable, T) *
density_l->getdValue( liquid_density->getdValue(
vars, MaterialLib::Fluid::PropertyVariableType::pl) vars, MaterialLib::Fluid::PropertyVariableType::pl)
// Divided by rho_l because the PDE is scaled with rho_l // Divided by rho_l because the PDE is scaled with rho_l
/ density_l->getValue(vars) + / liquid_density->getValue(vars) +
storage[material_group_id]->getValue(storage_variable); storage[material_group_id]->getValue(storage_variable);
} }
......
...@@ -64,29 +64,17 @@ struct LiquidFlowMaterialProperties ...@@ -64,29 +64,17 @@ struct LiquidFlowMaterialProperties
const double storage_variable, const double storage_variable,
const unsigned material_group_id = 0) const; const unsigned material_group_id = 0) const;
double getLiquidDensity(const double p, const double T) const double getLiquidDensity(const double p, const double T) const;
{
ArrayType vars;
vars[0] = T;
vars[1] = p;
return density_l->getValue(vars);
}
double getViscosity(const double p, const double T) const double getViscosity(const double p, const double T) const;
{
ArrayType vars;
vars[0] = T;
vars[1] = p;
return viscosity->getValue(vars);
}
std::unique_ptr<MaterialLib::Fluid::FluidProperty> density_l; std::unique_ptr<MaterialLib::Fluid::FluidProperty> liquid_density;
std::unique_ptr<MaterialLib::Fluid::FluidProperty> viscosity; std::unique_ptr<MaterialLib::Fluid::FluidProperty> viscosity;
/// Porous medium properties of different material zones. /// Porous medium properties of different material zones.
/// The vector is left empty if the property data are given in vtu file, /// The vector is left empty if the property data are given in vtu file,
/// e.g for heterogeneous medium. /// e.g for heterogeneous medium.
std::vector<Eigen::MatrixXd> intrinsic_permeabiliy; std::vector<Eigen::MatrixXd> intrinsic_permeability;
std::vector<std::unique_ptr<MaterialLib::PorousMedium::Porosity>> porosity; std::vector<std::unique_ptr<MaterialLib::PorousMedium::Porosity>> porosity;
std::vector<std::unique_ptr<MaterialLib::PorousMedium::Storage>> storage; std::vector<std::unique_ptr<MaterialLib::PorousMedium::Storage>> storage;
......
...@@ -32,7 +32,7 @@ LiquidFlowProcess::LiquidFlowProcess( ...@@ -32,7 +32,7 @@ LiquidFlowProcess::LiquidFlowProcess(
std::vector<std::reference_wrapper<ProcessVariable>>&& process_variables, std::vector<std::reference_wrapper<ProcessVariable>>&& process_variables,
SecondaryVariableCollection&& secondary_variables, SecondaryVariableCollection&& secondary_variables,
NumLib::NamedFunctionCaller&& named_function_caller, NumLib::NamedFunctionCaller&& named_function_caller,
const bool compute_gravitational_term, bool const compute_gravitational_term,
BaseLib::ConfigTree const& config) BaseLib::ConfigTree const& config)
: Process(mesh, std::move(jacobian_assembler), parameters, : Process(mesh, std::move(jacobian_assembler), parameters,
integration_order, integration_order,
...@@ -105,20 +105,5 @@ void LiquidFlowProcess::assembleWithJacobianConcreteProcess( ...@@ -105,20 +105,5 @@ void LiquidFlowProcess::assembleWithJacobianConcreteProcess(
dx_dx, M, K, b, Jac); dx_dx, M, K, b, Jac);
} }
void LiquidFlowProcess::preTimestepConcreteProcess(GlobalVector const& x,
const double /*t*/,
const double /*delta_t*/)
{
DBUG("New time step");
_p_previous_timestep =
MathLib::MatrixVectorTraits<GlobalVector>::newInstance(x);
}
void LiquidFlowProcess::preIterationConcreteProcess(const unsigned /*iter*/,
GlobalVector const& /*x*/)
{
// TODO
}
} // end of namespace } // end of namespace
} // end of namespace } // end of namespace
...@@ -63,15 +63,9 @@ public: ...@@ -63,15 +63,9 @@ public:
process_variables, process_variables,
SecondaryVariableCollection&& secondary_variables, SecondaryVariableCollection&& secondary_variables,
NumLib::NamedFunctionCaller&& named_function_caller, NumLib::NamedFunctionCaller&& named_function_caller,
const bool compute_gravitational_term, bool const compute_gravitational_term,
BaseLib::ConfigTree const& config); BaseLib::ConfigTree const& config);
void preTimestepConcreteProcess(GlobalVector const& x, const double t,
const double delta_t) override;
void preIterationConcreteProcess(const unsigned iter,
GlobalVector const& x) override;
bool isLinear() const override { return true; } bool isLinear() const override { return true; }
private: private:
void initializeConcreteProcess( void initializeConcreteProcess(
...@@ -92,8 +86,6 @@ private: ...@@ -92,8 +86,6 @@ private:
std::vector<std::unique_ptr<LiquidFlowLocalAssemblerInterface>> std::vector<std::unique_ptr<LiquidFlowLocalAssemblerInterface>>
_local_assemblers; _local_assemblers;
std::unique_ptr<GlobalVector> _p_previous_timestep;
}; };
} // end of namespace } // end of namespace
......
...@@ -81,16 +81,16 @@ TEST(ProcessLibLiquidFlow, checkLiquidFlowMaterialProperties) ...@@ -81,16 +81,16 @@ TEST(ProcessLibLiquidFlow, checkLiquidFlowMaterialProperties)
const double fac_T = 1. + beta * (T - T0); const double fac_T = 1. + beta * (T - T0);
ASSERT_NEAR(rho0 / fac_T / (1. - (p - p0) / K), ASSERT_NEAR(rho0 / fac_T / (1. - (p - p0) / K),
lprop.density_l->getValue(vars), 1.e-10); lprop.liquid_density->getValue(vars), 1.e-10);
// Test the derivative with respect to temperature. // Test the derivative with respect to temperature.
ASSERT_NEAR(-beta * rho0 / (fac_T * fac_T) / (1. - (p - p0) / K), ASSERT_NEAR(-beta * rho0 / (fac_T * fac_T) / (1. - (p - p0) / K),
lprop.density_l->getdValue(vars, PropertyVariableType::T), 1.e-10); lprop.liquid_density->getdValue(vars, PropertyVariableType::T), 1.e-10);
// Test the derivative with respect to pressure. // Test the derivative with respect to pressure.
const double fac_p = 1. - (p - p0) / K; const double fac_p = 1. - (p - p0) / K;
ASSERT_NEAR(rho0 / (1. + beta * (T - T0)) / (fac_p * fac_p * K), ASSERT_NEAR(rho0 / (1. + beta * (T - T0)) / (fac_p * fac_p * K),
lprop.density_l->getdValue(vars, PropertyVariableType::pl), 1.e-10); lprop.liquid_density->getdValue(vars, PropertyVariableType::pl), 1.e-10);
// Check viscosity // Check viscosity
ArrayType vars1; ArrayType vars1;
...@@ -101,7 +101,7 @@ TEST(ProcessLibLiquidFlow, checkLiquidFlowMaterialProperties) ...@@ -101,7 +101,7 @@ TEST(ProcessLibLiquidFlow, checkLiquidFlowMaterialProperties)
1.e-5); 1.e-5);
// Check permeability // Check permeability
Eigen::MatrixXd& perm = lprop.intrinsic_permeabiliy[0]; Eigen::MatrixXd& perm = lprop.intrinsic_permeability[0];
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));
......
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