diff --git a/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h b/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h index cbe46a99d5899fefc75d54fea4ba2727563ea64f..599adeb2ea1677a33c0469ff18ce8d3e0d5d3507 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h +++ b/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h @@ -707,7 +707,8 @@ void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement, postNonLinearSolverConcrete(std::vector<double> const& local_x, std::vector<double> const& /*local_xdot*/, double const t, double const dt, - bool const use_monolithic_scheme) + bool const use_monolithic_scheme, + int const /*process_id*/) { const int displacement_offset = use_monolithic_scheme ? displacement_index : 0; diff --git a/ProcessLib/HydroMechanics/HydroMechanicsFEM.h b/ProcessLib/HydroMechanics/HydroMechanicsFEM.h index 97b6be8a462348d688d82fe2def794c3eacd1d71..8c96155dcc3d09133592670d78ed80c943ae4599 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsFEM.h +++ b/ProcessLib/HydroMechanics/HydroMechanicsFEM.h @@ -198,7 +198,8 @@ public: void postNonLinearSolverConcrete(std::vector<double> const& local_x, std::vector<double> const& local_xdot, double const t, double const dt, - bool const use_monolithic_scheme) override; + bool const use_monolithic_scheme, + int const process_id) override; Eigen::Map<const Eigen::RowVectorXd> getShapeMatrix( const unsigned integration_point) const override diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp index c839a59e38020ca31e05d6518b3beebe75a17d12..30cd5821f6bafbc9a3cdc42d2d1c5e8fcbb3f545 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp +++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp @@ -516,7 +516,7 @@ void HydroMechanicsProcess<DisplacementDim>::postNonLinearSolverConcreteProcess( GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerIF::postNonLinearSolver, _local_assemblers, pv.getActiveElementIDs(), getDOFTable(process_id), x, xdot, t, dt, - _use_monolithic_scheme); + _use_monolithic_scheme, process_id); } template <int DisplacementDim> diff --git a/ProcessLib/LocalAssemblerInterface.cpp b/ProcessLib/LocalAssemblerInterface.cpp index 8823795742e39fcb6d0009538afa41186557211a..902c26fac05e3e0765e0c7731f18048c721a2b35 100644 --- a/ProcessLib/LocalAssemblerInterface.cpp +++ b/ProcessLib/LocalAssemblerInterface.cpp @@ -83,12 +83,12 @@ void LocalAssemblerInterface::computeSecondaryVariable( void LocalAssemblerInterface::setInitialConditions( std::size_t const mesh_item_id, NumLib::LocalToGlobalIndexMap const& dof_table, GlobalVector const& x, - double const t) + double const t, bool const use_monolithic_scheme, int const process_id) { auto const indices = NumLib::getIndices(mesh_item_id, dof_table); auto const local_x = x.get(indices); - setInitialConditionsConcrete(local_x, t); + setInitialConditionsConcrete(local_x, t, use_monolithic_scheme, process_id); } void LocalAssemblerInterface::initialize( @@ -124,14 +124,14 @@ void LocalAssemblerInterface::postNonLinearSolver( std::size_t const mesh_item_id, NumLib::LocalToGlobalIndexMap const& dof_table, GlobalVector const& x, GlobalVector const& xdot, double const t, double const dt, - bool const use_monolithic_scheme) + bool const use_monolithic_scheme, int const process_id) { auto const indices = NumLib::getIndices(mesh_item_id, dof_table); auto const local_x = x.get(indices); auto const local_xdot = xdot.get(indices); postNonLinearSolverConcrete(local_x, local_xdot, t, dt, - use_monolithic_scheme); + use_monolithic_scheme, process_id); } } // namespace ProcessLib diff --git a/ProcessLib/LocalAssemblerInterface.h b/ProcessLib/LocalAssemblerInterface.h index b8506c385523c4740b60faaceaa3ec022fd33ebe..8148654e1c6c0a3538c09080b3dd61fbb560ff89 100644 --- a/ProcessLib/LocalAssemblerInterface.h +++ b/ProcessLib/LocalAssemblerInterface.h @@ -35,10 +35,11 @@ class LocalAssemblerInterface public: virtual ~LocalAssemblerInterface() = default; - virtual void setInitialConditions( - std::size_t const mesh_item_id, - NumLib::LocalToGlobalIndexMap const& dof_table, GlobalVector const& x, - double const t); + void setInitialConditions(std::size_t const mesh_item_id, + NumLib::LocalToGlobalIndexMap const& dof_table, + GlobalVector const& x, double const t, + bool const use_monolithic_scheme, + int const process_id); virtual void initialize(std::size_t const mesh_item_id, NumLib::LocalToGlobalIndexMap const& dof_table); @@ -97,7 +98,8 @@ public: NumLib::LocalToGlobalIndexMap const& dof_table, GlobalVector const& x, GlobalVector const& xdot, double const t, double const dt, - bool const use_monolithic_scheme); + bool const use_monolithic_scheme, + int const process_id); virtual std::vector<double> interpolateNodalValuesToIntegrationPoints( std::vector<double> const& /*local_x*/) @@ -127,7 +129,8 @@ public: private: virtual void setInitialConditionsConcrete( - std::vector<double> const& /*local_x*/, double const /*t*/) + std::vector<double> const& /*local_x*/, double const /*t*/, + bool const /*use_monolithic_scheme*/, int const /*process_id*/) { } @@ -146,7 +149,8 @@ private: virtual void postNonLinearSolverConcrete( std::vector<double> const& /*local_x*/, std::vector<double> const& /*local_xdot*/, double const /*t*/, - double const /*dt*/, bool const /*use_monolithic_scheme*/) + double const /*dt*/, bool const /*use_monolithic_scheme*/, + int const /*process_id*/) { } diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp index 37d98ac031452ab1a4af9ecca156ee470e25321f..f1fa776dfe3811667ee859faae78efe937796a81 100644 --- a/ProcessLib/Process.cpp +++ b/ProcessLib/Process.cpp @@ -163,7 +163,7 @@ void Process::setInitialConditions(const int process_id, double const t, } } } - setInitialConditionsConcreteProcess(x, t); + setInitialConditionsConcreteProcess(x, t, process_id); } MathLib::MatrixSpecifications Process::getMatrixSpecifications( diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h index b0aa626715399f3d74a577d240ab39b21171321b..6e8e299bbf89baa51721206545418cfdae37f0d3 100644 --- a/ProcessLib/Process.h +++ b/ProcessLib/Process.h @@ -207,7 +207,8 @@ private: virtual void initializeBoundaryConditions(); virtual void setInitialConditionsConcreteProcess(GlobalVector const& /*x*/, - double const /*t*/) + double const /*t*/, + int const /*process_id*/) { } diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h index 2fbd9078e814ce7776bb80d51356d0f8c32bf40b..3bbc0390e82abc24adddb6b36cc39436d345ca3e 100644 --- a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h +++ b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h @@ -181,11 +181,13 @@ std::size_t RichardsMechanicsLocalAssembler< template <typename ShapeFunctionDisplacement, typename ShapeFunctionPressure, typename IntegrationMethod, int DisplacementDim> -void RichardsMechanicsLocalAssembler< - ShapeFunctionDisplacement, ShapeFunctionPressure, IntegrationMethod, - DisplacementDim>::setInitialConditionsConcrete(std::vector<double> const& - local_x, - double const t) +void RichardsMechanicsLocalAssembler<ShapeFunctionDisplacement, + ShapeFunctionPressure, IntegrationMethod, + DisplacementDim>:: + setInitialConditionsConcrete(std::vector<double> const& local_x, + double const t, + bool const /*use_monolithic_scheme*/, + int const /*process_id*/) { assert(local_x.size() == pressure_size + displacement_size); @@ -1286,7 +1288,8 @@ void RichardsMechanicsLocalAssembler<ShapeFunctionDisplacement, postNonLinearSolverConcrete(std::vector<double> const& local_x, std::vector<double> const& /*local_xdot*/, double const t, double const dt, - bool const use_monolithic_scheme) + bool const use_monolithic_scheme, + int const /*process_id*/) { const int displacement_offset = use_monolithic_scheme ? displacement_index : 0; diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h index 51372b341458471e1be326ca1111f2b537abefcc..9aba32ed18c0c8d52e263b5172c8555f2afbed3a 100644 --- a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h +++ b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h @@ -88,7 +88,9 @@ public: int const integration_order) override; void setInitialConditionsConcrete(std::vector<double> const& local_x, - double const t) override; + double const t, + bool const use_monolithic_scheme, + int const process_id) override; void assemble(double const t, double const dt, std::vector<double> const& local_x, @@ -165,7 +167,8 @@ public: void postNonLinearSolverConcrete(std::vector<double> const& local_x, std::vector<double> const& local_xdot, double const t, double const dt, - bool const use_monolithic_scheme) override; + bool const use_monolithic_scheme, + int const process_id) override; Eigen::Map<const Eigen::RowVectorXd> getShapeMatrix( const unsigned integration_point) const override diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp index 6a0003476dda25ef48d1dff1f1347264e8452e28..cdf6041c021af55081d3e0574a6f0493518e86d0 100644 --- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp +++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp @@ -434,13 +434,17 @@ void RichardsMechanicsProcess<DisplacementDim>::initializeBoundaryConditions() template <int DisplacementDim> void RichardsMechanicsProcess< DisplacementDim>::setInitialConditionsConcreteProcess(GlobalVector const& x, - double const t) + double const t, + int const process_id) { DBUG("SetInitialConditions RichardsMechanicsProcess."); - GlobalExecutor::executeMemberOnDereferenced( + ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; + + GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerIF::setInitialConditions, _local_assemblers, - *_local_to_global_index_map, x, t); + pv.getActiveElementIDs(), getDOFTable(process_id), x, t, + _use_monolithic_scheme, process_id); } template <int DisplacementDim> @@ -570,7 +574,7 @@ void RichardsMechanicsProcess<DisplacementDim>:: GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerIF::postNonLinearSolver, _local_assemblers, pv.getActiveElementIDs(), getDOFTable(process_id), x, xdot, t, dt, - _use_monolithic_scheme); + _use_monolithic_scheme, process_id); } template <int DisplacementDim> diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h index f69e2b4b10ec619401db732b5cd964c519b9d929..cd00a20502bb1ec036700604bcc87835506005fa 100644 --- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h +++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.h @@ -73,8 +73,9 @@ private: void initializeBoundaryConditions() override; - void setInitialConditionsConcreteProcess( - GlobalVector const& x, double const t) override; + void setInitialConditionsConcreteProcess(GlobalVector const& x, + double const t, + int const process_id) override; void assembleConcreteProcess(const double t, double const dt, std::vector<GlobalVector*> const& x, diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h index 2afd830502f9f59c95970b224b4ebba6c65df03c..63d37731d73005668bd96e60f94f9a20e2b3af60 100644 --- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h +++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h @@ -564,7 +564,8 @@ void ThermoHydroMechanicsLocalAssembler<ShapeFunctionDisplacement, postNonLinearSolverConcrete(std::vector<double> const& local_x, std::vector<double> const& /*local_xdot*/, double const t, double const dt, - bool const use_monolithic_scheme) + bool const use_monolithic_scheme, + int const /*process_id*/) { const int displacement_offset = use_monolithic_scheme ? displacement_index : 0; diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h index 06aeb75f36ff416117e90b89ba31805e9398bf2d..ffc7be2d0137d21724736fdebfd82b66b32de90b 100644 --- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h +++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h @@ -129,7 +129,8 @@ public: void postNonLinearSolverConcrete(std::vector<double> const& local_x, std::vector<double> const& local_xdot, double const t, double const dt, - bool const use_monolithic_scheme) override; + bool const use_monolithic_scheme, + int const process_id) override; Eigen::Map<const Eigen::RowVectorXd> getShapeMatrix( const unsigned integration_point) const override diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.cpp b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.cpp index 78264e80a535cc7b9d1f970a05ab199e22e091e8..36b187f69db6481b98c2dc6181108d70569b36e8 100644 --- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.cpp +++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsProcess.cpp @@ -371,7 +371,8 @@ void ThermoHydroMechanicsProcess<DisplacementDim>:: // Calculate strain, stress or other internal variables of mechanics. GlobalExecutor::executeMemberOnDereferenced( &LocalAssemblerInterface::postNonLinearSolver, _local_assemblers, - getDOFTable(process_id), x, xdot, t, dt, _use_monolithic_scheme); + getDOFTable(process_id), x, xdot, t, dt, _use_monolithic_scheme, + process_id); } template <int DisplacementDim> diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp index 4a047507ff95b3dcd89d88c5554ce0b1d37a152e..be8b63c9ecb4869a7a066b5ab88bd59a594d9d53 100644 --- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp +++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp @@ -315,7 +315,7 @@ void ThermoMechanicalPhaseFieldProcess<DisplacementDim>:: GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::postNonLinearSolver, _local_assemblers, pv.getActiveElementIDs(), getDOFTable(process_id), x, xdot, t, dt, - use_monolithic_scheme); + use_monolithic_scheme, process_id); } template class ThermoMechanicalPhaseFieldProcess<2>;