diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h index 99e672d7f5f6bda0033b069d8e1a5b4c8459f93b..c90a1b48feea03d54c4907e1486a17f7a7021ae2 100644 --- a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h +++ b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h @@ -95,7 +95,27 @@ public: for (unsigned ip = 0; ip < n_integration_points; ip++) { - _ip_data[ip].pushBackState(); + auto& ip_data = _ip_data[ip]; + + /// Set initial stress from parameter. + if (_process_data.initial_stress != nullptr) + { + ParameterLib::SpatialPosition const x_position{ + boost::none, _element.getID(), ip, + MathLib::Point3d( + interpolateCoordinates<ShapeFunctionDisplacement, + ShapeMatricesTypeDisplacement>( + _element, ip_data.N_u))}; + + ip_data.sigma_eff = + MathLib::KelvinVector::symmetricTensorToKelvinVector< + DisplacementDim>((*_process_data.initial_stress)( + std::numeric_limits< + double>::quiet_NaN() /* time independent */, + x_position)); + } + + ip_data.pushBackState(); } }