https://mooseframework.inl.gov
MFEMMesh.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #ifdef MOOSE_MFEM_ENABLED
11 
12 #pragma once
13 #include "FileMesh.h"
14 #include "libmesh/ignore_warnings.h"
15 #include <mfem.hpp>
16 #include "libmesh/restore_warnings.h"
17 
22 class MFEMMesh : public FileMesh
23 {
24 public:
26 
28 
29  virtual ~MFEMMesh();
30 
36  mfem::ParMesh & getMFEMParMesh() { return *_mfem_par_mesh; }
37  const mfem::ParMesh & getMFEMParMesh() const;
38 
42  std::shared_ptr<mfem::ParMesh> getMFEMParMeshPtr() { return _mfem_par_mesh; }
43 
47  void buildMesh() override;
48 
52  std::unique_ptr<MooseMesh> safeClone() const override;
53 
57  bool shouldDisplace() const { return _mesh_displacement_variable.has_value(); }
58 
62  std::optional<std::reference_wrapper<std::string const>> getMeshDisplacementVariable() const
63  {
65  }
66 
71  void displace(mfem::GridFunction const & displacement);
72 
73  bool isDistributedMesh() const override { return true; }
74  unsigned int dimension() const override { return _mfem_par_mesh->Dimension(); }
75  unsigned int spatialDimension() const override { return _mfem_par_mesh->SpaceDimension(); }
76  SubdomainID nSubdomains() const override { return _mfem_par_mesh->attributes.Size(); }
77  dof_id_type nActiveElem() const override { return _mfem_par_mesh->GetGlobalNE(); }
78  dof_id_type nActiveLocalElem() const override { return _mfem_par_mesh->GetNE(); }
79 
80 private:
84  void buildDummyMooseMesh();
85 
89  void uniformRefinement(mfem::Mesh & mesh, const unsigned int nref) const;
90 
94  std::optional<std::string> _mesh_displacement_variable;
95 
100  std::shared_ptr<mfem::ParMesh> _mfem_par_mesh{nullptr};
101 };
102 
103 inline const mfem::ParMesh &
105 {
106  return const_cast<MFEMMesh *>(this)->getMFEMParMesh();
107 }
108 
109 #endif
unsigned int dimension() const override
Returns MeshBase::mesh_dimension(), (not MeshBase::spatial_dimension()!) of the underlying libMesh me...
Definition: MFEMMesh.h:74
bool isDistributedMesh() const override
Returns the final Mesh distribution type.
Definition: MFEMMesh.h:73
bool shouldDisplace() const
Returns true if mesh displacement is required.
Definition: MFEMMesh.h:57
std::optional< std::reference_wrapper< std::string const > > getMeshDisplacementVariable() const
Returns an optional reference to displacement variable name.
Definition: MFEMMesh.h:62
void uniformRefinement(mfem::Mesh &mesh, const unsigned int nref) const
Performs a uniform refinement on the chosen mesh nref times.
Definition: MFEMMesh.C:91
virtual ~MFEMMesh()
Definition: MFEMMesh.C:40
unsigned int spatialDimension() const override
Returns MeshBase::spatial_dimension.
Definition: MFEMMesh.h:75
const InputParameters & parameters() const
Get the parameters of the object.
Definition: MooseBase.h:127
std::optional< std::string > _mesh_displacement_variable
Holds name of variable used for mesh displacement, if set.
Definition: MFEMMesh.h:94
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
static InputParameters validParams()
Definition: MFEMMesh.C:18
void buildDummyMooseMesh()
Builds a placeholder mesh when no MOOSE mesh is required.
Definition: MFEMMesh.C:85
dof_id_type nActiveLocalElem() const override
Definition: MFEMMesh.h:78
void buildMesh() override
Build MFEM ParMesh and a placeholder MOOSE mesh.
Definition: MFEMMesh.C:43
std::unique_ptr< MooseMesh > safeClone() const override
Clones the mesh.
Definition: MFEMMesh.C:98
std::shared_ptr< mfem::ParMesh > getMFEMParMeshPtr()
Copy a shared_ptr to the mfem::ParMesh object.
Definition: MFEMMesh.h:42
SubdomainID nSubdomains() const override
Definition: MFEMMesh.h:76
MFEMMesh(const InputParameters &parameters)
Definition: MFEMMesh.C:38
std::shared_ptr< mfem::ParMesh > _mfem_par_mesh
Smart pointers to mfem::ParMesh object.
Definition: MFEMMesh.h:100
mfem::ParMesh & getMFEMParMesh()
Accessors for the _mfem_par_mesh object.
Definition: MFEMMesh.h:36
void displace(mfem::GridFunction const &displacement)
Displace the nodes of the mesh by the given displacement.
Definition: MFEMMesh.C:76
MFEMMesh inherits a MOOSE mesh class which allows us to work with other MOOSE objects.
Definition: MFEMMesh.h:22
dof_id_type nActiveElem() const override
Definition: MFEMMesh.h:77
uint8_t dof_id_type