From 225a7013c33cb13dad5142333547e121a07f0001 Mon Sep 17 00:00:00 2001 From: Wenqing Wang <wenqing.wang@ufz.de> Date: Mon, 9 Jul 2018 09:55:18 +0200 Subject: [PATCH] [Material] Added two arguments of T and p to the class members of integrateStress. --- MaterialLib/PhysicalConstant.h | 3 +++ MaterialLib/SolidModels/Ehlers.cpp | 2 +- MaterialLib/SolidModels/Ehlers.h | 2 +- MaterialLib/SolidModels/LinearElasticIsotropic.cpp | 2 +- MaterialLib/SolidModels/LinearElasticIsotropic.h | 2 +- .../SolidModels/LinearElasticIsotropicPhaseField.h | 5 +++-- MaterialLib/SolidModels/Lubby2.cpp | 2 +- MaterialLib/SolidModels/Lubby2.h | 2 +- MaterialLib/SolidModels/MechanicsBase.h | 9 ++++++--- ProcessLib/HydroMechanics/HydroMechanicsFEM.h | 4 +++- .../HydroMechanicsLocalAssemblerMatrix-impl.h | 5 +++-- .../SmallDeformationLocalAssemblerMatrix-impl.h | 4 +++- ...allDeformationLocalAssemblerMatrixNearFracture-impl.h | 5 ++++- ProcessLib/SmallDeformation/SmallDeformationFEM.h | 3 ++- ProcessLib/ThermoMechanics/ThermoMechanicsFEM.h | 3 ++- 15 files changed, 35 insertions(+), 18 deletions(-) diff --git a/MaterialLib/PhysicalConstant.h b/MaterialLib/PhysicalConstant.h index 47ddab80ee3..3ad3f12252c 100644 --- a/MaterialLib/PhysicalConstant.h +++ b/MaterialLib/PhysicalConstant.h @@ -20,6 +20,9 @@ namespace PhysicalConstant /// Zero degrees Celsius in Kelvin const double CelsiusZeroInKelvin = 273.15; +/// Room temperature, which is used as a reference temperature. +const double RoomTemperature = CelsiusZeroInKelvin + 20.0; + /** Ideal gas constant in SI standard units (J \per{mol} \per{K}) diff --git a/MaterialLib/SolidModels/Ehlers.cpp b/MaterialLib/SolidModels/Ehlers.cpp index 99820eaf96f..cc5b5394627 100644 --- a/MaterialLib/SolidModels/Ehlers.cpp +++ b/MaterialLib/SolidModels/Ehlers.cpp @@ -480,7 +480,7 @@ SolidEhlers<DisplacementDim>::integrateStress( KelvinVector const& eps, KelvinVector const& sigma_prev, typename MechanicsBase<DisplacementDim>::MaterialStateVariables const& - material_state_variables) + material_state_variables, double const /*T*/, double const /*p*/) { assert(dynamic_cast<StateVariables<DisplacementDim> const*>( &material_state_variables) != nullptr); diff --git a/MaterialLib/SolidModels/Ehlers.h b/MaterialLib/SolidModels/Ehlers.h index 6b99f56504c..80449c2ca98 100644 --- a/MaterialLib/SolidModels/Ehlers.h +++ b/MaterialLib/SolidModels/Ehlers.h @@ -321,7 +321,7 @@ public: KelvinVector const& eps, KelvinVector const& sigma_prev, typename MechanicsBase<DisplacementDim>::MaterialStateVariables const& - material_state_variables) override; + material_state_variables, double const T, double const p) override; std::vector<typename MechanicsBase<DisplacementDim>::InternalVariable> getInternalVariables() const override; diff --git a/MaterialLib/SolidModels/LinearElasticIsotropic.cpp b/MaterialLib/SolidModels/LinearElasticIsotropic.cpp index 9aa837a7f7b..a16d07e7962 100644 --- a/MaterialLib/SolidModels/LinearElasticIsotropic.cpp +++ b/MaterialLib/SolidModels/LinearElasticIsotropic.cpp @@ -27,7 +27,7 @@ LinearElasticIsotropic<DisplacementDim>::integrateStress( KelvinVector const& eps, KelvinVector const& sigma_prev, typename MechanicsBase<DisplacementDim>::MaterialStateVariables const& - material_state_variables) + material_state_variables, double const /*T*/, double const /*p*/) { KelvinMatrix C = KelvinMatrix::Zero(); diff --git a/MaterialLib/SolidModels/LinearElasticIsotropic.h b/MaterialLib/SolidModels/LinearElasticIsotropic.h index a4468dc16c9..11cfcc62de4 100644 --- a/MaterialLib/SolidModels/LinearElasticIsotropic.h +++ b/MaterialLib/SolidModels/LinearElasticIsotropic.h @@ -121,7 +121,7 @@ public: KelvinVector const& eps, KelvinVector const& sigma_prev, typename MechanicsBase<DisplacementDim>::MaterialStateVariables const& - material_state_variables) override; + material_state_variables, double const T, double const p) override; MaterialProperties getMaterialProperties() {return _mp;} diff --git a/MaterialLib/SolidModels/LinearElasticIsotropicPhaseField.h b/MaterialLib/SolidModels/LinearElasticIsotropicPhaseField.h index 7314b1130fd..078f73b771d 100644 --- a/MaterialLib/SolidModels/LinearElasticIsotropicPhaseField.h +++ b/MaterialLib/SolidModels/LinearElasticIsotropicPhaseField.h @@ -59,10 +59,11 @@ public: KelvinVector const& eps, KelvinVector const& sigma_prev, typename MechanicsBase<DisplacementDim>::MaterialStateVariables const& - material_state_variables) override + material_state_variables, double const T, double const p) override { return LinearElasticIsotropic<DisplacementDim>::integrateStress( - t, x, dt, eps_prev, eps, sigma_prev, material_state_variables); + t, x, dt, eps_prev, eps, sigma_prev, material_state_variables, + T, p); } double computeFreeEnergyDensity( diff --git a/MaterialLib/SolidModels/Lubby2.cpp b/MaterialLib/SolidModels/Lubby2.cpp index 97f40ac3bca..7133f9c4877 100644 --- a/MaterialLib/SolidModels/Lubby2.cpp +++ b/MaterialLib/SolidModels/Lubby2.cpp @@ -80,7 +80,7 @@ Lubby2<DisplacementDim>::integrateStress( KelvinVector const& eps, KelvinVector const& /*sigma_prev*/, typename MechanicsBase<DisplacementDim>::MaterialStateVariables const& - material_state_variables) + material_state_variables, double const /*T*/, double const /*p*/) { using Invariants = MathLib::KelvinVector::Invariants<KelvinVectorSize>; diff --git a/MaterialLib/SolidModels/Lubby2.h b/MaterialLib/SolidModels/Lubby2.h index b37175ac513..0c67aa9596a 100644 --- a/MaterialLib/SolidModels/Lubby2.h +++ b/MaterialLib/SolidModels/Lubby2.h @@ -231,7 +231,7 @@ public: KelvinVector const& eps, KelvinVector const& sigma_prev, typename MechanicsBase<DisplacementDim>::MaterialStateVariables const& - material_state_variables) override; + material_state_variables, double const T, double const p) override; private: /// Calculates the 18x1 residual vector. diff --git a/MaterialLib/SolidModels/MechanicsBase.h b/MaterialLib/SolidModels/MechanicsBase.h index 40865893bdf..2725bceeb47 100644 --- a/MaterialLib/SolidModels/MechanicsBase.h +++ b/MaterialLib/SolidModels/MechanicsBase.h @@ -77,7 +77,8 @@ struct MechanicsBase Eigen::Matrix<double, Eigen::Dynamic, 1> const& eps_prev, Eigen::Matrix<double, Eigen::Dynamic, 1> const& eps, Eigen::Matrix<double, Eigen::Dynamic, 1> const& sigma_prev, - MaterialStateVariables const& material_state_variables) + MaterialStateVariables const& material_state_variables, + double const T, double const p) { // TODO Avoid copies of data: // Using MatrixBase<Derived> not possible because template functions @@ -89,7 +90,8 @@ struct MechanicsBase KelvinVector const sigma_prev_{sigma_prev}; return integrateStress( - t, x, dt, eps_prev_, eps_, sigma_prev_, material_state_variables); + t, x, dt, eps_prev_, eps_, sigma_prev_, material_state_variables, + T, p); } /// Computation of the constitutive relation for specific material model. @@ -107,7 +109,8 @@ struct MechanicsBase KelvinVector const& eps_prev, KelvinVector const& eps, KelvinVector const& sigma_prev, - MaterialStateVariables const& material_state_variables) = 0; + MaterialStateVariables const& material_state_variables, + double const T, double const p) = 0; /// Helper type for providing access to internal variables. struct InternalVariable diff --git a/ProcessLib/HydroMechanics/HydroMechanicsFEM.h b/ProcessLib/HydroMechanics/HydroMechanicsFEM.h index 917a07e1ae9..9ff2d787005 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsFEM.h +++ b/ProcessLib/HydroMechanics/HydroMechanicsFEM.h @@ -12,6 +12,7 @@ #include <memory> #include <vector> +#include "MaterialLib/PhysicalConstant.h" #include "MaterialLib/SolidModels/LinearElasticIsotropic.h" #include "MathLib/KelvinVector.h" #include "MathLib/LinAlg/Eigen/EigenMapTools.h" @@ -76,7 +77,8 @@ struct IntegrationPointData final { auto&& solution = solid_material.integrateStress( t, x_position, dt, eps_prev, eps, sigma_eff_prev, - *material_state_variables); + *material_state_variables, + MaterialLib::PhysicalConstant::RoomTemperature, 0.); if (!solution) OGS_FATAL("Computation of local constitutive relation failed."); diff --git a/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerMatrix-impl.h b/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerMatrix-impl.h index 7108123d3a8..9b774a8c7f1 100644 --- a/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerMatrix-impl.h +++ b/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerMatrix-impl.h @@ -12,6 +12,7 @@ #include "HydroMechanicsLocalAssemblerMatrix.h" #include "MathLib/KelvinVector.h" +#include "MaterialLib/PhysicalConstant.h" #include "MeshLib/ElementStatus.h" #include "NumLib/Fem/CoordinatesMapping/NaturalNodeCoordinates.h" #include "ProcessLib/Deformation/LinearBMatrix.h" @@ -235,7 +236,7 @@ void HydroMechanicsLocalAssemblerMatrix<ShapeFunctionDisplacement, auto&& solution = _ip_data[ip].solid_material.integrateStress( t, x_position, _process_data.dt, eps_prev, eps, sigma_eff_prev, - *state); + *state, MaterialLib::PhysicalConstant::RoomTemperature, 0.); if (!solution) OGS_FATAL("Computation of local constitutive relation failed."); @@ -353,7 +354,7 @@ void HydroMechanicsLocalAssemblerMatrix<ShapeFunctionDisplacement, auto&& solution = _ip_data[ip].solid_material.integrateStress( t, x_position, _process_data.dt, eps_prev, eps, sigma_eff_prev, - *state); + *state, MaterialLib::PhysicalConstant::RoomTemperature, 0.); if (!solution) OGS_FATAL("Computation of local constitutive relation failed."); diff --git a/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerMatrix-impl.h b/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerMatrix-impl.h index 9ee66925223..8cb2e7275c2 100644 --- a/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerMatrix-impl.h +++ b/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerMatrix-impl.h @@ -16,6 +16,7 @@ #include <Eigen/Eigen> +#include "MaterialLib/PhysicalConstant.h" #include "MathLib/LinAlg/Eigen/EigenMapTools.h" #include "NumLib/Fem/ShapeMatrixPolicy.h" @@ -145,7 +146,8 @@ void SmallDeformationLocalAssemblerMatrix<ShapeFunction, IntegrationMethod, local_x.data(), ShapeFunction::NPOINTS * DisplacementDim); auto&& solution = _ip_data[ip]._solid_material.integrateStress( - t, x_position, _process_data.dt, eps_prev, eps, sigma_prev, *state); + t, x_position, _process_data.dt, eps_prev, eps, sigma_prev, *state, + MaterialLib::PhysicalConstant::RoomTemperature, 0.); if (!solution) { diff --git a/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerMatrixNearFracture-impl.h b/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerMatrixNearFracture-impl.h index a335d79cd75..ea233855541 100644 --- a/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerMatrixNearFracture-impl.h +++ b/ProcessLib/LIE/SmallDeformation/LocalAssembler/SmallDeformationLocalAssemblerMatrixNearFracture-impl.h @@ -16,6 +16,8 @@ #include <Eigen/Eigen> +#include "MaterialLib/PhysicalConstant.h" + #include "MathLib/KelvinVector.h" #include "MathLib/LinAlg/Eigen/EigenMapTools.h" #include "MathLib/Point3d.h" @@ -241,7 +243,8 @@ void SmallDeformationLocalAssemblerMatrixNearFracture< eps.noalias() = B * nodal_total_u; auto&& solution = _ip_data[ip]._solid_material.integrateStress( - t, x_position, _process_data.dt, eps_prev, eps, sigma_prev, *state); + t, x_position, _process_data.dt, eps_prev, eps, sigma_prev, *state, + MaterialLib::PhysicalConstant::RoomTemperature, 0.); if (!solution) { diff --git a/ProcessLib/SmallDeformation/SmallDeformationFEM.h b/ProcessLib/SmallDeformation/SmallDeformationFEM.h index 8fee02c9f8c..0502b43d356 100644 --- a/ProcessLib/SmallDeformation/SmallDeformationFEM.h +++ b/ProcessLib/SmallDeformation/SmallDeformationFEM.h @@ -12,6 +12,7 @@ #include <memory> #include <vector> +#include "MaterialLib/PhysicalConstant.h" #include "MaterialLib/SolidModels/LinearElasticIsotropic.h" #include "MathLib/LinAlg/Eigen/EigenMapTools.h" #include "NumLib/Extrapolation/ExtrapolatableElement.h" @@ -248,7 +249,7 @@ public: auto&& solution = _ip_data[ip].solid_material.integrateStress( t, x_position, _process_data.dt, eps_prev, eps, sigma_prev, - *state); + *state, MaterialLib::PhysicalConstant::RoomTemperature, 0.); if (!solution) OGS_FATAL("Computation of local constitutive relation failed."); diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsFEM.h b/ProcessLib/ThermoMechanics/ThermoMechanicsFEM.h index d4aa7a2e83c..d6d4291342f 100644 --- a/ProcessLib/ThermoMechanics/ThermoMechanicsFEM.h +++ b/ProcessLib/ThermoMechanics/ThermoMechanicsFEM.h @@ -249,7 +249,8 @@ public: eps_m.noalias() = eps - linear_thermal_strain * Invariants::identity2; auto&& solution = _ip_data[ip].solid_material.integrateStress( - t, x_position, dt, eps_m_prev, eps_m, sigma_prev, *state); + t, x_position, dt, eps_m_prev, eps_m, sigma_prev, *state, + delta_T + _process_data.reference_temperature, 0.); if (!solution) OGS_FATAL("Computation of local constitutive relation failed."); -- GitLab