25 "Creates the heat conduction equation discretized with nonlinear finite volume");
29 "Thermal conductivity functor material property");
30 params.
addParam<MaterialPropertyName>(
"specific_heat",
"Specific heat material property");
31 params.
addParam<MooseFunctorName>(
"specific_heat_functor",
"Specific heat functor");
32 params.
addParam<MaterialPropertyName>(
"density",
"Density material property");
33 params.
addParam<MooseFunctorName>(
"density_functor",
"Density functor");
35 "thermal_conductivity_functor specific_heat specific_heat_functor density density_functor",
36 "Thermal properties");
40 "temperature_scaling > 0",
41 "Scaling factor for the heat conduction equation");
69 const std::string kernel_type =
"FVDiffusion";
73 params.
set<MooseFunctorName>(
"coeff") =
74 getParam<MooseFunctorName>(
"thermal_conductivity_functor");
79 const std::string kernel_type =
"FVCoupledForce";
83 params.
set<MooseFunctorName>(
"v") = getParam<VariableName>(
"heat_source_var");
85 params.
set<std::vector<SubdomainName>>(
"block") =
86 getParam<std::vector<SubdomainName>>(
"heat_source_blocks");
91 const std::string kernel_type =
"FVBodyForce";
95 const auto & functor_name = getParam<MooseFunctorName>(
"heat_source_functor");
97 params.
set<
Real>(
"value") = std::stod(functor_name);
98 else if (
getProblem().hasFunction(functor_name))
99 params.
set<FunctionName>(
"function") = functor_name;
101 params.
set<PostprocessorName>(
"postprocessor") = functor_name;
104 "Unsupported functor type. Consider using 'heat_source_var'.");
109 const bool use_functors =
111 const std::string kernel_type =
112 use_functors ?
"FVFunctorHeatConductionTimeDerivative" :
"FVHeatConductionTimeDerivative";
118 params.
set<MooseFunctorName>(
"specific_heat") =
119 getParam<MooseFunctorName>(
"specific_heat_functor");
120 params.
set<MooseFunctorName>(
"density") = getParam<MooseFunctorName>(
"density_functor");
125 params.
set<MaterialPropertyName>(
"density_name") = getParam<MaterialPropertyName>(
"density");
137 const std::string bc_type =
"FVFunctorNeumannBC";
141 const auto & heat_flux_boundaries = getParam<std::vector<BoundaryName>>(
"heat_flux_boundaries");
142 const auto & boundary_heat_fluxes =
143 getParam<std::vector<MooseFunctorName>>(
"boundary_heat_fluxes");
145 if (std::set<MooseFunctorName>(boundary_heat_fluxes.begin(), boundary_heat_fluxes.end())
147 heat_flux_boundaries.size() > 1)
149 params.
set<std::vector<BoundaryName>>(
"boundary") = heat_flux_boundaries;
150 params.
set<MooseFunctorName>(
"functor") = boundary_heat_fluxes[0];
155 for (
const auto i :
index_range(heat_flux_boundaries))
157 params.
set<std::vector<BoundaryName>>(
"boundary") = {heat_flux_boundaries[i]};
158 params.
set<MooseFunctorName>(
"functor") = boundary_heat_fluxes[i];
161 heat_flux_boundaries[i],
168 const std::string bc_type =
"FVFunctorDirichletBC";
172 const auto & temperature_boundaries =
173 getParam<std::vector<BoundaryName>>(
"fixed_temperature_boundaries");
174 const auto & boundary_temperatures =
175 getParam<std::vector<MooseFunctorName>>(
"boundary_temperatures");
177 if (std::set<MooseFunctorName>(boundary_temperatures.begin(), boundary_temperatures.end())
179 temperature_boundaries.size() > 1)
181 params.
set<std::vector<BoundaryName>>(
"boundary") = temperature_boundaries;
182 params.
set<MooseFunctorName>(
"functor") = boundary_temperatures[0];
187 for (
const auto i :
index_range(temperature_boundaries))
189 params.
set<std::vector<BoundaryName>>(
"boundary") = {temperature_boundaries[i]};
190 params.
set<MooseFunctorName>(
"functor") = boundary_temperatures[i];
193 temperature_boundaries[i],
200 const std::string bc_type =
"FVFunctorConvectiveHeatFluxBC";
203 params.
set<
bool>(
"is_solid") =
true;
206 const auto & convective_boundaries =
207 getParam<std::vector<BoundaryName>>(
"fixed_convection_boundaries");
208 const auto & boundary_T_fluid =
209 getParam<std::vector<MooseFunctorName>>(
"fixed_convection_T_fluid");
210 const auto & boundary_htc = getParam<std::vector<MooseFunctorName>>(
"fixed_convection_htc");
212 if (std::set<MooseFunctorName>(boundary_T_fluid.begin(), boundary_T_fluid.end()).size() == 1 &&
213 std::set<MooseFunctorName>(boundary_htc.begin(), boundary_htc.end()).size() == 1 &&
214 convective_boundaries.size() > 1)
216 params.
set<std::vector<BoundaryName>>(
"boundary") = convective_boundaries;
217 params.
set<MooseFunctorName>(
"T_bulk") = boundary_T_fluid[0];
218 params.
set<MooseFunctorName>(
"heat_transfer_coefficient") = boundary_htc[0];
224 for (
const auto i :
index_range(convective_boundaries))
226 params.
set<std::vector<BoundaryName>>(
"boundary") = {convective_boundaries[i]};
227 params.
set<MooseFunctorName>(
"T_bulk") = boundary_T_fluid[i];
228 params.
set<MooseFunctorName>(
"heat_transfer_coefficient") = boundary_htc[i];
231 convective_boundaries[i],
244 "MooseVariableFVReal");
248 const std::string variable_type =
"MooseVariableFVReal";
251 params.
set<std::vector<Real>>(
"scaling") = {getParam<Real>(
"temperature_scaling")};
std::string prefix() const
bool parsesToReal(const std::string &input)
virtual void initializePhysicsAdditional() override
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)
virtual void needFV() override
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...
bool shouldCreateTimeDerivative(const VariableName &var_name, const std::vector< SubdomainName > &blocks, const bool error_if_already_defined) const
std::vector< SubdomainName > _blocks
bool isParamValid(const std::string &name) const
virtual void addFVKernels() override
virtual FEProblemBase & getProblem()
const SolverSystemName & getSolverSystem(unsigned int variable_index) const
virtual void addFVBCs() override
virtual void addSolverVariables() override
bool hasPostprocessorValueByName(const PostprocessorName &name) const
const T & getParam(const std::string &name) const
void paramError(const std::string ¶m, Args... args) const
registerPhysicsBaseTasks("HeatTransferApp", HeatConductionFV)
virtual void addVariable(const std::string &var_type, const std::string &var_name, InputParameters ¶ms)
HeatConductionFV(const InputParameters ¶meters)
static InputParameters validParams()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
registerMooseAction("HeatTransferApp", HeatConductionFV, "add_fv_kernel")
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.
virtual void addFVKernel(const std::string &kernel_name, const std::string &name, InputParameters ¶meters)
virtual void addFVBC(const std::string &fv_bc_name, const std::string &name, InputParameters ¶meters)
auto index_range(const T &sizable)
Creates all the objects needed to solve the heat conduction equations with a finite volume discretiza...