Skip to content
Snippets Groups Projects
Commit 7d394aa6 authored by wenqing's avatar wenqing
Browse files

[LF] Added an optional input of reference temperature for LiquidFlow

parent 7a6ec8ab
No related branches found
No related tags found
No related merge requests found
An optional input of a reference temperature for liquid flow process when the
flow process is not coupled to heat transport process, and a value other than
the default one (room temperature of 273.15+18 K) is selected.
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "MeshLib/MeshGenerators/MeshGenerator.h" #include "MeshLib/MeshGenerators/MeshGenerator.h"
#include "MaterialLib/PhysicalConstant.h"
#include "ProcessLib/Utils/ParseSecondaryVariables.h" #include "ProcessLib/Utils/ParseSecondaryVariables.h"
#include "ProcessLib/Utils/ProcessUtils.h" #include "ProcessLib/Utils/ProcessUtils.h"
...@@ -67,6 +68,13 @@ std::unique_ptr<Process> createLiquidFlowProcess( ...@@ -67,6 +68,13 @@ std::unique_ptr<Process> createLiquidFlowProcess(
assert(g >= 0.); assert(g >= 0.);
const int gravity_axis_id = (g == 0.) ? -1 : gravity_axis_id_input; const int gravity_axis_id = (g == 0.) ? -1 : gravity_axis_id_input;
auto const& refT =
//! \ogs_file_param{prj__processes__process__LIQUID_FLOW__reference_temperature}
config.getConfigParameterOptional<double>("reference_temperature");
const double reference_temperature =
refT ? *refT
: MaterialLib::PhysicalConstant::CelsiusZeroInKelvin + 18.0;
//! \ogs_file_param{prj__processes__process__LIQUID_FLOW__material_property} //! \ogs_file_param{prj__processes__process__LIQUID_FLOW__material_property}
auto const& mat_config = config.getConfigSubtree("material_property"); auto const& mat_config = config.getConfigSubtree("material_property");
...@@ -80,7 +88,7 @@ std::unique_ptr<Process> createLiquidFlowProcess( ...@@ -80,7 +88,7 @@ std::unique_ptr<Process> createLiquidFlowProcess(
mesh, std::move(jacobian_assembler), parameters, integration_order, mesh, std::move(jacobian_assembler), parameters, integration_order,
std::move(process_variables), std::move(secondary_variables), std::move(process_variables), std::move(secondary_variables),
std::move(named_function_caller), *mat_ids, has_material_ids, std::move(named_function_caller), *mat_ids, has_material_ids,
gravity_axis_id, g, mat_config}}; gravity_axis_id, g, reference_temperature, mat_config}};
} }
else else
{ {
...@@ -101,7 +109,8 @@ std::unique_ptr<Process> createLiquidFlowProcess( ...@@ -101,7 +109,8 @@ std::unique_ptr<Process> createLiquidFlowProcess(
mesh, std::move(jacobian_assembler), parameters, integration_order, mesh, std::move(jacobian_assembler), parameters, integration_order,
std::move(process_variables), std::move(secondary_variables), std::move(process_variables), std::move(secondary_variables),
std::move(named_function_caller), *dummy_property_vector, std::move(named_function_caller), *dummy_property_vector,
has_material_ids, gravity_axis_id, g, mat_config}}; has_material_ids, gravity_axis_id, g, reference_temperature,
mat_config}};
} }
} }
......
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
#include "LiquidFlowLocalAssembler.h" #include "LiquidFlowLocalAssembler.h"
#include "MaterialLib/PhysicalConstant.h"
#include "NumLib/Function/Interpolation.h" #include "NumLib/Function/Interpolation.h"
#include "ProcessLib/HeatConduction/HeatConductionProcess.h" #include "ProcessLib/HeatConduction/HeatConductionProcess.h"
...@@ -133,10 +132,6 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>:: ...@@ -133,10 +132,6 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>::
// the integration loop for non-constant porosity and storage models. // the integration loop for non-constant porosity and storage models.
double porosity_variable = 0.; double porosity_variable = 0.;
double storage_variable = 0.; double storage_variable = 0.;
// Reference temperature for fluid property models because of no coupled
// heat transport process. TODO: Add an optional input for this.
const double temperature =
MaterialLib::PhysicalConstant::CelsiusZeroInKelvin + 18.0;
for (unsigned ip = 0; ip < n_integration_points; ip++) for (unsigned ip = 0; ip < n_integration_points; ip++)
{ {
auto const& sm = _shape_matrices[ip]; auto const& sm = _shape_matrices[ip];
...@@ -151,15 +146,16 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>:: ...@@ -151,15 +146,16 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>::
// Assemble mass matrix, M // Assemble mass matrix, M
local_M.noalias() += _material_properties.getMassCoefficient( local_M.noalias() += _material_properties.getMassCoefficient(
material_id, t, pos, porosity_variable, material_id, t, pos, porosity_variable,
storage_variable, p, temperature) * storage_variable, p, _reference_temperature) *
sm.N.transpose() * sm.N * integration_factor; sm.N.transpose() * sm.N * integration_factor;
// Compute density: // Compute density:
const double rho_g = const double rho_g =
_material_properties.getLiquidDensity(p, temperature) * _material_properties.getLiquidDensity(p, _reference_temperature) *
_gravitational_acceleration; _gravitational_acceleration;
// Compute viscosity: // Compute viscosity:
const double mu = _material_properties.getViscosity(p, temperature); const double mu =
_material_properties.getViscosity(p, _reference_temperature);
// Assemble Laplacian, K, and RHS by the gravitational term // Assemble Laplacian, K, and RHS by the gravitational term
LaplacianGravityVelocityCalculator::calculateLaplacianAndGravityTerm( LaplacianGravityVelocityCalculator::calculateLaplacianAndGravityTerm(
...@@ -286,8 +282,6 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>:: ...@@ -286,8 +282,6 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>::
unsigned const n_integration_points = unsigned const n_integration_points =
_integration_method.getNumberOfPoints(); _integration_method.getNumberOfPoints();
const double temperature =
MaterialLib::PhysicalConstant::CelsiusZeroInKelvin + 18.0;
for (unsigned ip = 0; ip < n_integration_points; ip++) for (unsigned ip = 0; ip < n_integration_points; ip++)
{ {
auto const& sm = _shape_matrices[ip]; auto const& sm = _shape_matrices[ip];
...@@ -295,10 +289,11 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>:: ...@@ -295,10 +289,11 @@ void LiquidFlowLocalAssembler<ShapeFunction, IntegrationMethod, GlobalDim>::
NumLib::shapeFunctionInterpolate(local_x, sm.N, p); NumLib::shapeFunctionInterpolate(local_x, sm.N, p);
const double rho_g = const double rho_g =
_material_properties.getLiquidDensity(p, temperature) * _material_properties.getLiquidDensity(p, _reference_temperature) *
_gravitational_acceleration; _gravitational_acceleration;
// Compute viscosity: // Compute viscosity:
const double mu = _material_properties.getViscosity(p, temperature); const double mu =
_material_properties.getViscosity(p, _reference_temperature);
LaplacianGravityVelocityCalculator::calculateVelocity( LaplacianGravityVelocityCalculator::calculateVelocity(
_darcy_velocities, local_p_vec, sm, permeability, ip, mu, rho_g, _darcy_velocities, local_p_vec, sm, permeability, ip, mu, rho_g,
......
...@@ -71,6 +71,7 @@ public: ...@@ -71,6 +71,7 @@ public:
unsigned const integration_order, unsigned const integration_order,
int const gravitational_axis_id, int const gravitational_axis_id,
double const gravitational_acceleration, double const gravitational_acceleration,
double const reference_temperature,
LiquidFlowMaterialProperties const& material_propertries) LiquidFlowMaterialProperties const& material_propertries)
: _element(element), : _element(element),
_integration_method(integration_order), _integration_method(integration_order),
...@@ -79,6 +80,7 @@ public: ...@@ -79,6 +80,7 @@ public:
element, is_axially_symmetric, _integration_method)), element, is_axially_symmetric, _integration_method)),
_gravitational_axis_id(gravitational_axis_id), _gravitational_axis_id(gravitational_axis_id),
_gravitational_acceleration(gravitational_acceleration), _gravitational_acceleration(gravitational_acceleration),
_reference_temperature(reference_temperature),
_material_properties(material_propertries) _material_properties(material_propertries)
{ {
} }
...@@ -219,6 +221,7 @@ private: ...@@ -219,6 +221,7 @@ private:
const int _gravitational_axis_id; const int _gravitational_axis_id;
const double _gravitational_acceleration; const double _gravitational_acceleration;
const double _reference_temperature;
const LiquidFlowMaterialProperties& _material_properties; const LiquidFlowMaterialProperties& _material_properties;
}; };
......
...@@ -41,12 +41,14 @@ LiquidFlowProcess::LiquidFlowProcess( ...@@ -41,12 +41,14 @@ LiquidFlowProcess::LiquidFlowProcess(
bool const has_material_ids, bool const has_material_ids,
int const gravitational_axis_id, int const gravitational_axis_id,
double const gravitational_acceleration, double const gravitational_acceleration,
double const reference_temperature,
BaseLib::ConfigTree const& config) BaseLib::ConfigTree const& config)
: Process(mesh, std::move(jacobian_assembler), parameters, : Process(mesh, std::move(jacobian_assembler), parameters,
integration_order, std::move(process_variables), integration_order, std::move(process_variables),
std::move(secondary_variables), std::move(named_function_caller)), std::move(secondary_variables), std::move(named_function_caller)),
_gravitational_axis_id(gravitational_axis_id), _gravitational_axis_id(gravitational_axis_id),
_gravitational_acceleration(gravitational_acceleration), _gravitational_acceleration(gravitational_acceleration),
_reference_temperature(reference_temperature),
_material_properties(createLiquidFlowMaterialProperties( _material_properties(createLiquidFlowMaterialProperties(
config, parameters, has_material_ids, material_ids)) config, parameters, has_material_ids, material_ids))
{ {
...@@ -63,7 +65,8 @@ void LiquidFlowProcess::initializeConcreteProcess( ...@@ -63,7 +65,8 @@ void LiquidFlowProcess::initializeConcreteProcess(
mesh.getDimension(), mesh.getElements(), dof_table, mesh.getDimension(), mesh.getElements(), dof_table,
pv.getShapeFunctionOrder(), _local_assemblers, pv.getShapeFunctionOrder(), _local_assemblers,
mesh.isAxiallySymmetric(), integration_order, _gravitational_axis_id, mesh.isAxiallySymmetric(), integration_order, _gravitational_axis_id,
_gravitational_acceleration, *_material_properties); _gravitational_acceleration, _reference_temperature,
*_material_properties);
_secondary_variables.addSecondaryVariable( _secondary_variables.addSecondaryVariable(
"darcy_velocity_x", 1, "darcy_velocity_x", 1,
......
...@@ -70,6 +70,7 @@ public: ...@@ -70,6 +70,7 @@ public:
bool const has_material_ids, bool const has_material_ids,
int const gravitational_axis_id, int const gravitational_axis_id,
double const gravitational_acceleration, double const gravitational_acceleration,
double const reference_temperature,
BaseLib::ConfigTree const& config); BaseLib::ConfigTree const& config);
void computeSecondaryVariableConcrete( void computeSecondaryVariableConcrete(
...@@ -106,6 +107,7 @@ private: ...@@ -106,6 +107,7 @@ private:
const int _gravitational_axis_id; const int _gravitational_axis_id;
const double _gravitational_acceleration; const double _gravitational_acceleration;
const double _reference_temperature;
const std::unique_ptr<LiquidFlowMaterialProperties> _material_properties; const std::unique_ptr<LiquidFlowMaterialProperties> _material_properties;
std::vector<std::unique_ptr<LiquidFlowLocalAssemblerInterface>> std::vector<std::unique_ptr<LiquidFlowLocalAssemblerInterface>>
......
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