module; #include export module mean_field:mapping.compactification; export import :mapping.types; export namespace mean_field::mapping::compactification { struct ExteriorMapInput { const mfem::Vector &reference_position; const mfem::Vector &displaced_position; const mfem::DenseMatrix &displacement_jacobian; double compactification_coordinate; const mfem::Vector &compactification_coordinate_gradient; }; struct ExteriorMapResult { mfem::Vector physical_position; mfem::DenseMatrix mapping_jacobian; }; struct ExteriorMapDirection { const mfem::Vector &displaced_position_variation; const mfem::DenseMatrix &displacement_jacobian_variation; }; struct ExteriorMapVariation { mfem::Vector physical_position_variation; mfem::DenseMatrix mapping_jacobian_variation; }; class ExteriorDomainMap { public: virtual ~ExteriorDomainMap() = default; [[nodiscard]] virtual MappingStatus Evaluate( const ExteriorMapInput &input, ExteriorMapResult &result ) const = 0; [[nodiscard]] virtual MappingStatus EvaluateVariation( const ExteriorMapInput &input, const ExteriorMapResult &result, const ExteriorMapDirection &direction, ExteriorMapVariation &variation ) const = 0; [[nodiscard]] virtual std::string_view GetName() const noexcept = 0; }; } // namespace mean_field::mapping::compactification