LCOV - code coverage report
Current view: top level - src/mfem/fespaces - MFEMFESpace.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 2bf808 Lines: 44 53 83.0 %
Date: 2025-07-17 01:28:37 Functions: 5 5 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       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 MFEM_ENABLED
      11             : 
      12             : #include "MFEMFESpace.h"
      13             : #include "MFEMProblem.h"
      14             : 
      15             : InputParameters
      16       26496 : MFEMFESpace::validParams()
      17             : {
      18       26496 :   InputParameters params = MFEMGeneralUserObject::validParams();
      19       26496 :   params.registerBase("MFEMFESpace");
      20       26496 :   MooseEnum ordering("NODES VDIM", "VDIM", false);
      21       26496 :   params.addParam<MooseEnum>("ordering", ordering, "Ordering style to use for vector DoFs.");
      22       26496 :   params.addParam<int>("vdim", 1, "The number of degrees of freedom per basis function.");
      23       26496 :   params.addParam<std::string>("submesh",
      24             :                                "Submesh to define the FESpace on. Leave blank to use base mesh.");
      25       52992 :   return params;
      26       26496 : }
      27             : 
      28         291 : MFEMFESpace::MFEMFESpace(const InputParameters & parameters)
      29             :   : MFEMGeneralUserObject(parameters),
      30         291 :     _ordering(parameters.get<MooseEnum>("ordering")),
      31         291 :     _pmesh(
      32         582 :         parameters.isParamValid("submesh")
      33         570 :             ? getMFEMProblem().getProblemData().submeshes.GetRef(getParam<std::string>("submesh"))
      34         861 :             : const_cast<mfem::ParMesh &>(getMFEMProblem().mesh().getMFEMParMesh()))
      35             : {
      36         291 : }
      37             : 
      38             : void
      39         283 : MFEMFESpace::buildFEC(const std::string & fec_name) const
      40             : {
      41         283 :   auto name = fec_name.c_str();
      42             :   // Handle a few cases that were not supported by mfem::FiniteElementCollection::New as of v4.7
      43         283 :   if (!strncmp(name, "RT_R1D", 6))
      44             :   {
      45           1 :     _fec = std::make_shared<mfem::RT_R1D_FECollection>(atoi(name + 11), atoi(name + 7));
      46             :   }
      47         282 :   else if (!strncmp(name, "RT_R2D", 6))
      48             :   {
      49           2 :     _fec = std::make_shared<mfem::RT_R2D_FECollection>(atoi(name + 11), atoi(name + 7));
      50             :   }
      51         280 :   else if (!strncmp(name, "ND_R1D", 6))
      52             :   {
      53           2 :     _fec = std::make_shared<mfem::ND_R1D_FECollection>(atoi(name + 11), atoi(name + 7));
      54             :   }
      55         278 :   else if (!strncmp(name, "ND_R2D", 6))
      56             :   {
      57           1 :     _fec = std::make_shared<mfem::ND_R2D_FECollection>(atoi(name + 11), atoi(name + 7));
      58             :   }
      59             :   else
      60             :   {
      61         277 :     _fec = std::shared_ptr<mfem::FiniteElementCollection>(mfem::FiniteElementCollection::New(name));
      62             :   }
      63         283 : }
      64             : 
      65             : int
      66         367 : MFEMFESpace::getBasis(const std::string & basis_name) const
      67             : {
      68             : 
      69         367 :   if (!strcmp(basis_name.c_str(), "GaussLegendre"))
      70         107 :     return mfem::BasisType::GaussLegendre;
      71         260 :   else if (!strcmp(basis_name.c_str(), "GaussLobatto"))
      72         252 :     return mfem::BasisType::GaussLobatto;
      73           8 :   else if (!strcmp(basis_name.c_str(), "Positive"))
      74           0 :     return mfem::BasisType::Positive;
      75           8 :   else if (!strcmp(basis_name.c_str(), "OpenUniform"))
      76           0 :     return mfem::BasisType::OpenUniform;
      77           8 :   else if (!strcmp(basis_name.c_str(), "ClosedUniform"))
      78           0 :     return mfem::BasisType::ClosedUniform;
      79           8 :   else if (!strcmp(basis_name.c_str(), "OpenHalfUniform"))
      80           0 :     return mfem::BasisType::OpenHalfUniform;
      81           8 :   else if (!strcmp(basis_name.c_str(), "Serendipity"))
      82           0 :     return mfem::BasisType::Serendipity;
      83           8 :   else if (!strcmp(basis_name.c_str(), "ClosedGL"))
      84           0 :     return mfem::BasisType::ClosedGL;
      85           8 :   else if (!strcmp(basis_name.c_str(), "IntegratedGLL"))
      86           8 :     return mfem::BasisType::IntegratedGLL;
      87           0 :   else if (!strcmp(basis_name.c_str(), "NumBasisTypes"))
      88           0 :     return mfem::BasisType::NumBasisTypes;
      89             :   else
      90           0 :     mooseError("Unknown basis type: ", basis_name);
      91             : }
      92             : 
      93             : void
      94         291 : MFEMFESpace::buildFESpace(const int vdim) const
      95             : {
      96             :   _fespace =
      97         291 :       std::make_shared<mfem::ParFiniteElementSpace>(&_pmesh, getFEC().get(), vdim, _ordering);
      98         283 : }
      99             : 
     100             : #endif

Generated by: LCOV version 1.14