/** * \file * \copyright * Copyright (c) 2012-2021, OpenGeoSys Community (http://www.opengeosys.org) * Distributed under a Modified BSD License. * See accompanying file LICENSE.txt or * http://www.opengeosys.org/project/license */ #include "LinearElasticIsotropic.h" #include "MaterialLib/MPL/Utils/GetSymmetricTensor.h" namespace MPL = MaterialPropertyLib; namespace MaterialLib { namespace Solids { template std::optional::KelvinVector, std::unique_ptr::MaterialStateVariables>, typename MechanicsBase::KelvinMatrix>> LinearElasticIsotropic::integrateStress( MaterialPropertyLib::VariableArray const& variable_array_prev, MaterialPropertyLib::VariableArray const& variable_array, double const t, ParameterLib::SpatialPosition const& x, double const /*dt*/, typename MechanicsBase:: MaterialStateVariables const& /*material_state_variables*/) const { auto const& eps_m = std::get>( variable_array[static_cast(MPL::Variable::mechanical_strain)]); auto const& eps_m_prev = std::get>( variable_array_prev[static_cast( MPL::Variable::mechanical_strain)]); auto const& sigma_prev = std::get>( variable_array_prev[static_cast(MPL::Variable::stress)]); auto const T = std::get( variable_array_prev[static_cast(MPL::Variable::temperature)]); KelvinMatrix C = getElasticTensor(t, x, T); KelvinVector sigma = sigma_prev + C * (eps_m - eps_m_prev); return {std::make_tuple( sigma, std::make_unique< typename MechanicsBase::MaterialStateVariables>(), C)}; } template typename LinearElasticIsotropic::KelvinMatrix LinearElasticIsotropic::getElasticTensor( double const t, ParameterLib::SpatialPosition const& x, double const /*T*/) const { return elasticTangentStiffness(_mp.lambda(t, x), _mp.mu(t, x)); } template class LinearElasticIsotropic<2>; template class LinearElasticIsotropic<3>; } // namespace Solids } // namespace MaterialLib