From 7ab78a9df93052de59849818a776ccb1ca3d1515 Mon Sep 17 00:00:00 2001 From: Dmitri Naumov <dmitri.naumov@ufz.de> Date: Tue, 25 Feb 2020 19:46:25 +0100 Subject: [PATCH] [PL/RM] Add swelling stress sec. var. output. --- .../LocalAssemblerInterface.h | 6 ++++ .../RichardsMechanicsFEM-impl.h | 30 +++++++++++++++++++ .../RichardsMechanics/RichardsMechanicsFEM.h | 6 ++++ .../RichardsMechanicsProcess.cpp | 5 ++++ 4 files changed, 47 insertions(+) diff --git a/ProcessLib/RichardsMechanics/LocalAssemblerInterface.h b/ProcessLib/RichardsMechanics/LocalAssemblerInterface.h index 20cd0294063..658dc73a23e 100644 --- a/ProcessLib/RichardsMechanics/LocalAssemblerInterface.h +++ b/ProcessLib/RichardsMechanics/LocalAssemblerInterface.h @@ -28,6 +28,12 @@ struct LocalAssemblerInterface : public ProcessLib::LocalAssemblerInterface, std::vector<NumLib::LocalToGlobalIndexMap const*> const& dof_table, std::vector<double>& cache) const = 0; + virtual std::vector<double> const& getIntPtSwellingStress( + const double t, + std::vector<GlobalVector*> const& x, + std::vector<NumLib::LocalToGlobalIndexMap const*> const& dof_table, + std::vector<double>& cache) const = 0; + virtual std::vector<double> const& getIntPtEpsilon( const double t, std::vector<GlobalVector*> const& x, diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h index 6b11108f6be..58dc2dfbfa5 100644 --- a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h +++ b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h @@ -775,6 +775,36 @@ std::vector<double> const& RichardsMechanicsLocalAssembler< return cache; } +template <typename ShapeFunctionDisplacement, typename ShapeFunctionPressure, + typename IntegrationMethod, int DisplacementDim> +std::vector<double> const& RichardsMechanicsLocalAssembler< + ShapeFunctionDisplacement, ShapeFunctionPressure, IntegrationMethod, + DisplacementDim>:: + getIntPtSwellingStress( + const double /*t*/, + std::vector<GlobalVector*> const& /*x*/, + std::vector<NumLib::LocalToGlobalIndexMap const*> const& /*dof_table*/, + std::vector<double>& cache) const +{ + static const int kelvin_vector_size = + MathLib::KelvinVector::KelvinVectorDimensions<DisplacementDim>::value; + auto const num_intpts = _ip_data.size(); + + cache.clear(); + auto cache_mat = MathLib::createZeroedMatrix<Eigen::Matrix< + double, kelvin_vector_size, Eigen::Dynamic, Eigen::RowMajor>>( + cache, kelvin_vector_size, num_intpts); + + for (unsigned ip = 0; ip < num_intpts; ++ip) + { + auto const& sigma_sw = _ip_data[ip].sigma_sw; + cache_mat.col(ip) = + MathLib::KelvinVector::kelvinVectorToSymmetricTensor(sigma_sw); + } + + return cache; +} + template <typename ShapeFunctionDisplacement, typename ShapeFunctionPressure, typename IntegrationMethod, int DisplacementDim> std::vector<double> const& RichardsMechanicsLocalAssembler< diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h index 6cb28893e82..eca8d9d2184 100644 --- a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h +++ b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h @@ -182,6 +182,12 @@ public: std::vector<NumLib::LocalToGlobalIndexMap const*> const& dof_table, std::vector<double>& cache) const override; + std::vector<double> const& getIntPtSwellingStress( + const double t, + std::vector<GlobalVector*> const& x, + std::vector<NumLib::LocalToGlobalIndexMap const*> const& dof_table, + std::vector<double>& cache) const override; + std::vector<double> const& getIntPtEpsilon( const double t, std::vector<GlobalVector*> const& x, diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp index 91dd4783463..d93f0202799 100644 --- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp +++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp @@ -183,6 +183,11 @@ void RichardsMechanicsProcess<DisplacementDim>::initializeConcreteProcess( DisplacementDim>::RowsAtCompileTime, &LocalAssemblerIF::getIntPtSigma); + add_secondary_variable("swelling_stress", + MathLib::KelvinVector::KelvinVectorType< + DisplacementDim>::RowsAtCompileTime, + &LocalAssemblerIF::getIntPtSwellingStress); + add_secondary_variable("epsilon", MathLib::KelvinVector::KelvinVectorType< DisplacementDim>::RowsAtCompileTime, -- GitLab