surface_reference.hpp serif/geometry/deformation/backend/mfem/inputs.hpp serif/geometry/deformation/surface_embedding.hpp serif/solver/preconditioner/keys.hpp serif/solver/preconditioner/backend/mfem/surface/fitted_h1.hpp serif/utils/dependencies/computation.hpp serif serif::solver serif::solver::preconditioner serif::solver::preconditioner::computations #pragmaonce #include"serif/geometry/deformation/backend/mfem/inputs.hpp" #include"serif/geometry/deformation/surface_embedding.hpp" #include"serif/solver/preconditioner/keys.hpp" #include"serif/solver/preconditioner/backend/mfem/surface/fitted_h1.hpp" #include"serif/utils/dependencies/computation.hpp" namespaceserif::solver::preconditioner::computations { template<typenameValues> [[nodiscard]]autosurface_reference_metric() { usingnamespaceutils::dependencies; returnmake_computation<keys::SurfaceMetric<Values>,InputList<geometry::deformation::keys::SurfaceMetric>>( [](conststd::vector<double>&metric) { returnmetric; }); } template<typenameValues> [[nodiscard]]autosurface_reference_matrices() { usingnamespaceutils::dependencies; namespacedeformation=geometry::deformation; usingMatrices=backend::mfem::SurfaceH1Matrices; returnmake_computation<keys::SurfaceMatrices<Values>,InputList<deformation::keys::SurfaceDiscretization,deformation::keys::ReferenceSurface,deformation::keys::SurfaceMap>>( [](constdeformation::backend::mfem::SurfaceDiscretization&discretization,conststd::shared_ptr<constdeformation::ReferenceSurface>&reference,conststd::shared_ptr<constdeformation::SurfaceEmbedding>&embedding)->std::expected<std::shared_ptr<constMatrices>,Failure> { if(!reference||!embedding){ returnstd::unexpected(Failure{.code=utils::errors::SERiFErrorCode::PRECONDITIONER_INVALID_OPERATOR,.message="SurfaceH1referenceassemblyrequiresanacceptedsurfacereferenceandembedding."}); } automatrices=backend::mfem::try_surface_h1_matrices(discretization.scalar_space,discretization.surface_attribute,*reference,*embedding); if(!matrices){ returnstd::unexpected(matrices.error()); } returnstd::make_shared<constMatrices>(std::move(*matrices)); }); } }//namespaceserif::solver::preconditioner::computations