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";
112 const std::string bc_type =
"FunctorNeumannBC";
116 const auto & heat_flux_boundaries = getParam<std::vector<BoundaryName>>(
"heat_flux_boundaries");
117 const auto & boundary_heat_fluxes =
118 getParam<std::vector<MooseFunctorName>>(
"boundary_heat_fluxes");
120 if (std::set<MooseFunctorName>(boundary_heat_fluxes.begin(), boundary_heat_fluxes.end())
122 heat_flux_boundaries.size() > 1)
124 params.
set<std::vector<BoundaryName>>(
"boundary") = heat_flux_boundaries;
125 params.
set<MooseFunctorName>(
"functor") = boundary_heat_fluxes[0];
131 for (
const auto i :
index_range(heat_flux_boundaries))
133 params.
set<std::vector<BoundaryName>>(
"boundary") = {heat_flux_boundaries[i]};
134 params.
set<MooseFunctorName>(
"functor") = boundary_heat_fluxes[i];
137 heat_flux_boundaries[i],
144 const std::string bc_type =
"FunctorDirichletBC";
148 const auto & temperature_boundaries =
149 getParam<std::vector<BoundaryName>>(
"fixed_temperature_boundaries");
150 const auto & boundary_temperatures =
151 getParam<std::vector<MooseFunctorName>>(
"boundary_temperatures");
153 if (std::set<MooseFunctorName>(boundary_temperatures.begin(), boundary_temperatures.end())
155 temperature_boundaries.size() > 1)
157 params.
set<std::vector<BoundaryName>>(
"boundary") = temperature_boundaries;
158 params.
set<MooseFunctorName>(
"functor") = boundary_temperatures[0];
164 for (
const auto i :
index_range(temperature_boundaries))
166 params.
set<std::vector<BoundaryName>>(
"boundary") = {temperature_boundaries[i]};
167 params.
set<MooseFunctorName>(
"functor") = boundary_temperatures[i];
170 temperature_boundaries[i],
177 const std::string bc_type =
"ADConvectiveHeatFluxBC";
181 const auto & convective_boundaries =
182 getParam<std::vector<BoundaryName>>(
"fixed_convection_boundaries");
183 const auto & boundary_T_fluid =
184 getParam<std::vector<MooseFunctorName>>(
"fixed_convection_T_fluid");
185 const auto & boundary_htc = getParam<std::vector<MooseFunctorName>>(
"fixed_convection_htc");
187 if (!
_use_ad && convective_boundaries.size())
188 paramInfo(
"use_automatic_differentiation",
189 "No-AD is not implemented for convection boundaries");
192 if (std::set<MooseFunctorName>(boundary_T_fluid.begin(), boundary_T_fluid.end()).size() == 1 &&
193 std::set<MooseFunctorName>(boundary_htc.begin(), boundary_htc.end()).size() == 1 &&
194 convective_boundaries.size() > 1)
196 params.
set<std::vector<BoundaryName>>(
"boundary") = convective_boundaries;
197 params.
set<MooseFunctorName>(
"T_infinity_functor") = boundary_T_fluid[0];
198 params.
set<MooseFunctorName>(
"heat_transfer_coefficient_functor") = boundary_htc[0];
205 if (convective_boundaries.size() != boundary_T_fluid.size())
207 "Should be as many convection boundaries (" +
208 std::to_string(convective_boundaries.size()) +
209 ") as fixed convection temperatures (" +
210 std::to_string(boundary_T_fluid.size()) +
")");
211 if (convective_boundaries.size() != boundary_htc.size())
213 "Should be as many convection boundaries (" +
214 std::to_string(convective_boundaries.size()) +
215 ") as fixed convection heat exchange coefficients (" +
216 std::to_string(boundary_htc.size()) +
")");
217 for (
const auto i :
index_range(convective_boundaries))
219 params.
set<std::vector<BoundaryName>>(
"boundary") = {convective_boundaries[i]};
220 params.
set<MooseFunctorName>(
"T_infinity_functor") = boundary_T_fluid[i];
221 params.
set<MooseFunctorName>(
"heat_transfer_coefficient_functor") = boundary_htc[i];
224 convective_boundaries[i],
240 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)