15 #include "libmesh/fparser_ad.hh" 16 #include "libmesh/elem.h" 24 params.
addRequiredParam<MeshGeneratorName>(
"input",
"The mesh we want to modify");
26 "expression",
"Parsed expression to determine the subdomain id of each involved element");
27 params.
addParam<std::vector<SubdomainName>>(
28 "excluded_subdomains",
29 "A set of subdomain names that will not changed even if " 30 "they are inside/outside the combinatorial geometry");
32 "excluded_subdomain_ids",
33 "A set of subdomain ids that will not changed even if " 34 "they are inside/outside the combinatorial geometry",
35 "excluded_subdomain_ids is deprecated, use excluded_subdomains (ids or names accepted)");
36 params.
addParam<std::vector<std::string>>(
37 "constant_names", {},
"Vector of constants used in the parsed function");
38 params.
addParam<std::vector<std::string>>(
39 "constant_expressions",
41 "Vector of values for the constants in constant_names (can be an FParser expression)");
42 params.
addParam<std::vector<ExtraElementIDName>>(
43 "extra_element_id_names", {},
"Extra element integers used in the parsed expression");
44 params.
addClassDescription(
"A base class for mesh generators that Use a parsed expression to " 45 "assign new subdomain id(s).");
53 _input(getMesh(
"input")),
54 _function(parameters.
get<
std::string>(
"expression")),
55 _excluded_ids(isParamValid(
"excluded_subdomain_ids")
58 _eeid_names(getParam<
std::vector<ExtraElementIDName>>(
"extra_element_id_names"))
63 std::unique_ptr<MeshBase>
66 std::unique_ptr<MeshBase>
mesh = std::move(
_input);
74 auto excluded_subdomains =
parameters().
get<std::vector<SubdomainName>>(
"excluded_subdomains");
77 for (
const auto &
name : excluded_subdomains)
79 paramError(
"excluded_subdomains",
"The block '",
name,
"' was not found in the mesh");
85 for (
const auto & elem :
mesh->active_element_ptr_range())
91 mesh->set_isnt_prepared();
99 std::string symbol_str =
"x,y,z";
101 symbol_str +=
"," + eeid_name;
104 _func_F = std::make_shared<SymFunction>();
108 getParam<std::vector<std::string>>(
"constant_names"),
109 getParam<std::vector<std::string>>(
"constant_expressions"),
std::vector< unsigned int > _eeid_indices
Indices of the extra element ids used in the parsed expression.
const std::vector< ExtraElementIDName > _eeid_names
Names of the extra element ids used in the parsed expression.
static InputParameters validParams()
T * get(const std::unique_ptr< T > &u)
The MooseUtils::get() specializations are used to support making forwards-compatible code changes fro...
const std::string _function
function expression
std::vector< subdomain_id_type > _excluded_ids
A list of excluded subdomain ids that will not be changed even if they are in the combinatorial geome...
const Parallel::Communicator & comm() const
std::unique_ptr< T_DEST, T_DELETER > dynamic_pointer_cast(std::unique_ptr< T_SRC, T_DELETER > &src)
These are reworked from https://stackoverflow.com/a/11003103.
void functionInitialize(const std::string &function_expression)
Initialize the function parser object.
std::vector< subdomain_id_type > getSubdomainIDs(const libMesh::MeshBase &mesh, const std::vector< SubdomainName > &subdomain_name)
Get the associated subdomainIDs for the subdomain names that are passed in.
virtual const std::string & name() const
Get the name of the class.
bool isParamValid(const std::string &name) const
Test if the supplied parameter is valid.
ParsedSubdomainGeneratorBase(const InputParameters ¶meters)
virtual void setBlockName(std::unique_ptr< MeshBase > &)
const T & getParam(const std::string &name) const
Retrieve a parameter for the object.
virtual void assignElemSubdomainID(Elem *elem)=0
void parsedFunctionSetup(SymFunctionPtr &function, const std::string &expression, const std::string &variables, const std::vector< std::string > &constant_names, const std::vector< std::string > &constant_expressions, const libMesh::Parallel::Communicator &comm) const
Performs setup steps on a SymFunction.
void paramError(const std::string ¶m, Args... args) const
Emits an error prefixed with the file and line number of the given param (from the input file) along ...
static InputParameters validParams()
std::unique_ptr< MeshBase > & _input
mesh to set the subdomains on
SymFunctionPtr _func_F
function parser object describing the combinatorial geometry
bool hasSubdomainName(const MeshBase &input_mesh, const SubdomainName &name)
Whether a particular subdomain name exists in the mesh.
std::vector< GenericReal< is_ad > > _func_params
Array to stage the parameters passed to the functions when calling Eval.
const InputParameters & parameters() const
Get the parameters of the object.
static InputParameters validParams()
std::unique_ptr< MeshBase > generate() override
Generate / modify the mesh.
MeshGenerators are objects that can modify or add to an existing mesh.