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";
82 params.
set<MooseFunctorName>(
"v") = getParam<VariableName>(
"heat_source_var");
84 params.
set<std::vector<SubdomainName>>(
"block") =
85 getParam<std::vector<SubdomainName>>(
"heat_source_blocks");
92 const std::string kernel_type =
"FVBodyForce";
95 params.
set<std::vector<SubdomainName>>(
"block") =
96 getParam<std::vector<SubdomainName>>(
"heat_source_blocks");
100 const auto & functor_name = getParam<MooseFunctorName>(
"heat_source_functor");
102 params.
set<Real>(
"value") = std::stod(functor_name);
103 else if (
getProblem().hasFunction(functor_name))
104 params.
set<FunctionName>(
"function") = functor_name;
106 params.
set<PostprocessorName>(
"postprocessor") = functor_name;
109 "Unsupported functor type. Consider using 'heat_source_var'.");
114 const bool use_functors =
116 const std::string kernel_type =
117 use_functors ?
"FVFunctorHeatConductionTimeDerivative" :
"FVHeatConductionTimeDerivative";
123 params.
set<MooseFunctorName>(
"specific_heat") =
124 getParam<MooseFunctorName>(
"specific_heat_functor");
125 params.
set<MooseFunctorName>(
"density") = getParam<MooseFunctorName>(
"density_functor");
130 params.
set<MaterialPropertyName>(
"density_name") = getParam<MaterialPropertyName>(
"density");
142 const std::string bc_type =
"FVFunctorNeumannBC";
146 const auto & heat_flux_boundaries = getParam<std::vector<BoundaryName>>(
"heat_flux_boundaries");
147 const auto & boundary_heat_fluxes =
148 getParam<std::vector<MooseFunctorName>>(
"boundary_heat_fluxes");
150 if (std::set<MooseFunctorName>(boundary_heat_fluxes.begin(), boundary_heat_fluxes.end())
152 heat_flux_boundaries.size() > 1)
154 params.
set<std::vector<BoundaryName>>(
"boundary") = heat_flux_boundaries;
155 params.
set<MooseFunctorName>(
"functor") = boundary_heat_fluxes[0];
160 for (
const auto i : index_range(heat_flux_boundaries))
162 params.
set<std::vector<BoundaryName>>(
"boundary") = {heat_flux_boundaries[i]};
163 params.
set<MooseFunctorName>(
"functor") = boundary_heat_fluxes[i];
166 heat_flux_boundaries[i],
173 const std::string bc_type =
"FVFunctorDirichletBC";
177 const auto & temperature_boundaries =
178 getParam<std::vector<BoundaryName>>(
"fixed_temperature_boundaries");
179 const auto & boundary_temperatures =
180 getParam<std::vector<MooseFunctorName>>(
"boundary_temperatures");
182 if (std::set<MooseFunctorName>(boundary_temperatures.begin(), boundary_temperatures.end())
184 temperature_boundaries.size() > 1)
186 params.
set<std::vector<BoundaryName>>(
"boundary") = temperature_boundaries;
187 params.
set<MooseFunctorName>(
"functor") = boundary_temperatures[0];
192 for (
const auto i : index_range(temperature_boundaries))
194 params.
set<std::vector<BoundaryName>>(
"boundary") = {temperature_boundaries[i]};
195 params.
set<MooseFunctorName>(
"functor") = boundary_temperatures[i];
198 temperature_boundaries[i],
205 const std::string bc_type =
"FVFunctorConvectiveHeatFluxBC";
208 params.
set<
bool>(
"is_solid") =
true;
211 const auto & convective_boundaries =
212 getParam<std::vector<BoundaryName>>(
"fixed_convection_boundaries");
213 const auto & boundary_T_fluid =
214 getParam<std::vector<MooseFunctorName>>(
"fixed_convection_T_fluid");
215 const auto & boundary_htc = getParam<std::vector<MooseFunctorName>>(
"fixed_convection_htc");
217 if (std::set<MooseFunctorName>(boundary_T_fluid.begin(), boundary_T_fluid.end()).size() == 1 &&
218 std::set<MooseFunctorName>(boundary_htc.begin(), boundary_htc.end()).size() == 1 &&
219 convective_boundaries.size() > 1)
221 params.
set<std::vector<BoundaryName>>(
"boundary") = convective_boundaries;
222 params.
set<MooseFunctorName>(
"T_bulk") = boundary_T_fluid[0];
223 params.
set<MooseFunctorName>(
"heat_transfer_coefficient") = boundary_htc[0];
229 for (
const auto i : index_range(convective_boundaries))
231 params.
set<std::vector<BoundaryName>>(
"boundary") = {convective_boundaries[i]};
232 params.
set<MooseFunctorName>(
"T_bulk") = boundary_T_fluid[i];
233 params.
set<MooseFunctorName>(
"heat_transfer_coefficient") = boundary_htc[i];
236 convective_boundaries[i],
249 "MooseVariableFVReal");
253 const std::string variable_type =
"MooseVariableFVReal";
256 params.
set<std::vector<Real>>(
"scaling") = {getParam<Real>(
"temperature_scaling")};
registerPhysicsBaseTasks("HeatTransferApp", HeatConductionFV)
registerMooseAction("HeatTransferApp", HeatConductionFV, "add_fv_kernel")
virtual void addVariable(const std::string &var_type, const std::string &var_name, InputParameters ¶ms)
bool hasPostprocessorValueByName(const PostprocessorName &name) const
virtual void needFV() override
virtual void addFVBC(const std::string &fv_bc_name, const std::string &name, InputParameters ¶meters)
virtual void addFVKernel(const std::string &kernel_name, const std::string &name, InputParameters ¶meters)
InputParameters getValidParams(const std::string &name) const
Creates all the objects needed to solve the heat conduction equations with a finite volume discretiza...
virtual void initializePhysicsAdditional() override
HeatConductionFV(const InputParameters ¶meters)
static InputParameters validParams()
virtual void addFVKernels() override
virtual void addSolverVariables() override
virtual void addFVBCs() override
Base class to host common parameters and attributes to all Physics solving the heat conduction equati...
const VariableName & _temperature_name
Name of the temperature variable.
static InputParameters validParams()
const InputParameters & parameters() const
void paramError(const std::string ¶m, Args... args) const
const T & getParam(const std::string &name) const
bool isParamValid(const std::string &name) const
virtual FEProblemBase & getProblem()
bool shouldCreateTimeDerivative(const VariableName &var_name, const std::vector< SubdomainName > &blocks, const bool error_if_already_defined) const
void assignBlocks(InputParameters ¶ms, const std::vector< SubdomainName > &blocks) const
void reportPotentiallyMissedParameters(const std::vector< std::string > ¶m_names, const std::string &object_type, const std::string &object_name="") const
std::string prefix() const
const SolverSystemName & getSolverSystem(unsigned int variable_index) const
bool shouldCreateVariable(const VariableName &var_name, const std::vector< SubdomainName > &blocks, const bool error_if_aux)
std::vector< SubdomainName > _blocks
bool parsesToReal(const std::string &input, Real *parsed_real)