diff --git a/ProcessLib/ComponentTransport/ComponentTransportFEM.h b/ProcessLib/ComponentTransport/ComponentTransportFEM.h index 1e7bd7ad69d75a187b529fe67a1b2cfa97f5e6d3..bb9ea194a997a800a23d9ca852c0cabd2e62b47a 100644 --- a/ProcessLib/ComponentTransport/ComponentTransportFEM.h +++ b/ProcessLib/ComponentTransport/ComponentTransportFEM.h @@ -1775,6 +1775,7 @@ public: } void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/, + Eigen::VectorXd const& /*local_x_dot*/, double const /*t*/, double const /*dt*/) override { unsigned const n_integration_points = diff --git a/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp b/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp index d80f2ebc3f1dd8bbd4c9707e32ecc5164258afb1..7026da94892e5480af1d1fbd5fe8780008d09f1f 100644 --- a/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp +++ b/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp @@ -422,6 +422,7 @@ void ComponentTransportProcess::computeSecondaryVariableConcrete( void ComponentTransportProcess::postTimestepConcreteProcess( std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, const double t, const double dt, int const process_id) @@ -439,7 +440,8 @@ void ComponentTransportProcess::postTimestepConcreteProcess( ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &ComponentTransportLocalAssemblerInterface::postTimestep, - _local_assemblers, pv.getActiveElementIDs(), dof_tables, x, t, dt); + _local_assemblers, pv.getActiveElementIDs(), dof_tables, x, x_dot, t, + dt); if (!_surfaceflux) // computing the surfaceflux is optional { diff --git a/ProcessLib/ComponentTransport/ComponentTransportProcess.h b/ProcessLib/ComponentTransport/ComponentTransportProcess.h index 6831a8cdc4d3241da31fec357a9137cf3f02dd09..d6298c610ba7806ad25669bafc50b920d7681dd8 100644 --- a/ProcessLib/ComponentTransport/ComponentTransportProcess.h +++ b/ProcessLib/ComponentTransport/ComponentTransportProcess.h @@ -134,6 +134,7 @@ public: int const /*process_id*/) override; void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, const double t, const double dt, int const process_id) override; diff --git a/ProcessLib/HT/HTProcess.cpp b/ProcessLib/HT/HTProcess.cpp index aed6f24a42a0b3e80c0c01b7211efb67be23344a..fc0749c08e677028ef8cef592ae3c9a287a2f0ec 100644 --- a/ProcessLib/HT/HTProcess.cpp +++ b/ProcessLib/HT/HTProcess.cpp @@ -189,10 +189,12 @@ Eigen::Vector3d HTProcess::getFlux(std::size_t element_id, } // this is almost a copy of the implementation in the GroundwaterFlow -void HTProcess::postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, - const double t, - const double /*delta_t*/, - int const process_id) +void HTProcess::postTimestepConcreteProcess( + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& /*x_dot*/, + const double t, + const double /*delta_t*/, + int const process_id) { // For the monolithic scheme, process_id is always zero. if (_use_monolithic_scheme && process_id != 0) diff --git a/ProcessLib/HT/HTProcess.h b/ProcessLib/HT/HTProcess.h index ff595a6b664f9c8e76b7ede1d027e13c5bbb2446..99f26904f8bfeae53faa710bac73ebaf08ef9961 100644 --- a/ProcessLib/HT/HTProcess.h +++ b/ProcessLib/HT/HTProcess.h @@ -81,6 +81,7 @@ public: int const process_id) override; void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, const double t, const double delta_t, int const process_id) override; diff --git a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp index 2fa58409ca1674bd1f1a0655a8e9683aa293cb03..a859f7bf6e7531ba6031b9dfa5febac2bdf56368 100644 --- a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp +++ b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp @@ -307,8 +307,9 @@ void HeatTransportBHEProcess::preTimestepConcreteProcess( } void HeatTransportBHEProcess::postTimestepConcreteProcess( - std::vector<GlobalVector*> const& x, const double t, const double dt, - int const process_id) + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& /*x_dot*/, const double t, + const double dt, int const process_id) { if (_process_data.py_bc_object == nullptr || !_process_data._use_server_communication) diff --git a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.h b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.h index c46b4e69efc2cb25ec0b03ac2a46a65ab999f1b4..8670c83f8bda9eb23343cbfd8e19165ca007d2cc 100644 --- a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.h +++ b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.h @@ -74,6 +74,7 @@ private: int const process_id) override; void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, const double t, const double dt, int const process_id) override; diff --git a/ProcessLib/HydroMechanics/HydroMechanicsFEM.h b/ProcessLib/HydroMechanics/HydroMechanicsFEM.h index af485aa1033420552076d8488e8bc053677c42dd..4c8a249bf4b567e49d2777210babf638cac68307 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsFEM.h +++ b/ProcessLib/HydroMechanics/HydroMechanicsFEM.h @@ -256,6 +256,7 @@ public: } void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/, + Eigen::VectorXd const& /*local_x_dot*/, double const /*t*/, double const /*dt*/) override { diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp index b0b018f65b417c5f48d2f8f793fa4d14af940478..21623bc27a3026a6047af4fffd0d29e98c5998e8 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp +++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp @@ -384,7 +384,8 @@ void HydroMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess( template <int DisplacementDim> void HydroMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess( - std::vector<GlobalVector*> const& x, double const t, double const dt, + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, double const t, double const dt, const int process_id) { if (process_id != 0) @@ -404,7 +405,7 @@ void HydroMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess( ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerIF::postTimestep, _local_assemblers, - pv.getActiveElementIDs(), dof_tables, x, t, dt); + pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt); } template <int DisplacementDim> diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h index 6aa4c45fc878407b03b333f86fe3882eb381a9de..3ec003f9d89fb14771105d153565a3bb052b8423 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h +++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h @@ -91,6 +91,7 @@ private: const int process_id) override; void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, const double t, const double dt, int const process_id) override; diff --git a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp index 2824e8b091de5e68aff64a5aae9fe6043e967ff6..b542000a6375c427d5029ee194d94465273dafea 100644 --- a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp +++ b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp @@ -449,7 +449,8 @@ void HydroMechanicsProcess<GlobalDim>::initializeConcreteProcess( template <int GlobalDim> void HydroMechanicsProcess<GlobalDim>::postTimestepConcreteProcess( - std::vector<GlobalVector*> const& x, const double t, double const dt, + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, const double t, double const dt, int const process_id) { if (process_id == 0) @@ -467,7 +468,8 @@ void HydroMechanicsProcess<GlobalDim>::postTimestepConcreteProcess( getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &HydroMechanicsLocalAssemblerInterface::postTimestep, - _local_assemblers, pv.getActiveElementIDs(), dof_tables, x, t, dt); + _local_assemblers, pv.getActiveElementIDs(), dof_tables, x, x_dot, + t, dt); } DBUG("Compute the secondary variables for HydroMechanicsProcess."); diff --git a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.h b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.h index bf6f6ead0da89e2bee931d9763ee89f40a47e50a..cb9d275dd9847cb56db6a15b5e0c2cf70907e7ad 100644 --- a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.h +++ b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.h @@ -51,6 +51,7 @@ public: //! @} void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, double const t, double const dt, int const process_id) override; diff --git a/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerInterface.h b/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerInterface.h index e3f5c12c1395047e1a64b03684f2761694100a24..deee7e49ed8c829e1bd747b1a7a49aeed3be5332 100644 --- a/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerInterface.h +++ b/ProcessLib/LIE/HydroMechanics/LocalAssembler/HydroMechanicsLocalAssemblerInterface.h @@ -99,7 +99,9 @@ public: } } - void postTimestepConcrete(Eigen::VectorXd const& local_x_, const double t, + void postTimestepConcrete(Eigen::VectorXd const& local_x_, + Eigen::VectorXd const& /*local_x_dot*/, + const double t, double const dt) override { _local_u.setZero(); diff --git a/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp b/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp index e775c5c1fb6661af24edb5f0eabfaec9ced642e9..569ad13dd3d7990fa97d9fd50a861242fe7b5da6 100644 --- a/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp +++ b/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp @@ -149,6 +149,7 @@ Eigen::Vector3d LiquidFlowProcess::getFlux( // this is almost a copy of the implementation in the GroundwaterFlow void LiquidFlowProcess::postTimestepConcreteProcess( std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& /*x_dot*/, const double t, const double /*dt*/, int const process_id) diff --git a/ProcessLib/LiquidFlow/LiquidFlowProcess.h b/ProcessLib/LiquidFlow/LiquidFlowProcess.h index 0e7fe884809a9bcfc6b1238258482612795ba12b..a331f5740b842cfac256e14d4a61adb53f4de0d1 100644 --- a/ProcessLib/LiquidFlow/LiquidFlowProcess.h +++ b/ProcessLib/LiquidFlow/LiquidFlowProcess.h @@ -81,6 +81,7 @@ public: std::vector<GlobalVector*> const& x) const override; void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, const double t, const double dt, int const process_id) override; diff --git a/ProcessLib/LocalAssemblerInterface.cpp b/ProcessLib/LocalAssemblerInterface.cpp index cc1052e14bc616bdc82b96f784aeecf3c52a9727..87e16e27072bbe4938463090db4f3fdd486b50ad 100644 --- a/ProcessLib/LocalAssemblerInterface.cpp +++ b/ProcessLib/LocalAssemblerInterface.cpp @@ -131,9 +131,11 @@ void LocalAssemblerInterface::preTimestep( void LocalAssemblerInterface::postTimestep( std::size_t const mesh_item_id, std::vector<NumLib::LocalToGlobalIndexMap const*> const& dof_tables, - std::vector<GlobalVector*> const& x, double const t, double const dt) + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, double const t, double const dt) { std::vector<double> local_x_vec; + std::vector<double> local_x_dot_vec; auto const n_processes = x.size(); for (std::size_t process_id = 0; process_id < n_processes; ++process_id) @@ -144,10 +146,16 @@ void LocalAssemblerInterface::postTimestep( auto const local_solution = x[process_id]->get(indices); local_x_vec.insert(std::end(local_x_vec), std::begin(local_solution), std::end(local_solution)); + + auto const local_solution_dot = x_dot[process_id]->get(indices); + local_x_dot_vec.insert(std::end(local_x_dot_vec), + std::begin(local_solution_dot), + std::end(local_solution_dot)); } auto const local_x = MathLib::toVector(local_x_vec); + auto const local_x_dot = MathLib::toVector(local_x_dot_vec); - postTimestepConcrete(local_x, t, dt); + postTimestepConcrete(local_x, local_x_dot, t, dt); } void LocalAssemblerInterface::postNonLinearSolver( diff --git a/ProcessLib/LocalAssemblerInterface.h b/ProcessLib/LocalAssemblerInterface.h index 1442c3bf242973441e790a1e64c608e33bba3bcd..fe30f2fd389e55377a4d7c98284aa228528b1804 100644 --- a/ProcessLib/LocalAssemblerInterface.h +++ b/ProcessLib/LocalAssemblerInterface.h @@ -90,7 +90,9 @@ public: virtual void postTimestep( std::size_t const mesh_item_id, std::vector<NumLib::LocalToGlobalIndexMap const*> const& dof_tables, - std::vector<GlobalVector*> const& x, double const t, double const dt); + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, double const t, + double const dt); void postNonLinearSolver(std::size_t const mesh_item_id, NumLib::LocalToGlobalIndexMap const& dof_table, @@ -134,6 +136,7 @@ private: } virtual void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/, + Eigen::VectorXd const& /*local_x_dot*/, double const /*t*/, double const /*dt*/) { } diff --git a/ProcessLib/PhaseField/PhaseFieldFEM.h b/ProcessLib/PhaseField/PhaseFieldFEM.h index e0f79d5df360499a1e0466ed4eef19d7203b3d57..3865e5e5b10b4fbe593968fce227dc2a72eaf757 100644 --- a/ProcessLib/PhaseField/PhaseFieldFEM.h +++ b/ProcessLib/PhaseField/PhaseFieldFEM.h @@ -290,6 +290,7 @@ public: } void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/, + Eigen::VectorXd const& /*local_x_dot*/, double const /*t*/, double const /*dt*/) override { diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.cpp b/ProcessLib/PhaseField/PhaseFieldProcess.cpp index 48fc07c8e4269715e74cda38e49139ec5fa59b50..74bf60895dc46c18cbea16b67aac5580879d4dc4 100644 --- a/ProcessLib/PhaseField/PhaseFieldProcess.cpp +++ b/ProcessLib/PhaseField/PhaseFieldProcess.cpp @@ -277,7 +277,8 @@ void PhaseFieldProcess<DisplacementDim>::preTimestepConcreteProcess( template <int DisplacementDim> void PhaseFieldProcess<DisplacementDim>::postTimestepConcreteProcess( - std::vector<GlobalVector*> const& x, const double t, + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& /*x_dot*/, const double t, const double /*delta_t*/, int const process_id) { if (isPhaseFieldProcess(process_id)) diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.h b/ProcessLib/PhaseField/PhaseFieldProcess.h index 875032dfbbce06a51a7b48dae26c59cddc8ada95..da2a453a98db3c2133ffab1ee8014dd3e65eed81 100644 --- a/ProcessLib/PhaseField/PhaseFieldProcess.h +++ b/ProcessLib/PhaseField/PhaseFieldProcess.h @@ -76,6 +76,7 @@ private: const int process_id) override; void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, const double t, const double delta_t, int const process_id) override; diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp index a1ca553e86ffeee1b3142c9377a192961b91c5bc..850d3948d72ee54cfaadf794ad6e0b49f9796e79 100644 --- a/ProcessLib/Process.cpp +++ b/ProcessLib/Process.cpp @@ -393,12 +393,21 @@ void Process::preTimestep(std::vector<GlobalVector*> const& x, const double t, _boundary_conditions[process_id].preTimestep(t, x, process_id); } -void Process::postTimestep(std::vector<GlobalVector*> const& x, const double t, - const double delta_t, int const process_id) +void Process::postTimestep(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, + const double t, const double delta_t, + int const process_id) { for (auto* const solution : x) + { + MathLib::LinAlg::setLocalAccessibleVector(*solution); + } + for (auto* const solution : x_dot) + { MathLib::LinAlg::setLocalAccessibleVector(*solution); - postTimestepConcreteProcess(x, t, delta_t, process_id); + } + + postTimestepConcreteProcess(x, x_dot, t, delta_t, process_id); _boundary_conditions[process_id].postTimestep(t, x, process_id); } diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h index 13690b447458ee81e8309c3967df439c752a100b..693cf75b92be793c9c187e75b74370e4f23c7830 100644 --- a/ProcessLib/Process.h +++ b/ProcessLib/Process.h @@ -66,7 +66,8 @@ public: const double delta_t, const int process_id); /// Postprocessing after a complete timestep. - void postTimestep(std::vector<GlobalVector*> const& x, const double t, + void postTimestep(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, const double t, const double delta_t, int const process_id); /// Calculates secondary variables, e.g. stress and strain for deformation @@ -248,6 +249,7 @@ private: virtual void postTimestepConcreteProcess( std::vector<GlobalVector*> const& /*x*/, + std::vector<GlobalVector*> const& /*x_dot*/, const double /*t*/, const double /*dt*/, int const /*process_id*/) diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h index 2a28693ed49762590830c52af9b2a429ef4a1dda..0f93231ebeb8f313d3507fe972f87fcaab4c33d3 100644 --- a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h +++ b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h @@ -153,6 +153,7 @@ public: } void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/, + Eigen::VectorXd const& /*local_x_dot*/, double const /*t*/, double const /*dt*/) override { diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp index a9603cf2e2676e8c5dc1655865fcd962dbc40613..5b15d385cc275fc53d2d8144a052f22919657ab7 100644 --- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp +++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp @@ -423,7 +423,8 @@ void RichardsMechanicsProcess<DisplacementDim>:: template <int DisplacementDim> void RichardsMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess( - std::vector<GlobalVector*> const& x, double const t, double const dt, + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, double const t, double const dt, const int process_id) { if (hasMechanicalProcess(process_id)) @@ -435,7 +436,7 @@ void RichardsMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess( getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerIF::postTimestep, _local_assemblers, - pv.getActiveElementIDs(), dof_tables, x, t, dt); + pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt); } } diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h index 4128105bdaafab50ce1e8f5e90d0b53cc8cd64e7..0c694f6269649f0ca02f36e931e8f6131c655b91 100644 --- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h +++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h @@ -90,6 +90,7 @@ private: GlobalMatrix& Jac) override; void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, double const t, double const dt, const int process_id) override; diff --git a/ProcessLib/SmallDeformation/SmallDeformationFEM.h b/ProcessLib/SmallDeformation/SmallDeformationFEM.h index e6c155adf09f94bbac186ef0a3a3e62ae6678932..e785b4d61199fdefc5f068e4573bddaa22af46c0 100644 --- a/ProcessLib/SmallDeformation/SmallDeformationFEM.h +++ b/ProcessLib/SmallDeformation/SmallDeformationFEM.h @@ -236,6 +236,7 @@ public: MathLib::KelvinVector::KelvinMatrixType<DisplacementDim> updateConstitutiveRelations( Eigen::Ref<Eigen::VectorXd const> const& local_x, + Eigen::Ref<Eigen::VectorXd const> const& /*local_x_dot*/, ParameterLib::SpatialPosition const& x_position, double const t, double const dt, IntegrationPointData<BMatricesType, ShapeMatricesType, DisplacementDim>& @@ -310,7 +311,7 @@ public: void assembleWithJacobian(double const t, double const dt, std::vector<double> const& local_x, - std::vector<double> const& /*local_xdot*/, + std::vector<double> const& local_x_dot, std::vector<double>& /*local_M_data*/, std::vector<double>& /*local_K_data*/, std::vector<double>& local_b_data, @@ -352,6 +353,9 @@ public: auto const C = updateConstitutiveRelations( Eigen::Map<NodalForceVectorType const>( local_x.data(), ShapeFunction::NPOINTS * DisplacementDim), + Eigen::Map<NodalForceVectorType const>( + local_x_dot.data(), + ShapeFunction::NPOINTS * DisplacementDim), x_position, t, dt, _ip_data[ip]); auto const rho = _process_data.solid_density(t, x_position)[0]; @@ -361,8 +365,9 @@ public: } } - void postTimestepConcrete(Eigen::VectorXd const& local_x, double const t, - double const dt) override + void postTimestepConcrete(Eigen::VectorXd const& local_x, + Eigen::VectorXd const& local_x_dot, + double const t, double const dt) override { unsigned const n_integration_points = _integration_method.getNumberOfPoints(); @@ -374,7 +379,7 @@ public: { x_position.setIntegrationPoint(ip); - updateConstitutiveRelations(local_x, x_position, t, dt, + updateConstitutiveRelations(local_x, local_x_dot, x_position, t, dt, _ip_data[ip]); auto& eps = _ip_data[ip].eps; diff --git a/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp b/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp index e5b00677d862d89afaf2dcb72145cdd8471a421c..4813db186021a99161c74f712d587bd6bc15afc9 100644 --- a/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp +++ b/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp @@ -181,7 +181,8 @@ void SmallDeformationProcess<DisplacementDim>:: template <int DisplacementDim> void SmallDeformationProcess<DisplacementDim>::postTimestepConcreteProcess( - std::vector<GlobalVector*> const& x, const double t, const double dt, + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, const double t, const double dt, int const process_id) { DBUG("PostTimestep SmallDeformationProcess."); @@ -193,7 +194,7 @@ void SmallDeformationProcess<DisplacementDim>::postTimestepConcreteProcess( ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::postTimestep, _local_assemblers, - pv.getActiveElementIDs(), dof_tables, x, t, dt); + pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt); std::unique_ptr<GlobalVector> material_forces; ProcessLib::SmallDeformation::writeMaterialForces( diff --git a/ProcessLib/SmallDeformation/SmallDeformationProcess.h b/ProcessLib/SmallDeformation/SmallDeformationProcess.h index 0d0ae5107b181c5f05b64d24bce4bd0eeac2b9f9..30c8c756dfa2704adfeb02095cceec35005ba746 100644 --- a/ProcessLib/SmallDeformation/SmallDeformationProcess.h +++ b/ProcessLib/SmallDeformation/SmallDeformationProcess.h @@ -62,6 +62,7 @@ private: GlobalMatrix& Jac) override; void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, const double t, const double dt, int const process_id) override; diff --git a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalFEM.h b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalFEM.h index acc4c2d6bc7629794f84ec07d4d2e4a003046abf..e445b43af46e461e134facfb6c1c310372fc8eb8 100644 --- a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalFEM.h +++ b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalFEM.h @@ -543,6 +543,7 @@ public: } void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/, + Eigen::VectorXd const& /*local_x_dot*/, double const /*t*/, double const /*dt*/) override { unsigned const n_integration_points = diff --git a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.cpp b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.cpp index d1fcf282a317ca979b4782250e4653533629308f..721b7067497d6fe327b2df52ba0fe33906ce8b44 100644 --- a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.cpp +++ b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.cpp @@ -272,6 +272,7 @@ void SmallDeformationNonlocalProcess<DisplacementDim>:: template <int DisplacementDim> void SmallDeformationNonlocalProcess<DisplacementDim>:: postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, double const t, double const dt, int const process_id) @@ -285,7 +286,7 @@ void SmallDeformationNonlocalProcess<DisplacementDim>:: ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::postTimestep, _local_assemblers, - pv.getActiveElementIDs(), dof_tables, x, t, dt); + pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt); } template <int DisplacementDim> diff --git a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.h b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.h index d2abf804576cd9e8c9a089f37c41fa96fd1001c4..20de29e33f890d056a27ef23c0a6201d35316cb6 100644 --- a/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.h +++ b/ProcessLib/SmallDeformationNonlocal/SmallDeformationNonlocalProcess.h @@ -67,6 +67,7 @@ private: GlobalMatrix& Jac) override; void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, double const t, double const dt, int const process_id) override; diff --git a/ProcessLib/SteadyStateDiffusion/SteadyStateDiffusion.h b/ProcessLib/SteadyStateDiffusion/SteadyStateDiffusion.h index 9847c46880cf5491df657cf67e73e3cc61c7a40b..f8bbd8298c2131342ae8b5e1ccc1f45003c89c45 100644 --- a/ProcessLib/SteadyStateDiffusion/SteadyStateDiffusion.h +++ b/ProcessLib/SteadyStateDiffusion/SteadyStateDiffusion.h @@ -58,10 +58,12 @@ public: return _local_assemblers[element_id]->getFlux(p, t, local_x); } - void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, - const double t, - const double /*delta_t*/, - int const process_id) override + void postTimestepConcreteProcess( + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& /*x_dot*/, + const double t, + const double /*delta_t*/, + int const process_id) override { // For this single process, process_id is always zero. if (process_id != 0) diff --git a/ProcessLib/StokesFlow/StokesFlowProcess.cpp b/ProcessLib/StokesFlow/StokesFlowProcess.cpp index 5cc64069193e7bc27407bbf5a927efe552c2494d..14156ae390138792c36d820f0351f84fafb6b4ac 100644 --- a/ProcessLib/StokesFlow/StokesFlowProcess.cpp +++ b/ProcessLib/StokesFlow/StokesFlowProcess.cpp @@ -190,6 +190,7 @@ void StokesFlowProcess<GlobalDim>::computeSecondaryVariableConcrete( template <int GlobalDim> void StokesFlowProcess<GlobalDim>::postTimestepConcreteProcess( std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, const double t, const double dt, int const process_id) @@ -209,7 +210,7 @@ void StokesFlowProcess<GlobalDim>::postTimestepConcreteProcess( ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &StokesFlowLocalAssemblerInterface::postTimestep, _local_assemblers, - pv.getActiveElementIDs(), dof_tables, x, t, dt); + pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt); } template <int GlobalDim> diff --git a/ProcessLib/StokesFlow/StokesFlowProcess.h b/ProcessLib/StokesFlow/StokesFlowProcess.h index c16b3fa9a15cd5fa5804e117b85f02291168e567..68d7e21b93fe626aeb313e04cd9eb4994a2a86a6 100644 --- a/ProcessLib/StokesFlow/StokesFlowProcess.h +++ b/ProcessLib/StokesFlow/StokesFlowProcess.h @@ -55,6 +55,7 @@ public: int const /*process_id*/) override; void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, const double t, const double dt, int const process_id) override; diff --git a/ProcessLib/TH2M/TH2MFEM.h b/ProcessLib/TH2M/TH2MFEM.h index 6ec3d71b5ec2ebdf66e751b216e33917bb31a495..cc077ef17ea8681d75b7d9bfed8900bf0b58c48d 100644 --- a/ProcessLib/TH2M/TH2MFEM.h +++ b/ProcessLib/TH2M/TH2MFEM.h @@ -149,6 +149,7 @@ private: } void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/, + Eigen::VectorXd const& /*local_x_dot*/, double const /*t*/, double const /*dt*/) override { diff --git a/ProcessLib/TH2M/TH2MProcess.cpp b/ProcessLib/TH2M/TH2MProcess.cpp index 2cd415061c23027e348f08def929555a4a871fd8..a53373046b3e0d3eaa5ad5db5820f4e55b40a5ce 100644 --- a/ProcessLib/TH2M/TH2MProcess.cpp +++ b/ProcessLib/TH2M/TH2MProcess.cpp @@ -363,7 +363,8 @@ void TH2MProcess<DisplacementDim>::preTimestepConcreteProcess( template <int DisplacementDim> void TH2MProcess<DisplacementDim>::postTimestepConcreteProcess( - std::vector<GlobalVector*> const& x, double const t, double const dt, + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, double const t, double const dt, const int process_id) { DBUG("PostTimestep TH2MProcess."); @@ -371,7 +372,7 @@ void TH2MProcess<DisplacementDim>::postTimestepConcreteProcess( ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::postTimestep, local_assemblers_, - pv.getActiveElementIDs(), dof_tables, x, t, dt); + pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt); } template <int DisplacementDim> diff --git a/ProcessLib/TH2M/TH2MProcess.h b/ProcessLib/TH2M/TH2MProcess.h index aa412b8868fb85150509aea948c360d963c1769f..e985238230ea4d3cadef9af8e91d9bf5fbf61204 100644 --- a/ProcessLib/TH2M/TH2MProcess.h +++ b/ProcessLib/TH2M/TH2MProcess.h @@ -96,6 +96,7 @@ private: const int process_id) override; void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, const double t, const double dt, int const /*process_id*/) override; diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h index 5f43641ec4fc811ba8147a1714370cec64dfc930..85677012dba8cee4f7007b2d5cd63cd43c4d2ef5 100644 --- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h +++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h @@ -147,6 +147,7 @@ public: } void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/, + Eigen::VectorXd const& /*local_x_dot*/, double const /*t*/, double const /*dt*/) override { diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.cpp b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.cpp index 93f76a2bed6f153e96021c624a9d18e37186a1dd..d57c6cbee2e37a06d6f717d2757f55fbb242aa52 100644 --- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.cpp +++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.cpp @@ -372,7 +372,8 @@ void ThermoHydroMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess( template <int DisplacementDim> void ThermoHydroMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess( - std::vector<GlobalVector*> const& x, double const t, double const dt, + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, double const t, double const dt, const int process_id) { if (process_id != 0) @@ -393,7 +394,7 @@ void ThermoHydroMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess( GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::postTimestep, _local_assemblers, - pv.getActiveElementIDs(), dof_tables, x, t, dt); + pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt); } template <int DisplacementDim> diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.h index a2a548a619c39d154f3f72f7e7c4cb3ecb5bc0f9..123b186bb3b324dda7e4b928325393f9acf6bddb 100644 --- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.h +++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.h @@ -91,6 +91,7 @@ private: const int process_id) override; void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, const double t, const double dt, int const process_id) override; diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldFEM.h b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldFEM.h index 4a2391e1169876550d8899644d8c12263a8b9392..c57fa88ff7f65a880d8af49c0905dbb6dcb4f653 100644 --- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldFEM.h +++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldFEM.h @@ -253,6 +253,7 @@ public: } void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/, + Eigen::VectorXd const& /*local_x_dot*/, double const /*t*/, double const /*dt*/) override { unsigned const n_integration_points = diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp index d71643e77802c1cd050dce2bb50e00827dadda96..1a948966d5a67862c512b944278b3905d1c88954 100644 --- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp +++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp @@ -278,6 +278,7 @@ void ThermoMechanicalPhaseFieldProcess<DisplacementDim>:: template <int DisplacementDim> void ThermoMechanicalPhaseFieldProcess<DisplacementDim>:: postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, double const t, double const dt, int const process_id) @@ -299,7 +300,8 @@ void ThermoMechanicalPhaseFieldProcess<DisplacementDim>:: ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &ThermoMechanicalPhaseFieldLocalAssemblerInterface::postTimestep, - _local_assemblers, pv.getActiveElementIDs(), dof_tables, x, t, dt); + _local_assemblers, pv.getActiveElementIDs(), dof_tables, x, x_dot, t, + dt); } template <int DisplacementDim> diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h index 3a7967474fbd1897b025fc0b82db5c8abdf70ba9..0bc74f00845c8c1dbdac1c4ddb51809d2dd4b780 100644 --- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h +++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h @@ -108,6 +108,7 @@ private: const int process_id) override; void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, double const t, double const dt, int const process_id) override; diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsFEM.h b/ProcessLib/ThermoMechanics/ThermoMechanicsFEM.h index 8fb6e8d309f8a96f42a40a9391cd799f4a8b4ab5..eae77e1a27ed740375413d815b4f779f66ad37c8 100644 --- a/ProcessLib/ThermoMechanics/ThermoMechanicsFEM.h +++ b/ProcessLib/ThermoMechanics/ThermoMechanicsFEM.h @@ -225,6 +225,7 @@ public: } void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/, + Eigen::VectorXd const& /*local_x_dot*/, double const /*t*/, double const /*dt*/) override { unsigned const n_integration_points = diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp index 3d7f94b91c16347ad64bb39fab8ff29a792ed443..efd54a162508f740cce32627940f50dfcef08e5b 100644 --- a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp +++ b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp @@ -330,7 +330,8 @@ void ThermoMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess( template <int DisplacementDim> void ThermoMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess( - std::vector<GlobalVector*> const& x, double const t, double const dt, + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, double const t, double const dt, int const process_id) { if (process_id != 0) @@ -350,7 +351,7 @@ void ThermoMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess( ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::postTimestep, _local_assemblers, - pv.getActiveElementIDs(), dof_tables, x, t, dt); + pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt); } template <int DisplacementDim> diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h index 4ecb93d8650db949d104f76b42c595f94f7715bf..fc1046dcce1313eeea280e1831785a60d2ff4cb8 100644 --- a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h +++ b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h @@ -84,6 +84,7 @@ private: const int process_id) override; void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, const double t, const double dt, int const process_id) override; diff --git a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM.h b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM.h index f6a5b081f9ca34488b431c66305237f237da297a..0dd5422503e68307fcc27354e6cacd42d04b6568 100644 --- a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM.h +++ b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM.h @@ -96,6 +96,7 @@ public: } void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/, + Eigen::VectorXd const& /*local_x_dot*/, double const /*t*/, double const /*dt*/) override { diff --git a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcess.cpp b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcess.cpp index 207d5463b76734308f47f5e60b974cb4856f5789..e4d15a92b0cad829932595b8374d3f97800fded6 100644 --- a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcess.cpp +++ b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcess.cpp @@ -173,7 +173,8 @@ void ThermoRichardsFlowProcess::assembleWithJacobianConcreteProcess( } void ThermoRichardsFlowProcess::postTimestepConcreteProcess( - std::vector<GlobalVector*> const& x, double const t, double const dt, + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, double const t, double const dt, const int process_id) { if (process_id != 0) @@ -188,7 +189,7 @@ void ThermoRichardsFlowProcess::postTimestepConcreteProcess( ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerIF::postTimestep, _local_assemblers, - pv.getActiveElementIDs(), dof_tables, x, t, dt); + pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt); } void ThermoRichardsFlowProcess::computeSecondaryVariableConcrete( diff --git a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcess.h b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcess.h index a2b2397fb04477ca54b5213ce33e180831658c85..c93f2ee3091f9246a12c147b7d07ce9d9c25f6b6 100644 --- a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcess.h +++ b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowProcess.h @@ -127,6 +127,7 @@ private: GlobalMatrix& Jac) override; void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, double const t, double const dt, const int process_id) override; diff --git a/ProcessLib/ThermoRichardsMechanics/LocalAssemblerInterface.h b/ProcessLib/ThermoRichardsMechanics/LocalAssemblerInterface.h index f5edbc4d373b41c9a3b3b6a9c6975d4482df88fa..e3ba811b6d4ac7e4698fc83f5c8b3a12e9330bef 100644 --- a/ProcessLib/ThermoRichardsMechanics/LocalAssemblerInterface.h +++ b/ProcessLib/ThermoRichardsMechanics/LocalAssemblerInterface.h @@ -105,6 +105,7 @@ struct LocalAssemblerInterface : public ProcessLib::LocalAssemblerInterface, } void postTimestepConcrete(Eigen::VectorXd const& /*local_x*/, + Eigen::VectorXd const& /*local_x_dot*/, double const /*t*/, double const /*dt*/) override { diff --git a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcess.cpp b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcess.cpp index 8594a81dcb5128f23726879b996ab3094d46f35f..acdf602bfa9b85cb998d37d48c10c6a5a70587b4 100644 --- a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcess.cpp +++ b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcess.cpp @@ -274,6 +274,7 @@ ThermoRichardsMechanicsProcess<DisplacementDim, ConstitutiveTraits>:: template <int DisplacementDim, typename ConstitutiveTraits> void ThermoRichardsMechanicsProcess<DisplacementDim, ConstitutiveTraits>:: postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, double const t, double const dt, const int process_id) { @@ -284,7 +285,7 @@ void ThermoRichardsMechanicsProcess<DisplacementDim, ConstitutiveTraits>:: ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerIF::postTimestep, local_assemblers_, - pv.getActiveElementIDs(), dof_tables, x, t, dt); + pv.getActiveElementIDs(), dof_tables, x, x_dot, t, dt); } template <int DisplacementDim, typename ConstitutiveTraits> diff --git a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcess.h b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcess.h index f9f6c07c2bb54a6329a1a8358dc180922a5a133d..c25db50b506cc4c9c7520a2ffe79549e0a31fac2 100644 --- a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcess.h +++ b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsProcess.h @@ -191,6 +191,7 @@ private: const int /*process_id*/) override; void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_dot, double const t, double const dt, const int process_id) override; diff --git a/ProcessLib/TimeLoop.cpp b/ProcessLib/TimeLoop.cpp index 5cb4a4aeb6af9486967fc1b1a0d8f2aed6ef4282..048e5d88830a1238bd3d44403b0fbccbf3091038 100644 --- a/ProcessLib/TimeLoop.cpp +++ b/ProcessLib/TimeLoop.cpp @@ -100,7 +100,7 @@ void postTimestepForAllProcesses( auto& x_dot = *x_dots[process_id]; pcs.computeSecondaryVariable(t, dt, process_solutions, x_dot, process_id); - pcs.postTimestep(process_solutions, t, dt, process_id); + pcs.postTimestep(process_solutions, x_dots, t, dt, process_id); } for (auto& x_dot : x_dots) {