diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.cpp b/ProcessLib/PhaseField/PhaseFieldProcess.cpp index 35a506e59a950e85338d16153b1293e6a4ebcbcb..288d9e30f17c5157e8a5f800952b05de08396e44 100644 --- a/ProcessLib/PhaseField/PhaseFieldProcess.cpp +++ b/ProcessLib/PhaseField/PhaseFieldProcess.cpp @@ -233,10 +233,15 @@ void PhaseFieldProcess<DisplacementDim>::assembleConcreteProcess( dof_tables.emplace_back(*_local_to_global_index_map); } + const int process_id = + _use_monolithic_scheme ? 0 : _coupled_solutions->process_id; + ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; + // Call global assembler for each local assembly item. - GlobalExecutor::executeMemberDereferenced( + GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - dof_tables, t, x, M, K, b, _coupled_solutions); + pv.getElementDeactivationFlags(), dof_tables, t, x, M, K, b, + _coupled_solutions); } template <int DisplacementDim> @@ -274,10 +279,14 @@ void PhaseFieldProcess<DisplacementDim>::assembleWithJacobianConcreteProcess( } // Call global assembler for each local assembly item. - GlobalExecutor::executeMemberDereferenced( + const int process_id = + _use_monolithic_scheme ? 0 : _coupled_solutions->process_id; + ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; + + GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, dof_tables, t, x, xdot, dxdot_dx, dx_dx, M, K, b, - Jac, _coupled_solutions); + _local_assemblers, pv.getElementDeactivationFlags(), dof_tables, t, + x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); if (!_use_monolithic_scheme && (_coupled_solutions->process_id == 0)) { @@ -298,9 +307,11 @@ void PhaseFieldProcess<DisplacementDim>::preTimestepConcreteProcess( _process_data.t = t; _process_data.injected_volume = _process_data.t; - GlobalExecutor::executeMemberOnDereferenced( + ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; + + GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::preTimestep, _local_assemblers, - getDOFTable(process_id), x, t, dt); + pv.getElementDeactivationFlags(), getDOFTable(process_id), x, t, dt); } template <int DisplacementDim> @@ -322,11 +333,15 @@ void PhaseFieldProcess<DisplacementDim>::postTimestepConcreteProcess( dof_tables.emplace_back(*_local_to_global_index_map); dof_tables.emplace_back(*_local_to_global_index_map_single_component); - GlobalExecutor::executeMemberOnDereferenced( + ProcessLib::ProcessVariable const& pv + = getProcessVariables(process_id)[0]; + + GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::computeEnergy, _local_assemblers, - dof_tables, x, _process_data.t, _process_data.elastic_energy, - _process_data.surface_energy, _process_data.pressure_work, - _use_monolithic_scheme, _coupled_solutions); + pv.getElementDeactivationFlags(), dof_tables, x, _process_data.t, + _process_data.elastic_energy, _process_data.surface_energy, + _process_data.pressure_work, _use_monolithic_scheme, + _coupled_solutions); INFO("Elastic energy: %g Surface energy: %g Pressure work: %g ", _process_data.elastic_energy, _process_data.surface_energy, diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess-impl.h b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess-impl.h index 6cabc6e473b7ee723ef1fdf9c0cc45a9f933eabe..51aab5032c27ecc282f3f8ddace051e310ba5dbc 100644 --- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess-impl.h +++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess-impl.h @@ -207,10 +207,15 @@ void ThermoMechanicalPhaseFieldProcess< std::vector<std::reference_wrapper<NumLib::LocalToGlobalIndexMap>> dof_table = {std::ref(*_local_to_global_index_map)}; + const int process_id = + _use_monolithic_scheme ? 0 : _coupled_solutions->process_id; + ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; + // Call global assembler for each local assembly item. - GlobalExecutor::executeMemberDereferenced( + GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - dof_table, t, x, M, K, b, _coupled_solutions); + pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b, + _coupled_solutions); } template <int DisplacementDim> @@ -256,10 +261,14 @@ void ThermoMechanicalPhaseFieldProcess<DisplacementDim>:: getDOFTableByProcessID(_mechanics_related_process_id)); dof_tables.emplace_back(getDOFTableByProcessID(_phase_field_process_id)); - GlobalExecutor::executeMemberDereferenced( + const int process_id = + _use_monolithic_scheme ? 0 : _coupled_solutions->process_id; + ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; + + GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, dof_tables, t, x, xdot, dxdot_dx, dx_dx, M, K, b, - Jac, _coupled_solutions); + _local_assemblers, pv.getElementDeactivationFlags(), dof_tables, t, x, + xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); } template <int DisplacementDim> @@ -278,9 +287,13 @@ void ThermoMechanicalPhaseFieldProcess< { return; } - GlobalExecutor::executeMemberOnDereferenced( + + ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; + + GlobalExecutor::executeSelectedMemberOnDereferenced( &ThermoMechanicalPhaseFieldLocalAssemblerInterface::preTimestep, - _local_assemblers, getDOFTable(process_id), x, t, dt); + _local_assemblers, pv.getElementDeactivationFlags(), + getDOFTable(process_id), x, t, dt); } template <int DisplacementDim> @@ -292,9 +305,12 @@ void ThermoMechanicalPhaseFieldProcess< { DBUG("PostTimestep ThermoMechanicalPhaseFieldProcess."); - GlobalExecutor::executeMemberOnDereferenced( + ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; + + GlobalExecutor::executeSelectedMemberOnDereferenced( &ThermoMechanicalPhaseFieldLocalAssemblerInterface::postTimestep, - _local_assemblers, getDOFTable(process_id), x); + _local_assemblers, pv.getElementDeactivationFlags(), + getDOFTable(process_id), x); } template <int DisplacementDim> @@ -311,9 +327,12 @@ void ThermoMechanicalPhaseFieldProcess< DBUG("PostNonLinearSolver ThermoMechanicalPhaseFieldProcess."); // Calculate strain, stress or other internal variables of mechanics. const bool use_monolithic_scheme = false; - GlobalExecutor::executeMemberOnDereferenced( + ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; + + GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::postNonLinearSolver, _local_assemblers, - getDOFTable(process_id), x, t, use_monolithic_scheme); + pv.getElementDeactivationFlags(), getDOFTable(process_id), x, t, + use_monolithic_scheme); } } // namespace ThermoMechanicalPhaseField diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp index e2df095105261e178597ff1aec31e3b69c2281b8..0f02125c20e80d7a44ee0465c5c3acbfdfea2a14 100644 --- a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp +++ b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp @@ -161,10 +161,15 @@ void ThermoMechanicsProcess<DisplacementDim>::assembleConcreteProcess( std::vector<std::reference_wrapper<NumLib::LocalToGlobalIndexMap>> dof_table = {std::ref(*_local_to_global_index_map)}; + const int process_id = + _use_monolithic_scheme ? 0 : _coupled_solutions->process_id; + ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; + // Call global assembler for each local assembly item. - GlobalExecutor::executeMemberDereferenced( + GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - dof_table, t, x, M, K, b, _coupled_solutions); + pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b, + _coupled_solutions); } template <int DisplacementDim> @@ -180,38 +185,48 @@ void ThermoMechanicsProcess<DisplacementDim>:: std::vector<std::reference_wrapper<NumLib::LocalToGlobalIndexMap>> dof_table = {std::ref(*_local_to_global_index_map)}; + const int process_id = + _use_monolithic_scheme ? 0 : _coupled_solutions->process_id; + ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; + // Call global assembler for each local assembly item. - GlobalExecutor::executeMemberDereferenced( + GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, dof_table, t, x, xdot, dxdot_dx, - dx_dx, M, K, b, Jac, _coupled_solutions); + _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x, + xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); } template <int DisplacementDim> void ThermoMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess( GlobalVector const& x, double const t, double const dt, - const int /*process_id*/) + const int process_id) { DBUG("PreTimestep ThermoMechanicsProcess."); _process_data.dt = dt; _process_data.t = t; - GlobalExecutor::executeMemberOnDereferenced( + ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; + + GlobalExecutor::executeSelectedMemberOnDereferenced( &ThermoMechanicsLocalAssemblerInterface::preTimestep, _local_assemblers, - *_local_to_global_index_map, x, t, dt); + pv.getElementDeactivationFlags(), *_local_to_global_index_map, x, t, + dt); } template <int DisplacementDim> void ThermoMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess( GlobalVector const& x, const double /*t*/, const double /*delta_t*/, - int const /*process_id*/) + int const process_id) { DBUG("PostTimestep ThermoMechanicsProcess."); - GlobalExecutor::executeMemberOnDereferenced( + ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; + + GlobalExecutor::executeSelectedMemberOnDereferenced( &ThermoMechanicsLocalAssemblerInterface::postTimestep, - _local_assemblers, *_local_to_global_index_map, x); + _local_assemblers, pv.getElementDeactivationFlags(), + *_local_to_global_index_map, x); } template class ThermoMechanicsProcess<2>;