24 "continuous Galerkin finite element method");
45 std::string kernel_type;
47 kernel_type =
_use_ad ?
"ADMatDiffusion" :
"MatDiffusion";
50 const auto &
d = getParam<std::vector<MooseFunctorName>>(
"diffusivity_functors")[s];
52 kernel_type =
"FunctionDiffusion";
55 "diffusivity_functors",
"No diffusion kernel implemented for the source type of",
d);
59 params.
set<NonlinearVariableName>(
"variable") = var_name;
64 params.
set<MaterialPropertyName>(
"diffusivity") =
65 getParam<std::vector<MaterialPropertyName>>(
"diffusivity_matprops")[s];
67 params.
set<FunctionName>(
"function") =
68 getParam<std::vector<MooseFunctorName>>(
"diffusivity_functors")[s];
77 std::string kernel_type;
78 const auto & sources = getParam<std::vector<MooseFunctorName>>(
"source_functors");
79 const auto & source = sources[s];
82 kernel_type =
_use_ad ?
"ADBodyForce" :
"BodyForce";
84 kernel_type =
_use_ad ?
"ADCoupledForce" :
"CoupledForce";
87 "No kernel defined for a source term in CG for the type of '",
92 params.
set<NonlinearVariableName>(
"variable") = var_name;
96 const auto coefs = getParam<std::vector<Real>>(
"source_coefs");
97 const auto coef = coefs[s];
99 params.
set<
Real>(
"value") = MooseUtils::convert<Real>(source) * coef;
102 params.
set<
Real>(
"value") = coef;
103 params.
set<FunctionName>(
"function") = source;
107 params.
set<
Real>(
"value") = coef;
108 params.
set<PostprocessorName>(
"postprocessor") = source;
112 params.
set<
Real>(
"coef") = coef;
113 params.
set<std::vector<VariableName>>(
"v") = {source};
122 const std::string kernel_type =
_use_ad ?
"ADTimeDerivative" :
"TimeDerivative";
124 params.
set<NonlinearVariableName>(
"variable") = var_name;
136 const auto & boundary_fluxes =
137 getParam<std::vector<std::vector<MooseFunctorName>>>(
"boundary_fluxes");
145 const auto & bc_flux = boundary_fluxes[s][i];
149 std::string bc_type =
"";
151 bc_type =
_use_ad ?
"ADNeumannBC" :
"NeumannBC";
153 bc_type =
"CoupledVarNeumannBC";
155 bc_type =
_use_ad ?
"ADFunctionNeumannBC" :
"FunctionNeumannBC";
157 bc_type =
"PostprocessorNeumannBC";
159 bc_type =
"FunctorNeumannBC";
163 params.
set<NonlinearVariableName>(
"variable") = var_name;
168 params.
set<
Real>(
"value") = MooseUtils::convert<Real>(bc_flux);
170 params.
set<std::vector<VariableName>>(
"v") = {bc_flux};
172 params.
set<FunctionName>(
"function") = bc_flux;
174 params.
set<PostprocessorName>(
"postprocessor") = bc_flux;
176 params.
set<MooseFunctorName>(
"functor") = bc_flux;
185 const auto & boundary_values =
186 getParam<std::vector<std::vector<MooseFunctorName>>>(
"boundary_values");
192 const auto & bc_value = boundary_values[s][i];
195 std::string bc_type =
"";
197 bc_type =
_use_ad ?
"ADDirichletBC" :
"DirichletBC";
199 bc_type =
_use_ad ?
"ADMatchedValueBC" :
"MatchedValueBC";
201 bc_type =
_use_ad ?
"ADFunctionDirichletBC" :
"FunctionDirichletBC";
203 bc_type =
"PostprocessorDirichletBC";
205 bc_type =
"FunctorDirichletBC";
208 params.
set<NonlinearVariableName>(
"variable") = var_name;
213 params.
set<
Real>(
"value") = MooseUtils::convert<Real>(bc_value);
215 params.
set<std::vector<VariableName>>(
"v") = {bc_value};
217 params.
set<FunctionName>(
"function") = bc_value;
219 params.
set<PostprocessorName>(
"postprocessor") = bc_value;
221 params.
set<MooseFunctorName>(
"functor") = bc_value;
240 "Cannot specify the variable order if variable " + var_name +
241 " is defined outside the Physics block");
246 const std::string variable_type =
"MooseVariable";
248 params.
set<
MooseEnum>(
"order") = getParam<MooseEnum>(
"variable_order");
static InputParameters validParams()
virtual void addFEBCs() override
std::string prefix() const
virtual bool hasVariable(const std::string &var_name) const override
bool parsesToReal(const std::string &input)
void assignBlocks(InputParameters ¶ms, const std::vector< SubdomainName > &blocks) const
virtual void addFEKernels() override
static InputParameters validParams()
registerMultiSpeciesDiffusionPhysicsBaseTasks("ScalarTransportApp", MultiSpeciesDiffusionCG)
Base class to host all common parameters and attributes of Physics actions to solve the diffusion equ...
const std::vector< std::vector< BoundaryName > > & _neumann_boundaries
Boundaries on which a Neumann boundary condition is applied. Outer indexing is variables.
InputParameters getValidParams(const std::string &name) const
bool shouldCreateTimeDerivative(const VariableName &var_name, const std::vector< SubdomainName > &blocks, const bool error_if_already_defined) const
virtual void addKernel(const std::string &kernel_name, const std::string &name, InputParameters ¶meters)
MultiSpeciesDiffusionCG(const InputParameters ¶meters)
std::vector< SubdomainName > _blocks
registerMooseAction("ScalarTransportApp", MultiSpeciesDiffusionCG, "add_kernel")
virtual void addBoundaryCondition(const std::string &bc_name, const std::string &name, InputParameters ¶meters)
bool isParamValid(const std::string &name) const
virtual FEProblemBase & getProblem()
const SolverSystemName & getSolverSystem(unsigned int variable_index) const
Creates all the objects needed to solve diffusion equations for multiple species with a continuous Ga...
bool hasPostprocessorValueByName(const PostprocessorName &name) const
const T & getParam(const std::string &name) const
void paramError(const std::string ¶m, Args... args) const
virtual void addVariable(const std::string &var_type, const std::string &var_name, InputParameters ¶ms)
const std::vector< VariableName > & _species_names
Name of the diffused variables.
bool variableExists(const VariableName &var_name, bool error_if_aux) const
virtual void addSolverVariables() override
bool isParamSetByUser(const std::string &nm) const
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const std::vector< std::vector< BoundaryName > > & _dirichlet_boundaries
Boundaries on which a Dirichlet boundary condition is applied. Outer indexing is variables.
const bool _use_ad
Whether to use automatic differentiation or not.
static InputParameters validParams()
virtual bool hasFunction(const std::string &name, const THREAD_ID tid=0)
auto index_range(const T &sizable)