diff --git a/ProcessLib/PhaseField/PhaseFieldFEM.h b/ProcessLib/PhaseField/PhaseFieldFEM.h index 458cde06b9132acdb07f41df2dab3def80b82b44..10b035a2b91384d93998d156ba33dcc13d4dba31 100644 --- a/ProcessLib/PhaseField/PhaseFieldFEM.h +++ b/ProcessLib/PhaseField/PhaseFieldFEM.h @@ -207,9 +207,19 @@ public: std::vector<double>& local_b_data, std::vector<double>& local_Jac_data, LocalCoupledSolutions const& local_coupled_solutions) override; - void preTimestepConcrete(std::vector<double> const& /*local_x*/, - double const /*t*/, - double const /*delta_t*/) override + void initializeConcrete() override + { + unsigned const n_integration_points = + _integration_method.getNumberOfPoints(); + + for (unsigned ip = 0; ip < n_integration_points; ip++) + { + _ip_data[ip].pushBackState(); + } + } + + void postTimestepConcrete(std::vector<double> const& /*local_x*/ + ) override { unsigned const n_integration_points = _integration_method.getNumberOfPoints(); diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.cpp b/ProcessLib/PhaseField/PhaseFieldProcess.cpp index 2c9108f151e8520859e287c43e71c7115ccc18a7..6465ed380f865ecb792c75482c3fa15cc82c0889 100644 --- a/ProcessLib/PhaseField/PhaseFieldProcess.cpp +++ b/ProcessLib/PhaseField/PhaseFieldProcess.cpp @@ -140,6 +140,14 @@ void PhaseFieldProcess<DisplacementDim>::initializeConcreteProcess( DisplacementDim>::RowsAtCompileTime, getExtrapolator(), _local_assemblers, &LocalAssemblerInterface::getIntPtEpsilon)); + + // Initialize local assemblers after all variables have been set. + const int process_id = 0; + ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; + + GlobalExecutor::executeSelectedMemberOnDereferenced( + &LocalAssemblerInterface::initialize, _local_assemblers, + pv.getActiveElementIDs(), *_local_to_global_index_map); } template <int DisplacementDim>