diff --git a/ProcessLib/ProcessVariable.cpp b/ProcessLib/ProcessVariable.cpp index 745d04a82ad6165d3e5c5645ff2307a321ff80ed..b88cd1e95046bb838f733bbef377ec56c4a4052e 100644 --- a/ProcessLib/ProcessVariable.cpp +++ b/ProcessLib/ProcessVariable.cpp @@ -286,34 +286,38 @@ void ProcessVariable::updateDeactivatedSubdomains(double const time) { _ids_of_active_elements.clear(); - auto found_a_set = - std::find_if(_deactivated_subdomains.begin(), - _deactivated_subdomains.end(), - [&](auto& _deactivated_subdomain) { - return _deactivated_subdomain->includesTimeOf(time); - }); - - if (found_a_set == _deactivated_subdomains.end()) - { - return; - } + auto const* const material_ids = MeshLib::materialIDs(_mesh); - auto const& deactivated_materialIDs = (*found_a_set)->materialIDs; + auto is_active_in_subdomain = [&](std::size_t const i, + DeactivatedSubdomain const& ds) -> bool { + if (!ds.includesTimeOf(time)) + { + return true; + } - auto const* const material_ids = MeshLib::materialIDs(_mesh); - auto const number_of_elements = _mesh.getNumberOfElements(); + auto const& deactivated_materialIDs = + ds.materialIDs; - for (std::size_t i = 0; i < number_of_elements; i++) - { auto const& element_center = getCenterOfGravity(*_mesh.getElement(i)); if (std::binary_search(deactivated_materialIDs.begin(), deactivated_materialIDs.end(), (*material_ids)[i]) && - (*found_a_set)->isDeactivated(element_center, time)) + ds.isDeactivated(element_center, time)) { - continue; + return false; + } + return true; + }; + + auto const number_of_elements = _mesh.getNumberOfElements(); + for (std::size_t i = 0; i < number_of_elements; i++) + { + if (std::all_of( + begin(_deactivated_subdomains), end(_deactivated_subdomains), + [&](auto const& ds) { return is_active_in_subdomain(i, *ds); })) + { + _ids_of_active_elements.push_back(_mesh.getElement(i)->getID()); } - _ids_of_active_elements.push_back(_mesh.getElement(i)->getID()); } }