From f58de3b47cd28de90ca88d3dfe72c74806db9f4e Mon Sep 17 00:00:00 2001 From: Wenqing Wang <wenqing.wang@ufz.de> Date: Tue, 18 Dec 2018 14:33:17 +0100 Subject: [PATCH] [deactivation] In ProcessVariable, replaced std::vector<bool> _element_deactivation_flags with std::vector<std::size_t> _ids_of_active_elements. --- NumLib/Assembler/SerialExecutor.h | 72 ++++++++----------- .../ComponentTransportProcess.cpp | 6 +- .../GroundwaterFlowProcess.cpp | 4 +- .../GroundwaterFlow/GroundwaterFlowProcess.h | 2 +- ProcessLib/HT/HTProcess.cpp | 8 +-- .../HeatConduction/HeatConductionProcess.cpp | 6 +- .../HeatTransportBHEProcess.cpp | 4 +- .../HydroMechanics/HydroMechanicsProcess.cpp | 10 +-- .../HydroMechanics/HydroMechanicsProcess.cpp | 6 +- .../SmallDeformationProcess.cpp | 8 +-- ProcessLib/LiquidFlow/LiquidFlowProcess.cpp | 6 +- ProcessLib/PhaseField/PhaseFieldProcess.cpp | 8 +-- ProcessLib/ProcessVariable.cpp | 15 ++-- ProcessLib/ProcessVariable.h | 8 ++- .../RichardsComponentTransportProcess.cpp | 4 +- .../RichardsFlow/RichardsFlowProcess.cpp | 4 +- .../RichardsMechanicsProcess.cpp | 10 +-- .../SmallDeformationProcess.cpp | 8 +-- ProcessLib/SurfaceFlux/SurfaceFlux.cpp | 4 +- ProcessLib/SurfaceFlux/SurfaceFlux.h | 8 ++- ProcessLib/SurfaceFlux/SurfaceFluxData.h | 4 +- ProcessLib/TES/TESProcess.cpp | 4 +- .../ThermalTwoPhaseFlowWithPPProcess.cpp | 6 +- .../ThermoMechanicalPhaseFieldProcess-impl.h | 10 +-- .../ThermoMechanicsProcess.cpp | 8 +-- .../TwoPhaseFlowWithPPProcess.cpp | 4 +- .../TwoPhaseFlowWithPrhoProcess.cpp | 6 +- 27 files changed, 119 insertions(+), 124 deletions(-) diff --git a/NumLib/Assembler/SerialExecutor.h b/NumLib/Assembler/SerialExecutor.h index f2862d501b4..eb2f2096ac6 100644 --- a/NumLib/Assembler/SerialExecutor.h +++ b/NumLib/Assembler/SerialExecutor.h @@ -36,8 +36,8 @@ struct SerialExecutor /// \tparam C input container type. /// \tparam Args types additional arguments passed to \c f. /// - /// \param f a function that accepts a a reference to container's - /// elements, + /// \param f a function that accepts a reference to container's + /// elements, /// an index as arguments (and possibly further arguments). /// \param c a container supporting access over operator[]. /// The elements of \c c must have pointer semantics, i.e., @@ -64,7 +64,7 @@ struct SerialExecutor /// \param container collection of objects having pointer semantics. /// \param object the object whose method will be called. /// \param method the method being called, i.e., a member function - /// pointer + /// pointer /// to a member function of the class \c Object. /// \param args further arguments passed on to the method /// @@ -86,38 +86,33 @@ struct SerialExecutor /// /// This method is very similar to executeDereferenced(). /// - /// \param object the object whose method will be called. - /// \param method the method being called, i.e., a member - /// function pointer to a member function of the - /// class \c Object. - /// \param container collection of objects having pointer - /// semantics. - /// \param container_selector A boolean vector, each element of it - /// indicates whether its associated element - /// of \c container is skipped or not. - /// \param args further arguments passed on to the method + /// \param object the object whose method will be called. + /// \param method the method being called, i.e., a member + /// function pointer to a member function of the + /// class \c Object. + /// \param container collection of objects having pointer + /// semantics. + /// \param active_container_ids The IDs of active elements of \c container. + /// \param args further arguments passed on to the method. /// /// \see executeDereferenced() template <typename Container, typename Object, typename Method, typename... Args> static void executeSelectedMemberDereferenced( Object& object, Method method, Container const& container, - std::vector<bool> const& container_selector, Args&&... args) + std::vector<std::size_t> const& active_container_ids, Args&&... args) { - if (container_selector.empty()) + if (active_container_ids.empty()) { executeMemberDereferenced(object, method, container, std::forward<Args>(args)...); return; } - assert(container.size() == container_selector.size()); - for (std::size_t i = 0; i < container.size(); i++) + for (std::size_t i = 0; i < active_container_ids.size(); i++) { - if (container_selector[i]) - continue; - - (object.*method)(i, *container[i], std::forward<Args>(args)...); + (object.*method)(i, *container[active_container_ids[i]], + std::forward<Args>(args)...); } } @@ -127,7 +122,7 @@ struct SerialExecutor /// /// \param container collection of objects having pointer semantics. /// \param method the method being called, i.e., a member function - /// pointer + /// pointer. /// to a member function of the \c container's elements. /// \param args further arguments passed on to the method /// @@ -148,36 +143,31 @@ struct SerialExecutor /// /// This method is very similar to executeSelectedMemberDereferenced(). /// - /// \param method the method being called, i.e., a member - /// function pointer to a member function of the - /// \c container's elements. - /// \param container collection of objects having pointer - /// semantics. - /// \param container_selector A boolean vector, each element of it - /// indicates whether its associated element is - /// skppied or not. - /// \param args further arguments passed on to the method. + /// \param method the method being called, i.e., a member + /// function pointer to a member function of the + /// \c container's elements. + /// \param container collection of objects having pointer + /// semantics. + /// \param active_container_ids The IDs of active elements of \c container. + /// \param args further arguments passed on to the method. /// /// \see executeDereferenced() template <typename Container, typename Method, typename... Args> static void executeSelectedMemberOnDereferenced( Method method, Container const& container, - std::vector<bool> const& container_selector, Args&&... args) + std::vector<std::size_t> const& active_container_ids, Args&&... args) { - if (container_selector.empty()) + if (active_container_ids.empty()) { executeMemberOnDereferenced(method, container, std::forward<Args>(args)...); return; } - assert(container.size() == container_selector.size()); - for (std::size_t i = 0; i < container.size(); i++) + for (std::size_t i = 0; i < active_container_ids.size(); i++) { - if (container_selector[i]) - continue; - - ((*container[i]).*method)(i, std::forward<Args>(args)...); + ((*container[active_container_ids[i]]).*method)( + i, std::forward<Args>(args)...); } } @@ -192,11 +182,11 @@ struct SerialExecutor /// an index, and a second container element as arguments, which /// is modified. /// \param c a container supporting const access over operator[] and - /// size(). + /// size(). /// The elements of \c c must have pointer semantics, i.e., /// support dereferencing via unary operator*(). /// \param data a container supporting non-const access over operator[] and - /// size(). + /// size(). /// \param args additional arguments passed to \c f template <typename F, typename C, typename Data, typename... Args_> static void diff --git a/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp b/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp index cef7a5f77f9..9b2fe551770 100644 --- a/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp +++ b/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp @@ -76,7 +76,7 @@ void ComponentTransportProcess::assembleConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b, + pv.getActiveElementIDs(), dof_table, t, x, M, K, b, _coupled_solutions); } @@ -94,7 +94,7 @@ void ComponentTransportProcess::assembleWithJacobianConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x, + _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); } @@ -138,7 +138,7 @@ void ComponentTransportProcess::postTimestepConcreteProcess( ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; _surfaceflux->integrate(x, t, *this, process_id, _integration_order, - _mesh, pv.getElementDeactivationFlags()); + _mesh, pv.getActiveElementIDs()); _surfaceflux->save(t); } diff --git a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp index 1f8244c213f..8af6f1f5f9b 100644 --- a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp +++ b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp @@ -70,7 +70,7 @@ void GroundwaterFlowProcess::assembleConcreteProcess(const double t, // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b, + pv.getActiveElementIDs(), dof_table, t, x, M, K, b, _coupled_solutions); } @@ -88,7 +88,7 @@ void GroundwaterFlowProcess::assembleWithJacobianConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x, xdot, + _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); } diff --git a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h index 0f9f95f0c95..ff879376800 100644 --- a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h +++ b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h @@ -77,7 +77,7 @@ public: ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; _surfaceflux->integrate(x, t, *this, process_id, _integration_order, - _mesh, pv.getElementDeactivationFlags()); + _mesh, pv.getActiveElementIDs()); _surfaceflux->save(t); } diff --git a/ProcessLib/HT/HTProcess.cpp b/ProcessLib/HT/HTProcess.cpp index f4eddfb7d01..2e22402088e 100644 --- a/ProcessLib/HT/HTProcess.cpp +++ b/ProcessLib/HT/HTProcess.cpp @@ -122,7 +122,7 @@ void HTProcess::assembleConcreteProcess(const double t, // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - pv.getElementDeactivationFlags(), dof_tables, t, x, M, K, b, + pv.getActiveElementIDs(), dof_tables, t, x, M, K, b, _coupled_solutions); } @@ -152,7 +152,7 @@ void HTProcess::assembleWithJacobianConcreteProcess( ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_tables, t, x, + _local_assemblers, pv.getActiveElementIDs(), dof_tables, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); } @@ -192,7 +192,7 @@ void HTProcess::setCoupledTermForTheStaggeredSchemeToLocalAssemblers() ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &HTLocalAssemblerInterface::setStaggeredCoupledSolutions, - _local_assemblers, pv.getElementDeactivationFlags(), + _local_assemblers, pv.getActiveElementIDs(), _coupled_solutions); } @@ -285,7 +285,7 @@ void HTProcess::postTimestepConcreteProcess(GlobalVector const& x, ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; _surfaceflux->integrate(x, t, *this, process_id, _integration_order, _mesh, - pv.getElementDeactivationFlags()); + pv.getActiveElementIDs()); _surfaceflux->save(t); } diff --git a/ProcessLib/HeatConduction/HeatConductionProcess.cpp b/ProcessLib/HeatConduction/HeatConductionProcess.cpp index 61b84ec3783..a60192b80ab 100644 --- a/ProcessLib/HeatConduction/HeatConductionProcess.cpp +++ b/ProcessLib/HeatConduction/HeatConductionProcess.cpp @@ -86,7 +86,7 @@ void HeatConductionProcess::assembleConcreteProcess(const double t, // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b, + pv.getActiveElementIDs(), dof_table, t, x, M, K, b, _coupled_solutions); } @@ -105,7 +105,7 @@ void HeatConductionProcess::assembleWithJacobianConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x, + _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); } @@ -118,7 +118,7 @@ void HeatConductionProcess::computeSecondaryVariableConcrete( GlobalExecutor::executeSelectedMemberOnDereferenced( &HeatConductionLocalAssemblerInterface::computeSecondaryVariable, - _local_assemblers, pv.getElementDeactivationFlags(), + _local_assemblers, pv.getActiveElementIDs(), getDOFTable(process_id), t, x, _coupled_solutions); } diff --git a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp index 416ce9cca7a..352cba5e762 100644 --- a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp +++ b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp @@ -172,7 +172,7 @@ void HeatTransportBHEProcess::assembleConcreteProcess(const double t, // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b, + pv.getActiveElementIDs(), dof_table, t, x, M, K, b, _coupled_solutions); } @@ -193,7 +193,7 @@ void HeatTransportBHEProcess::computeSecondaryVariableConcrete( ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &HeatTransportBHELocalAssemblerInterface::computeSecondaryVariable, - _local_assemblers, pv.getElementDeactivationFlags(), + _local_assemblers, pv.getActiveElementIDs(), getDOFTable(process_id), t, x, _coupled_solutions); } diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp index ee2eddf67bf..5e4a2115002 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp +++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp @@ -319,7 +319,7 @@ void HydroMechanicsProcess<DisplacementDim>:: GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_tables, t, x, + _local_assemblers, pv.getActiveElementIDs(), dof_tables, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); auto copyRhs = [&](int const variable_id, auto& output_vector) { @@ -362,7 +362,7 @@ void HydroMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess( getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::preTimestep, _local_assemblers, - pv.getElementDeactivationFlags(), *_local_to_global_index_map, x, t, + pv.getActiveElementIDs(), *_local_to_global_index_map, x, t, dt); } } @@ -376,7 +376,7 @@ void HydroMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess( ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::postTimestep, _local_assemblers, - pv.getElementDeactivationFlags(), getDOFTable(process_id), x); + pv.getActiveElementIDs(), getDOFTable(process_id), x); } template <int DisplacementDim> @@ -393,7 +393,7 @@ void HydroMechanicsProcess<DisplacementDim>::postNonLinearSolverConcreteProcess( ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::postNonLinearSolver, _local_assemblers, - pv.getElementDeactivationFlags(), getDOFTable(process_id), x, t, + pv.getActiveElementIDs(), getDOFTable(process_id), x, t, _use_monolithic_scheme); } @@ -405,7 +405,7 @@ void HydroMechanicsProcess<DisplacementDim>::computeSecondaryVariableConcrete( ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::computeSecondaryVariable, _local_assemblers, - pv.getElementDeactivationFlags(), getDOFTable(process_id), t, x, + pv.getActiveElementIDs(), getDOFTable(process_id), t, x, _coupled_solutions); } diff --git a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp index 46b19ed10b7..1358a8eb538 100644 --- a/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp +++ b/ProcessLib/LIE/HydroMechanics/HydroMechanicsProcess.cpp @@ -455,7 +455,7 @@ void HydroMechanicsProcess<GlobalDim>::computeSecondaryVariableConcrete( GlobalExecutor::executeSelectedMemberOnDereferenced( &HydroMechanicsLocalAssemblerInterface::computeSecondaryVariable, - _local_assemblers, pv.getElementDeactivationFlags(), + _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x, _coupled_solutions); } @@ -583,7 +583,7 @@ void HydroMechanicsProcess<GlobalDim>::assembleWithJacobianConcreteProcess( dof_table = {std::ref(*_local_to_global_index_map)}; GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x, + _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); auto copyRhs = [&](int const variable_id, auto& output_vector) { @@ -610,7 +610,7 @@ void HydroMechanicsProcess<GlobalDim>::preTimestepConcreteProcess( GlobalExecutor::executeSelectedMemberOnDereferenced( &HydroMechanicsLocalAssemblerInterface::preTimestep, _local_assemblers, - pv.getElementDeactivationFlags(), *_local_to_global_index_map, + pv.getActiveElementIDs(), *_local_to_global_index_map, x, t, dt); } diff --git a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp index 35a183305ee..7b87771ad2f 100644 --- a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp +++ b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp @@ -528,7 +528,7 @@ void SmallDeformationProcess<DisplacementDim>::computeSecondaryVariableConcrete( ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &SmallDeformationLocalAssemblerInterface::computeSecondaryVariable, - _local_assemblers, pv.getElementDeactivationFlags(), + _local_assemblers, pv.getActiveElementIDs(), getDOFTable(process_id), t, x, _coupled_solutions); } @@ -553,7 +553,7 @@ void SmallDeformationProcess<DisplacementDim>::assembleConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b, + pv.getActiveElementIDs(), dof_table, t, x, M, K, b, _coupled_solutions); } template <int DisplacementDim> @@ -575,7 +575,7 @@ void SmallDeformationProcess<DisplacementDim>:: dof_table = {std::ref(*_local_to_global_index_map)}; GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, + _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); } template <int DisplacementDim> @@ -591,7 +591,7 @@ void SmallDeformationProcess<DisplacementDim>::preTimestepConcreteProcess( ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &SmallDeformationLocalAssemblerInterface::preTimestep, - _local_assemblers, pv.getElementDeactivationFlags(), + _local_assemblers, pv.getActiveElementIDs(), *_local_to_global_index_map, x, t, dt); } // ------------------------------------------------------------------------------------ diff --git a/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp b/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp index be661f99d9a..cc95c385f45 100644 --- a/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp +++ b/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp @@ -95,7 +95,7 @@ void LiquidFlowProcess::assembleConcreteProcess(const double t, // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b, + pv.getActiveElementIDs(), dof_table, t, x, M, K, b, _coupled_solutions); } @@ -114,7 +114,7 @@ void LiquidFlowProcess::assembleWithJacobianConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, + _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); } @@ -127,7 +127,7 @@ void LiquidFlowProcess::computeSecondaryVariableConcrete(const double t, DBUG("Compute the velocity for LiquidFlowProcess."); GlobalExecutor::executeSelectedMemberOnDereferenced( &LiquidFlowLocalAssemblerInterface::computeSecondaryVariable, - _local_assemblers, pv.getElementDeactivationFlags(), + _local_assemblers, pv.getActiveElementIDs(), getDOFTable(process_id), t, x, _coupled_solutions); } diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.cpp b/ProcessLib/PhaseField/PhaseFieldProcess.cpp index 288d9e30f17..9e93feee663 100644 --- a/ProcessLib/PhaseField/PhaseFieldProcess.cpp +++ b/ProcessLib/PhaseField/PhaseFieldProcess.cpp @@ -240,7 +240,7 @@ void PhaseFieldProcess<DisplacementDim>::assembleConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - pv.getElementDeactivationFlags(), dof_tables, t, x, M, K, b, + pv.getActiveElementIDs(), dof_tables, t, x, M, K, b, _coupled_solutions); } @@ -285,7 +285,7 @@ void PhaseFieldProcess<DisplacementDim>::assembleWithJacobianConcreteProcess( GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_tables, t, + _local_assemblers, pv.getActiveElementIDs(), dof_tables, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); if (!_use_monolithic_scheme && (_coupled_solutions->process_id == 0)) @@ -311,7 +311,7 @@ void PhaseFieldProcess<DisplacementDim>::preTimestepConcreteProcess( GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::preTimestep, _local_assemblers, - pv.getElementDeactivationFlags(), getDOFTable(process_id), x, t, dt); + pv.getActiveElementIDs(), getDOFTable(process_id), x, t, dt); } template <int DisplacementDim> @@ -338,7 +338,7 @@ void PhaseFieldProcess<DisplacementDim>::postTimestepConcreteProcess( GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::computeEnergy, _local_assemblers, - pv.getElementDeactivationFlags(), dof_tables, x, _process_data.t, + pv.getActiveElementIDs(), dof_tables, x, _process_data.t, _process_data.elastic_energy, _process_data.surface_energy, _process_data.pressure_work, _use_monolithic_scheme, _coupled_solutions); diff --git a/ProcessLib/ProcessVariable.cpp b/ProcessLib/ProcessVariable.cpp index 6771982aeeb..caf14c5cb77 100644 --- a/ProcessLib/ProcessVariable.cpp +++ b/ProcessLib/ProcessVariable.cpp @@ -274,7 +274,7 @@ void ProcessVariable::checkElementDeactivation(double const time) { if (_deactivated_subdomains.empty()) { - _element_deactivation_flags.clear(); + _ids_of_active_elements.clear(); return; } @@ -287,26 +287,27 @@ void ProcessVariable::checkElementDeactivation(double const time) if (found_a_set == _deactivated_subdomains.end()) { - _element_deactivation_flags.clear(); + _ids_of_active_elements.clear(); return; } // Already initialized. - if (!_element_deactivation_flags.empty()) + if (!_ids_of_active_elements.empty()) return; auto const& deactivated_materialIDs = (*found_a_set)->materialIDs; auto const* const material_ids = MeshLib::materialIDs(_mesh); - _element_deactivation_flags.resize(_mesh.getNumberOfElements()); + _ids_of_active_elements.clear(); auto const number_of_elements = _mesh.getNumberOfElements(); for (std::size_t i = 0; i < number_of_elements; i++) { - _element_deactivation_flags[i] = - std::binary_search(deactivated_materialIDs.begin(), + if (std::binary_search(deactivated_materialIDs.begin(), deactivated_materialIDs.end(), - (*material_ids)[i]); + (*material_ids)[i])) + continue; + _ids_of_active_elements.push_back(_mesh.getElement(i)->getID()); } } diff --git a/ProcessLib/ProcessVariable.h b/ProcessLib/ProcessVariable.h index 890db1c2770..ef4a8855f2c 100644 --- a/ProcessLib/ProcessVariable.h +++ b/ProcessLib/ProcessVariable.h @@ -65,9 +65,9 @@ public: void checkElementDeactivation(double const time); - std::vector<bool>& getElementDeactivationFlags() const + std::vector<std::size_t>& getActiveElementIDs() const { - return _element_deactivation_flags; + return _ids_of_active_elements; } /// Returns the number of components of the process variable. @@ -111,7 +111,9 @@ private: std::vector<std::unique_ptr<DeactivatedSubdomain const>> _deactivated_subdomains; - mutable std::vector<bool> _element_deactivation_flags; + /// IDs of the active elements. It is initialized only if there are + /// deactivated subdomains. + mutable std::vector<std::size_t> _ids_of_active_elements; void createBoundaryConditionsForDeactivatedSubDomains( const NumLib::LocalToGlobalIndexMap& dof_table, const int variable_id, diff --git a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp index 4a09a8eb5c3..5cf44c93ca9 100644 --- a/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp +++ b/ProcessLib/RichardsComponentTransport/RichardsComponentTransportProcess.cpp @@ -81,7 +81,7 @@ void RichardsComponentTransportProcess::assembleConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b, + pv.getActiveElementIDs(), dof_table, t, x, M, K, b, _coupled_solutions); } @@ -101,7 +101,7 @@ void RichardsComponentTransportProcess::assembleWithJacobianConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x, + _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); } diff --git a/ProcessLib/RichardsFlow/RichardsFlowProcess.cpp b/ProcessLib/RichardsFlow/RichardsFlowProcess.cpp index 4dee09f6ef3..baea254c304 100644 --- a/ProcessLib/RichardsFlow/RichardsFlowProcess.cpp +++ b/ProcessLib/RichardsFlow/RichardsFlowProcess.cpp @@ -80,7 +80,7 @@ void RichardsFlowProcess::assembleConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b, + pv.getActiveElementIDs(), dof_table, t, x, M, K, b, _coupled_solutions); } @@ -99,7 +99,7 @@ void RichardsFlowProcess::assembleWithJacobianConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x, + _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); } diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp index f7181a46847..f79f587d284 100644 --- a/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp +++ b/ProcessLib/RichardsMechanics/RichardsMechanicsProcess.cpp @@ -245,7 +245,7 @@ void RichardsMechanicsProcess<DisplacementDim>::assembleConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b, + pv.getActiveElementIDs(), dof_table, t, x, M, K, b, _coupled_solutions); } @@ -293,7 +293,7 @@ void RichardsMechanicsProcess<DisplacementDim>:: GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_tables, t, x, + _local_assemblers, pv.getActiveElementIDs(), dof_tables, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); auto copyRhs = [&](int const variable_id, auto& output_vector) { @@ -336,7 +336,7 @@ void RichardsMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess( getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::preTimestep, _local_assemblers, - pv.getElementDeactivationFlags(), *_local_to_global_index_map, x, + pv.getActiveElementIDs(), *_local_to_global_index_map, x, t, dt); } } @@ -358,7 +358,7 @@ void RichardsMechanicsProcess< // Calculate strain, stress or other internal variables of mechanics. GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::postNonLinearSolver, _local_assemblers, - pv.getElementDeactivationFlags(), getDOFTable(process_id), x, t, + pv.getActiveElementIDs(), getDOFTable(process_id), x, t, _use_monolithic_scheme); } @@ -373,7 +373,7 @@ void RichardsMechanicsProcess< GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::computeSecondaryVariable, _local_assemblers, - pv.getElementDeactivationFlags(), getDOFTable(process_id), t, x, + pv.getActiveElementIDs(), getDOFTable(process_id), t, x, _coupled_solutions); } diff --git a/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp b/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp index ac7b529d0a3..3001d7aa91b 100644 --- a/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp +++ b/ProcessLib/SmallDeformation/SmallDeformationProcess.cpp @@ -242,7 +242,7 @@ void SmallDeformationProcess<DisplacementDim>::assembleConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b, + pv.getActiveElementIDs(), dof_table, t, x, M, K, b, _coupled_solutions); } @@ -265,7 +265,7 @@ void SmallDeformationProcess<DisplacementDim>:: // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x, + _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); transformVariableFromGlobalVector(b, 0, *_local_to_global_index_map, @@ -286,7 +286,7 @@ void SmallDeformationProcess<DisplacementDim>::preTimestepConcreteProcess( GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::preTimestep, _local_assemblers, - pv.getElementDeactivationFlags(), *_local_to_global_index_map, + pv.getActiveElementIDs(), *_local_to_global_index_map, x, t, dt); } @@ -301,7 +301,7 @@ void SmallDeformationProcess<DisplacementDim>::postTimestepConcreteProcess( GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::postTimestep, _local_assemblers, - pv.getElementDeactivationFlags(), *_local_to_global_index_map, x); + pv.getActiveElementIDs(), *_local_to_global_index_map, x); std::unique_ptr<GlobalVector> material_forces; ProcessLib::SmallDeformation::writeMaterialForces( diff --git a/ProcessLib/SurfaceFlux/SurfaceFlux.cpp b/ProcessLib/SurfaceFlux/SurfaceFlux.cpp index 649cbe93c91..88680e7d3f3 100644 --- a/ProcessLib/SurfaceFlux/SurfaceFlux.cpp +++ b/ProcessLib/SurfaceFlux/SurfaceFlux.cpp @@ -57,7 +57,7 @@ void SurfaceFlux::integrate( MeshLib::PropertyVector<double>& balance, double const t, MeshLib::Mesh const& bulk_mesh, - std::vector<bool> const& element_selector, + std::vector<std::size_t> const& active_element_ids, std::function<Eigen::Vector3d(std::size_t const, MathLib::Point3d const&, double const, GlobalVector const&)> const& getFlux) @@ -66,7 +66,7 @@ void SurfaceFlux::integrate( GlobalExecutor::executeSelectedMemberOnDereferenced( &SurfaceFluxLocalAssemblerInterface::integrate, - _local_assemblers, element_selector, x, balance, t, bulk_mesh, getFlux); + _local_assemblers, active_element_ids, x, balance, t, bulk_mesh, getFlux); } } // namespace ProcessLib diff --git a/ProcessLib/SurfaceFlux/SurfaceFlux.h b/ProcessLib/SurfaceFlux/SurfaceFlux.h index 39d4d86d61d..45c9952e63f 100644 --- a/ProcessLib/SurfaceFlux/SurfaceFlux.h +++ b/ProcessLib/SurfaceFlux/SurfaceFlux.h @@ -28,12 +28,14 @@ public: std::size_t bulk_property_number_of_components, unsigned const integration_order); - /// Executes for each element of the mesh the local intergration procedure. - /// @param x The global solution the intergration values will be fetched of. + /// Executes for each element of the mesh the local integration procedure. + /// @param x The global solution the integration values will be fetched of. /// @param balance The vector the integration results will be stored in. /// @param t The balance will be computed at the time t. /// @param bulk_mesh Stores a reference to the bulk mesh that is needed to /// fetch the information for the integration over the surface mesh. + /// @active_element_ids The IDs of active elements. It is empty if there is + /// no deactivated subdomain. /// @param getFlux function that calculates the flux in the integration /// points of the face elements of the bulk element that belongs to the /// surface. @@ -41,7 +43,7 @@ public: MeshLib::PropertyVector<double>& balance, double const t, MeshLib::Mesh const& bulk_mesh, - std::vector<bool> const& element_selector, + std::vector<std::size_t> const& active_element_ids, std::function<Eigen::Vector3d( std::size_t const, MathLib::Point3d const&, double const, GlobalVector const&)> const& getFlux); diff --git a/ProcessLib/SurfaceFlux/SurfaceFluxData.h b/ProcessLib/SurfaceFlux/SurfaceFluxData.h index 3df6d6117bf..23d37e9670e 100644 --- a/ProcessLib/SurfaceFlux/SurfaceFluxData.h +++ b/ProcessLib/SurfaceFlux/SurfaceFluxData.h @@ -81,7 +81,7 @@ struct SurfaceFluxData void integrate(GlobalVector const& x, double const t, Process const& p, int const process_id, int const integration_order, MeshLib::Mesh const& bulk_mesh, - std::vector<bool> const& element_selector) + std::vector<std::size_t> const& active_element_ids) { auto* const surfaceflux_pv = MeshLib::getOrCreateMeshProperty<double>( surface_mesh, property_vector_name, MeshLib::MeshItemType::Cell, 1); @@ -93,7 +93,7 @@ struct SurfaceFluxData integration_order); surfaceflux_process.integrate( - x, *surfaceflux_pv, t, bulk_mesh, element_selector, + x, *surfaceflux_pv, t, bulk_mesh, active_element_ids, [&p](std::size_t const element_id, MathLib::Point3d const& pnt, double const t, GlobalVector const& x) { return p.getFlux(element_id, pnt, t, x); diff --git a/ProcessLib/TES/TESProcess.cpp b/ProcessLib/TES/TESProcess.cpp index 6b6c8d8e2f8..c04f685f1ca 100644 --- a/ProcessLib/TES/TESProcess.cpp +++ b/ProcessLib/TES/TESProcess.cpp @@ -241,7 +241,7 @@ void TESProcess::assembleConcreteProcess(const double t, // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b, + pv.getActiveElementIDs(), dof_table, t, x, M, K, b, _coupled_solutions); } @@ -259,7 +259,7 @@ void TESProcess::assembleWithJacobianConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x, + _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); } diff --git a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.cpp b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.cpp index 88ace5986d4..c47f5e5d6c8 100644 --- a/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.cpp +++ b/ProcessLib/ThermalTwoPhaseFlowWithPP/ThermalTwoPhaseFlowWithPPProcess.cpp @@ -89,7 +89,7 @@ void ThermalTwoPhaseFlowWithPPProcess::assembleConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b, + pv.getActiveElementIDs(), dof_table, t, x, M, K, b, _coupled_solutions); } @@ -108,7 +108,7 @@ void ThermalTwoPhaseFlowWithPPProcess::assembleWithJacobianConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x, + _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); } void ThermalTwoPhaseFlowWithPPProcess::preTimestepConcreteProcess( @@ -120,7 +120,7 @@ void ThermalTwoPhaseFlowWithPPProcess::preTimestepConcreteProcess( ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::preTimestep, _local_assemblers, - pv.getElementDeactivationFlags(), *_local_to_global_index_map, x, t, + pv.getActiveElementIDs(), *_local_to_global_index_map, x, t, delta_t); } diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess-impl.h b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess-impl.h index 51aab5032c2..eb37e7d58a9 100644 --- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess-impl.h +++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess-impl.h @@ -214,7 +214,7 @@ void ThermoMechanicalPhaseFieldProcess< // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b, + pv.getActiveElementIDs(), dof_table, t, x, M, K, b, _coupled_solutions); } @@ -267,7 +267,7 @@ void ThermoMechanicalPhaseFieldProcess<DisplacementDim>:: GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_tables, t, x, + _local_assemblers, pv.getActiveElementIDs(), dof_tables, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); } @@ -292,7 +292,7 @@ void ThermoMechanicalPhaseFieldProcess< GlobalExecutor::executeSelectedMemberOnDereferenced( &ThermoMechanicalPhaseFieldLocalAssemblerInterface::preTimestep, - _local_assemblers, pv.getElementDeactivationFlags(), + _local_assemblers, pv.getActiveElementIDs(), getDOFTable(process_id), x, t, dt); } @@ -309,7 +309,7 @@ void ThermoMechanicalPhaseFieldProcess< GlobalExecutor::executeSelectedMemberOnDereferenced( &ThermoMechanicalPhaseFieldLocalAssemblerInterface::postTimestep, - _local_assemblers, pv.getElementDeactivationFlags(), + _local_assemblers, pv.getActiveElementIDs(), getDOFTable(process_id), x); } @@ -331,7 +331,7 @@ void ThermoMechanicalPhaseFieldProcess< GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::postNonLinearSolver, _local_assemblers, - pv.getElementDeactivationFlags(), getDOFTable(process_id), x, t, + pv.getActiveElementIDs(), getDOFTable(process_id), x, t, use_monolithic_scheme); } diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp index 0f02125c20e..042783e5853 100644 --- a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp +++ b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.cpp @@ -168,7 +168,7 @@ void ThermoMechanicsProcess<DisplacementDim>::assembleConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b, + pv.getActiveElementIDs(), dof_table, t, x, M, K, b, _coupled_solutions); } @@ -192,7 +192,7 @@ void ThermoMechanicsProcess<DisplacementDim>:: // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x, + _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); } @@ -210,7 +210,7 @@ void ThermoMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess( GlobalExecutor::executeSelectedMemberOnDereferenced( &ThermoMechanicsLocalAssemblerInterface::preTimestep, _local_assemblers, - pv.getElementDeactivationFlags(), *_local_to_global_index_map, x, t, + pv.getActiveElementIDs(), *_local_to_global_index_map, x, t, dt); } @@ -225,7 +225,7 @@ void ThermoMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess( GlobalExecutor::executeSelectedMemberOnDereferenced( &ThermoMechanicsLocalAssemblerInterface::postTimestep, - _local_assemblers, pv.getElementDeactivationFlags(), + _local_assemblers, pv.getActiveElementIDs(), *_local_to_global_index_map, x); } diff --git a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcess.cpp b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcess.cpp index 3a75bf8f365..4d8ce27151b 100644 --- a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcess.cpp +++ b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPProcess.cpp @@ -86,7 +86,7 @@ void TwoPhaseFlowWithPPProcess::assembleConcreteProcess(const double t, // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b, + pv.getActiveElementIDs(), dof_table, t, x, M, K, b, _coupled_solutions); } @@ -105,7 +105,7 @@ void TwoPhaseFlowWithPPProcess::assembleWithJacobianConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x, + _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); } diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.cpp b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.cpp index ae7ebc46733..2560399bf10 100644 --- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.cpp +++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoProcess.cpp @@ -86,7 +86,7 @@ void TwoPhaseFlowWithPrhoProcess::assembleConcreteProcess(const double t, // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assemble, _local_assemblers, - pv.getElementDeactivationFlags(), dof_table, t, x, M, K, b, + pv.getActiveElementIDs(), dof_table, t, x, M, K, b, _coupled_solutions); } @@ -105,7 +105,7 @@ void TwoPhaseFlowWithPrhoProcess::assembleWithJacobianConcreteProcess( // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, - _local_assemblers, pv.getElementDeactivationFlags(), dof_table, t, x, + _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); } void TwoPhaseFlowWithPrhoProcess::preTimestepConcreteProcess( @@ -118,7 +118,7 @@ void TwoPhaseFlowWithPrhoProcess::preTimestepConcreteProcess( GlobalExecutor::executeSelectedMemberOnDereferenced( &LocalAssemblerInterface::preTimestep, _local_assemblers, - pv.getElementDeactivationFlags(), *_local_to_global_index_map, x, t, + pv.getActiveElementIDs(), *_local_to_global_index_map, x, t, dt); } -- GitLab