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";
70 params.
set<std::vector<VariableName>>(
"v") = {getParam<VariableName>(
"heat_source_var")};
72 params.
set<std::vector<SubdomainName>>(
"block") =
73 getParam<std::vector<SubdomainName>>(
"heat_source_blocks");
78 const std::string kernel_type =
"BodyForce";
82 const auto & functor_name = getParam<MooseFunctorName>(
"heat_source_functor");
84 params.
set<
Real>(
"value") = std::stod(functor_name);
85 else if (
getProblem().hasFunction(functor_name))
86 params.
set<FunctionName>(
"function") = functor_name;
88 params.
set<PostprocessorName>(
"postprocessor") = functor_name;
90 paramError(
"heat_source_functor",
"Unsupported functor type.");
95 const std::string kernel_type =
96 _use_ad ?
"ADHeatConductionTimeDerivative" :
"SpecificHeatConductionTimeDerivative";
101 params.
set<MaterialPropertyName>(
"density_name") = getParam<MaterialPropertyName>(
"density");
115 const std::string bc_type =
"FunctorNeumannBC";
119 const auto & heat_flux_boundaries = getParam<std::vector<BoundaryName>>(
"heat_flux_boundaries");
120 const auto & boundary_heat_fluxes =
121 getParam<std::vector<MooseFunctorName>>(
"boundary_heat_fluxes");
123 if (std::set<MooseFunctorName>(boundary_heat_fluxes.begin(), boundary_heat_fluxes.end())
125 heat_flux_boundaries.size() > 1)
127 params.
set<std::vector<BoundaryName>>(
"boundary") = heat_flux_boundaries;
128 params.
set<MooseFunctorName>(
"functor") = boundary_heat_fluxes[0];
134 for (
const auto i :
index_range(heat_flux_boundaries))
136 params.
set<std::vector<BoundaryName>>(
"boundary") = {heat_flux_boundaries[i]};
137 params.
set<MooseFunctorName>(
"functor") = boundary_heat_fluxes[i];
140 heat_flux_boundaries[i],
147 const std::string bc_type =
"FunctorDirichletBC";
151 const auto & temperature_boundaries =
152 getParam<std::vector<BoundaryName>>(
"fixed_temperature_boundaries");
153 const auto & boundary_temperatures =
154 getParam<std::vector<MooseFunctorName>>(
"boundary_temperatures");
156 if (std::set<MooseFunctorName>(boundary_temperatures.begin(), boundary_temperatures.end())
158 temperature_boundaries.size() > 1)
160 params.
set<std::vector<BoundaryName>>(
"boundary") = temperature_boundaries;
161 params.
set<MooseFunctorName>(
"functor") = boundary_temperatures[0];
167 for (
const auto i :
index_range(temperature_boundaries))
169 params.
set<std::vector<BoundaryName>>(
"boundary") = {temperature_boundaries[i]};
170 params.
set<MooseFunctorName>(
"functor") = boundary_temperatures[i];
173 temperature_boundaries[i],
180 const std::string bc_type =
"ADConvectiveHeatFluxBC";
184 const auto & convective_boundaries =
185 getParam<std::vector<BoundaryName>>(
"fixed_convection_boundaries");
186 const auto & boundary_T_fluid =
187 getParam<std::vector<MooseFunctorName>>(
"fixed_convection_T_fluid");
188 const auto & boundary_htc = getParam<std::vector<MooseFunctorName>>(
"fixed_convection_htc");
190 if (!
_use_ad && convective_boundaries.size())
191 paramInfo(
"use_automatic_differentiation",
192 "No-AD is not implemented for convection boundaries");
195 if (std::set<MooseFunctorName>(boundary_T_fluid.begin(), boundary_T_fluid.end()).size() == 1 &&
196 std::set<MooseFunctorName>(boundary_htc.begin(), boundary_htc.end()).size() == 1 &&
197 convective_boundaries.size() > 1)
199 params.
set<std::vector<BoundaryName>>(
"boundary") = convective_boundaries;
200 params.
set<MooseFunctorName>(
"T_infinity_functor") = boundary_T_fluid[0];
201 params.
set<MooseFunctorName>(
"heat_transfer_coefficient_functor") = boundary_htc[0];
208 if (convective_boundaries.size() != boundary_T_fluid.size())
210 "Should be as many convection boundaries (" +
211 std::to_string(convective_boundaries.size()) +
212 ") as fixed convection temperatures (" +
213 std::to_string(boundary_T_fluid.size()) +
")");
214 if (convective_boundaries.size() != boundary_htc.size())
216 "Should be as many convection boundaries (" +
217 std::to_string(convective_boundaries.size()) +
218 ") as fixed convection heat exchange coefficients (" +
219 std::to_string(boundary_htc.size()) +
")");
220 for (
const auto i :
index_range(convective_boundaries))
222 params.
set<std::vector<BoundaryName>>(
"boundary") = {convective_boundaries[i]};
223 params.
set<MooseFunctorName>(
"T_infinity_functor") = boundary_T_fluid[i];
224 params.
set<MooseFunctorName>(
"heat_transfer_coefficient_functor") = boundary_htc[i];
227 convective_boundaries[i],
243 const std::string variable_type =
"MooseVariable";
void addSolverVariables() override
std::string prefix() const
bool parsesToReal(const std::string &input)
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)
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...
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)
bool isParamValid(const std::string &name) const
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
void paramError(const std::string ¶m, Args... args) 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)
const InputParameters & parameters() const
void reportPotentiallyMissedParameters(const std::vector< std::string > ¶m_names, const std::string &object_type) const
const VariableName & _temperature_name
Name of the temperature variable.
registerMooseAction("HeatTransferApp", HeatConductionCG, "add_kernel")
void paramInfo(const std::string ¶m, Args... args) const
auto index_range(const T &sizable)