Files
MeanField_SERiF/docs/xml/volume__field__block_8hpp.xml

2074 lines
247 KiB
XML
Raw Normal View History

<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.13.2" xml:lang="en-US">
<compounddef id="volume__field__block_8hpp" kind="file" language="C++">
<compoundname>volume_field_block.hpp</compoundname>
<includes local="no">algorithm</includes>
<includes local="no">concepts</includes>
<includes local="no">functional</includes>
<includes local="no">memory</includes>
<includes local="no">vector</includes>
<includes refid="element__coordinates_8hpp" local="yes">serif/backend/mfem/discretization/element_coordinates.hpp</includes>
<includes refid="backend_2mfem_2operators_2linearized__block_8hpp" local="yes">serif/backend/mfem/operators/linearized_block.hpp</includes>
<includes refid="volume__application_8hpp" local="yes">serif/backend/mfem/operators/volume_application.hpp</includes>
<includes refid="parallel_8hpp" local="yes">serif/backend/mfem/shared/parallel.hpp</includes>
<includedby refid="interior_8hpp" local="yes">src/include/serif/backend/mfem/model/computations/interior.hpp</includedby>
<includedby refid="system__selection_8cpp" local="yes">src/lib/serif/backend/mfem/model/system_selection.cpp</includedby>
<incdepgraph>
<node id="118">
<label>serif/backend/mfem/discretization/basis_evaluation.hpp</label>
<link refid="basis__evaluation_8hpp"/>
<childnode refid="5" relation="include">
</childnode>
<childnode refid="15" relation="include">
</childnode>
<childnode refid="72" relation="include">
</childnode>
<childnode refid="119" relation="include">
</childnode>
</node>
<node id="147">
<label>serif/backend/mfem/discretization/coefficient_tracking.hpp</label>
<link refid="coefficient__tracking_8hpp"/>
<childnode refid="2" relation="include">
</childnode>
<childnode refid="69" relation="include">
</childnode>
</node>
<node id="11">
<label>serif/backend/mfem/discretization/dof_map.hpp</label>
<link refid="dof__map_8hpp"/>
<childnode refid="12" relation="include">
</childnode>
<childnode refid="13" relation="include">
</childnode>
<childnode refid="5" relation="include">
</childnode>
<childnode refid="14" relation="include">
</childnode>
<childnode refid="56" relation="include">
</childnode>
<childnode refid="57" relation="include">
</childnode>
<childnode refid="58" relation="include">
</childnode>
<childnode refid="43" relation="include">
</childnode>
<childnode refid="59" relation="include">
</childnode>
</node>
<node id="7">
<label>serif/backend/mfem/discretization/element_coordinates.hpp</label>
<link refid="element__coordinates_8hpp"/>
<childnode refid="8" relation="include">
</childnode>
<childnode refid="9" relation="include">
</childnode>
<childnode refid="10" relation="include">
</childnode>
<childnode refid="11" relation="include">
</childnode>
</node>
<node id="135">
<label>serif/backend/mfem/discretization/quadrature/concepts.hpp</label>
<link refid="backend_2mfem_2discretization_2quadrature_2concepts_8hpp"/>
<childnode refid="72" relation="include">
</childnode>
</node>
<node id="136">
<label>serif/backend/mfem/discretization/quadrature/configure.hpp</label>
<link refid="configure_8hpp"/>
<childnode refid="72" relation="include">
</childnode>
<childnode refid="135" relation="include">
</childnode>
</node>
<node id="124">
<label>serif/backend/mfem/discretization/quadrature/mfem_resolver.hpp</label>
<link refid="mfem__resolver_8hpp"/>
<childnode refid="34" relation="include">
</childnode>
<childnode refid="28" relation="include">
</childnode>
<childnode refid="30" relation="include">
</childnode>
<childnode refid="9" relation="include">
</childnode>
<childnode refid="72" relation="include">
</childnode>
<childnode refid="125" relation="include">
</childnode>
<childnode refid="131" relation="include">
</childnode>
<childnode refid="32" relation="include">
</childnode>
<childnode refid="132" relation="include">
</childnode>
<childnode refid="133" relation="include">
</childnode>
<childnode refid="135" relation="include">
</childnode>
<childnode refid="136" relation="include">
</childnode>
<childnode refid="137" relation="include">
</childnode>
<childnode refid="138" relation="include">
</childnode>
</node>
<node id="137">
<label>serif/backend/mfem/discretization/quadrature/mfem_static_order.hpp</label>
<link refid="mfem__static__order_8hpp"/>
<childnode refid="95" relation="include">
</childnode>
<childnode refid="130" relation="include">
</childnode>
<childnode refid="128" relation="include">
</childnode>
<childnode refid="39" relation="include">
</childnode>
<childnode refid="131" relation="include">
</childnode>
</node>
<node id="131">
<label>serif/backend/mfem/discretization/quadrature/order.hpp</label>
<link refid="backend_2mfem_2discretization_2quadrature_2order_8hpp"/>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="27" relation="include">
</childnode>
<childnode refid="94" relation="include">
</childnode>
<childnode refid="130" relation="include">
</childnode>
<childnode refid="43" relation="include">
</childnode>
</node>
<node id="14">
<label>serif/backend/mfem/discretization/reconstruction.hpp</label>
<link refid="reconstruction_8hpp"/>
<childnode refid="5" relation="include">
</childnode>
<childnode refid="6" relation="include">
</childnode>
<childnode refid="15" relation="include">
</childnode>
<childnode refid="16" relation="include">
</childnode>
<childnode refid="42" relation="include">
</childnode>
</node>
<node id="119">
<label>serif/backend/mfem/discretization/tensor_basis.hpp</label>
<link refid="tensor__basis_8hpp"/>
<childnode refid="2" relation="include">
</childnode>
<childnode refid="17" relation="include">
</childnode>
<childnode refid="12" relation="include">
</childnode>
<childnode refid="120" relation="include">
</childnode>
<childnode refid="5" relation="include">
</childnode>
<childnode refid="6" relation="include">
</childnode>
<childnode refid="8" relation="include">
</childnode>
<childnode refid="121" relation="include">
</childnode>
<childnode refid="122" relation="include">
</childnode>
<childnode refid="43" relation="include">
</childnode>
<childnode refid="14" relation="include">
</childnode>
</node>
<node id="93">
<label>serif/backend/mfem/discretization/term_binding.hpp</label>
<link refid="term__binding_8hpp"/>
<childnode refid="2" relation="include">
</childnode>
<childnode refid="94" relation="include">
</childnode>
<childnode refid="96" relation="include">
</childnode>
<childnode refid="11" relation="include">
</childnode>
<childnode refid="43" relation="include">
</childnode>
</node>
<node id="84">
<label>serif/backend/mfem/discretization/term_coefficients.hpp</label>
<link refid="term__coefficients_8hpp"/>
<childnode refid="85" relation="include">
</childnode>
<childnode refid="93" relation="include">
</childnode>
</node>
<node id="75">
<label>serif/backend/mfem/mapping/compactification/compactification.hpp</label>
<link refid="compactification_8hpp"/>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="5" relation="include">
</childnode>
<childnode refid="74" relation="include">
</childnode>
<childnode refid="76" relation="include">
</childnode>
<childnode refid="77" relation="include">
</childnode>
</node>
<node id="76">
<label>serif/backend/mfem/mapping/compactification/input_result.hpp</label>
<link refid="input__result_8hpp"/>
<childnode refid="69" relation="include">
</childnode>
<childnode refid="70" relation="include">
</childnode>
</node>
<node id="73">
<label>serif/backend/mfem/mapping/compactification/kelvin.hpp</label>
<link refid="backend_2mfem_2mapping_2compactification_2kelvin_8hpp"/>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="69" relation="include">
</childnode>
<childnode refid="74" relation="include">
</childnode>
<childnode refid="75" relation="include">
</childnode>
<childnode refid="78" relation="include">
</childnode>
</node>
<node id="77">
<label>serif/backend/mfem/mapping/compactification/variation.hpp</label>
<link refid="compactification_2variation_8hpp"/>
<childnode refid="69" relation="include">
</childnode>
<childnode refid="70" relation="include">
</childnode>
</node>
<node id="79">
<label>serif/backend/mfem/mapping/context.hpp</label>
<link refid="context_8hpp"/>
<childnode refid="70" relation="include">
</childnode>
<childnode refid="69" relation="include">
</childnode>
</node>
<node id="80">
<label>serif/backend/mfem/mapping/data.hpp</label>
<link refid="data_8hpp"/>
<childnode refid="15" relation="include">
</childnode>
<childnode refid="57" relation="include">
</childnode>
<childnode refid="69" relation="include">
</childnode>
<childnode refid="70" relation="include">
</childnode>
<childnode refid="81" relation="include">
</childnode>
<childnode refid="46" relation="include">
</childnode>
<childnode refid="73" relation="include">
</childnode>
<childnode refid="79" relation="include">
</childnode>
<childnode refid="80" relation="include">
</childnode>
</node>
<node id="67">
<label>serif/backend/mfem/mapping/domain_mapper.hpp</label>
<link refid="backend_2mfem_2mapping_2domain__mapper_8hpp"/>
<childnode refid="68" relation="include">
</childnode>
<childnode refid="5" relation="include">
</childnode>
<childnode refid="69" relation="include">
</childnode>
<childnode refid="70" relation="include">
</childnode>
<childnode refid="71" relation="include">
</childnode>
<childnode refid="72" relation="include">
</childnode>
<childnode refid="73" relation="include">
</childnode>
<childnode refid="79" relation="include">
</childnode>
<childnode refid="80" relation="include">
</childnode>
<childnode refid="82" relation="include">
</childnode>
<childnode refid="83" relation="include">
</childnode>
</node>
<node id="74">
<label>serif/backend/mfem/mapping/status.hpp</label>
<link refid="status_8hpp"/>
<childnode refid="30" relation="include">
</childnode>
<childnode refid="46" relation="include">
</childnode>
<childnode refid="8" relation="include">
</childnode>
<childnode refid="53" relation="include">
</childnode>
<childnode refid="29" relation="include">
</childnode>
</node>
<node id="150">
<label>serif/backend/mfem/mapping/transformations.hpp</label>
<link refid="transformations_8hpp"/>
<childnode refid="82" relation="include">
</childnode>
<childnode refid="79" relation="include">
</childnode>
</node>
<node id="82">
<label>serif/backend/mfem/mapping/variation.hpp</label>
<link refid="variation_8hpp"/>
<childnode refid="70" relation="include">
</childnode>
<childnode refid="69" relation="include">
</childnode>
</node>
<node id="117">
<label>serif/backend/mfem/mapping/volume_cache.hpp</label>
<link refid="volume__cache_8hpp"/>
<childnode refid="70" relation="include">
</childnode>
<childnode refid="79" relation="include">
</childnode>
<childnode refid="6" relation="include">
</childnode>
</node>
<node id="116">
<label>serif/backend/mfem/operators/element_data.hpp</label>
<link refid="element__data_8hpp"/>
<childnode refid="17" relation="include">
</childnode>
<childnode refid="5" relation="include">
</childnode>
<childnode refid="6" relation="include">
</childnode>
<childnode refid="72" relation="include">
</childnode>
<childnode refid="117" relation="include">
</childnode>
<childnode refid="80" relation="include">
</childnode>
<childnode refid="118" relation="include">
</childnode>
</node>
<node id="148">
<label>serif/backend/mfem/operators/element_evaluation.hpp</label>
<link refid="element__evaluation_8hpp"/>
<childnode refid="17" relation="include">
</childnode>
<childnode refid="12" relation="include">
</childnode>
<childnode refid="34" relation="include">
</childnode>
<childnode refid="59" relation="include">
</childnode>
<childnode refid="149" relation="include">
</childnode>
<childnode refid="116" relation="include">
</childnode>
<childnode refid="146" relation="include">
</childnode>
<childnode refid="139" relation="include">
</childnode>
</node>
<node id="152">
<label>serif/backend/mfem/operators/element_transpose.hpp</label>
<link refid="element__transpose_8hpp"/>
<childnode refid="148" relation="include">
</childnode>
</node>
<node id="60">
<label>serif/backend/mfem/operators/linearized_block.hpp</label>
<link refid="backend_2mfem_2operators_2linearized__block_8hpp"/>
<childnode refid="4" relation="include">
</childnode>
<childnode refid="5" relation="include">
</childnode>
<childnode refid="6" relation="include">
</childnode>
<childnode refid="61" relation="include">
</childnode>
<childnode refid="62" relation="include">
</childnode>
</node>
<node id="149">
<label>serif/backend/mfem/operators/operand_evaluation.hpp</label>
<link refid="operand__evaluation_8hpp"/>
<childnode refid="17" relation="include">
</childnode>
<childnode refid="3" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="56" relation="include">
</childnode>
<childnode refid="8" relation="include">
</childnode>
<childnode refid="15" relation="include">
</childnode>
<childnode refid="71" relation="include">
</childnode>
<childnode refid="141" relation="include">
</childnode>
<childnode refid="118" relation="include">
</childnode>
<childnode refid="11" relation="include">
</childnode>
<childnode refid="150" relation="include">
</childnode>
<childnode refid="43" relation="include">
</childnode>
<childnode refid="151" relation="include">
</childnode>
</node>
<node id="123">
<label>serif/backend/mfem/operators/quadrature.hpp</label>
<link refid="quadrature_8hpp"/>
<childnode refid="2" relation="include">
</childnode>
<childnode refid="17" relation="include">
</childnode>
<childnode refid="120" relation="include">
</childnode>
<childnode refid="71" relation="include">
</childnode>
<childnode refid="15" relation="include">
</childnode>
<childnode refid="124" relation="include">
</childnode>
<childnode refid="139" relation="include">
</childnode>
</node>
<node id="63">
<label>serif/backend/mfem/operators/volume_application.hpp</label>
<link refid="volume__application_8hpp"/>
<childnode refid="2" relation="include">
</childnode>
<childnode refid="17" relation="include">
</childnode>
<childnode refid="4" relation="include">
</childnode>
<childnode refid="34" relation="include">
</childnode>
<childnode refid="23" relation="include">
</childnode>
<childnode refid="6" relation="include">
</childnode>
<childnode refid="64" relation="include">
</childnode>
<childnode refid="148" relation="include">
</childnode>
<childnode refid="152" relation="include">
</childnode>
<childnode refid="153" relation="include">
</childnode>
</node>
<node id="65">
<label>serif/backend/mfem/operators/volume_data.hpp</label>
<link refid="volume__data_8hpp"/>
<childnode refid="17" relation="include">
</childnode>
<childnode refid="5" relation="include">
</childnode>
<childnode refid="6" relation="include">
</childnode>
<childnode refid="66" relation="include">
</childnode>
<childnode refid="67" relation="include">
</childnode>
<childnode refid="84" relation="include">
</childnode>
<childnode refid="116" relation="include">
</childnode>
<childnode refid="123" relation="include">
</childnode>
<childnode refid="146" relation="include">
</childnode>
</node>
<node id="1">
<label>src/include/serif/backend/mfem/operators/volume_field_block.hpp</label>
<link refid="volume__field__block_8hpp"/>
<childnode refid="2" relation="include">
</childnode>
<childnode refid="3" relation="include">
</childnode>
<childnode refid="4" relation="include">
</childnode>
<childnode refid="5" relation="include">
</childnode>
<childnode refid="6" relation="include">
</childnode>
<childnode refid="7" relation="include">
</childnode>
<childnode refid="60" relation="include">
</childnode>
<childnode refid="63" relation="include">
</childnode>
<childnode refid="153" relation="include">
</childnode>
</node>
<node id="64">
<label>serif/backend/mfem/operators/volume_inputs.hpp</label>
<link refid="volume__inputs_8hpp"/>
<childnode refid="65" relation="include">
</childnode>
<childnode refid="147" relation="include">
</childnode>
</node>
<node id="146">
<label>serif/backend/mfem/operators/workspace.hpp</label>
<link refid="backend_2mfem_2operators_2workspace_8hpp"/>
<childnode refid="6" relation="include">
</childnode>
<childnode refid="80" relation="include">
</childnode>
<childnode refid="82" relation="include">
</childnode>
<childnode refid="118" relation="include">
</childnode>
</node>
<node id="153">
<label>serif/backend/mfem/shared/parallel.hpp</label>
<link refid="parallel_8hpp"/>
<childnode refid="52" relation="include">
</childnode>
<childnode refid="6" relation="include">
</childnode>
</node>
<node id="19">
<label>serif/dimensions/dimensions.hpp</label>
<link refid="dimensions_8hpp"/>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="20" relation="include">
</childnode>
</node>
<node id="20">
<label>serif/dimensions/quantities.hpp</label>
<link refid="quantities_8hpp"/>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="22" relation="include">
</childnode>
<childnode refid="3" relation="include">
</childnode>
<childnode refid="23" relation="include">
</childnode>
<childnode refid="24" relation="include">
</childnode>
<childnode refid="25" relation="include">
</childnode>
</node>
<node id="26">
<label>serif/discretization/blocks/base.hpp</label>
<link refid="base_8hpp"/>
</node>
<node id="95">
<label>serif/discretization/blocks/concepts.hpp</label>
<link refid="discretization_2blocks_2concepts_8hpp"/>
<childnode refid="16" relation="include">
</childnode>
</node>
<node id="16">
<label>serif/discretization/blocks/fields.hpp</label>
<link refid="fields_8hpp"/>
<childnode refid="17" relation="include">
</childnode>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="19" relation="include">
</childnode>
<childnode refid="26" relation="include">
</childnode>
<childnode refid="27" relation="include">
</childnode>
<childnode refid="32" relation="include">
</childnode>
<childnode refid="38" relation="include">
</childnode>
<childnode refid="39" relation="include">
</childnode>
<childnode refid="40" relation="include">
</childnode>
</node>
<node id="127">
<label>serif/discretization/blocks/runtime.hpp</label>
<link refid="discretization_2blocks_2runtime_8hpp"/>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="95" relation="include">
</childnode>
</node>
<node id="94">
<label>serif/discretization/blocks/traits.hpp</label>
<link refid="discretization_2blocks_2traits_8hpp"/>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="95" relation="include">
</childnode>
</node>
<node id="32">
<label>serif/discretization/domain/concepts.hpp</label>
<link refid="discretization_2domain_2concepts_8hpp"/>
<childnode refid="33" relation="include">
</childnode>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="34" relation="include">
</childnode>
<childnode refid="17" relation="include">
</childnode>
<childnode refid="28" relation="include">
</childnode>
<childnode refid="35" relation="include">
</childnode>
<childnode refid="36" relation="include">
</childnode>
<childnode refid="24" relation="include">
</childnode>
<childnode refid="37" relation="include">
</childnode>
</node>
<node id="104">
<label>serif/discretization/domain/ids/boundary.hpp</label>
<link refid="ids_2boundary_8hpp"/>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="32" relation="include">
</childnode>
</node>
<node id="103">
<label>serif/discretization/domain/ids/concepts.hpp</label>
<link refid="discretization_2domain_2ids_2concepts_8hpp"/>
<childnode refid="104" relation="include">
</childnode>
<childnode refid="105" relation="include">
</childnode>
</node>
<node id="105">
<label>serif/discretization/domain/ids/domain.hpp</label>
<link refid="domain_8hpp"/>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="32" relation="include">
</childnode>
</node>
<node id="99">
<label>serif/discretization/domain/ids/lists/concepts.hpp</label>
<link refid="discretization_2domain_2ids_2lists_2concepts_8hpp"/>
<childnode refid="100" relation="include">
</childnode>
</node>
<node id="101">
<label>serif/discretization/domain/ids/lists/lists.hpp</label>
<link refid="lists_8hpp"/>
<childnode refid="17" relation="include">
</childnode>
<childnode refid="33" relation="include">
</childnode>
<childnode refid="102" relation="include">
</childnode>
<childnode refid="37" relation="include">
</childnode>
</node>
<node id="100">
<label>serif/discretization/domain/ids/lists/traits.hpp</label>
<link refid="discretization_2domain_2ids_2lists_2traits_8hpp"/>
<childnode refid="101" relation="include">
</childnode>
</node>
<node id="102">
<label>serif/discretization/domain/ids/validation/concepts.hpp</label>
<link refid="discretization_2domain_2ids_2validation_2concepts_8hpp"/>
<childnode refid="103" relation="include">
</childnode>
<childnode refid="106" relation="include">
</childnode>
<childnode refid="107" relation="include">
</childnode>
</node>
<node id="106">
<label>serif/discretization/domain/ids/validation/unique_ids.hpp</label>
<link refid="unique__ids_8hpp"/>
<childnode refid="17" relation="include">
</childnode>
<childnode refid="3" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="37" relation="include">
</childnode>
</node>
<node id="38">
<label>serif/discretization/domain/physical_domains.hpp</label>
<link refid="physical__domains_8hpp"/>
<childnode refid="36" relation="include">
</childnode>
<childnode refid="32" relation="include">
</childnode>
</node>
<node id="111">
<label>serif/discretization/domain/relation/concepts.hpp</label>
<link refid="discretization_2domain_2relation_2concepts_8hpp"/>
<childnode refid="112" relation="include">
</childnode>
<childnode refid="24" relation="include">
</childnode>
</node>
<node id="108">
<label>serif/discretization/domain/relation/lists/concepts.hpp</label>
<link refid="discretization_2domain_2relation_2lists_2concepts_8hpp"/>
<childnode refid="109" relation="include">
</childnode>
</node>
<node id="110">
<label>serif/discretization/domain/relation/lists/relation_list.hpp</label>
<link refid="relation__list_8hpp"/>
<childnode refid="33" relation="include">
</childnode>
<childnode refid="111" relation="include">
</childnode>
<childnode refid="37" relation="include">
</childnode>
</node>
<node id="109">
<label>serif/discretization/domain/relation/lists/traits.hpp</label>
<link refid="discretization_2domain_2relation_2lists_2traits_8hpp"/>
<childnode refid="110" relation="include">
</childnode>
</node>
<node id="112">
<label>serif/discretization/domain/relation/relations.hpp</label>
<link refid="discretization_2domain_2relation_2relations_8hpp"/>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="32" relation="include">
</childnode>
<childnode refid="25" relation="include">
</childnode>
<childnode refid="37" relation="include">
</childnode>
</node>
<node id="113">
<label>serif/discretization/domain/relation/validation/concepts.hpp</label>
<link refid="discretization_2domain_2relation_2validation_2concepts_8hpp"/>
<childnode refid="114" relation="include">
</childnode>
</node>
<node id="114">
<label>serif/discretization/domain/relation/validation/validation.hpp</label>
<link refid="discretization_2domain_2relation_2validation_2validation_8hpp"/>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="32" relation="include">
</childnode>
<childnode refid="99" relation="include">
</childnode>
<childnode refid="111" relation="include">
</childnode>
<childnode refid="108" relation="include">
</childnode>
<childnode refid="110" relation="include">
</childnode>
<childnode refid="115" relation="include">
</childnode>
</node>
<node id="115">
<label>serif/discretization/domain/resolver.hpp</label>
<link refid="resolver_8hpp"/>
<childnode refid="32" relation="include">
</childnode>
<childnode refid="99" relation="include">
</childnode>
<childnode refid="101" relation="include">
</childnode>
</node>
<node id="96">
<label>serif/discretization/domain/schema/concepts.hpp</label>
<link refid="discretization_2domain_2schema_2concepts_8hpp"/>
<childnode refid="97" relation="include">
</childnode>
</node>
<node id="98">
<label>serif/discretization/domain/schema/domain_schema.hpp</label>
<link refid="domain__schema_8hpp"/>
<childnode refid="33" relation="include">
</childnode>
<childnode refid="32" relation="include">
</childnode>
<childnode refid="99" relation="include">
</childnode>
<childnode refid="108" relation="include">
</childnode>
<childnode refid="113" relation="include">
</childnode>
<childnode refid="115" relation="include">
</childnode>
</node>
<node id="97">
<label>serif/discretization/domain/schema/traits.hpp</label>
<link refid="discretization_2domain_2schema_2traits_8hpp"/>
<childnode refid="98" relation="include">
</childnode>
</node>
<node id="36">
<label>serif/discretization/domain/types.hpp</label>
<link refid="discretization_2domain_2types_8hpp"/>
<childnode refid="18" relation="include">
</childnode>
</node>
<node id="128">
<label>serif/discretization/forms/concept.hpp</label>
<link refid="concept_8hpp"/>
<childnode refid="129" relation="include">
</childnode>
</node>
<node id="134">
<label>serif/discretization/forms/form_traits.hpp</label>
<link refid="form__traits_8hpp"/>
<childnode refid="128" relation="include">
</childnode>
<childnode refid="129" relation="include">
</childnode>
</node>
<node id="129">
<label>serif/discretization/forms/forms.hpp</label>
<link refid="forms_8hpp"/>
<childnode refid="3" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="95" relation="include">
</childnode>
<childnode refid="130" relation="include">
</childnode>
<childnode refid="39" relation="include">
</childnode>
<childnode refid="40" relation="include">
</childnode>
</node>
<node id="130">
<label>serif/discretization/forms/operands.hpp</label>
<link refid="operands_8hpp"/>
<childnode refid="3" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="95" relation="include">
</childnode>
</node>
<node id="126">
<label>serif/discretization/forms/runtime.hpp</label>
<link refid="discretization_2forms_2runtime_8hpp"/>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="28" relation="include">
</childnode>
<childnode refid="127" relation="include">
</childnode>
<childnode refid="128" relation="include">
</childnode>
</node>
<node id="145">
<label>serif/discretization/forms/value.hpp</label>
<link refid="value_8hpp"/>
<childnode refid="17" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="94" relation="include">
</childnode>
<childnode refid="130" relation="include">
</childnode>
</node>
<node id="27">
<label>serif/discretization/functional_space/space.hpp</label>
<link refid="space_8hpp"/>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="28" relation="include">
</childnode>
<childnode refid="29" relation="include">
</childnode>
</node>
<node id="132">
<label>serif/discretization/quadrature/policy.hpp</label>
<link refid="policy_8hpp"/>
<childnode refid="133" relation="include">
</childnode>
<childnode refid="125" relation="include">
</childnode>
</node>
<node id="133">
<label>serif/discretization/quadrature/query.hpp</label>
<link refid="query_8hpp"/>
<childnode refid="28" relation="include">
</childnode>
<childnode refid="45" relation="include">
</childnode>
<childnode refid="125" relation="include">
</childnode>
<childnode refid="38" relation="include">
</childnode>
<childnode refid="134" relation="include">
</childnode>
<childnode refid="126" relation="include">
</childnode>
</node>
<node id="125">
<label>serif/discretization/quadrature/rules.hpp</label>
<link refid="rules_8hpp"/>
<childnode refid="13" relation="include">
</childnode>
<childnode refid="45" relation="include">
</childnode>
<childnode refid="6" relation="include">
</childnode>
<childnode refid="28" relation="include">
</childnode>
<childnode refid="8" relation="include">
</childnode>
<childnode refid="126" relation="include">
</childnode>
</node>
<node id="42">
<label>serif/discretization/reconstruction/surface_power.hpp</label>
<link refid="surface__power_8hpp"/>
<childnode refid="12" relation="include">
</childnode>
<childnode refid="34" relation="include">
</childnode>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="38" relation="include">
</childnode>
<childnode refid="43" relation="include">
</childnode>
</node>
<node id="142">
<label>serif/equations/concepts.hpp</label>
<link refid="equations_2concepts_8hpp"/>
<childnode refid="3" relation="include">
</childnode>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="143" relation="include">
</childnode>
<childnode refid="144" relation="include">
</childnode>
</node>
<node id="143">
<label>serif/equations/contributions.hpp</label>
<link refid="equations_2contributions_8hpp"/>
<childnode refid="23" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="8" relation="include">
</childnode>
<childnode refid="94" relation="include">
</childnode>
<childnode refid="130" relation="include">
</childnode>
</node>
<node id="144">
<label>serif/equations/point.hpp</label>
<link refid="point_8hpp"/>
<childnode refid="17" relation="include">
</childnode>
<childnode refid="3" relation="include">
</childnode>
<childnode refid="33" relation="include">
</childnode>
<childnode refid="23" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="145" relation="include">
</childnode>
<childnode refid="39" relation="include">
</childnode>
</node>
<node id="29">
<label>serif/meta/enums.hpp</label>
<link refid="enums_8hpp"/>
<childnode refid="30" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="31" relation="include">
</childnode>
</node>
<node id="40">
<label>serif/meta/names.hpp</label>
<link refid="names_8hpp"/>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="41" relation="include">
</childnode>
</node>
<node id="141">
<label>serif/operators/concepts.hpp</label>
<link refid="operators_2concepts_8hpp"/>
<childnode refid="3" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="94" relation="include">
</childnode>
<childnode refid="27" relation="include">
</childnode>
<childnode refid="142" relation="include">
</childnode>
</node>
<node id="139">
<label>serif/operators/plan.hpp</label>
<link refid="operators_2plan_8hpp"/>
<childnode refid="23" relation="include">
</childnode>
<childnode refid="140" relation="include">
</childnode>
<childnode refid="129" relation="include">
</childnode>
<childnode refid="141" relation="include">
</childnode>
</node>
<node id="90">
<label>serif/utils/dependencies/binding.hpp</label>
<link refid="utils_2dependencies_2binding_8hpp"/>
<childnode refid="17" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="91" relation="include">
</childnode>
</node>
<node id="85">
<label>serif/utils/dependencies/dependency_context.hpp</label>
<link refid="dependency__context_8hpp"/>
<childnode refid="3" relation="include">
</childnode>
<childnode refid="23" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="8" relation="include">
</childnode>
<childnode refid="86" relation="include">
</childnode>
<childnode refid="88" relation="include">
</childnode>
<childnode refid="92" relation="include">
</childnode>
</node>
<node id="88">
<label>serif/utils/dependencies/detail/type_lists.hpp</label>
<link refid="type__lists_8hpp"/>
<childnode refid="17" relation="include">
</childnode>
<childnode refid="33" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="89" relation="include">
</childnode>
</node>
<node id="89">
<label>serif/utils/dependencies/key_list.hpp</label>
<link refid="key__list_8hpp"/>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="90" relation="include">
</childnode>
<childnode refid="91" relation="include">
</childnode>
<childnode refid="39" relation="include">
</childnode>
</node>
<node id="140">
<label>serif/utils/dependencies/key_list_operations.hpp</label>
<link refid="key__list__operations_8hpp"/>
<childnode refid="33" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="88" relation="include">
</childnode>
</node>
<node id="86">
<label>serif/utils/dependencies/resource.hpp</label>
<link refid="resource_8hpp"/>
<childnode refid="4" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="8" relation="include">
</childnode>
<childnode refid="87" relation="include">
</childnode>
</node>
<node id="87">
<label>serif/utils/dependencies/snapshot.hpp</label>
<link refid="snapshot_8hpp"/>
<childnode refid="3" relation="include">
</childnode>
<childnode refid="4" relation="include">
</childnode>
<childnode refid="5" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="8" relation="include">
</childnode>
</node>
<node id="53">
<label>serif/utils/error/codes.hpp</label>
<link refid="codes_8hpp"/>
<childnode refid="46" relation="include">
</childnode>
<childnode refid="29" relation="include">
</childnode>
</node>
<node id="43">
<label>serif/utils/error/errors.hpp</label>
<link refid="errors_8hpp"/>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="28" relation="include">
</childnode>
<childnode refid="44" relation="include">
</childnode>
<childnode refid="45" relation="include">
</childnode>
<childnode refid="46" relation="include">
</childnode>
<childnode refid="2" relation="include">
</childnode>
<childnode refid="47" relation="include">
</childnode>
<childnode refid="48" relation="include">
</childnode>
<childnode refid="51" relation="include">
</childnode>
<childnode refid="53" relation="include">
</childnode>
<childnode refid="54" relation="include">
</childnode>
</node>
<node id="59">
<label>serif/utils/error/nonfinite.hpp</label>
<link refid="nonfinite_8hpp"/>
<childnode refid="56" relation="include">
</childnode>
</node>
<node id="138">
<label>serif/utils/format/strings.hpp</label>
<link refid="format_2strings_8hpp"/>
<childnode refid="45" relation="include">
</childnode>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="34" relation="include">
</childnode>
<childnode refid="28" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
</node>
<node id="151">
<label>serif/utils/misc/compensated_sum.hpp</label>
<link refid="compensated__sum_8hpp"/>
<childnode refid="12" relation="include">
</childnode>
</node>
<node id="92">
<label>serif/utils/misc/concepts/concat.hpp</label>
<link refid="concat_8hpp"/>
<childnode refid="39" relation="include">
</childnode>
</node>
<node id="51">
<label>serif/utils/misc/concepts/exceptions.hpp</label>
<link refid="utils_2misc_2concepts_2exceptions_8hpp"/>
<childnode refid="52" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="25" relation="include">
</childnode>
</node>
<node id="25">
<label>serif/utils/misc/concepts/numeric.hpp</label>
<link refid="numeric_8hpp"/>
<childnode refid="3" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
</node>
<node id="107">
<label>serif/utils/misc/concepts/type_uniqueness.hpp</label>
<link refid="concepts_2type__uniqueness_8hpp"/>
<childnode refid="91" relation="include">
</childnode>
</node>
<node id="24">
<label>serif/utils/misc/std_helper/cleaning.hpp</label>
<link refid="cleaning_8hpp"/>
<childnode refid="21" relation="include">
</childnode>
</node>
<node id="37">
<label>serif/utils/misc/std_helper/variadic_cleaning.hpp</label>
<link refid="variadic__cleaning_8hpp"/>
<childnode refid="33" relation="include">
</childnode>
</node>
<node id="48">
<label>serif/utils/misc/terminal/colors.hpp</label>
<link refid="colors_8hpp"/>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="44" relation="include">
</childnode>
<childnode refid="49" relation="include">
</childnode>
<childnode refid="8" relation="include">
</childnode>
<childnode refid="50" relation="include">
</childnode>
</node>
<node id="91">
<label>serif/utils/misc/traits/type_uniqueness.hpp</label>
<link refid="traits_2type__uniqueness_8hpp"/>
<childnode refid="17" relation="include">
</childnode>
<childnode refid="24" relation="include">
</childnode>
</node>
<node id="54">
<label>serif/utils/types/strings.hpp</label>
<link refid="types_2strings_8hpp"/>
<childnode refid="2" relation="include">
</childnode>
<childnode refid="55" relation="include">
</childnode>
<childnode refid="18" relation="include">
</childnode>
</node>
<node id="39">
<label>serif/utils/types/type_list.hpp</label>
<link refid="type__list_8hpp"/>
</node>
<node id="78">
<label>serif/utils/user_options/mapping/compactification/kelvin.hpp</label>
<link refid="utils_2user__options_2mapping_2compactification_2kelvin_8hpp"/>
</node>
<node id="83">
<label>serif/utils/user_options/mapping/domain_mapper.hpp</label>
<link refid="utils_2user__options_2mapping_2domain__mapper_8hpp"/>
</node>
<node id="2">
<label>algorithm</label>
</node>
<node id="17">
<label>array</label>
</node>
<node id="12">
<label>cmath</label>
</node>
<node id="22">
<label>compare</label>
</node>
<node id="3">
<label>concepts</label>
</node>
<node id="33">
<label>cstddef</label>
</node>
<node id="46">
<label>cstdint</label>
</node>
<node id="44">
<label>cstdio</label>
</node>
<node id="49">
<label>cstdlib</label>
</node>
<node id="52">
<label>exception</label>
</node>
<node id="68">
<label>expected</label>
</node>
<node id="28">
<label>format</label>
</node>
<node id="4">
<label>functional</label>
</node>
<node id="55">
<label>iostream</label>
</node>
<node id="120">
<label>limits</label>
</node>
<node id="31">
<label>magic_enum/magic_enum_all.hpp</label>
</node>
<node id="5">
<label>memory</label>
</node>
<node id="10">
<label>mfem/fem/doftrans.hpp</label>
</node>
<node id="71">
<label>mfem/fem/eltrans.hpp</label>
</node>
<node id="15">
<label>mfem/fem/fe/fe_base.hpp</label>
</node>
<node id="121">
<label>mfem/fem/fe/fe_h1.hpp</label>
</node>
<node id="122">
<label>mfem/fem/fe/fe_l2.hpp</label>
</node>
<node id="57">
<label>mfem/fem/fespace.hpp</label>
</node>
<node id="9">
<label>mfem/fem/geom.hpp</label>
</node>
<node id="66">
<label>mfem/fem/gridfunc.hpp</label>
</node>
<node id="72">
<label>mfem/fem/intrules.hpp</label>
</node>
<node id="58">
<label>mfem/fem/pfespace.hpp</label>
</node>
<node id="70">
<label>mfem/linalg/densemat.hpp</label>
</node>
<node id="61">
<label>mfem/linalg/operator.hpp</label>
</node>
<node id="62">
<label>mfem/linalg/sparsemat.hpp</label>
</node>
<node id="69">
<label>mfem/linalg/vector.hpp</label>
</node>
<node id="81">
<label>mfem/mesh/mesh.hpp</label>
</node>
<node id="41">
<label>nameof.hpp</label>
</node>
<node id="35">
<label>numeric</label>
</node>
<node id="13">
<label>optional</label>
</node>
<node id="34">
<label>span</label>
</node>
<node id="56">
<label>stdexcept</label>
</node>
<node id="45">
<label>string</label>
</node>
<node id="18">
<label>string_view</label>
</node>
<node id="23">
<label>tuple</label>
</node>
<node id="21">
<label>type_traits</label>
</node>
<node id="50">
<label>unistd.h</label>
</node>
<node id="30">
<label>unordered_map</label>
</node>
<node id="8">
<label>utility</label>
</node>
<node id="6">
<label>vector</label>
</node>
<node id="47">
<label>version</label>
</node>
</incdepgraph>
<invincdepgraph>
<node id="6">
<label>src/compile_time_checks/serif/model/state.cpp</label>
<link refid="state_8cpp"/>
</node>
<node id="2">
<label>src/include/serif/backend/mfem/model/computations/interior.hpp</label>
<link refid="interior_8hpp"/>
<childnode refid="3" relation="include">
</childnode>
<childnode refid="13" relation="include">
</childnode>
<childnode refid="14" relation="include">
</childnode>
<childnode refid="4" relation="include">
</childnode>
</node>
<node id="3">
<label>src/include/serif/backend/mfem/model/computations/potential_infinity.hpp</label>
<link refid="potential__infinity_8hpp"/>
<childnode refid="4" relation="include">
</childnode>
</node>
<node id="13">
<label>src/include/serif/backend/mfem/model/computations/pressure_boundary.hpp</label>
<link refid="model_2computations_2pressure__boundary_8hpp"/>
<childnode refid="4" relation="include">
</childnode>
</node>
<node id="14">
<label>src/include/serif/backend/mfem/model/computations/surface_potential.hpp</label>
<link refid="backend_2mfem_2model_2computations_2surface__potential_8hpp"/>
<childnode refid="4" relation="include">
</childnode>
</node>
<node id="5">
<label>src/include/serif/backend/mfem/model/equilibrium.hpp</label>
<link refid="backend_2mfem_2model_2equilibrium_8hpp"/>
<childnode refid="6" relation="include">
</childnode>
<childnode refid="7" relation="include">
</childnode>
</node>
<node id="4">
<label>src/include/serif/backend/mfem/model/graph.hpp</label>
<link refid="backend_2mfem_2model_2graph_8hpp"/>
<childnode refid="5" relation="include">
</childnode>
<childnode refid="12" relation="include">
</childnode>
</node>
<node id="1">
<label>src/include/serif/backend/mfem/operators/volume_field_block.hpp</label>
<link refid="volume__field__block_8hpp"/>
<childnode refid="2" relation="include">
</childnode>
<childnode refid="15" relation="include">
</childnode>
</node>
<node id="12">
<label>src/include/serif/backend/mfem/solver/admissibility/geometry.hpp</label>
<link refid="geometry_8hpp"/>
<childnode refid="7" relation="include">
</childnode>
</node>
<node id="8">
<label>src/include/serif/backend/mfem/solver/equilibrium.hpp</label>
<link refid="backend_2mfem_2solver_2equilibrium_8hpp"/>
<childnode refid="9" relation="include">
</childnode>
</node>
<node id="7">
<label>src/include/serif/backend/mfem/solver/nonlinear/stellar_problem.hpp</label>
<link refid="stellar__problem_8hpp"/>
<childnode refid="8" relation="include">
</childnode>
</node>
<node id="10">
<label>src/include/serif/solver/continuation/equilibrium.hpp</label>
<link refid="solver_2continuation_2equilibrium_8hpp"/>
<childnode refid="11" relation="include">
</childnode>
</node>
<node id="9">
<label>src/include/serif/solver/equilibrium.hpp</label>
<link refid="solver_2equilibrium_8hpp"/>
<childnode refid="10" relation="include">
</childnode>
<childnode refid="11" relation="include">
</childnode>
</node>
<node id="11">
<label>src/include/serif/solver/solver.hpp</label>
<link refid="solver_2solver_8hpp"/>
</node>
<node id="15">
<label>src/lib/serif/backend/mfem/model/system_selection.cpp</label>
<link refid="system__selection_8cpp"/>
</node>
</invincdepgraph>
<innerclass refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator" prot="public">serif::operators::backend::mfem::detail::VolumeFieldOperator</innerclass>
<innerclass refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch" prot="private">serif::operators::backend::mfem::detail::VolumeFieldOperator::Scratch</innerclass>
<innerclass refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probed_element_block" prot="public">serif::operators::backend::mfem::detail::ProbedElementBlock</innerclass>
<innerclass refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probe_scratch" prot="public">serif::operators::backend::mfem::detail::ProbeScratch</innerclass>
<innerclass refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_coefficient_expansion" prot="public">serif::operators::backend::mfem::detail::CoefficientExpansion</innerclass>
<innerclass refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_constrained_element_block" prot="public">serif::operators::backend::mfem::detail::ConstrainedElementBlock</innerclass>
<innernamespace refid="namespaceserif">serif</innernamespace>
<innernamespace refid="namespaceserif_1_1operators">serif::operators</innernamespace>
<innernamespace refid="namespaceserif_1_1operators_1_1backend">serif::operators::backend</innernamespace>
<innernamespace refid="namespaceserif_1_1operators_1_1backend_1_1mfem">serif::operators::backend::mfem</innernamespace>
<innernamespace refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail">serif::operators::backend::mfem::detail</innernamespace>
<briefdescription>
</briefdescription>
<detaileddescription>
</detaileddescription>
<programlisting>
<codeline lineno="1"><highlight class="preprocessor">#pragma<sp/>once</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="2"><highlight class="normal"></highlight></codeline>
<codeline lineno="3"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&lt;algorithm&gt;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="4"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&lt;concepts&gt;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="5"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&lt;functional&gt;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="6"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&lt;memory&gt;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="7"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&lt;vector&gt;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="8"><highlight class="normal"></highlight></codeline>
<codeline lineno="9"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&quot;<ref refid="element__coordinates_8hpp" kindref="compound">serif/backend/mfem/discretization/element_coordinates.hpp</ref>&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="10"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&quot;<ref refid="backend_2mfem_2operators_2linearized__block_8hpp" kindref="compound">serif/backend/mfem/operators/linearized_block.hpp</ref>&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="11"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&quot;<ref refid="volume__application_8hpp" kindref="compound">serif/backend/mfem/operators/volume_application.hpp</ref>&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="12"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&quot;<ref refid="parallel_8hpp" kindref="compound">serif/backend/mfem/shared/parallel.hpp</ref>&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="13"><highlight class="normal"></highlight></codeline>
<codeline lineno="14"><highlight class="normal"></highlight><highlight class="keyword">namespace<sp/></highlight><highlight class="normal"><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem" kindref="compound">serif::operators::backend::mfem</ref><sp/>{</highlight></codeline>
<codeline lineno="15" refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail" refkind="compound"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">namespace<sp/></highlight><highlight class="normal"><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail" kindref="compound">detail</ref><sp/>{</highlight></codeline>
<codeline lineno="17"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">template</highlight><highlight class="normal"><sp/>&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Field,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Equation,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Schema,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Visit&gt;</highlight></codeline>
<codeline lineno="18"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1abb1a893a5fb0670283d9989d1ac6f4e7" kindref="member">for_each_field_element</ref>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data" kindref="compound">VolumeData&lt;Equation, Schema&gt;</ref>&amp;<sp/>data,<sp/>Visit&amp;&amp;<sp/>visit)<sp/>{</highlight></codeline>
<codeline lineno="19"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a718862dd1fe657d4885b011fd55cde46" kindref="member">for_each_volume_element</ref>(data,<sp/>[&amp;]&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Contribution&gt;(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>element)<sp/>{</highlight></codeline>
<codeline lineno="20"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">constexpr</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/>reads_field<sp/>=<sp/>[]&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal">...<sp/>Operands&gt;(<ref refid="structserif_1_1utils_1_1types_1_1_type_list" kindref="compound">utils::types::TypeList</ref>&lt;Operands...&gt;)<sp/>{</highlight></codeline>
<codeline lineno="21"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>(std::same_as&lt;Field,<sp/>typename<sp/>Operands::term_type&gt;<sp/>||<sp/>...);</highlight></codeline>
<codeline lineno="22"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}(</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Contribution::Operands{});</highlight></codeline>
<codeline lineno="23"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">constexpr</highlight><highlight class="normal"><sp/>(reads_field)<sp/>{</highlight></codeline>
<codeline lineno="24"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>visit.template<sp/>operator()&lt;Contribution&gt;(element);</highlight></codeline>
<codeline lineno="25"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="26"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="27"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="28"><highlight class="normal"></highlight></codeline>
<codeline lineno="30"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">template</highlight><highlight class="normal"><sp/>&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Field,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Equation,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Contribution&gt;</highlight></codeline>
<codeline lineno="31"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1aa70faca762d4549cb73a42d78c5c88f6" kindref="member">field_integrand</ref>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1_element_data" kindref="compound">ElementData</ref>&lt;<ref refid="structserif_1_1operators_1_1_equation_plan" kindref="compound">EquationPlan&lt;Equation&gt;::operand_count</ref>&gt;&amp;<sp/>element,<sp/>const<sp/>::mfem::Vector&amp;<sp/>direction,<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a317d4e0bea2ef8780ac3747cfe62bf72" kindref="member">::mfem::Vector</ref>&amp;<sp/>integrand,<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a317d4e0bea2ef8780ac3747cfe62bf72" kindref="member">::mfem::Vector</ref>&amp;<sp/>samples,<sp/><ref refid="structserif_1_1discretization_1_1backend_1_1mfem_1_1_basis_workspace" kindref="compound">BasisWorkspace</ref>&amp;<sp/>workspace)<sp/>{</highlight></codeline>
<codeline lineno="32"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/></highlight><highlight class="normal">Plan<sp/>=<sp/><ref refid="structserif_1_1operators_1_1_equation_plan" kindref="compound">EquationPlan&lt;Equation&gt;</ref>;</highlight></codeline>
<codeline lineno="33"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/></highlight><highlight class="normal">Test<sp/>=<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1_operand_evaluator" kindref="compound">OperandEvaluator&lt;equations::TestOperandOf&lt;Contribution&gt;</ref>&gt;;</highlight></codeline>
<codeline lineno="34"><highlight class="normal"></highlight></codeline>
<codeline lineno="35"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>integrand.SetSize(element.basis-&gt;rule-&gt;GetNPoints()<sp/>*<sp/>Test::components);</highlight></codeline>
<codeline lineno="36"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>integrand<sp/>=<sp/>0.0;</highlight></codeline>
<codeline lineno="37"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Plan::template<sp/>for_each_input&lt;Contribution&gt;([&amp;]&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Operand&gt;(Operand,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/>std::size_t<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>)<sp/>{</highlight></codeline>
<codeline lineno="38"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">constexpr</highlight><highlight class="normal"><sp/>(std::same_as&lt;typename<sp/>Operand::term_type,<sp/>Field&gt;)<sp/>{</highlight></codeline>
<codeline lineno="39"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/></highlight><highlight class="normal">Evaluator<sp/>=<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1_operand_evaluator" kindref="compound">OperandEvaluator&lt;Operand&gt;</ref>;</highlight></codeline>
<codeline lineno="40"><highlight class="normal"></highlight></codeline>
<codeline lineno="41"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Evaluator::evaluate(element.geometry-&gt;operand_basis[<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>],<sp/>direction,<sp/>samples,<sp/>workspace);</highlight></codeline>
<codeline lineno="42"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>point<sp/>=<sp/>0;<sp/>point<sp/>&lt;<sp/>element.basis-&gt;rule-&gt;GetNPoints();<sp/>++point)<sp/>{</highlight></codeline>
<codeline lineno="43"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>output<sp/>=<sp/>0;<sp/>output<sp/>&lt;<sp/>Test::components;<sp/>++output)<sp/>{</highlight></codeline>
<codeline lineno="44"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>row<sp/>=<sp/>point<sp/>*<sp/>Test::components<sp/>+<sp/>output;</highlight></codeline>
<codeline lineno="45"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>input<sp/>=<sp/>0;<sp/>input<sp/>&lt;<sp/>Evaluator::components;<sp/>++input)<sp/>{</highlight></codeline>
<codeline lineno="46"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>integrand[row]<sp/>+=<sp/>element.weighted_field_derivatives(row,<sp/>Plan::template<sp/>component_offset&lt;Operand&gt;()<sp/>+<sp/>input)<sp/>*<sp/>samples[point<sp/>*<sp/>Evaluator::components<sp/>+<sp/>input];</highlight></codeline>
<codeline lineno="47"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="48"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="49"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="50"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="51"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="52"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="53"><highlight class="normal"></highlight></codeline>
<codeline lineno="55"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">template</highlight><highlight class="normal"><sp/>&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Field,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Equation&gt;</highlight></codeline>
<codeline lineno="56"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>[[nodiscard]]<sp/></highlight><highlight class="keyword">consteval</highlight><highlight class="normal"><sp/>std::size_t<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1aaddd86c07d54c546cbaad5ca845225c6" kindref="member">field_column</ref>()<sp/>{</highlight></codeline>
<codeline lineno="57"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1equations_1_1_operand_values" kindref="compound">equations::OperandValues&lt;typename EquationPlan&lt;Equation&gt;::Columns</ref>&gt;::template<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index&lt;Field&gt;</ref>();</highlight></codeline>
<codeline lineno="58"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="59"><highlight class="normal"></highlight></codeline>
<codeline lineno="61"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">template</highlight><highlight class="normal"><sp/>&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Field,<sp/>VolumeEquation<sp/>Equation,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Schema&gt;</highlight></codeline>
<codeline lineno="62" refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator" refkind="compound"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">class<sp/></highlight><highlight class="normal"><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1ac8af6853b3599295b234c822f7a7a42b" kindref="member">VolumeFieldOperator</ref><sp/>final<sp/>:<sp/></highlight><highlight class="keyword">public</highlight><highlight class="normal"><sp/>::mfem::Operator<sp/>{</highlight></codeline>
<codeline lineno="63"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">public</highlight><highlight class="normal">:</highlight></codeline>
<codeline lineno="65"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">explicit</highlight><highlight class="normal"><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1ac8af6853b3599295b234c822f7a7a42b" kindref="member">VolumeFieldOperator</ref>(std::shared_ptr&lt;</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data" kindref="compound">VolumeData&lt;Equation, Schema&gt;</ref>&gt;<sp/>data)<sp/>:<sp/>::mfem::Operator(<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1aff66659e150d476efb64d1a9651cde42" kindref="member">volume_height</ref>(*data),<sp/>data-&gt;<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data_1ab3cfb07d292380f43a899b719d1a8e03" kindref="member">bindings</ref>.<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1_basis_bindings_1ac32a1ab2d307c2d124142778e9b122d6" kindref="member">columns</ref>[<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1aaddd86c07d54c546cbaad5ca845225c6" kindref="member">field_column&lt;Field, Equation&gt;</ref>()]-&gt;size()),<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a0a2bcb43ab53a186d373f2703109467a" kindref="member">m_data</ref>(std::move(data))<sp/>{</highlight></codeline>
<codeline lineno="66"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a829c39e34d0e4089e42f612fe5fd8fce" kindref="member">m_input</ref>.SetSize(width);</highlight></codeline>
<codeline lineno="67"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a097b7ad9d995f760084e64c869a7f398" kindref="member">m_full</ref>.SetSize(<ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a0a2bcb43ab53a186d373f2703109467a" kindref="member">m_data</ref>-&gt;configuration-&gt;discretization.residual_binding.full_size());</highlight></codeline>
<codeline lineno="68"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="69"><highlight class="normal"></highlight></codeline>
<codeline lineno="75"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a6eb2d70eb789b4190aae599c2b69932e" kindref="member">Mult</ref>(const<sp/>::mfem::Vector&amp;<sp/>input,<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a317d4e0bea2ef8780ac3747cfe62bf72" kindref="member">::mfem::Vector</ref>&amp;<sp/>output)</highlight><highlight class="keyword"><sp/>const<sp/>override<sp/></highlight><highlight class="normal">{</highlight></codeline>
<codeline lineno="76"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/>namespace<sp/></highlight><highlight class="normal"><ref refid="namespaceserif_1_1utils_1_1errors" kindref="compound">utils::errors</ref>;</highlight></codeline>
<codeline lineno="77"><highlight class="normal"></highlight></codeline>
<codeline lineno="78"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a2ce0b21e25c656b47e0495e92d737149" kindref="member">validate_volume_data</ref>(*<ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a0a2bcb43ab53a186d373f2703109467a" kindref="member">m_data</ref>);</highlight></codeline>
<codeline lineno="79"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>serif_ensure&lt;SERiFErrorCode::INVALID_DOF_COUNT&gt;(input.Size()<sp/>==<sp/>width,<sp/></highlight><highlight class="stringliteral">&quot;A<sp/>physical<sp/>field<sp/>block<sp/>received<sp/>{}<sp/>coefficients;<sp/>expected<sp/>{}.&quot;</highlight><highlight class="normal">,<sp/>input.Size(),<sp/>width);</highlight></codeline>
<codeline lineno="80"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a829c39e34d0e4089e42f612fe5fd8fce" kindref="member">m_input</ref><sp/>=<sp/>input;</highlight></codeline>
<codeline lineno="81"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a097b7ad9d995f760084e64c869a7f398" kindref="member">m_full</ref><sp/>=<sp/>0.0;</highlight></codeline>
<codeline lineno="82"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>row<sp/>=<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a0a2bcb43ab53a186d373f2703109467a" kindref="member">m_data</ref>-&gt;configuration-&gt;discretization.residual_binding;</highlight></codeline>
<codeline lineno="83"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>column<sp/>=<sp/>*<ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a0a2bcb43ab53a186d373f2703109467a" kindref="member">m_data</ref>-&gt;bindings.columns[<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1aaddd86c07d54c546cbaad5ca845225c6" kindref="member">field_column&lt;Field, Equation&gt;</ref>()];</highlight></codeline>
<codeline lineno="84"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1utils_1_1_compensated_sum" kindref="compound">utils::CompensatedSum</ref><sp/>global_sum;</highlight></codeline>
<codeline lineno="85"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>row_elements<sp/>=<sp/>row.validated_elements();</highlight></codeline>
<codeline lineno="86"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1aec7527f93b877c641a13bc997d00a68e" kindref="member">column_elements</ref><sp/>=<sp/>column.validated_elements();</highlight></codeline>
<codeline lineno="87"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1af0fdb2186807b42ec418f0260e965b68" kindref="member">m_actions</ref>.clear();</highlight></codeline>
<codeline lineno="88"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1aa8b7fcb1af1f0773fbc5cb3f735e4faa" kindref="member">m_elements</ref>.clear();</highlight></codeline>
<codeline lineno="89"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1abb1a893a5fb0670283d9989d1ac6f4e7" kindref="member">detail::for_each_field_element&lt;Field&gt;</ref>(*<ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a0a2bcb43ab53a186d373f2703109467a" kindref="member">m_data</ref>,<sp/>[&amp;]&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Contribution&gt;(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>element)<sp/>{</highlight></codeline>
<codeline lineno="90"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/></highlight><highlight class="normal">Test<sp/>=<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1_operand_evaluator" kindref="compound">OperandEvaluator&lt;equations::TestOperandOf&lt;Contribution&gt;</ref>&gt;;</highlight></codeline>
<codeline lineno="91"><highlight class="normal"></highlight></codeline>
<codeline lineno="92"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1aa8b7fcb1af1f0773fbc5cb3f735e4faa" kindref="member">m_elements</ref>.push_back(element.element);</highlight></codeline>
<codeline lineno="93"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1af0fdb2186807b42ec418f0260e965b68" kindref="member">m_actions</ref>.emplace_back([&amp;element,<sp/>&amp;<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1aec7527f93b877c641a13bc997d00a68e" kindref="member">column_elements</ref>,<sp/></highlight><highlight class="keyword">this</highlight><highlight class="normal">](<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch" kindref="compound">Scratch</ref>&amp;<sp/>local,<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a317d4e0bea2ef8780ac3747cfe62bf72" kindref="member">::mfem::Vector</ref>&amp;<sp/>result)<sp/>{</highlight></codeline>
<codeline lineno="94"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1aec7527f93b877c641a13bc997d00a68e" kindref="member">column_elements</ref>.element_values(element.element,<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a829c39e34d0e4089e42f612fe5fd8fce" kindref="member">m_input</ref>,<sp/>local.<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1a60ff716e7bd96b7f57b837beaabf4009" kindref="member">direction</ref>);</highlight></codeline>
<codeline lineno="95"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1aa70faca762d4549cb73a42d78c5c88f6" kindref="member">field_integrand&lt;Field, Equation, Contribution&gt;</ref>(element,<sp/>local.<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1a60ff716e7bd96b7f57b837beaabf4009" kindref="member">direction</ref>,<sp/>local.<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1a7a5471d0dfda4b81820cf94f62e0b845" kindref="member">integrand</ref>,<sp/>local.<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1abb3b5fcba76df2ef8009a60d029c79bf" kindref="member">samples</ref>,<sp/>local.<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1abb6fef97458992d31bf074024405df1b" kindref="member">workspace</ref>);</highlight></codeline>
<codeline lineno="96"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Test::integrate(element.geometry-&gt;test_basis,<sp/>local.<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1a7a5471d0dfda4b81820cf94f62e0b845" kindref="member">integrand</ref>,<sp/>result,<sp/>local.<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1abb6fef97458992d31bf074024405df1b" kindref="member">workspace</ref>);</highlight></codeline>
<codeline lineno="97"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="98"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="99"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a0044352138c66f942d1b9bb8384130ff" kindref="member">run_actions</ref>();</highlight></codeline>
<codeline lineno="100"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(std::size_t<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref><sp/>=<sp/>0;<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref><sp/>&lt;<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1af0fdb2186807b42ec418f0260e965b68" kindref="member">m_actions</ref>.size();<sp/>++<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>)<sp/>{</highlight></codeline>
<codeline lineno="101"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">constexpr</highlight><highlight class="normal"><sp/>(<ref refid="conceptserif_1_1discretization_1_1blocks_1_1_global_scalar_term" kindref="compound">discretization::blocks::GlobalScalarTerm&lt;typename Equation::Test&gt;</ref>)<sp/>{</highlight></codeline>
<codeline lineno="102"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>global_sum.<ref refid="classserif_1_1utils_1_1_compensated_sum_1a5f9c2f2ba0132149489425256ec1f4e1" kindref="member">add</ref>(<ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1aaa5dd1f9f101dbbdc34f022e59cef35c" kindref="member">m_results</ref>[<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>][0]);</highlight></codeline>
<codeline lineno="103"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}<sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal"><sp/>{</highlight></codeline>
<codeline lineno="104"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>row_elements.add_element(<ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1aa8b7fcb1af1f0773fbc5cb3f735e4faa" kindref="member">m_elements</ref>[<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>],<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1aaa5dd1f9f101dbbdc34f022e59cef35c" kindref="member">m_results</ref>[<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>],<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a097b7ad9d995f760084e64c869a7f398" kindref="member">m_full</ref>);</highlight></codeline>
<codeline lineno="105"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="106"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="107"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">constexpr</highlight><highlight class="normal"><sp/>(<ref refid="conceptserif_1_1discretization_1_1blocks_1_1_global_scalar_term" kindref="compound">discretization::blocks::GlobalScalarTerm&lt;typename Equation::Test&gt;</ref>)<sp/>{</highlight></codeline>
<codeline lineno="108"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a097b7ad9d995f760084e64c869a7f398" kindref="member">m_full</ref>[0]<sp/>=<sp/>global_sum.<ref refid="classserif_1_1utils_1_1_compensated_sum_1a139de3cecb63dc3ddf777bbb961a4963" kindref="member">value</ref>();</highlight></codeline>
<codeline lineno="109"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="110"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>row.accumulate_dual(<ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a097b7ad9d995f760084e64c869a7f398" kindref="member">m_full</ref>,<sp/>output);</highlight></codeline>
<codeline lineno="111"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>row.validate_values(output);</highlight></codeline>
<codeline lineno="112"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="113"><highlight class="normal"></highlight></codeline>
<codeline lineno="115"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1acd2d091c1df269f6ac6e64016b0083cf" kindref="member">MultTranspose</ref>(const<sp/>::mfem::Vector&amp;<sp/>input,<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a317d4e0bea2ef8780ac3747cfe62bf72" kindref="member">::mfem::Vector</ref>&amp;<sp/>output)</highlight><highlight class="keyword"><sp/>const<sp/>override<sp/></highlight><highlight class="normal">{</highlight></codeline>
<codeline lineno="116"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/>namespace<sp/></highlight><highlight class="normal"><ref refid="namespaceserif_1_1utils_1_1errors" kindref="compound">utils::errors</ref>;</highlight></codeline>
<codeline lineno="117"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/></highlight><highlight class="normal">Plan<sp/>=<sp/><ref refid="structserif_1_1operators_1_1_equation_plan" kindref="compound">EquationPlan&lt;Equation&gt;</ref>;</highlight></codeline>
<codeline lineno="118"><highlight class="normal"></highlight></codeline>
<codeline lineno="119"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a2ce0b21e25c656b47e0495e92d737149" kindref="member">validate_volume_data</ref>(*<ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a0a2bcb43ab53a186d373f2703109467a" kindref="member">m_data</ref>);</highlight></codeline>
<codeline lineno="120"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>serif_ensure&lt;SERiFErrorCode::INVALID_DOF_COUNT&gt;(input.Size()<sp/>==<sp/>height,<sp/></highlight><highlight class="stringliteral">&quot;A<sp/>physical<sp/>field<sp/>transpose<sp/>received<sp/>{}<sp/>coefficients;<sp/>expected<sp/>{}.&quot;</highlight><highlight class="normal">,<sp/>input.Size(),<sp/>height);</highlight></codeline>
<codeline lineno="121"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a472345802bd92847b757e238713be96e" kindref="member">m_dual</ref><sp/>=<sp/>input;</highlight></codeline>
<codeline lineno="122"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>row<sp/>=<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a0a2bcb43ab53a186d373f2703109467a" kindref="member">m_data</ref>-&gt;configuration-&gt;discretization.residual_binding;</highlight></codeline>
<codeline lineno="123"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>column<sp/>=<sp/>*<ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a0a2bcb43ab53a186d373f2703109467a" kindref="member">m_data</ref>-&gt;bindings.columns[<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1aaddd86c07d54c546cbaad5ca845225c6" kindref="member">field_column&lt;Field, Equation&gt;</ref>()];</highlight></codeline>
<codeline lineno="124"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a2bd3354a11945df735a764af00157790" kindref="member">m_full_transpose</ref>.SetSize(column.full_size());</highlight></codeline>
<codeline lineno="125"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a2bd3354a11945df735a764af00157790" kindref="member">m_full_transpose</ref><sp/>=<sp/>0.0;</highlight></codeline>
<codeline lineno="126"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1utils_1_1_compensated_sum" kindref="compound">utils::CompensatedSum</ref><sp/>global_sum;</highlight></codeline>
<codeline lineno="127"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>row_elements<sp/>=<sp/>row.validated_elements();</highlight></codeline>
<codeline lineno="128"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1aec7527f93b877c641a13bc997d00a68e" kindref="member">column_elements</ref><sp/>=<sp/>column.validated_elements();</highlight></codeline>
<codeline lineno="129"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1af0fdb2186807b42ec418f0260e965b68" kindref="member">m_actions</ref>.clear();</highlight></codeline>
<codeline lineno="130"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1aa8b7fcb1af1f0773fbc5cb3f735e4faa" kindref="member">m_elements</ref>.clear();</highlight></codeline>
<codeline lineno="131"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1abb1a893a5fb0670283d9989d1ac6f4e7" kindref="member">detail::for_each_field_element&lt;Field&gt;</ref>(*<ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a0a2bcb43ab53a186d373f2703109467a" kindref="member">m_data</ref>,<sp/>[&amp;]&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Contribution&gt;(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>element)<sp/>{</highlight></codeline>
<codeline lineno="132"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/></highlight><highlight class="normal">Test<sp/>=<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1_operand_evaluator" kindref="compound">OperandEvaluator&lt;equations::TestOperandOf&lt;Contribution&gt;</ref>&gt;;</highlight></codeline>
<codeline lineno="133"><highlight class="normal"></highlight></codeline>
<codeline lineno="134"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>One<sp/>action<sp/>per<sp/>field<sp/>operand,<sp/>in<sp/>operand<sp/>order,<sp/>each<sp/>recomputing<sp/>the<sp/>element&apos;s<sp/>test<sp/>samples.</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="135"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Plan::template<sp/>for_each_input&lt;Contribution&gt;([&amp;]&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Operand&gt;(Operand,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/>std::size_t<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>)<sp/>{</highlight></codeline>
<codeline lineno="136"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">constexpr</highlight><highlight class="normal"><sp/>(std::same_as&lt;typename<sp/>Operand::term_type,<sp/>Field&gt;)<sp/>{</highlight></codeline>
<codeline lineno="137"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1aa8b7fcb1af1f0773fbc5cb3f735e4faa" kindref="member">m_elements</ref>.push_back(element.element);</highlight></codeline>
<codeline lineno="138"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1af0fdb2186807b42ec418f0260e965b68" kindref="member">m_actions</ref>.emplace_back([&amp;element,<sp/>&amp;row_elements,<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>,<sp/></highlight><highlight class="keyword">this</highlight><highlight class="normal">](<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch" kindref="compound">Scratch</ref>&amp;<sp/>local,<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a317d4e0bea2ef8780ac3747cfe62bf72" kindref="member">::mfem::Vector</ref>&amp;<sp/>result)<sp/>{</highlight></codeline>
<codeline lineno="139"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/></highlight><highlight class="normal">Evaluator<sp/>=<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1_operand_evaluator" kindref="compound">OperandEvaluator&lt;Operand&gt;</ref>;</highlight></codeline>
<codeline lineno="140"><highlight class="normal"></highlight></codeline>
<codeline lineno="141"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>row_elements.element_values(element.element,<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a472345802bd92847b757e238713be96e" kindref="member">m_dual</ref>,<sp/>local.<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1a60ff716e7bd96b7f57b837beaabf4009" kindref="member">direction</ref>);</highlight></codeline>
<codeline lineno="142"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>element.geometry-&gt;test_basis.evaluate(local.<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1a60ff716e7bd96b7f57b837beaabf4009" kindref="member">direction</ref>,<sp/>local.<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1a2a3680bce77d32e1798536031c61f0f2" kindref="member">test_samples</ref>,<sp/>local.<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1abb6fef97458992d31bf074024405df1b" kindref="member">workspace</ref>);</highlight></codeline>
<codeline lineno="143"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local.<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1a7a5471d0dfda4b81820cf94f62e0b845" kindref="member">integrand</ref>.SetSize(element.basis-&gt;rule-&gt;GetNPoints()<sp/>*<sp/>Evaluator::components);</highlight></codeline>
<codeline lineno="144"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local.<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1a7a5471d0dfda4b81820cf94f62e0b845" kindref="member">integrand</ref><sp/>=<sp/>0.0;</highlight></codeline>
<codeline lineno="145"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>point<sp/>=<sp/>0;<sp/>point<sp/>&lt;<sp/>element.basis-&gt;rule-&gt;GetNPoints();<sp/>++point)<sp/>{</highlight></codeline>
<codeline lineno="146"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>field_component<sp/>=<sp/>0;<sp/>field_component<sp/>&lt;<sp/>Evaluator::components;<sp/>++field_component)<sp/>{</highlight></codeline>
<codeline lineno="147"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>test_component<sp/>=<sp/>0;<sp/>test_component<sp/>&lt;<sp/>Test::components;<sp/>++test_component)<sp/>{</highlight></codeline>
<codeline lineno="148"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>test_index<sp/>=<sp/>point<sp/>*<sp/>Test::components<sp/>+<sp/>test_component;</highlight></codeline>
<codeline lineno="149"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local.<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1a7a5471d0dfda4b81820cf94f62e0b845" kindref="member">integrand</ref>[point<sp/>*<sp/>Evaluator::components<sp/>+<sp/>field_component]<sp/>+=<sp/>element.weighted_field_derivatives(test_index,</highlight></codeline>
<codeline lineno="150"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Plan::template<sp/>component_offset&lt;Operand&gt;()<sp/>+<sp/>field_component)<sp/>*</highlight></codeline>
<codeline lineno="151"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local.<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1a2a3680bce77d32e1798536031c61f0f2" kindref="member">test_samples</ref>[test_index];</highlight></codeline>
<codeline lineno="152"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="153"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="154"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="155"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Evaluator::integrate(element.geometry-&gt;operand_basis[<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>],<sp/>local.<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1a7a5471d0dfda4b81820cf94f62e0b845" kindref="member">integrand</ref>,<sp/>result,<sp/>local.<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1abb6fef97458992d31bf074024405df1b" kindref="member">workspace</ref>);</highlight></codeline>
<codeline lineno="156"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="157"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="158"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="159"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="160"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a0044352138c66f942d1b9bb8384130ff" kindref="member">run_actions</ref>();</highlight></codeline>
<codeline lineno="161"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(std::size_t<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref><sp/>=<sp/>0;<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref><sp/>&lt;<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1af0fdb2186807b42ec418f0260e965b68" kindref="member">m_actions</ref>.size();<sp/>++<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>)<sp/>{</highlight></codeline>
<codeline lineno="162"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">constexpr</highlight><highlight class="normal"><sp/>(<ref refid="conceptserif_1_1discretization_1_1blocks_1_1_global_scalar_term" kindref="compound">discretization::blocks::GlobalScalarTerm&lt;Field&gt;</ref>)<sp/>{</highlight></codeline>
<codeline lineno="163"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>global_sum.<ref refid="classserif_1_1utils_1_1_compensated_sum_1a5f9c2f2ba0132149489425256ec1f4e1" kindref="member">add</ref>(<ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1aaa5dd1f9f101dbbdc34f022e59cef35c" kindref="member">m_results</ref>[<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>][0]);</highlight></codeline>
<codeline lineno="164"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}<sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal"><sp/>{</highlight></codeline>
<codeline lineno="165"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1aec7527f93b877c641a13bc997d00a68e" kindref="member">column_elements</ref>.add_element(<ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1aa8b7fcb1af1f0773fbc5cb3f735e4faa" kindref="member">m_elements</ref>[<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>],<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1aaa5dd1f9f101dbbdc34f022e59cef35c" kindref="member">m_results</ref>[<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>],<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a2bd3354a11945df735a764af00157790" kindref="member">m_full_transpose</ref>);</highlight></codeline>
<codeline lineno="166"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="167"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="168"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">constexpr</highlight><highlight class="normal"><sp/>(<ref refid="conceptserif_1_1discretization_1_1blocks_1_1_global_scalar_term" kindref="compound">discretization::blocks::GlobalScalarTerm&lt;Field&gt;</ref>)<sp/>{</highlight></codeline>
<codeline lineno="169"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a2bd3354a11945df735a764af00157790" kindref="member">m_full_transpose</ref>[0]<sp/>=<sp/>global_sum.<ref refid="classserif_1_1utils_1_1_compensated_sum_1a139de3cecb63dc3ddf777bbb961a4963" kindref="member">value</ref>();</highlight></codeline>
<codeline lineno="170"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="171"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>column.accumulate_dual(<ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a2bd3354a11945df735a764af00157790" kindref="member">m_full_transpose</ref>,<sp/>output);</highlight></codeline>
<codeline lineno="172"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>column.validate_values(output);</highlight></codeline>
<codeline lineno="173"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="174"><highlight class="normal"></highlight></codeline>
<codeline lineno="175"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">private</highlight><highlight class="normal">:</highlight></codeline>
<codeline lineno="177" refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch" refkind="compound"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">struct<sp/></highlight><highlight class="normal"><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch" kindref="compound">Scratch</ref><sp/>{</highlight></codeline>
<codeline lineno="178"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a317d4e0bea2ef8780ac3747cfe62bf72" kindref="member">::mfem::Vector</ref><sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1a60ff716e7bd96b7f57b837beaabf4009" kindref="member">direction</ref>,<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1a7a5471d0dfda4b81820cf94f62e0b845" kindref="member">integrand</ref>,<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1abb3b5fcba76df2ef8009a60d029c79bf" kindref="member">samples</ref>,<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1a2a3680bce77d32e1798536031c61f0f2" kindref="member">test_samples</ref>;</highlight></codeline>
<codeline lineno="179"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="structserif_1_1discretization_1_1backend_1_1mfem_1_1_basis_workspace" kindref="compound">BasisWorkspace</ref><sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch_1abb6fef97458992d31bf074024405df1b" kindref="member">workspace</ref>;</highlight></codeline>
<codeline lineno="180"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>};</highlight></codeline>
<codeline lineno="181"><highlight class="normal"></highlight></codeline>
<codeline lineno="183"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a0044352138c66f942d1b9bb8384130ff" kindref="member">run_actions</ref>()</highlight><highlight class="keyword"><sp/>const<sp/></highlight><highlight class="normal">{</highlight></codeline>
<codeline lineno="184"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1aaa5dd1f9f101dbbdc34f022e59cef35c" kindref="member">m_results</ref>.resize(<ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1af0fdb2186807b42ec418f0260e965b68" kindref="member">m_actions</ref>.size());</highlight></codeline>
<codeline lineno="185"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a450a0bf4b60130fcefe0ffeb9262c734" kindref="member">m_scratch</ref>.resize(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(std::max(1,<sp/><ref refid="namespaceserif_1_1utils_1_1parallel_1a845c655da35a46d0be87880f0e4fa2d9" kindref="member">utils::parallel::worker_count</ref>())));</highlight></codeline>
<codeline lineno="186"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1utils_1_1parallel_1a453320d288c9e42300bdc59ee8dccd2d" kindref="member">utils::parallel::for_each_index</ref>(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="keywordtype">int</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(<ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1af0fdb2186807b42ec418f0260e965b68" kindref="member">m_actions</ref>.size()),<sp/>[&amp;](</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>worker)<sp/>{</highlight></codeline>
<codeline lineno="187"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>m_actions[static_cast&lt;std::size_t&gt;(index)](m_scratch[static_cast&lt;std::size_t&gt;(worker)],<sp/>m_results[static_cast&lt;std::size_t&gt;(index)]);</highlight></codeline>
<codeline lineno="188"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="189"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="190"><highlight class="normal"></highlight></codeline>
<codeline lineno="191"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::shared_ptr&lt;const<sp/>VolumeData&lt;Equation,<sp/>Schema&gt;&gt;<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a0a2bcb43ab53a186d373f2703109467a" kindref="member">m_data</ref>;</highlight></codeline>
<codeline lineno="192"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mutable<sp/>::mfem::Vector<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a829c39e34d0e4089e42f612fe5fd8fce" kindref="member">m_input</ref>,<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a097b7ad9d995f760084e64c869a7f398" kindref="member">m_full</ref>;</highlight></codeline>
<codeline lineno="193"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mutable<sp/>::mfem::Vector<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a472345802bd92847b757e238713be96e" kindref="member">m_dual</ref>,<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a2bd3354a11945df735a764af00157790" kindref="member">m_full_transpose</ref>;</highlight></codeline>
<codeline lineno="194"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">mutable</highlight><highlight class="normal"><sp/>std::vector&lt;std::function&lt;void(Scratch&amp;,<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a317d4e0bea2ef8780ac3747cfe62bf72" kindref="member">::mfem::Vector</ref>&amp;)&gt;&gt;<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1af0fdb2186807b42ec418f0260e965b68" kindref="member">m_actions</ref>;</highlight></codeline>
<codeline lineno="195"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">mutable</highlight><highlight class="normal"><sp/>std::vector&lt;int&gt;<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1aa8b7fcb1af1f0773fbc5cb3f735e4faa" kindref="member">m_elements</ref>;</highlight></codeline>
<codeline lineno="196"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">mutable</highlight><highlight class="normal"><sp/>std::vector&lt;::mfem::Vector&gt;<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1aaa5dd1f9f101dbbdc34f022e59cef35c" kindref="member">m_results</ref>;</highlight></codeline>
<codeline lineno="197"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">mutable</highlight><highlight class="normal"><sp/>std::vector&lt;Scratch&gt;<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1a450a0bf4b60130fcefe0ffeb9262c734" kindref="member">m_scratch</ref>;</highlight></codeline>
<codeline lineno="198"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>};</highlight></codeline>
<codeline lineno="199"><highlight class="normal"><sp/><sp/><sp/><sp/>}<sp/></highlight><highlight class="comment">//<sp/>namespace<sp/>detail</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="200"><highlight class="normal"></highlight></codeline>
<codeline lineno="201"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">namespace<sp/></highlight><highlight class="normal"><ref refid="namespaceserif_1_1operators_1_1detail" kindref="compound">detail</ref><sp/>{</highlight></codeline>
<codeline lineno="203" refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probed_element_block" refkind="compound"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">struct<sp/></highlight><highlight class="normal"><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probed_element_block" kindref="compound">ProbedElementBlock</ref><sp/>{</highlight></codeline>
<codeline lineno="204"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;int&gt;<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probed_element_block_1acdf4a0cb259e53e95328b314c29515b3" kindref="member">rows</ref>;<sp/><sp/><sp/><sp/></highlight></codeline>
<codeline lineno="205"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;int&gt;<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probed_element_block_1a034ec2a1be557beab8e41a90d71779f6" kindref="member">columns</ref>;<sp/></highlight></codeline>
<codeline lineno="206"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;double&gt;<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probed_element_block_1a0343f4b4f406b228fad01f92a9a507e0" kindref="member">values</ref>;</highlight></codeline>
<codeline lineno="207"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>};</highlight></codeline>
<codeline lineno="208"><highlight class="normal"></highlight></codeline>
<codeline lineno="210" refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probe_scratch" refkind="compound"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">struct<sp/></highlight><highlight class="normal"><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probe_scratch" kindref="compound">ProbeScratch</ref><sp/>{</highlight></codeline>
<codeline lineno="211"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a317d4e0bea2ef8780ac3747cfe62bf72" kindref="member">::mfem::Vector</ref><sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probe_scratch_1a19e29e064af1d76e2f46686bb115d9f0" kindref="member">direction</ref>,<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probe_scratch_1a7924feeb5b0d05e207217eb0a4aa33ea" kindref="member">integrand</ref>,<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probe_scratch_1a3711718ebd1ec7712776473ea984cdbe" kindref="member">samples</ref>,<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probe_scratch_1aea40c58d8c9f8bfd1a54b05df03029bc" kindref="member">values</ref>;</highlight></codeline>
<codeline lineno="212"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="structserif_1_1discretization_1_1backend_1_1mfem_1_1_basis_workspace" kindref="compound">BasisWorkspace</ref><sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probe_scratch_1ab760181a6a873ffc689ce24ba9c2daf4" kindref="member">workspace</ref>;</highlight></codeline>
<codeline lineno="213"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>};</highlight></codeline>
<codeline lineno="214"><highlight class="normal"></highlight></codeline>
<codeline lineno="216" refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_coefficient_expansion" refkind="compound"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">struct<sp/></highlight><highlight class="normal"><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_coefficient_expansion" kindref="compound">CoefficientExpansion</ref><sp/>{</highlight></codeline>
<codeline lineno="217"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;int&gt;<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_coefficient_expansion_1adfb2dbcf9a74610cdab13a9144657bc7" kindref="member">offsets</ref>{0};</highlight></codeline>
<codeline lineno="218"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;int&gt;<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_coefficient_expansion_1afde680b7492057acf5b58f75ff1b114a" kindref="member">indices</ref>;</highlight></codeline>
<codeline lineno="219"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;double&gt;<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_coefficient_expansion_1af485d41406c690d0712dffef6e5ccf34" kindref="member">weights</ref>;</highlight></codeline>
<codeline lineno="220"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>};</highlight></codeline>
<codeline lineno="221"><highlight class="normal"></highlight></codeline>
<codeline lineno="223" refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_constrained_element_block" refkind="compound"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">struct<sp/></highlight><highlight class="normal"><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_constrained_element_block" kindref="compound">ConstrainedElementBlock</ref><sp/>{</highlight></codeline>
<codeline lineno="224"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_constrained_element_block_1a0caf134838ca6d9487ebe11db477f57b" kindref="member">row_count</ref>{0};</highlight></codeline>
<codeline lineno="225"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;double&gt;<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_constrained_element_block_1a59c6c79b825a18bb5675ce9600b1bf3d" kindref="member">values</ref>;</highlight></codeline>
<codeline lineno="226"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_coefficient_expansion" kindref="compound">CoefficientExpansion</ref><sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_constrained_element_block_1a4e7da20971ccb1b19497e98632f8eb63" kindref="member">rows</ref>;</highlight></codeline>
<codeline lineno="227"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_coefficient_expansion" kindref="compound">CoefficientExpansion</ref><sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_constrained_element_block_1a6965ac8e345623314c878d8e6b850262" kindref="member">columns</ref>;</highlight></codeline>
<codeline lineno="228"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>};</highlight></codeline>
<codeline lineno="229"><highlight class="normal"></highlight></codeline>
<codeline lineno="231"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>[[nodiscard]]<sp/></highlight><highlight class="keyword">inline</highlight><highlight class="normal"><sp/>std::shared_ptr&lt;const<sp/>::mfem::SparseMatrix&gt;<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1ae7dfb772f1834905d73ff43cfa43c710" kindref="member">make_csr</ref>(</highlight></codeline>
<codeline lineno="232"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/>std::vector&lt;std::vector&lt;int&gt;&gt;&amp;<sp/>row_columns,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/>std::vector&lt;std::vector&lt;double&gt;&gt;&amp;<sp/>row_values,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>height,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>width</highlight></codeline>
<codeline lineno="233"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>)<sp/>{</highlight></codeline>
<codeline lineno="234"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal">*<sp/>I<sp/>=<sp/></highlight><highlight class="keyword">new</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal">[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(height)<sp/>+<sp/>1];</highlight></codeline>
<codeline lineno="235"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>I[0]<sp/>=<sp/>0;</highlight></codeline>
<codeline lineno="236"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>row<sp/>=<sp/>0;<sp/>row<sp/>&lt;<sp/>height;<sp/>++row)<sp/>{<sp/>I[row<sp/>+<sp/>1]<sp/>=<sp/>I[row]<sp/>+<sp/></highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="keywordtype">int</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(row_columns[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(row)].size());<sp/>}</highlight></codeline>
<codeline lineno="237"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal">*<sp/>J<sp/>=<sp/></highlight><highlight class="keyword">new</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal">[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(I[height])];</highlight></codeline>
<codeline lineno="238"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal">*<sp/>A<sp/>=<sp/></highlight><highlight class="keyword">new</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal">[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(I[height])];</highlight></codeline>
<codeline lineno="239"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/>sorted<sp/>=<sp/></highlight><highlight class="keyword">true</highlight><highlight class="normal">;</highlight></codeline>
<codeline lineno="240"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>row<sp/>=<sp/>0;<sp/>row<sp/>&lt;<sp/>height;<sp/>++row)<sp/>{</highlight></codeline>
<codeline lineno="241"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>last_column<sp/>=<sp/>-1;</highlight></codeline>
<codeline lineno="242"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>columns<sp/>=<sp/>row_columns[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(row)];</highlight></codeline>
<codeline lineno="243"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1adf1d7a29193c8b8a6cd17745686a04d8" kindref="member">values</ref><sp/>=<sp/>row_values[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(row)];</highlight></codeline>
<codeline lineno="244"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(std::size_t<sp/>k<sp/>=<sp/>0;<sp/>k<sp/>&lt;<sp/>columns.size();<sp/>++k)<sp/>{</highlight></codeline>
<codeline lineno="245"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>J[I[row]<sp/>+<sp/></highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="keywordtype">int</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(k)]<sp/>=<sp/>columns[k];</highlight></codeline>
<codeline lineno="246"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>A[I[row]<sp/>+<sp/></highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="keywordtype">int</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(k)]<sp/>=<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1adf1d7a29193c8b8a6cd17745686a04d8" kindref="member">values</ref>[k];</highlight></codeline>
<codeline lineno="247"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(last_column<sp/>&gt;<sp/>columns[k])<sp/>{<sp/>sorted<sp/>=<sp/></highlight><highlight class="keyword">false</highlight><highlight class="normal">;<sp/>}</highlight></codeline>
<codeline lineno="248"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>last_column<sp/>=<sp/>columns[k];</highlight></codeline>
<codeline lineno="249"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="250"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="251"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>std::make_shared&lt;::mfem::SparseMatrix&gt;(I,<sp/>J,<sp/>A,<sp/>height,<sp/>width,<sp/></highlight><highlight class="keyword">true</highlight><highlight class="normal">,<sp/></highlight><highlight class="keyword">true</highlight><highlight class="normal">,<sp/>sorted);</highlight></codeline>
<codeline lineno="252"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="253"><highlight class="normal"></highlight></codeline>
<codeline lineno="262"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>[[nodiscard]]<sp/></highlight><highlight class="keyword">inline</highlight><highlight class="normal"><sp/>std::shared_ptr&lt;const<sp/>::mfem::SparseMatrix&gt;<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1ad9796d4821ba553a3da6dde44ab7d171" kindref="member">finalize_probed_blocks</ref>(</highlight></codeline>
<codeline lineno="263"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/>std::vector&lt;ProbedElementBlock&gt;&amp;<sp/>blocks,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>height,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>width</highlight></codeline>
<codeline lineno="264"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>)<sp/>{</highlight></codeline>
<codeline lineno="265"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>Row<sp/>-&gt;<sp/>(block,<sp/>local<sp/>row)<sp/>in<sp/>insertion<sp/>order:<sp/>blocks<sp/>ascending,<sp/>then<sp/>local<sp/>rows<sp/>ascending.</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="266"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;int&gt;<sp/>offsets(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(height)<sp/>+<sp/>1,<sp/>0);</highlight></codeline>
<codeline lineno="267"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>block<sp/>:<sp/>blocks)<sp/>{</highlight></codeline>
<codeline lineno="268"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>row<sp/>:<sp/>block.rows)<sp/>{</highlight></codeline>
<codeline lineno="269"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(row<sp/>&gt;=<sp/>0)<sp/>{<sp/>++offsets[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(row)<sp/>+<sp/>1];<sp/>}</highlight></codeline>
<codeline lineno="270"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="271"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="272"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>row<sp/>=<sp/>0;<sp/>row<sp/>&lt;<sp/>height;<sp/>++row)<sp/>{<sp/>offsets[row<sp/>+<sp/>1]<sp/>+=<sp/>offsets[row];<sp/>}</highlight></codeline>
<codeline lineno="273"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;int&gt;<sp/>incidence_block(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(offsets.back()));</highlight></codeline>
<codeline lineno="274"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;int&gt;<sp/>incidence_row(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(offsets.back()));</highlight></codeline>
<codeline lineno="275"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>{</highlight></codeline>
<codeline lineno="276"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;int&gt;<sp/>cursor(offsets.begin(),<sp/>offsets.end()<sp/>-<sp/>1);</highlight></codeline>
<codeline lineno="277"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>block<sp/>=<sp/>0;<sp/>block<sp/>&lt;<sp/>static_cast&lt;int&gt;(blocks.size());<sp/>++block)<sp/>{</highlight></codeline>
<codeline lineno="278"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>rows<sp/>=<sp/>blocks[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(block)].rows;</highlight></codeline>
<codeline lineno="279"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>local<sp/>=<sp/>0;<sp/>local<sp/>&lt;<sp/>static_cast&lt;int&gt;(rows.size());<sp/>++local)<sp/>{</highlight></codeline>
<codeline lineno="280"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(rows[local]<sp/>&gt;=<sp/>0)<sp/>{</highlight></codeline>
<codeline lineno="281"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>slot<sp/>=<sp/>cursor[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(rows[local])]++;</highlight></codeline>
<codeline lineno="282"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>incidence_block[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(slot)]<sp/>=<sp/>block;</highlight></codeline>
<codeline lineno="283"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>incidence_row[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(slot)]<sp/>=<sp/>local;</highlight></codeline>
<codeline lineno="284"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="285"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="286"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="287"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="288"><highlight class="normal"></highlight></codeline>
<codeline lineno="289"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">struct<sp/></highlight><highlight class="normal">RowScratch<sp/>{</highlight></codeline>
<codeline lineno="290"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;int&gt;<sp/>slot_of_column;</highlight></codeline>
<codeline lineno="291"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;int&gt;<sp/>columns;</highlight></codeline>
<codeline lineno="292"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;double&gt;<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1adf1d7a29193c8b8a6cd17745686a04d8" kindref="member">values</ref>;</highlight></codeline>
<codeline lineno="293"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>};</highlight></codeline>
<codeline lineno="294"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;std::vector&lt;int&gt;&gt;<sp/>row_columns(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(height));</highlight></codeline>
<codeline lineno="295"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;std::vector&lt;double&gt;&gt;<sp/>row_values(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(height));</highlight></codeline>
<codeline lineno="296"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;RowScratch&gt;<sp/>scratch(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(<ref refid="namespaceserif_1_1utils_1_1parallel_1a845c655da35a46d0be87880f0e4fa2d9" kindref="member">utils::parallel::worker_count</ref>()));</highlight></codeline>
<codeline lineno="297"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1utils_1_1parallel_1a453320d288c9e42300bdc59ee8dccd2d" kindref="member">utils::parallel::for_each_index</ref>(height,<sp/>[&amp;](</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>row,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>worker)<sp/>{</highlight></codeline>
<codeline lineno="298"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>RowScratch&amp;<sp/>local<sp/>=<sp/>scratch[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(worker)];</highlight></codeline>
<codeline lineno="299"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local.slot_of_column.resize(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(width),<sp/>-1);</highlight></codeline>
<codeline lineno="300"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local.columns.clear();</highlight></codeline>
<codeline lineno="301"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local.values.clear();</highlight></codeline>
<codeline lineno="302"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>entry<sp/>=<sp/>offsets[row];<sp/>entry<sp/>&lt;<sp/>offsets[row<sp/>+<sp/>1];)<sp/>{</highlight></codeline>
<codeline lineno="303"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>Insertions<sp/>for<sp/>one<sp/>block<sp/>come<sp/>column<sp/>by<sp/>column,<sp/>each<sp/>column<sp/>visiting<sp/>its<sp/>local<sp/>rows<sp/>in<sp/>order.</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="304"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>block_index<sp/>=<sp/>incidence_block[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(entry)];</highlight></codeline>
<codeline lineno="305"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>end<sp/>=<sp/>entry;</highlight></codeline>
<codeline lineno="306"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>(end<sp/>&lt;<sp/>offsets[row<sp/>+<sp/>1]<sp/>&amp;&amp;<sp/>incidence_block[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(end)]<sp/>==<sp/>block_index)<sp/>{<sp/>++end;<sp/>}</highlight></codeline>
<codeline lineno="307"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>block<sp/>=<sp/>blocks[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(block_index)];</highlight></codeline>
<codeline lineno="308"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>block_rows<sp/>=<sp/></highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="keywordtype">int</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(block.rows.size());</highlight></codeline>
<codeline lineno="309"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>column<sp/>=<sp/>0;<sp/>column<sp/>&lt;<sp/>static_cast&lt;int&gt;(block.columns.size());<sp/>++column)<sp/>{</highlight></codeline>
<codeline lineno="310"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>column_index<sp/>=<sp/>block.columns[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(column)];</highlight></codeline>
<codeline lineno="311"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(column_index<sp/>&lt;<sp/>0)<sp/>{<sp/></highlight><highlight class="keywordflow">continue</highlight><highlight class="normal">;<sp/>}</highlight></codeline>
<codeline lineno="312"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal">&amp;<sp/>slot<sp/>=<sp/>local.slot_of_column[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(column_index)];</highlight></codeline>
<codeline lineno="313"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>k<sp/>=<sp/>entry;<sp/>k<sp/>&lt;<sp/>end;<sp/>++k)<sp/>{</highlight></codeline>
<codeline lineno="314"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(slot<sp/>&lt;<sp/>0)<sp/>{</highlight></codeline>
<codeline lineno="315"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>slot<sp/>=<sp/></highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="keywordtype">int</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(local.columns.size());</highlight></codeline>
<codeline lineno="316"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local.columns.push_back(column_index);</highlight></codeline>
<codeline lineno="317"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local.values.push_back(0.0);</highlight></codeline>
<codeline lineno="318"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="319"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local.values[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(slot)]<sp/>+=<sp/>block.values[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(column<sp/>*<sp/>block_rows<sp/>+<sp/>incidence_row[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(k)])];</highlight></codeline>
<codeline lineno="320"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="321"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="322"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>entry<sp/>=<sp/>end;</highlight></codeline>
<codeline lineno="323"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="324"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>columns<sp/>=<sp/>row_columns[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(row)];</highlight></codeline>
<codeline lineno="325"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1adf1d7a29193c8b8a6cd17745686a04d8" kindref="member">values</ref><sp/>=<sp/>row_values[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(row)];</highlight></codeline>
<codeline lineno="326"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(std::size_t<sp/>slot<sp/>=<sp/>local.columns.size();<sp/>slot--<sp/>&gt;<sp/>0;)<sp/>{</highlight></codeline>
<codeline lineno="327"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local.slot_of_column[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(local.columns[slot])]<sp/>=<sp/>-1;</highlight></codeline>
<codeline lineno="328"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(local.values[slot]<sp/>==<sp/>0.0)<sp/>{<sp/></highlight><highlight class="keywordflow">continue</highlight><highlight class="normal">;<sp/>}</highlight></codeline>
<codeline lineno="329"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>columns.push_back(local.columns[slot]);</highlight></codeline>
<codeline lineno="330"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1adf1d7a29193c8b8a6cd17745686a04d8" kindref="member">values</ref>.push_back(local.values[slot]);</highlight></codeline>
<codeline lineno="331"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="332"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="333"><highlight class="normal"></highlight></codeline>
<codeline lineno="334"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1ae7dfb772f1834905d73ff43cfa43c710" kindref="member">make_csr</ref>(row_columns,<sp/>row_values,<sp/>height,<sp/>width);</highlight></codeline>
<codeline lineno="335"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="336"><highlight class="normal"></highlight></codeline>
<codeline lineno="344"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>[[nodiscard]]<sp/></highlight><highlight class="keyword">inline</highlight><highlight class="normal"><sp/>std::shared_ptr&lt;const<sp/>::mfem::SparseMatrix&gt;<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1a336109e5f1a8feca9a40eb97491c8fe1" kindref="member">finalize_constrained_blocks</ref>(</highlight></codeline>
<codeline lineno="345"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/>std::vector&lt;ConstrainedElementBlock&gt;&amp;<sp/>blocks,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>height,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>width</highlight></codeline>
<codeline lineno="346"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>)<sp/>{</highlight></codeline>
<codeline lineno="347"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>Row<sp/>-&gt;<sp/>(block,<sp/>local<sp/>row,<sp/>weight)<sp/>in<sp/>insertion<sp/>order:<sp/>blocks,<sp/>then<sp/>local<sp/>rows,<sp/>then<sp/>their<sp/>coefficients.</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="348"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;int&gt;<sp/>offsets(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(height)<sp/>+<sp/>1,<sp/>0);</highlight></codeline>
<codeline lineno="349"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>block<sp/>:<sp/>blocks)<sp/>{</highlight></codeline>
<codeline lineno="350"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>row<sp/>:<sp/>block.rows.indices)<sp/>{<sp/>++offsets[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(row)<sp/>+<sp/>1];<sp/>}</highlight></codeline>
<codeline lineno="351"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="352"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>row<sp/>=<sp/>0;<sp/>row<sp/>&lt;<sp/>height;<sp/>++row)<sp/>{<sp/>offsets[row<sp/>+<sp/>1]<sp/>+=<sp/>offsets[row];<sp/>}</highlight></codeline>
<codeline lineno="353"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;int&gt;<sp/>incidence_block(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(offsets.back()));</highlight></codeline>
<codeline lineno="354"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;int&gt;<sp/>incidence_row(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(offsets.back()));</highlight></codeline>
<codeline lineno="355"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;double&gt;<sp/>incidence_weight(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(offsets.back()));</highlight></codeline>
<codeline lineno="356"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>{</highlight></codeline>
<codeline lineno="357"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;int&gt;<sp/>cursor(offsets.begin(),<sp/>offsets.end()<sp/>-<sp/>1);</highlight></codeline>
<codeline lineno="358"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>block<sp/>=<sp/>0;<sp/>block<sp/>&lt;<sp/>static_cast&lt;int&gt;(blocks.size());<sp/>++block)<sp/>{</highlight></codeline>
<codeline lineno="359"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>rows<sp/>=<sp/>blocks[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(block)].rows;</highlight></codeline>
<codeline lineno="360"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>local<sp/>=<sp/>0;<sp/>local<sp/>+<sp/>1<sp/>&lt;<sp/></highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="keywordtype">int</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(rows.offsets.size());<sp/>++local)<sp/>{</highlight></codeline>
<codeline lineno="361"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>k<sp/>=<sp/>rows.offsets[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(local)];<sp/>k<sp/>&lt;<sp/>rows.offsets[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(local)<sp/>+<sp/>1];<sp/>++k)<sp/>{</highlight></codeline>
<codeline lineno="362"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>slot<sp/>=<sp/>cursor[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(rows.indices[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(k)])]++;</highlight></codeline>
<codeline lineno="363"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>incidence_block[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(slot)]<sp/>=<sp/>block;</highlight></codeline>
<codeline lineno="364"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>incidence_row[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(slot)]<sp/>=<sp/>local;</highlight></codeline>
<codeline lineno="365"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>incidence_weight[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(slot)]<sp/>=<sp/>rows.weights[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(k)];</highlight></codeline>
<codeline lineno="366"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="367"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="368"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="369"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="370"><highlight class="normal"></highlight></codeline>
<codeline lineno="371"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">struct<sp/></highlight><highlight class="normal">RowScratch<sp/>{</highlight></codeline>
<codeline lineno="372"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;int&gt;<sp/>slot_of_column;</highlight></codeline>
<codeline lineno="373"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;int&gt;<sp/>columns;</highlight></codeline>
<codeline lineno="374"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;double&gt;<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1adf1d7a29193c8b8a6cd17745686a04d8" kindref="member">values</ref>;</highlight></codeline>
<codeline lineno="375"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>};</highlight></codeline>
<codeline lineno="376"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;std::vector&lt;int&gt;&gt;<sp/>row_columns(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(height));</highlight></codeline>
<codeline lineno="377"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;std::vector&lt;double&gt;&gt;<sp/>row_values(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(height));</highlight></codeline>
<codeline lineno="378"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;RowScratch&gt;<sp/>scratch(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(<ref refid="namespaceserif_1_1utils_1_1parallel_1a845c655da35a46d0be87880f0e4fa2d9" kindref="member">utils::parallel::worker_count</ref>()));</highlight></codeline>
<codeline lineno="379"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1utils_1_1parallel_1a453320d288c9e42300bdc59ee8dccd2d" kindref="member">utils::parallel::for_each_index</ref>(height,<sp/>[&amp;](</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>row,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>worker)<sp/>{</highlight></codeline>
<codeline lineno="380"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>RowScratch&amp;<sp/>local<sp/>=<sp/>scratch[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(worker)];</highlight></codeline>
<codeline lineno="381"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local.slot_of_column.resize(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(width),<sp/>-1);</highlight></codeline>
<codeline lineno="382"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local.columns.clear();</highlight></codeline>
<codeline lineno="383"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local.values.clear();</highlight></codeline>
<codeline lineno="384"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>entry<sp/>=<sp/>offsets[row];<sp/>entry<sp/>&lt;<sp/>offsets[row<sp/>+<sp/>1];)<sp/>{</highlight></codeline>
<codeline lineno="385"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>block_index<sp/>=<sp/>incidence_block[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(entry)];</highlight></codeline>
<codeline lineno="386"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>end<sp/>=<sp/>entry;</highlight></codeline>
<codeline lineno="387"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>(end<sp/>&lt;<sp/>offsets[row<sp/>+<sp/>1]<sp/>&amp;&amp;<sp/>incidence_block[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(end)]<sp/>==<sp/>block_index)<sp/>{<sp/>++end;<sp/>}</highlight></codeline>
<codeline lineno="388"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>block<sp/>=<sp/>blocks[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(block_index)];</highlight></codeline>
<codeline lineno="389"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>columns<sp/>=<sp/>block.columns;</highlight></codeline>
<codeline lineno="390"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>column<sp/>=<sp/>0;<sp/>column<sp/>+<sp/>1<sp/>&lt;<sp/></highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="keywordtype">int</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(columns.offsets.size());<sp/>++column)<sp/>{</highlight></codeline>
<codeline lineno="391"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>k<sp/>=<sp/>entry;<sp/>k<sp/>&lt;<sp/>end;<sp/>++k)<sp/>{</highlight></codeline>
<codeline lineno="392"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1discretization_1_1backend_1_1mfem_1af75f98db90618153ea4ca169945733f7a2063c1608d6e0baf80249c42e2be5804" kindref="member">value</ref><sp/>=<sp/>block.values[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(column)<sp/>*<sp/></highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(block.row_count)<sp/>+</highlight></codeline>
<codeline lineno="393"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(incidence_row[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(k)])];</highlight></codeline>
<codeline lineno="394"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/>row_weight<sp/>=<sp/>incidence_weight[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(k)];</highlight></codeline>
<codeline lineno="395"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>c<sp/>=<sp/>columns.offsets[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(column)];<sp/>c<sp/>&lt;<sp/>columns.offsets[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(column)<sp/>+<sp/>1];<sp/>++c)<sp/>{</highlight></codeline>
<codeline lineno="396"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal">&amp;<sp/>slot<sp/>=<sp/>local.slot_of_column[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(columns.indices[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(c)])];</highlight></codeline>
<codeline lineno="397"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(slot<sp/>&lt;<sp/>0)<sp/>{</highlight></codeline>
<codeline lineno="398"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>slot<sp/>=<sp/></highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="keywordtype">int</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(local.columns.size());</highlight></codeline>
<codeline lineno="399"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local.columns.push_back(columns.indices[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(c)]);</highlight></codeline>
<codeline lineno="400"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local.values.push_back(0.0);</highlight></codeline>
<codeline lineno="401"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="402"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>A<sp/>separate<sp/>statement<sp/>keeps<sp/>the<sp/>product<sp/>unfused,<sp/>as<sp/>when<sp/>it<sp/>was<sp/>passed<sp/>to<sp/>SparseMatrix::Add.</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="403"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/>contribution<sp/>=<sp/>row_weight<sp/>*<sp/><ref refid="namespaceserif_1_1discretization_1_1backend_1_1mfem_1af75f98db90618153ea4ca169945733f7a2063c1608d6e0baf80249c42e2be5804" kindref="member">value</ref><sp/>*<sp/>columns.weights[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(c)];</highlight></codeline>
<codeline lineno="404"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local.values[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(slot)]<sp/>+=<sp/>contribution;</highlight></codeline>
<codeline lineno="405"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="406"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="407"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="408"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>entry<sp/>=<sp/>end;</highlight></codeline>
<codeline lineno="409"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="410"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>columns<sp/>=<sp/>row_columns[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(row)];</highlight></codeline>
<codeline lineno="411"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1adf1d7a29193c8b8a6cd17745686a04d8" kindref="member">values</ref><sp/>=<sp/>row_values[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(row)];</highlight></codeline>
<codeline lineno="412"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(std::size_t<sp/>slot<sp/>=<sp/>local.columns.size();<sp/>slot--<sp/>&gt;<sp/>0;)<sp/>{</highlight></codeline>
<codeline lineno="413"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>local.slot_of_column[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(local.columns[slot])]<sp/>=<sp/>-1;</highlight></codeline>
<codeline lineno="414"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(local.values[slot]<sp/>==<sp/>0.0)<sp/>{<sp/></highlight><highlight class="keywordflow">continue</highlight><highlight class="normal">;<sp/>}</highlight></codeline>
<codeline lineno="415"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>columns.push_back(local.columns[slot]);</highlight></codeline>
<codeline lineno="416"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1adf1d7a29193c8b8a6cd17745686a04d8" kindref="member">values</ref>.push_back(local.values[slot]);</highlight></codeline>
<codeline lineno="417"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="418"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="419"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1ae7dfb772f1834905d73ff43cfa43c710" kindref="member">make_csr</ref>(row_columns,<sp/>row_values,<sp/>height,<sp/>width);</highlight></codeline>
<codeline lineno="420"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="421"><highlight class="normal"><sp/><sp/><sp/><sp/>}<sp/></highlight><highlight class="comment">//<sp/>namespace<sp/>detail</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="422"><highlight class="normal"></highlight></codeline>
<codeline lineno="424"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">template</highlight><highlight class="normal"><sp/>&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Field,<sp/>VolumeEquation<sp/>Equation,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Schema&gt;</highlight></codeline>
<codeline lineno="425"><highlight class="normal"><sp/><sp/><sp/><sp/>[[nodiscard]]<sp/>std::shared_ptr&lt;const<sp/>::mfem::SparseMatrix&gt;<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a2e74a168003d1826779050608d9271f8" kindref="member">assemble_volume_field</ref>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data" kindref="compound">VolumeData&lt;Equation, Schema&gt;</ref>&amp;<sp/>data)<sp/>{</highlight></codeline>
<codeline lineno="426"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a2ce0b21e25c656b47e0495e92d737149" kindref="member">validate_volume_data</ref>(data);</highlight></codeline>
<codeline lineno="427"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>row_binding<sp/>=<sp/>data.configuration-&gt;discretization.residual_binding;</highlight></codeline>
<codeline lineno="428"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>column_binding<sp/>=<sp/>*data.bindings.columns[<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1aaddd86c07d54c546cbaad5ca845225c6" kindref="member">detail::field_column&lt;Field, Equation&gt;</ref>()];</highlight></codeline>
<codeline lineno="429"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(!row_binding.constrained()<sp/>&amp;&amp;<sp/>!column_binding.constrained())<sp/>{</highlight></codeline>
<codeline lineno="430"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>Probe<sp/>elements<sp/>concurrently<sp/>(the<sp/>same<sp/>operations<sp/>per<sp/>column<sp/>as<sp/>below),<sp/>then<sp/>build<sp/>the<sp/>rows.</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="431"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>row_elements<sp/>=<sp/>row_binding.validated_elements();</highlight></codeline>
<codeline lineno="432"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1aec7527f93b877c641a13bc997d00a68e" kindref="member">column_elements</ref><sp/>=<sp/>column_binding.validated_elements();</highlight></codeline>
<codeline lineno="433"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;std::function&lt;void(<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probed_element_block" kindref="compound">detail::ProbedElementBlock</ref>&amp;,<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probe_scratch" kindref="compound">detail::ProbeScratch</ref>&amp;)&gt;&gt;<sp/>probes;</highlight></codeline>
<codeline lineno="434"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1abb1a893a5fb0670283d9989d1ac6f4e7" kindref="member">detail::for_each_field_element&lt;Field&gt;</ref>(data,<sp/>[&amp;]&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Contribution&gt;(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>element)<sp/>{</highlight></codeline>
<codeline lineno="435"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>probes.emplace_back([&amp;row_elements,<sp/>&amp;<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1aec7527f93b877c641a13bc997d00a68e" kindref="member">column_elements</ref>,<sp/>&amp;element](<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probed_element_block" kindref="compound">detail::ProbedElementBlock</ref>&amp;<sp/>block,<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probe_scratch" kindref="compound">detail::ProbeScratch</ref>&amp;<sp/>scratch)<sp/>{</highlight></codeline>
<codeline lineno="436"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/></highlight><highlight class="normal">Test<sp/>=<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1_operand_evaluator" kindref="compound">OperandEvaluator&lt;equations::TestOperandOf&lt;Contribution&gt;</ref>&gt;;</highlight></codeline>
<codeline lineno="437"><highlight class="normal"></highlight></codeline>
<codeline lineno="438"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>rows<sp/>=<sp/>row_elements.coordinates(element.element);</highlight></codeline>
<codeline lineno="439"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>columns<sp/>=<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1aec7527f93b877c641a13bc997d00a68e" kindref="member">column_elements</ref>.coordinates(element.element);</highlight></codeline>
<codeline lineno="440"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>block.rows.resize(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(rows.size()));</highlight></codeline>
<codeline lineno="441"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>block.columns.resize(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(columns.size()));</highlight></codeline>
<codeline lineno="442"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>block.values.assign(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(rows.size())<sp/>*<sp/></highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(columns.size()),<sp/>0.0);</highlight></codeline>
<codeline lineno="443"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>row<sp/>=<sp/>0;<sp/>row<sp/>&lt;<sp/>rows.size();<sp/>++row)<sp/>{</highlight></codeline>
<codeline lineno="444"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>block.rows[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(row)]<sp/>=<sp/>rows.reduced_dof(row)<sp/>&gt;=<sp/>0<sp/>?<sp/>rows.reduced_dof(row)<sp/>:<sp/>-1;</highlight></codeline>
<codeline lineno="445"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="446"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>column<sp/>=<sp/>0;<sp/>column<sp/>&lt;<sp/>columns.size();<sp/>++column)<sp/>{</highlight></codeline>
<codeline lineno="447"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>block.columns[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(column)]<sp/>=<sp/>columns.reduced_dof(column)<sp/>&gt;=<sp/>0<sp/>?<sp/>columns.reduced_dof(column)<sp/>:<sp/>-1;</highlight></codeline>
<codeline lineno="448"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(columns.reduced_dof(column)<sp/>&lt;<sp/>0)<sp/>{</highlight></codeline>
<codeline lineno="449"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">continue</highlight><highlight class="normal">;</highlight></codeline>
<codeline lineno="450"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="451"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>columns.unit_direction(column,<sp/>scratch.direction);</highlight></codeline>
<codeline lineno="452"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1aa70faca762d4549cb73a42d78c5c88f6" kindref="member">detail::field_integrand&lt;Field, Equation, Contribution&gt;</ref>(element,<sp/>scratch.direction,<sp/>scratch.integrand,<sp/>scratch.samples,<sp/>scratch.workspace);</highlight></codeline>
<codeline lineno="453"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Test::integrate(element.geometry-&gt;test_basis,<sp/>scratch.integrand,<sp/>scratch.values,<sp/>scratch.workspace);</highlight></codeline>
<codeline lineno="454"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>rows.orient_dual(scratch.values);</highlight></codeline>
<codeline lineno="455"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>row<sp/>=<sp/>0;<sp/>row<sp/>&lt;<sp/>rows.size();<sp/>++row)<sp/>{</highlight></codeline>
<codeline lineno="456"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>block.values[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(column)<sp/>*<sp/></highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(rows.size())<sp/>+<sp/></highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(row)]<sp/>=<sp/>scratch.values[row];</highlight></codeline>
<codeline lineno="457"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="458"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="459"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="460"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="461"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;detail::ProbedElementBlock&gt;<sp/>blocks(probes.size());</highlight></codeline>
<codeline lineno="462"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;detail::ProbeScratch&gt;<sp/>scratch(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(<ref refid="namespaceserif_1_1utils_1_1parallel_1a845c655da35a46d0be87880f0e4fa2d9" kindref="member">utils::parallel::worker_count</ref>()));</highlight></codeline>
<codeline lineno="463"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1utils_1_1parallel_1a453320d288c9e42300bdc59ee8dccd2d" kindref="member">utils::parallel::for_each_index</ref>(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="keywordtype">int</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(probes.size()),<sp/>[&amp;](</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>worker)<sp/>{</highlight></codeline>
<codeline lineno="464"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>probes[static_cast&lt;std::size_t&gt;(index)](blocks[static_cast&lt;std::size_t&gt;(index)],<sp/>scratch[static_cast&lt;std::size_t&gt;(worker)]);</highlight></codeline>
<codeline lineno="465"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="466"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1ad9796d4821ba553a3da6dde44ab7d171" kindref="member">detail::finalize_probed_blocks</ref>(blocks,<sp/>row_binding.size(),<sp/>column_binding.size());</highlight></codeline>
<codeline lineno="467"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="468"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>Hanging-node<sp/>constraints<sp/>distribute<sp/>each<sp/>local<sp/>entry<sp/>over<sp/>weighted<sp/>reduced<sp/>coordinates.<sp/>Probe<sp/>elements</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="469"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>concurrently,<sp/>then<sp/>replay<sp/>the<sp/>constrained<sp/>insertions<sp/>row<sp/>by<sp/>row<sp/>in<sp/>their<sp/>original<sp/>order.</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="470"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>row_elements<sp/>=<sp/>row_binding.validated_elements();</highlight></codeline>
<codeline lineno="471"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1aec7527f93b877c641a13bc997d00a68e" kindref="member">column_elements</ref><sp/>=<sp/>column_binding.validated_elements();</highlight></codeline>
<codeline lineno="472"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/>skip_unsupported_columns<sp/>=<sp/>!column_binding.constrained();</highlight></codeline>
<codeline lineno="473"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;std::function&lt;void(<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_constrained_element_block" kindref="compound">detail::ConstrainedElementBlock</ref>&amp;,<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probe_scratch" kindref="compound">detail::ProbeScratch</ref>&amp;)&gt;&gt;<sp/>probes;</highlight></codeline>
<codeline lineno="474"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1abb1a893a5fb0670283d9989d1ac6f4e7" kindref="member">detail::for_each_field_element&lt;Field&gt;</ref>(data,<sp/>[&amp;]&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Contribution&gt;(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>element)<sp/>{</highlight></codeline>
<codeline lineno="475"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>probes.emplace_back([&amp;row_elements,<sp/>&amp;<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1aec7527f93b877c641a13bc997d00a68e" kindref="member">column_elements</ref>,<sp/>&amp;element,<sp/>skip_unsupported_columns](<ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_constrained_element_block" kindref="compound">detail::ConstrainedElementBlock</ref>&amp;<sp/>block,<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probe_scratch" kindref="compound">detail::ProbeScratch</ref>&amp;<sp/>scratch)<sp/>{</highlight></codeline>
<codeline lineno="476"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/></highlight><highlight class="normal">Test<sp/>=<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1_operand_evaluator" kindref="compound">OperandEvaluator&lt;equations::TestOperandOf&lt;Contribution&gt;</ref>&gt;;</highlight></codeline>
<codeline lineno="477"><highlight class="normal"></highlight></codeline>
<codeline lineno="478"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>rows<sp/>=<sp/>row_elements.coordinates(element.element);</highlight></codeline>
<codeline lineno="479"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>columns<sp/>=<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1aec7527f93b877c641a13bc997d00a68e" kindref="member">column_elements</ref>.coordinates(element.element);</highlight></codeline>
<codeline lineno="480"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>expand<sp/>=<sp/>[](</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>coordinates,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>local,<sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_coefficient_expansion" kindref="compound">detail::CoefficientExpansion</ref>&amp;<sp/>expansion)<sp/>{</highlight></codeline>
<codeline lineno="481"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>coordinates.for_each_coefficient(local,<sp/>[&amp;](</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/>weight)<sp/>{</highlight></codeline>
<codeline lineno="482"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>expansion.indices.push_back(<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>);</highlight></codeline>
<codeline lineno="483"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>expansion.weights.push_back(weight);</highlight></codeline>
<codeline lineno="484"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="485"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>expansion.offsets.push_back(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="keywordtype">int</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(expansion.indices.size()));</highlight></codeline>
<codeline lineno="486"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>};</highlight></codeline>
<codeline lineno="487"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>block.row_count<sp/>=<sp/>rows.size();</highlight></codeline>
<codeline lineno="488"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>block.values.assign(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(rows.size())<sp/>*<sp/></highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(columns.size()),<sp/>0.0);</highlight></codeline>
<codeline lineno="489"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>row<sp/>=<sp/>0;<sp/>row<sp/>&lt;<sp/>rows.size();<sp/>++row)<sp/>{</highlight></codeline>
<codeline lineno="490"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>expand(rows,<sp/>row,<sp/>block.rows);</highlight></codeline>
<codeline lineno="491"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="492"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>column<sp/>=<sp/>0;<sp/>column<sp/>&lt;<sp/>columns.size();<sp/>++column)<sp/>{</highlight></codeline>
<codeline lineno="493"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(skip_unsupported_columns<sp/>&amp;&amp;<sp/>columns.reduced_dof(column)<sp/>&lt;<sp/>0)<sp/>{</highlight></codeline>
<codeline lineno="494"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>block.columns.offsets.push_back(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="keywordtype">int</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(block.columns.indices.size()));</highlight></codeline>
<codeline lineno="495"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">continue</highlight><highlight class="normal">;</highlight></codeline>
<codeline lineno="496"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="497"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>expand(columns,<sp/>column,<sp/>block.columns);</highlight></codeline>
<codeline lineno="498"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>columns.unit_direction(column,<sp/>scratch.direction);</highlight></codeline>
<codeline lineno="499"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1aa70faca762d4549cb73a42d78c5c88f6" kindref="member">detail::field_integrand&lt;Field, Equation, Contribution&gt;</ref>(element,<sp/>scratch.direction,<sp/>scratch.integrand,<sp/>scratch.samples,<sp/>scratch.workspace);</highlight></codeline>
<codeline lineno="500"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Test::integrate(element.geometry-&gt;test_basis,<sp/>scratch.integrand,<sp/>scratch.values,<sp/>scratch.workspace);</highlight></codeline>
<codeline lineno="501"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>rows.orient_dual(scratch.values);</highlight></codeline>
<codeline lineno="502"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>row<sp/>=<sp/>0;<sp/>row<sp/>&lt;<sp/>rows.size();<sp/>++row)<sp/>{</highlight></codeline>
<codeline lineno="503"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>block.values[</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(column)<sp/>*<sp/></highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(rows.size())<sp/>+<sp/></highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(row)]<sp/>=<sp/>scratch.values[row];</highlight></codeline>
<codeline lineno="504"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="505"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="506"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="507"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="508"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;detail::ConstrainedElementBlock&gt;<sp/>blocks(probes.size());</highlight></codeline>
<codeline lineno="509"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;detail::ProbeScratch&gt;<sp/>scratch(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::size_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(<ref refid="namespaceserif_1_1utils_1_1parallel_1a845c655da35a46d0be87880f0e4fa2d9" kindref="member">utils::parallel::worker_count</ref>()));</highlight></codeline>
<codeline lineno="510"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1utils_1_1parallel_1a453320d288c9e42300bdc59ee8dccd2d" kindref="member">utils::parallel::for_each_index</ref>(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="keywordtype">int</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(probes.size()),<sp/>[&amp;](</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>worker)<sp/>{</highlight></codeline>
<codeline lineno="511"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>probes[static_cast&lt;std::size_t&gt;(index)](blocks[static_cast&lt;std::size_t&gt;(index)],<sp/>scratch[static_cast&lt;std::size_t&gt;(worker)]);</highlight></codeline>
<codeline lineno="512"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="513"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1a336109e5f1a8feca9a40eb97491c8fe1" kindref="member">detail::finalize_constrained_blocks</ref>(blocks,<sp/>row_binding.size(),<sp/>column_binding.size());</highlight></codeline>
<codeline lineno="514"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="515"><highlight class="normal"></highlight></codeline>
<codeline lineno="517"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">template</highlight><highlight class="normal"><sp/>&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Field,<sp/>VolumeEquation<sp/>Equation,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Schema&gt;</highlight></codeline>
<codeline lineno="518"><highlight class="normal"><sp/><sp/><sp/><sp/>[[nodiscard]]<sp/>std::vector&lt;double&gt;<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1acc3520d8d4786ac311e71eca37407696" kindref="member">volume_field_diagonal</ref>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data" kindref="compound">VolumeData&lt;Equation, Schema&gt;</ref>&amp;<sp/>data)<sp/>{</highlight></codeline>
<codeline lineno="519"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/>namespace<sp/></highlight><highlight class="normal">utils::errors;</highlight></codeline>
<codeline lineno="520"><highlight class="normal"></highlight></codeline>
<codeline lineno="521"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a2ce0b21e25c656b47e0495e92d737149" kindref="member">validate_volume_data</ref>(data);</highlight></codeline>
<codeline lineno="522"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>row_binding<sp/>=<sp/>data.configuration-&gt;discretization.residual_binding;</highlight></codeline>
<codeline lineno="523"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>column_binding<sp/>=<sp/>*data.bindings.columns[<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1aaddd86c07d54c546cbaad5ca845225c6" kindref="member">detail::field_column&lt;Field, Equation&gt;</ref>()];</highlight></codeline>
<codeline lineno="524"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>serif_ensure&lt;SERiFErrorCode::MATRIX_SHAPE_ERROR&gt;(row_binding.size()<sp/>==<sp/>column_binding.size(),<sp/></highlight><highlight class="stringliteral">&quot;Physical<sp/>diagonal<sp/>extraction<sp/>requires<sp/>a<sp/>square<sp/>selected<sp/>block.&quot;</highlight><highlight class="normal">);</highlight></codeline>
<codeline lineno="525"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(row_binding.constrained()<sp/>||<sp/>column_binding.constrained())<sp/>{</highlight></codeline>
<codeline lineno="526"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>Off-diagonal<sp/>local<sp/>entries<sp/>also<sp/>contribute<sp/>to<sp/>diag(P^T<sp/>A<sp/>P).</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="527"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>matrix<sp/>=<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a2e74a168003d1826779050608d9271f8" kindref="member">assemble_volume_field&lt;Field&gt;</ref>(data);</highlight></codeline>
<codeline lineno="528"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a317d4e0bea2ef8780ac3747cfe62bf72" kindref="member">::mfem::Vector</ref><sp/>diagonal;</highlight></codeline>
<codeline lineno="529"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>matrix-&gt;GetDiag(diagonal);</highlight></codeline>
<codeline lineno="530"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>std::vector&lt;double&gt;(diagonal.GetData(),<sp/>diagonal.GetData()<sp/>+<sp/>diagonal.Size());</highlight></codeline>
<codeline lineno="531"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="532"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;double&gt;<sp/>diagonal(row_binding.size(),<sp/>0.0);</highlight></codeline>
<codeline lineno="533"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a317d4e0bea2ef8780ac3747cfe62bf72" kindref="member">::mfem::Vector</ref><sp/>direction,<sp/>row_direction,<sp/>integrand,<sp/>samples,<sp/>test_samples;</highlight></codeline>
<codeline lineno="534"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="structserif_1_1discretization_1_1backend_1_1mfem_1_1_basis_workspace" kindref="compound">BasisWorkspace</ref><sp/>workspace;</highlight></codeline>
<codeline lineno="535"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>row_elements<sp/>=<sp/>row_binding.validated_elements();</highlight></codeline>
<codeline lineno="536"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1aec7527f93b877c641a13bc997d00a68e" kindref="member">column_elements</ref><sp/>=<sp/>column_binding.validated_elements();</highlight></codeline>
<codeline lineno="537"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1abb1a893a5fb0670283d9989d1ac6f4e7" kindref="member">detail::for_each_field_element&lt;Field&gt;</ref>(data,<sp/>[&amp;]&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Contribution&gt;(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>element)<sp/>{</highlight></codeline>
<codeline lineno="538"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>rows<sp/>=<sp/>row_elements.coordinates(element.element);</highlight></codeline>
<codeline lineno="539"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>columns<sp/>=<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1aec7527f93b877c641a13bc997d00a68e" kindref="member">column_elements</ref>.coordinates(element.element);</highlight></codeline>
<codeline lineno="540"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>column<sp/>=<sp/>0;<sp/>column<sp/>&lt;<sp/>columns.size();<sp/>++column)<sp/>{</highlight></codeline>
<codeline lineno="541"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref><sp/>=<sp/>columns.reduced_dof(column);</highlight></codeline>
<codeline lineno="542"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref><sp/>&lt;<sp/>0)<sp/>{</highlight></codeline>
<codeline lineno="543"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">continue</highlight><highlight class="normal">;</highlight></codeline>
<codeline lineno="544"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="545"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>row<sp/>=<sp/>rows.local_dof(<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>);</highlight></codeline>
<codeline lineno="546"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(row<sp/>&lt;<sp/>0)<sp/>{</highlight></codeline>
<codeline lineno="547"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">continue</highlight><highlight class="normal">;</highlight></codeline>
<codeline lineno="548"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="549"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>columns.unit_direction(column,<sp/>direction);</highlight></codeline>
<codeline lineno="550"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>rows.unit_direction(row,<sp/>row_direction);</highlight></codeline>
<codeline lineno="551"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_1aa70faca762d4549cb73a42d78c5c88f6" kindref="member">detail::field_integrand&lt;Field, Equation, Contribution&gt;</ref>(element,<sp/>direction,<sp/>integrand,<sp/>samples,<sp/>workspace);</highlight></codeline>
<codeline lineno="552"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>element.geometry-&gt;test_basis.evaluate(row_direction,<sp/>test_samples,<sp/>workspace);</highlight></codeline>
<codeline lineno="553"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>diagonal[<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>]<sp/>+=<sp/>test_samples<sp/>*<sp/>integrand;</highlight></codeline>
<codeline lineno="554"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="555"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="556"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>diagonal;</highlight></codeline>
<codeline lineno="557"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="558"><highlight class="normal"></highlight></codeline>
<codeline lineno="560"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">template</highlight><highlight class="normal"><sp/>&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Field,<sp/>VolumeEquation<sp/>Equation,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Schema&gt;</highlight></codeline>
<codeline lineno="561"><highlight class="normal"><sp/><sp/><sp/><sp/>[[nodiscard]]<sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1_linearized_block" kindref="compound">LinearizedBlock</ref><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a1cdce781103a0654eb036130ddc8e590" kindref="member">volume_field_block</ref>(std::shared_ptr&lt;</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data" kindref="compound">VolumeData&lt;Equation, Schema&gt;</ref>&gt;<sp/>data)<sp/>{</highlight></codeline>
<codeline lineno="562"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1utils_1_1errors_1a7fefa3a63ca7895a875f2672026df02d" kindref="member">utils::errors::serif_ensure&lt;utils::errors::SERiFErrorCode::INVALID_ARGUMENT&gt;</ref>(data<sp/>!=<sp/></highlight><highlight class="keyword">nullptr</highlight><highlight class="normal">,<sp/></highlight><highlight class="stringliteral">&quot;A<sp/>physical<sp/>block<sp/>needs<sp/>an<sp/>accepted<sp/>volume<sp/>linearization.&quot;</highlight><highlight class="normal">);</highlight></codeline>
<codeline lineno="563"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>action<sp/>=<sp/>std::make_shared&lt;detail::VolumeFieldOperator&lt;Field,<sp/>Equation,<sp/>Schema&gt;&gt;(data);</highlight></codeline>
<codeline lineno="564"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="classserif_1_1operators_1_1backend_1_1mfem_1_1_linearized_block" kindref="compound">LinearizedBlock</ref>(std::move(action),<sp/>[data]()<sp/>{</highlight></codeline>
<codeline lineno="565"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1acc3520d8d4786ac311e71eca37407696" kindref="member">volume_field_diagonal&lt;Field&gt;</ref>(*data);</highlight></codeline>
<codeline lineno="566"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>},<sp/>[data]()<sp/>{</highlight></codeline>
<codeline lineno="567"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1a2e74a168003d1826779050608d9271f8" kindref="member">assemble_volume_field&lt;Field&gt;</ref>(*data);</highlight></codeline>
<codeline lineno="568"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>});</highlight></codeline>
<codeline lineno="569"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="570"><highlight class="normal">}<sp/></highlight><highlight class="comment">//<sp/>namespace<sp/>serif::operators::backend::mfem</highlight><highlight class="normal"></highlight></codeline>
</programlisting>
<location file="src/include/serif/backend/mfem/operators/volume_field_block.hpp"/>
</compounddef>
</doxygen>