30 "thermal_conductivity");
33 params.
addParam<MaterialPropertyName>(
"density",
"density",
"Density material property");
37 "use_automatic_differentiation",
39 "Whether to use automatic differentiation for all the terms in the equation");
53 const std::string kernel_type =
_use_ad ?
"ADHeatConduction" :
"HeatConduction";
60 params.
set<MaterialPropertyName>(
"diffusion_coefficient") =
61 getParam<MaterialPropertyName>(
"thermal_conductivity");
66 const std::string kernel_type =
_use_ad ?
"ADCoupledForce" :
"CoupledForce";
69 params.
set<std::vector<VariableName>>(
"v") = {getParam<VariableName>(
"heat_source_var")};
71 params.
set<std::vector<SubdomainName>>(
"block") =
72 getParam<std::vector<SubdomainName>>(
"heat_source_blocks");
79 const std::string kernel_type =
"BodyForce";
82 params.
set<std::vector<SubdomainName>>(
"block") =
83 getParam<std::vector<SubdomainName>>(
"heat_source_blocks");
87 const auto & functor_name = getParam<MooseFunctorName>(
"heat_source_functor");
89 params.
set<
Real>(
"value") = std::stod(functor_name);
90 else if (
getProblem().hasFunction(functor_name))
91 params.
set<FunctionName>(
"function") = functor_name;
93 params.
set<PostprocessorName>(
"postprocessor") = functor_name;
95 paramError(
"heat_source_functor",
"Unsupported functor type.");
100 const std::string kernel_type =
101 _use_ad ?
"ADHeatConductionTimeDerivative" :
"SpecificHeatConductionTimeDerivative";
106 params.
set<MaterialPropertyName>(
"density_name") = getParam<MaterialPropertyName>(
"density");
120 const std::string bc_type =
"FunctorNeumannBC";
124 const auto & heat_flux_boundaries = getParam<std::vector<BoundaryName>>(
"heat_flux_boundaries");
125 const auto & boundary_heat_fluxes =
126 getParam<std::vector<MooseFunctorName>>(
"boundary_heat_fluxes");
128 if (std::set<MooseFunctorName>(boundary_heat_fluxes.begin(), boundary_heat_fluxes.end())
130 heat_flux_boundaries.size() > 1)
132 params.
set<std::vector<BoundaryName>>(
"boundary") = heat_flux_boundaries;
133 params.
set<MooseFunctorName>(
"functor") = boundary_heat_fluxes[0];
139 for (
const auto i :
index_range(heat_flux_boundaries))
141 params.
set<std::vector<BoundaryName>>(
"boundary") = {heat_flux_boundaries[i]};
142 params.
set<MooseFunctorName>(
"functor") = boundary_heat_fluxes[i];
145 heat_flux_boundaries[i],
152 const std::string bc_type =
"FunctorDirichletBC";
156 const auto & temperature_boundaries =
157 getParam<std::vector<BoundaryName>>(
"fixed_temperature_boundaries");
158 const auto & boundary_temperatures =
159 getParam<std::vector<MooseFunctorName>>(
"boundary_temperatures");
161 if (std::set<MooseFunctorName>(boundary_temperatures.begin(), boundary_temperatures.end())
163 temperature_boundaries.size() > 1)
165 params.
set<std::vector<BoundaryName>>(
"boundary") = temperature_boundaries;
166 params.
set<MooseFunctorName>(
"functor") = boundary_temperatures[0];
172 for (
const auto i :
index_range(temperature_boundaries))
174 params.
set<std::vector<BoundaryName>>(
"boundary") = {temperature_boundaries[i]};
175 params.
set<MooseFunctorName>(
"functor") = boundary_temperatures[i];
178 temperature_boundaries[i],
185 const std::string bc_type =
"ADConvectiveHeatFluxBC";
189 const auto & convective_boundaries =
190 getParam<std::vector<BoundaryName>>(
"fixed_convection_boundaries");
191 const auto & boundary_T_fluid =
192 getParam<std::vector<MooseFunctorName>>(
"fixed_convection_T_fluid");
193 const auto & boundary_htc = getParam<std::vector<MooseFunctorName>>(
"fixed_convection_htc");
195 if (!
_use_ad && convective_boundaries.size())
196 paramInfo(
"use_automatic_differentiation",
197 "No-AD is not implemented for convection boundaries");
200 if (std::set<MooseFunctorName>(boundary_T_fluid.begin(), boundary_T_fluid.end()).size() == 1 &&
201 std::set<MooseFunctorName>(boundary_htc.begin(), boundary_htc.end()).size() == 1 &&
202 convective_boundaries.size() > 1)
204 params.
set<std::vector<BoundaryName>>(
"boundary") = convective_boundaries;
205 params.
set<MooseFunctorName>(
"T_infinity_functor") = boundary_T_fluid[0];
206 params.
set<MooseFunctorName>(
"heat_transfer_coefficient_functor") = boundary_htc[0];
213 if (convective_boundaries.size() != boundary_T_fluid.size())
215 "Should be as many convection boundaries (" +
216 std::to_string(convective_boundaries.size()) +
217 ") as fixed convection temperatures (" +
218 std::to_string(boundary_T_fluid.size()) +
")");
219 if (convective_boundaries.size() != boundary_htc.size())
221 "Should be as many convection boundaries (" +
222 std::to_string(convective_boundaries.size()) +
223 ") as fixed convection heat exchange coefficients (" +
224 std::to_string(boundary_htc.size()) +
")");
225 for (
const auto i :
index_range(convective_boundaries))
227 params.
set<std::vector<BoundaryName>>(
"boundary") = {convective_boundaries[i]};
228 params.
set<MooseFunctorName>(
"T_infinity_functor") = boundary_T_fluid[i];
229 params.
set<MooseFunctorName>(
"heat_transfer_coefficient_functor") = boundary_htc[i];
232 convective_boundaries[i],
248 const std::string variable_type =
"MooseVariable";
void addSolverVariables() override
std::string prefix() const
void assignBlocks(InputParameters ¶ms, const std::vector< SubdomainName > &blocks) const
bool shouldCreateVariable(const VariableName &var_name, const std::vector< SubdomainName > &blocks, const bool error_if_aux)
void paramError(const std::string ¶m, Args... args) const
const T & getParam(const std::string &name) const
const InputParameters & parameters() const
static InputParameters validParams()
InputParameters getValidParams(const std::string &name) const
Base class to host common parameters and attributes to all Physics solving the heat conduction equati...
void reportPotentiallyMissedParameters(const std::vector< std::string > ¶m_names, const std::string &object_type, const std::string &object_name="") const
static InputParameters validParams()
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)
std::vector< SubdomainName > _blocks
virtual void addBoundaryCondition(const std::string &bc_name, const std::string &name, InputParameters ¶meters)
virtual FEProblemBase & getProblem()
const SolverSystemName & getSolverSystem(unsigned int variable_index) const
static InputParameters validParams()
Contructor for Heat Equation time derivative term.
static InputParameters validParams()
const bool _use_ad
Whether to use automatic differentiation.
bool hasPostprocessorValueByName(const PostprocessorName &name) const
virtual void addVariable(const std::string &var_type, const std::string &var_name, InputParameters ¶ms)
Creates all the objects needed to solve the heat conduction equations with CG.
void addFEKernels() override
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
HeatConductionCG(const InputParameters ¶meters)
registerPhysicsBaseTasks("HeatTransferApp", HeatConductionCG)
bool isParamValid(const std::string &name) const
const VariableName & _temperature_name
Name of the temperature variable.
registerMooseAction("HeatTransferApp", HeatConductionCG, "add_kernel")
bool parsesToReal(const std::string &input, Real *parsed_real)
auto index_range(const T &sizable)
void paramInfo(const std::string ¶m, Args... args) const