https://mooseframework.inl.gov
Loading...
Searching...
No Matches
MFEMBlockRestrictable.C
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
13
16{
17 // Create InputParameters object that will be appended to the parameters for the inheriting object
19 // Create user-facing 'boundary' input for restricting inheriting object to boundaries
20 // MFEM uses the boundary -1 to signify every sideset
21 params.addParam<std::vector<SubdomainName>>("block",
22 {},
23 "The list of subdomains (names or ids) that this "
24 "object will be restricted to. Leave empty to apply "
25 "to all subdomains.");
26 return params;
27}
28
30 const mfem::ParMesh & mfem_mesh)
31 : _mfem_mesh(mfem_mesh),
32 _subdomain_names(parameters.get<std::vector<SubdomainName>>("block")),
33 _subdomain_attributes(subdomainsToAttributes())
34{
35 if (!_subdomain_attributes.IsEmpty())
36 mfem::common::AttrToMarker(
38}
39
40mfem::Array<int>
42{
43 mfem::Array<int> attributes;
44 auto & mesh = getMesh();
45
46 for (const SubdomainName & subdomain_name : _subdomain_names)
47 {
48 try
49 {
50 // Is this a block ID?
51 const int attribute_id = std::stoi(subdomain_name);
52 attributes.Append(attribute_id);
53 }
54 catch (...)
55 {
56 // It was not
57 auto & subdomain_ids = mesh.attribute_sets.GetAttributeSet(subdomain_name);
58 for (const auto & subdomain_id : subdomain_ids)
59 attributes.Append(subdomain_id);
60 }
61 }
62 return attributes;
63}
64
65std::vector<std::string>
67{
68 const auto & attrs = _subdomain_attributes;
69 std::vector<std::string> strs(attrs.Size());
70 std::transform(attrs.begin(), attrs.end(), strs.begin(), [](int n) { return std::to_string(n); });
71 return strs;
72}
73
74#endif
InputParameters emptyInputParameters()
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
void addParam(const std::string &name, const S &value, const std::string &doc_string)
These methods add an optional parameter and a documentation string to the InputParameters object.
std::vector< std::string > subdomainsToStrings()
std::vector< SubdomainName > _subdomain_names
Stores the names of the subdomains.
const mfem::ParMesh & _mfem_mesh
Stores the names of the subdomains.
mfem::Array< int > _subdomain_markers
Boolean array indicating which subdomains are active in this object.
mfem::Array< int > subdomainsToAttributes()
static InputParameters validParams()
const mfem::ParMesh & getMesh() const
MFEMBlockRestrictable(const InputParameters &parameters, const mfem::ParMesh &mfem_mesh)
mfem::Array< int > _subdomain_attributes
Array storing subdomain attribute IDs for this object.
MeshBase & mesh