scalar_row.hpp serif/backend/mfem/model/scalar_row.hpp serif/backend/mfem/model/volume_actions.hpp serif/backend/mfem/model/computations/shape_derivatives.hpp serif/backend/mfem/operators/volume_computations.hpp src/compile_time_checks/serif/model/scalar_row.cpp src/include/serif/backend/mfem/model/computations/interior.hpp serif::model::computations::ScalarResidualRow serif serif::model serif::model::computations #pragmaonce #include"serif/backend/mfem/model/scalar_row.hpp" #include"serif/backend/mfem/model/volume_actions.hpp" #include"serif/backend/mfem/model/computations/shape_derivatives.hpp" #include"serif/backend/mfem/operators/volume_computations.hpp" namespaceserif::model::computations{ template<discretization::blocks::GlobalScalarTermRow> structScalarResidualRow{ }; template<typenameEquation,typenameLayout> requiresdiscretization::blocks::GlobalScalarTerm<typename Equation::Test> [[nodiscard]]autoscalar_residual_row(Layoutlayout){ usingnamespaceutils::dependencies; usingnamespacediscretization::blocks; usingRow=typenameEquation::Test; usingVolume=typenameoperators::backend::mfem::volume_keys::Scoped<Row>::Linearization; ifconstexpr(ContainsKey<surface_deformation::coefficients,typenameLayout::Values>){ returnmake_owning_computation<ScalarResidualRow<Row>,InputList<Volume,ShapeDerivatives>>([layout](constauto&volume,constauto&shape){ returnbackend::mfem::cache_scalar_row(backend::mfem::volume_row_action(volume,layout,backend::mfem::ColumnContribution{ static_cast<int>(layout.templateoffset<RepresentedValueKind::value,surface_deformation::coefficients>()),shape->tangent})); }); }else{ returnmake_owning_computation<ScalarResidualRow<Row>,InputList<Volume>>([layout](constauto&volume){ returnbackend::mfem::cache_scalar_row(backend::mfem::volume_row_action(volume,layout)); }); } } }