diff --git a/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp b/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp index 3ea9969023dbb65663d3d292b09921897de58696..be661f99d9a8c7097ffdef4830ef909267c1fe6d 100644 --- a/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp +++ b/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp @@ -87,10 +87,16 @@ void LiquidFlowProcess::assembleConcreteProcess(const double t, std::vector<std::reference_wrapper<NumLib::LocalToGlobalIndexMap>> dof_table = {std::ref(*_local_to_global_index_map)}; + + + const int process_id = 0; + 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); } void LiquidFlowProcess::assembleWithJacobianConcreteProcess( @@ -102,22 +108,27 @@ void LiquidFlowProcess::assembleWithJacobianConcreteProcess( std::vector<std::reference_wrapper<NumLib::LocalToGlobalIndexMap>> dof_table = {std::ref(*_local_to_global_index_map)}; + const int process_id = 0; + 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); } void LiquidFlowProcess::computeSecondaryVariableConcrete(const double t, GlobalVector const& x, int const process_id) { + ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; + DBUG("Compute the velocity for LiquidFlowProcess."); - GlobalExecutor::executeMemberOnDereferenced( + GlobalExecutor::executeSelectedMemberOnDereferenced( &LiquidFlowLocalAssemblerInterface::computeSecondaryVariable, - _local_assemblers, getDOFTable(process_id), t, x, - _coupled_solutions); + _local_assemblers, pv.getElementDeactivationFlags(), + getDOFTable(process_id), t, x, _coupled_solutions); } } // end of namespace diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp index 4b50c6b0201c00079bb7fce763cc1170c8156ce2..4a09a8eb5c3fa1f622b304a713ebc9b271a49bf0 100644 --- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp +++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp @@ -74,10 +74,15 @@ void RichardsComponentTransportProcess::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); } void RichardsComponentTransportProcess::assembleWithJacobianConcreteProcess( @@ -88,12 +93,16 @@ void RichardsComponentTransportProcess::assembleWithJacobianConcreteProcess( DBUG("AssembleWithJacobian RichardsComponentTransportProcess."); std::vector<std::reference_wrapper<NumLib::LocalToGlobalIndexMap>> - dof_table = {std::ref(*_local_to_global_index_map)}; + 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); } } // namespace RichardsComponentTransport diff --git a/ProcessLib/RichardsFlow/RichardsFlowProcess.cpp b/ProcessLib/RichardsFlow/RichardsFlowProcess.cpp index 7caf3d7d74c5e940d0c9225dace749d64b13a244..4dee09f6ef3f28497ce17bd4aa86853a9fdfce7f 100644 --- a/ProcessLib/RichardsFlow/RichardsFlowProcess.cpp +++ b/ProcessLib/RichardsFlow/RichardsFlowProcess.cpp @@ -74,10 +74,14 @@ void RichardsFlowProcess::assembleConcreteProcess( std::vector<std::reference_wrapper<NumLib::LocalToGlobalIndexMap>> dof_table = {std::ref(*_local_to_global_index_map)}; + const int process_id = 0; + 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); } void RichardsFlowProcess::assembleWithJacobianConcreteProcess( @@ -89,11 +93,14 @@ void RichardsFlowProcess::assembleWithJacobianConcreteProcess( std::vector<std::reference_wrapper<NumLib::LocalToGlobalIndexMap>> dof_table = {std::ref(*_local_to_global_index_map)}; + const int process_id = 0; + 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); } } // namespace RichardsFlow diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp index f890b0b77ca13dfbbf8518290ee8258624a0f1a0..f7181a4684795df90736307c5a3293e35f5318b3 100644 --- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp +++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp @@ -238,10 +238,15 @@ void RichardsMechanicsProcess<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> @@ -282,10 +287,14 @@ void RichardsMechanicsProcess<DisplacementDim>:: dof_tables.emplace_back(*_local_to_global_index_map); } - 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); auto copyRhs = [&](int const variable_id, auto& output_vector) { if (_use_monolithic_scheme) @@ -322,9 +331,14 @@ void RichardsMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess( _process_data.t = t; if (hasMechanicalProcess(process_id)) - GlobalExecutor::executeMemberOnDereferenced( + { + ProcessLib::ProcessVariable const& pv = + getProcessVariables(process_id)[0]; + GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::preTimestep, _local_assemblers, - *_local_to_global_index_map, x, t, dt); + pv.getElementDeactivationFlags(), *_local_to_global_index_map, x, + t, dt); + } } template <int DisplacementDim> @@ -339,10 +353,13 @@ void RichardsMechanicsProcess< } DBUG("PostNonLinearSolver RichardsMechanicsProcess."); + ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; + // Calculate strain, stress or other internal variables of mechanics. - GlobalExecutor::executeMemberOnDereferenced( + GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::postNonLinearSolver, _local_assemblers, - getDOFTable(process_id), x, t, _use_monolithic_scheme); + pv.getElementDeactivationFlags(), getDOFTable(process_id), x, t, + _use_monolithic_scheme); } template <int DisplacementDim> @@ -352,9 +369,12 @@ void RichardsMechanicsProcess< int const process_id) { DBUG("Compute the secondary variables for RichardsMechanicsProcess."); - GlobalExecutor::executeMemberOnDereferenced( + ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; + + GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::computeSecondaryVariable, _local_assemblers, - getDOFTable(process_id), t, x, _coupled_solutions); + pv.getElementDeactivationFlags(), getDOFTable(process_id), t, x, + _coupled_solutions); } template <int DisplacementDim> diff --git a/ProcessLib/TES/TESProcess.cpp b/ProcessLib/TES/TESProcess.cpp index ded4db47a10f61c5ece90dd8de198e4d81bbd3cb..6b6c8d8e2f80489850afa0ec8e75825f716c8219 100644 --- a/ProcessLib/TES/TESProcess.cpp +++ b/ProcessLib/TES/TESProcess.cpp @@ -234,10 +234,15 @@ void TESProcess::assembleConcreteProcess(const double t, 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); } void TESProcess::assembleWithJacobianConcreteProcess( @@ -247,11 +252,15 @@ void TESProcess::assembleWithJacobianConcreteProcess( { 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); } void TESProcess::preTimestepConcreteProcess(GlobalVector const& x,