diff --git a/MaterialLib/SolidModels/LinearElasticIsotropic-impl.h b/MaterialLib/SolidModels/LinearElasticIsotropic-impl.h new file mode 100644 index 0000000000000000000000000000000000000000..9c9d8376076a96155bd05504a150e2954cc7941f --- /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 60298622ca795f79a23472c7b903cc53b7d908d7..b34da125ec175dbc4b70ea357857a013ab3b3b0d 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 ec3814459f94c6455e55a4e206e54bb5f2ea753d..afa40e8a627d4172b060c6e5d61aa43ced82e16d 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;