radial_extension.hpp memory span vector serif/geometry/deformation/radial_interpolation.hpp serif/geometry/deformation/models.hpp serif/geometry/deformation/spaces.hpp serif/geometry/deformation/workspace.hpp src/compile_time_checks/serif/geometry/deformation.cpp src/include/serif/backend/mfem/geometry/deformation/constrained_radial_extension.hpp src/include/serif/backend/mfem/geometry/deformation/radial_interpolation.hpp src/include/serif/geometry/deformation/deformation.hpp src/lib/serif/geometry/deformation/radial_extension.cpp serif::geometry::deformation::RadialExtension serif serif::geometry serif::geometry::deformation #pragmaonce #include<memory> #include<span> #include<vector> #include"serif/geometry/deformation/radial_interpolation.hpp" #include"serif/geometry/deformation/models.hpp" #include"serif/geometry/deformation/spaces.hpp" #include"serif/geometry/deformation/workspace.hpp" namespaceserif::geometry::deformation { classRadialExtension { public: usingWorkspace=EmptyDeformationWorkspace; usingInputSpace=spaces::SurfaceDisplacement; usingOutputSpace=spaces::VolumeDisplacement; staticconstexprboolis_linear=true; [[nodiscard]]conststd::shared_ptr<constRadialInterpolation>&interpolation()constnoexcept { returnm_interpolation; } [[nodiscard]]std::span<constdouble>radial_weights()constnoexcept { returnm_radial_weights; } [[nodiscard]]std::size_tinput_size()constnoexcept { return3*m_interpolation->surface_node_count(); } [[nodiscard]]std::size_toutput_size()constnoexcept { return3*m_radial_weights.size(); } [[nodiscard]]DeformationStatusapply(std::span<constdouble>surface_displacement,std::span<double>volume_displacement,Workspace={})const; [[nodiscard]]DeformationStatusapply_transpose(std::span<constdouble>volume_force,std::span<double>surface_force,Workspace={})const; private: RadialExtension(std::shared_ptr<constRadialInterpolation>interpolation,std::vector<double>radial_weights); friendstd::expected<RadialExtension,DeformationFailure>make_radial_extension(std::shared_ptr<constRadialInterpolation>,PowerLawRadialExtension,FixedInfinityRadialExtension); std::shared_ptr<constRadialInterpolation>m_interpolation; std::vector<double>m_radial_weights; }; [[nodiscard]]std::expected<RadialExtension,DeformationFailure>make_radial_extension( std::shared_ptr<constRadialInterpolation>interpolation, PowerLawRadialExtensioninterior={}, FixedInfinityRadialExtensionvacuum={}); }//namespaceserif::geometry::deformation