From ff8da7c24a3086a40839155b935973e524955abb Mon Sep 17 00:00:00 2001 From: Dmitri Naumov <dmitri.naumov@ufz.de> Date: Fri, 23 Jun 2017 16:33:01 +0200 Subject: [PATCH] [MatL] LinearElastic: Split implementation. Move it from header to impl, which is only included in the cpp. --- .../SolidModels/LinearElasticIsotropic-impl.h | 55 +++++++++++++++++++ .../SolidModels/LinearElasticIsotropic.cpp | 1 + .../SolidModels/LinearElasticIsotropic.h | 19 +------ 3 files changed, 57 insertions(+), 18 deletions(-) create mode 100644 MaterialLib/SolidModels/LinearElasticIsotropic-impl.h diff --git a/MaterialLib/SolidModels/LinearElasticIsotropic-impl.h b/MaterialLib/SolidModels/LinearElasticIsotropic-impl.h new file mode 100644 index 00000000000..9c9d8376076 --- /dev/null +++ b/MaterialLib/SolidModels/LinearElasticIsotropic-impl.h @@ -0,0 +1,55 @@ +/** + * \copyright + * Copyright (c) 2012-2017, 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 "LinearElasticIsotropic.h" + +namespace MaterialLib +{ +namespace Solids +{ +template <int DisplacementDim> +boost::optional< + std::tuple<typename LinearElasticIsotropic<DisplacementDim>::KelvinVector, + std::unique_ptr<typename MechanicsBase< + DisplacementDim>::MaterialStateVariables>, + typename LinearElasticIsotropic<DisplacementDim>::KelvinMatrix>> +LinearElasticIsotropic<DisplacementDim>::integrateStress( + double const t, + ProcessLib::SpatialPosition const& x, + double const /*dt*/, + KelvinVector const& eps_prev, + KelvinVector const& eps, + KelvinVector const& sigma_prev, + typename MechanicsBase<DisplacementDim>::MaterialStateVariables const& + material_state_variables) +{ + KelvinMatrix C = KelvinMatrix::Zero(); + + C.template topLeftCorner<3, 3>().setConstant(_mp.lambda(t, x)); + C.noalias() += 2 * _mp.mu(t, x) * KelvinMatrix::Identity(); + + KelvinVector sigma = sigma_prev + C * (eps - eps_prev); + + return {std::make_tuple( + sigma, + std::unique_ptr< + typename MechanicsBase<DisplacementDim>::MaterialStateVariables>{ + new MaterialStateVariables{ + static_cast<MaterialStateVariables const&>( + material_state_variables)}}, + C)}; +} + +extern template class LinearElasticIsotropic<2>; +extern template class LinearElasticIsotropic<3>; + +} // namespace Solids +} // namespace MaterialLib diff --git a/MaterialLib/SolidModels/LinearElasticIsotropic.cpp b/MaterialLib/SolidModels/LinearElasticIsotropic.cpp index 60298622ca7..b34da125ec1 100644 --- a/MaterialLib/SolidModels/LinearElasticIsotropic.cpp +++ b/MaterialLib/SolidModels/LinearElasticIsotropic.cpp @@ -8,6 +8,7 @@ */ #include "LinearElasticIsotropic.h" +#include "LinearElasticIsotropic-impl.h" namespace MaterialLib { diff --git a/MaterialLib/SolidModels/LinearElasticIsotropic.h b/MaterialLib/SolidModels/LinearElasticIsotropic.h index ec3814459f9..afa40e8a627 100644 --- a/MaterialLib/SolidModels/LinearElasticIsotropic.h +++ b/MaterialLib/SolidModels/LinearElasticIsotropic.h @@ -99,24 +99,7 @@ public: KelvinVector const& eps, KelvinVector const& sigma_prev, typename MechanicsBase<DisplacementDim>::MaterialStateVariables const& - material_state_variables) override - { - KelvinMatrix C = KelvinMatrix::Zero(); - - C.template topLeftCorner<3, 3>().setConstant(_mp.lambda(t, x)); - C.noalias() += 2 * _mp.mu(t, x) * KelvinMatrix::Identity(); - - KelvinVector sigma = sigma_prev + C * (eps - eps_prev); - - return { - std::make_tuple(sigma, - std::unique_ptr<typename MechanicsBase< - DisplacementDim>::MaterialStateVariables>{ - new MaterialStateVariables{ - static_cast<MaterialStateVariables const&>( - material_state_variables)}}, - C)}; - } + material_state_variables) override; private: MaterialProperties _mp; -- GitLab