9#include <kernel/lafem/slip_filter.hpp>
10#include <kernel/assembly/slip_filter_assembler.hpp>
11#include <kernel/global/gate.hpp>
38 template<
typename DataType_,
typename IndexType_,
int block_size_,
typename DomainLevel_,
typename Space_>
39 void asm_slip_filter(LAFEM::SlipFilter<DataType_, IndexType_, block_size_>& filter,
40 const DomainLevel_& dom_level,
const Space_& space,
const String& mesh_part_names)
43 Assembly::SlipFilterAssembler<typename DomainLevel_::TrafoType> slip_filter_asm(dom_level.trafo);
45 std::deque<String> mp_names;
46 if(mesh_part_names ==
"*")
47 mp_names = dom_level.get_mesh_node()->get_mesh_part_names(
true);
49 mp_names = mesh_part_names.split_by_whitespaces();
52 for(
const auto& mp_name : mp_names)
54 auto* mesh_part_node = dom_level.get_mesh_node()->find_mesh_part_node(mp_name);
55 XASSERT(mesh_part_node !=
nullptr);
59 auto* mesh_part = mesh_part_node->get_mesh();
60 if (mesh_part !=
nullptr)
63 slip_filter_asm.add_mesh_part(*mesh_part);
68 slip_filter_asm.assemble(filter, space);
80 template<
typename Gate_,
typename SlipFilter_>
81 void sync_slip_filter(Gate_& gate, SlipFilter_& slip_filter)
83 auto& slip_filter_vector = slip_filter.get_filter_vector();
87 if(slip_filter_vector.used_elements() > 0)
89 auto* tmp_elements = tmp.template elements<LAFEM::Perspective::native>();
90 auto* sfv_elements = slip_filter_vector.template elements<LAFEM::Perspective::native>();
93 for(
Index isparse(0); isparse < slip_filter_vector.used_elements(); ++isparse)
95 Index idense(slip_filter_vector.indices()[isparse]);
96 tmp_elements[idense] = sfv_elements[isparse];
102 for(
Index isparse(0); isparse < slip_filter_vector.used_elements(); ++isparse)
104 Index idense(slip_filter_vector.indices()[isparse]);
105 tmp_elements[idense].normalize();
106 sfv_elements[isparse] = tmp_elements[idense];
#define XASSERT(expr)
Assertion macro definition.
std::uint64_t Index
Index data type.