diff --git a/ProcessLib/HT/CreateHTProcess.cpp b/ProcessLib/HT/CreateHTProcess.cpp index 0eb565cd3bb62a0f0b8328ea79f697adc5b64dd7..9f68e20397666fa72e310d66698f4a6f03de5155 100644 --- a/ProcessLib/HT/CreateHTProcess.cpp +++ b/ProcessLib/HT/CreateHTProcess.cpp @@ -18,7 +18,7 @@ #include "ProcessLib/Utils/ProcessUtils.h" #include "HTProcess.h" -#include "HTMaterialProperties.h" +#include "HTProcessData.h" #include "HTLocalAssemblerInterface.h" namespace ProcessLib @@ -139,14 +139,10 @@ std::unique_ptr<Process> createHTProcess( auto media_map = MaterialPropertyLib::createMaterialSpatialDistributionMap(media, mesh); - std::unique_ptr<HTMaterialProperties> material_properties = - std::make_unique<HTMaterialProperties>( - std::move(media_map), - has_fluid_thermal_expansion, - *solid_thermal_expansion, - *biot_constant, - specific_body_force, - has_gravity); + HTProcessData process_data{ + std::move(media_map), has_fluid_thermal_expansion, + *solid_thermal_expansion, *biot_constant, + specific_body_force, has_gravity}; SecondaryVariableCollection secondary_variables; @@ -159,7 +155,7 @@ std::unique_ptr<Process> createHTProcess( return std::make_unique<HTProcess>( std::move(name), mesh, std::move(jacobian_assembler), parameters, integration_order, std::move(process_variables), - std::move(material_properties), std::move(secondary_variables), + std::move(process_data), std::move(secondary_variables), std::move(named_function_caller), use_monolithic_scheme, std::move(surfaceflux), _heat_transport_process_id, _hydraulic_process_id); diff --git a/ProcessLib/HT/HTFEM.h b/ProcessLib/HT/HTFEM.h index 27984d5db843b7c461e15a0bdae9ac61ed79614d..0e3c1084fd691141eaf45c8e240ddfbdd686cd56 100644 --- a/ProcessLib/HT/HTFEM.h +++ b/ProcessLib/HT/HTFEM.h @@ -12,7 +12,7 @@ #include <Eigen/Dense> #include <vector> -#include "HTMaterialProperties.h" +#include "HTProcessData.h" #include "MaterialLib/MPL/Medium.h" #include "MaterialLib/MPL/Utils/FormEigenTensor.h" @@ -50,11 +50,11 @@ public: std::size_t const local_matrix_size, bool const is_axially_symmetric, unsigned const integration_order, - HTMaterialProperties const& material_properties, + HTProcessData const& process_data, const unsigned dof_per_node) : HTLocalAssemblerInterface(), _element(element), - _material_properties(material_properties), + _process_data(process_data), _integration_method(integration_order) { // This assertion is valid only if all nodal d.o.f. use the same shape @@ -127,7 +127,7 @@ public: p_int_pt; auto const& medium = - *_material_properties.media_map->getMedium(_element.getID()); + *_process_data.media_map->getMedium(_element.getID()); auto const& liquid_phase = medium.phase("AqueousLiquid"); auto const& solid_phase = medium.phase("Solid"); @@ -146,13 +146,13 @@ public: GlobalDimVectorType q = -K_over_mu * shape_matrices.dNdx * p_nodal_values; - if (this->_material_properties.has_gravity) + if (this->_process_data.has_gravity) { auto const rho_w = liquid_phase .property(MaterialPropertyLib::PropertyType::density) .template value<double>(vars); - auto const b = this->_material_properties.specific_body_force; + auto const b = this->_process_data.specific_body_force; q += K_over_mu * rho_w * b; } @@ -163,7 +163,7 @@ public: protected: MeshLib::Element const& _element; - HTMaterialProperties const& _material_properties; + HTProcessData const& _process_data; IntegrationMethod const _integration_method; std::vector< @@ -179,7 +179,7 @@ protected: const double specific_heat_capacity_fluid) { auto const& medium = - *_material_properties.media_map->getMedium(this->_element.getID()); + *_process_data.media_map->getMedium(this->_element.getID()); auto const& solid_phase = medium.phase("Solid"); auto const specific_heat_capacity_solid = @@ -202,7 +202,7 @@ protected: const GlobalDimVectorType& velocity, const GlobalDimMatrixType& I) { auto const& medium = - *_material_properties.media_map->getMedium(_element.getID()); + *_process_data.media_map->getMedium(_element.getID()); auto const& solid_phase = medium.phase("Solid"); auto const& liquid_phase = medium.phase("AqueousLiquid"); @@ -270,7 +270,7 @@ protected: &local_p[0], ShapeFunction::NPOINTS); auto const& medium = - *_material_properties.media_map->getMedium(_element.getID()); + *_process_data.media_map->getMedium(_element.getID()); auto const& liquid_phase = medium.phase("AqueousLiquid"); auto const& solid_phase = medium.phase("Solid"); @@ -305,13 +305,13 @@ protected: cache_mat.col(ip).noalias() = -K_over_mu * dNdx * p_nodal_values; - if (_material_properties.has_gravity) + if (_process_data.has_gravity) { auto const rho_w = liquid_phase .property(MaterialPropertyLib::PropertyType::density) .template value<double>(vars); - auto const b = _material_properties.specific_body_force; + auto const b = _process_data.specific_body_force; // here it is assumed that the vector b is directed 'downwards' cache_mat.col(ip).noalias() += K_over_mu * rho_w * b; } diff --git a/ProcessLib/HT/HTMaterialProperties.h b/ProcessLib/HT/HTMaterialProperties.h deleted file mode 100644 index d0bf9d40b9fd3dfd5102f57c930d12cdf00ec645..0000000000000000000000000000000000000000 --- a/ProcessLib/HT/HTMaterialProperties.h +++ /dev/null @@ -1,60 +0,0 @@ -/** - * \copyright - * Copyright (c) 2012-2019, OpenGeoSys Community (http://www.opengeosys.org) - * Distributed under a Modified BSD License. - * See accompanying file LICENSE.txt or - * http://www.opengeosys.org/project/license - * - */ - -#pragma once - -#include <memory> -#include <utility> - -#include "MaterialLib/MPL/MaterialSpatialDistributionMap.h" - -namespace ProcessLib -{ -template <typename ReturnType> -struct Parameter; - -namespace HT -{ -struct HTMaterialProperties final -{ - HTMaterialProperties( - std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>&& - media_map_, - bool const has_fluid_thermal_expansion_, - ParameterLib::Parameter<double> const& solid_thermal_expansion_, - ParameterLib::Parameter<double> const& biot_constant_, - Eigen::VectorXd specific_body_force_, - bool const has_gravity_) - : media_map(std::move(media_map_)), - has_fluid_thermal_expansion(has_fluid_thermal_expansion_), - solid_thermal_expansion(solid_thermal_expansion_), - biot_constant(biot_constant_), - specific_body_force(std::move(specific_body_force_)), - has_gravity(has_gravity_) - { - } - - HTMaterialProperties(HTMaterialProperties&&) = delete; - HTMaterialProperties(HTMaterialProperties const&) = delete; - void operator=(HTMaterialProperties&&) = delete; - void operator=(HTMaterialProperties const&) = delete; - - std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap> - media_map; - - bool const has_fluid_thermal_expansion; - ParameterLib::Parameter<double> const& solid_thermal_expansion; - ParameterLib::Parameter<double> const& biot_constant; - - Eigen::VectorXd const specific_body_force; - bool const has_gravity; -}; - -} // namespace HT -} // namespace ProcessLib diff --git a/ProcessLib/HT/HTProcess.cpp b/ProcessLib/HT/HTProcess.cpp index 9616152224c53d659f96b12d36ab0f4c62a76d03..2b06e55ba8a5c2e67c069ad01e03e8f37a526320 100644 --- a/ProcessLib/HT/HTProcess.cpp +++ b/ProcessLib/HT/HTProcess.cpp @@ -16,7 +16,6 @@ #include "ProcessLib/SurfaceFlux/SurfaceFluxData.h" #include "ProcessLib/Utils/CreateLocalAssemblers.h" -#include "HTMaterialProperties.h" #include "MonolithicHTFEM.h" #include "StaggeredHTFEM.h" @@ -32,7 +31,7 @@ HTProcess::HTProcess( unsigned const integration_order, std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&& process_variables, - std::unique_ptr<HTMaterialProperties>&& material_properties, + HTProcessData&& process_data, SecondaryVariableCollection&& secondary_variables, NumLib::NamedFunctionCaller&& named_function_caller, bool const use_monolithic_scheme, @@ -43,7 +42,7 @@ HTProcess::HTProcess( integration_order, std::move(process_variables), std::move(secondary_variables), std::move(named_function_caller), use_monolithic_scheme), - _material_properties(std::move(material_properties)), + _process_data(std::move(process_data)), _surfaceflux(std::move(surfaceflux)), _heat_transport_process_id(heat_transport_process_id), _hydraulic_process_id(hydraulic_process_id) @@ -68,14 +67,14 @@ void HTProcess::initializeConcreteProcess( mesh.getDimension(), mesh.getElements(), dof_table, pv.getShapeFunctionOrder(), _local_assemblers, mesh.isAxiallySymmetric(), integration_order, - *_material_properties); + _process_data); } else { ProcessLib::createLocalAssemblers<StaggeredHTFEM>( mesh.getDimension(), mesh.getElements(), dof_table, pv.getShapeFunctionOrder(), _local_assemblers, - mesh.isAxiallySymmetric(), integration_order, *_material_properties, + mesh.isAxiallySymmetric(), integration_order, _process_data, _heat_transport_process_id, _hydraulic_process_id); } diff --git a/ProcessLib/HT/HTProcess.h b/ProcessLib/HT/HTProcess.h index 1d59a7bc4ed9eaaa3887f922c1105d020ad34574..732b3f62b076181dbab80c4564c3e723b25fc228 100644 --- a/ProcessLib/HT/HTProcess.h +++ b/ProcessLib/HT/HTProcess.h @@ -11,6 +11,7 @@ #include <array> +#include "HTProcessData.h" #include "ProcessLib/Process.h" namespace NumLib @@ -25,7 +26,6 @@ struct SurfaceFluxData; namespace HT { class HTLocalAssemblerInterface; -struct HTMaterialProperties; /** * # HT process @@ -59,7 +59,7 @@ public: unsigned const integration_order, std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&& process_variables, - std::unique_ptr<HTMaterialProperties>&& material_properties, + HTProcessData&& process_data, SecondaryVariableCollection&& secondary_variables, NumLib::NamedFunctionCaller&& named_function_caller, bool const use_monolithic_scheme, @@ -116,7 +116,7 @@ private: std::tuple<NumLib::LocalToGlobalIndexMap*, bool> getDOFTableForExtrapolatorData() const override; - const std::unique_ptr<HTMaterialProperties> _material_properties; + HTProcessData _process_data; std::vector<std::unique_ptr<HTLocalAssemblerInterface>> _local_assemblers; diff --git a/ProcessLib/HT/HTProcessData.h b/ProcessLib/HT/HTProcessData.h new file mode 100644 index 0000000000000000000000000000000000000000..3ea19bbc09224549fbb2fbb53a04f9131ed3c1e0 --- /dev/null +++ b/ProcessLib/HT/HTProcessData.h @@ -0,0 +1,36 @@ +/** + * \copyright + * Copyright (c) 2012-2019, OpenGeoSys Community (http://www.opengeosys.org) + * Distributed under a Modified BSD License. + * See accompanying file LICENSE.txt or + * http://www.opengeosys.org/project/license + * + */ + +#pragma once + +#include <memory> +#include <utility> + +#include <Eigen/Eigen> + +#include "MaterialLib/MPL/MaterialSpatialDistributionMap.h" +#include "ParameterLib/Parameter.h" + +namespace ProcessLib +{ +namespace HT +{ +struct HTProcessData final +{ + std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap> + media_map; + bool const has_fluid_thermal_expansion; + ParameterLib::Parameter<double> const& solid_thermal_expansion; + ParameterLib::Parameter<double> const& biot_constant; + Eigen::VectorXd const specific_body_force; + bool const has_gravity; +}; + +} // namespace HT +} // namespace ProcessLib diff --git a/ProcessLib/HT/MonolithicHTFEM.h b/ProcessLib/HT/MonolithicHTFEM.h index 9471fcdc260080ae61cdf7417d31fa02ca332f8a..6b992aad18af22f66d6dee2a0486029f34da233e 100644 --- a/ProcessLib/HT/MonolithicHTFEM.h +++ b/ProcessLib/HT/MonolithicHTFEM.h @@ -14,7 +14,7 @@ #include <Eigen/Dense> #include <vector> -#include "HTMaterialProperties.h" +#include "HTProcessData.h" #include "MaterialLib/MPL/Medium.h" #include "MaterialLib/MPL/Utils/FormEigenTensor.h" @@ -59,10 +59,10 @@ public: std::size_t const local_matrix_size, bool is_axially_symmetric, unsigned const integration_order, - HTMaterialProperties const& material_properties) + HTProcessData const& process_data) : HTFEM<ShapeFunction, IntegrationMethod, GlobalDim>( element, local_matrix_size, is_axially_symmetric, - integration_order, material_properties, NUM_NODAL_DOF) + integration_order, process_data, NUM_NODAL_DOF) { } @@ -99,7 +99,7 @@ public: auto p_nodal_values = Eigen::Map<const NodalVectorType>( &local_x[pressure_index], pressure_size); - auto const& process_data = this->_material_properties; + auto const& process_data = this->_process_data; auto const& medium = *process_data.media_map->getMedium(this->_element.getID()); auto const& liquid_phase = medium.phase("AqueousLiquid"); diff --git a/ProcessLib/HT/StaggeredHTFEM-impl.h b/ProcessLib/HT/StaggeredHTFEM-impl.h index 90b380727ed715a13d62b1938c17d1d99cc86edc..bb937037c7a5b390cf9e607471b06b0e190fab1f 100644 --- a/ProcessLib/HT/StaggeredHTFEM-impl.h +++ b/ProcessLib/HT/StaggeredHTFEM-impl.h @@ -71,13 +71,13 @@ void StaggeredHTFEM<ShapeFunction, IntegrationMethod, GlobalDim>:: ParameterLib::SpatialPosition pos; pos.setElementID(this->_element.getID()); - auto const& material_properties = this->_material_properties; - auto const& medium = *this->_material_properties.media_map->getMedium( + auto const& process_data = this->_process_data; + auto const& medium = *this->_process_data.media_map->getMedium( this->_element.getID()); auto const& liquid_phase = medium.phase("AqueousLiquid"); auto const& solid_phase = medium.phase("Solid"); - auto const& b = material_properties.specific_body_force; + auto const& b = process_data.specific_body_force; MaterialPropertyLib::VariableArray vars; @@ -142,13 +142,13 @@ void StaggeredHTFEM<ShapeFunction, IntegrationMethod, GlobalDim>:: local_K.noalias() += w * dNdx.transpose() * K_over_mu * dNdx; - if (material_properties.has_gravity) + if (process_data.has_gravity) { local_b.noalias() += w * fluid_density * dNdx.transpose() * K_over_mu * b; } - if (!material_properties.has_fluid_thermal_expansion) + if (!process_data.has_fluid_thermal_expansion) { return; } @@ -156,7 +156,7 @@ void StaggeredHTFEM<ShapeFunction, IntegrationMethod, GlobalDim>:: // Add the thermal expansion term { auto const solid_thermal_expansion = - material_properties.solid_thermal_expansion(t, pos)[0]; + process_data.solid_thermal_expansion(t, pos)[0]; const double dfluid_density_dT = liquid_phase .property(MaterialPropertyLib::PropertyType::density) @@ -165,7 +165,7 @@ void StaggeredHTFEM<ShapeFunction, IntegrationMethod, GlobalDim>:: double T0_int_pt = 0.; NumLib::shapeFunctionInterpolate(local_T0, N, T0_int_pt); auto const biot_constant = - material_properties.biot_constant(t, pos)[0]; + process_data.biot_constant(t, pos)[0]; const double eff_thermal_expansion = 3.0 * (biot_constant - porosity) * solid_thermal_expansion - porosity * dfluid_density_dT / fluid_density; @@ -204,13 +204,13 @@ void StaggeredHTFEM<ShapeFunction, IntegrationMethod, GlobalDim>:: ParameterLib::SpatialPosition pos; pos.setElementID(this->_element.getID()); - auto const& material_properties = this->_material_properties; + auto const& process_data = this->_process_data; auto const& medium = - *material_properties.media_map->getMedium(this->_element.getID()); + *process_data.media_map->getMedium(this->_element.getID()); auto const& liquid_phase = medium.phase("AqueousLiquid"); auto const& solid_phase = medium.phase("Solid"); - auto const& b = material_properties.specific_body_force; + auto const& b = process_data.specific_body_force; GlobalDimMatrixType const& I( GlobalDimMatrixType::Identity(GlobalDim, GlobalDim)); @@ -272,7 +272,7 @@ void StaggeredHTFEM<ShapeFunction, IntegrationMethod, GlobalDim>:: GlobalDimMatrixType const K_over_mu = intrinsic_permeability / viscosity; GlobalDimVectorType const velocity = - material_properties.has_gravity + process_data.has_gravity ? GlobalDimVectorType(-K_over_mu * (dNdx * local_p_Eigen_type - fluid_density * b)) : GlobalDimVectorType(-K_over_mu * dNdx * local_p_Eigen_type); diff --git a/ProcessLib/HT/StaggeredHTFEM.h b/ProcessLib/HT/StaggeredHTFEM.h index 8a8c5e47baec5111d7c5922e524d1e304e4cea85..6c9d02e4605cf2ef03450373a29699e25bc5cc66 100644 --- a/ProcessLib/HT/StaggeredHTFEM.h +++ b/ProcessLib/HT/StaggeredHTFEM.h @@ -55,12 +55,12 @@ public: std::size_t const local_matrix_size, bool is_axially_symmetric, unsigned const integration_order, - HTMaterialProperties const& material_properties, + HTProcessData const& process_data, const int heat_transport_process_id, const int hydraulic_process_id) : HTFEM<ShapeFunction, IntegrationMethod, GlobalDim>( element, local_matrix_size, is_axially_symmetric, - integration_order, material_properties, 1), + integration_order, process_data, 1), _heat_transport_process_id(heat_transport_process_id), _hydraulic_process_id(hydraulic_process_id) {