.. _program_listing_file_src_pcms_field_layout_mfem.hpp: Program Listing for File mfem.hpp ================================= |exhale_lsh| :ref:`Return to documentation for file ` (``src/pcms/field/layout/mfem.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef PCMS_FIELD_LAYOUT_MFEM_HPP #define PCMS_FIELD_LAYOUT_MFEM_HPP #include "pcms/field/coordinate_system.hpp" #include "pcms/field/field_layout.h" #include #include namespace pcms { // Field layout for an MFEM order-1 H1 (vertex) scalar field. class MFEMLayout : public FieldLayout { public: MFEMLayout(mfem::ParMesh& pmesh, mfem::ParFiniteElementSpace& pfes, std::shared_ptr coordinate_system); std::shared_ptr GetDiscretization() const noexcept override; int GetNumComponents() const override; LO GetNumOwnedDofHolder() const override; GO GetNumGlobalDofHolder() const override; Rank1View GetOwnedHost() const override; GlobalIDView GetGidsHost() const override; CoordinateView GetDOFHolderCoordinates() const override; [[nodiscard]] bool IsDistributed() const override; EntOffsetsArray GetEntOffsets() const override; int GetDimension() const override; Rank1View GetDOFHolderClassificationDimensionsHost() const override; Rank1View GetDOFHolderClassificationIdsHost() const override; mfem::ParMesh& GetMesh() const noexcept { return pmesh_; } mfem::ParFiniteElementSpace& GetFESpace() const noexcept { return pfes_; } // Build a per-vertex overlap mask from MFEM element attributes static Kokkos::View OverlapMaskFromAttribute( mfem::ParMesh& pmesh, int attribute); private: void AssertVertexScalarSpace() const; mfem::ParMesh& pmesh_; mfem::ParFiniteElementSpace& pfes_; int dim_; Kokkos::View coords_; Kokkos::View owned_host_; Kokkos::View gids_host_; Kokkos::View classification_dims_host_; Kokkos::View classification_ids_host_; std::shared_ptr discretization_; }; } // namespace pcms #endif // PCMS_FIELD_LAYOUT_MFEM_HPP