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")};
std::string prefix() const
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)
void paramError(const std::string ¶m, Args... args) const
const T & getParam(const std::string &name) const
virtual void needFV() override
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
bool shouldCreateTimeDerivative(const VariableName &var_name, const std::vector< SubdomainName > &blocks, const bool error_if_already_defined) const
std::vector< SubdomainName > _blocks
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
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")
bool isParamValid(const std::string &name) const
const VariableName & _temperature_name
Name of the temperature variable.
bool parsesToReal(const std::string &input, Real *parsed_real)
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...