.. _CHT_Tutorial: Conjugate Heat Transfer for Cooling Fins ========================================== This tutorial will walk you through the process of running a steady-state simulation using a conjugate heat transfer (CHT) solver. By specifying the volume heat source, you can obtain the temperature distribution in the fluid and solid to further evaluate the efficiency of the cooling fins. Geometry and Mesh ------------------ As depicted in Figure :numref:`CHT_surfaceMesh`, the example geometry consists of a central body with 36 cooling fins. The specifications for the geometry are as follows: - Length of the center body: 1 m - Maximum radius of the center body: 0.2 m - Cooling fin properties: - Thickness: 0.01 m - Height: 0.04 m - Length along the x-direction: 0.1 m Please note that these dimensions are provided as an example and can be adjusted according to your specific requirements. .. _CHT_surfaceMesh: .. figure:: Figures/surfaceMesh.png :align: center :width: 70% Surface mesh. The gray, blue and red colors correspond to the centerbody, interface and adiabatic boundary conditions. As shown in :numref:`CHT_volumeMesh`, when generating the volume mesh, we need to create two blocks: solid (red) and fluid (blue). **All cells inside the solid block are required to be tetrahedral elements.** Additionally, the cells on the interface need to match, so the **interface cells need to be triangular.** .. _CHT_volumeMesh: .. figure:: Figures/volumeMesh.svg :align: center :width: 100% Volume mesh. Left\: sliced at Y = 0 m. Right\: sliced at X = 0.35 m The `mesh file `_ for this tutorial is provided so that you can easily replicate this example in your own account. Case ----- In this section, we will guide you on how to prepare the Flow360.json file. Let's start by specifying the freestream conditions, which are listed below: - Density :math:`\rho_\infty = 1.225 \ \text{kg}/\text{m}^3` - Speed of sound :math:`C_{\infty} = 340 \ \text{m/s}` - Temperature :math:`T_\infty = 288.15 \ \text{K}` - Mach :math:`= 0.1` Additionally, it is important to note that the grid unit used in this example is 1 meter, denoted as :math:`L_\text{gridUnit} = 1 \ \text{m}`. :code:`boundaries` ^^^^^^^^^^^^^^^^^^^ The :code:`boundaries` subsection in Flow360.json is shown as follows: .. code-block:: json "boundaries": { "fluid/farfield": { "type": "Freestream" }, "fluid/centerbody": { "type": "NoSlipWall" }, "fluid/interface": { "type": "ConjugateHeatTransferFluidInterface", "pairedPatchName": "solid/interface" }, "solid/interface": { "type": "ConjugateHeatTransferSolidInterface" }, "solid/adiabatic": { "type": "SolidAdiabaticWall" } } The interface between the fluid and solid domains is defined using the boundary types :code:`ConjugateHeatTransferFluidInterface` for the fluid and :code:`ConjugateHeatTransferSolidInterface` for the solid. To establish a connection between the two sides of the interface, at least one side must have the :code:`pairedPatchName` specified. This informs the solver that these two patches correspond to the two sides of a specific interface. For further information regarding the available boundary types and their parameters, you can refer to the :ref:`boundaries in the solver configuration page `. :code:`volumeZones` ^^^^^^^^^^^^^^^^^^^^ The material of the solid part is copper, and the thermal conductivity for copper is :math:`k = 398 \ \text{W}/(\text{m} \cdot \text{K})`. The reference thermal conductivity for nondimensionalization is given by, .. math:: k_\text{ref} = \frac{\rho_{\infty} C_{\infty}^3 L_\text{gridUnit}}{T_{\infty}} \approx 167091 \ \text{kg}/(\text{s}^3 \cdot \text{m}) Therefore, the nondimensional :code:`thermalConductivity` can be written as: .. math:: \text{thermalConductivity} = \frac{k}{k_\text{ref}} \approx 0.00238 Consider a heat source uniformly distributed in the solid block. The power of the heat source is :math:`5 \ \text{kW}`, the volume of the cylindrical solid is roughly :math:`\pi R^2 L \approx 0.01257 \ \text{m}^3`. So the volumetric heat source :math:`\dot{q}` can be written as: .. math:: \dot{q} = \frac{5 \ \text{kW}}{0.01257 \ \text{m}^3} \approx 398 \ \text{kW}/\text{m}^3 The reference volumetric heat source for nondimensionalization is given by, .. math:: \dot{q}_\text{ref} = \frac{\rho_\infty C_\infty^3}{L_\text{girdUnit}} = 48147400 \ \text{kg}/(\text{s}^3 \cdot \text{m}) \approx 48147 \ \text{kW}/\text{m}^3 Therefore, the nondimensional volumetric heat source is, .. math:: \text{volumetricHeatSource} = \frac{\dot{q}_s}{\dot{q}_\text{ref}} \approx 0.00826 For more details regarding the nondimensionalization of :code:`thermalConductivity` and :code:`volumetricHeatSource`, please see :ref:`nondimensional inputs in the knowledge base `. The :code:`volumeZones` subsection in Flow360.json is shown as follows, .. code-block:: json "volumeZones": { "fluid": { "modelType": "NavierStokes" }, "solid": { "modelType": "HeatEquation", "thermalConductivity": 0.00238, "volumetricHeatSource": "0.00826" } }, Note that :code:`volumetricHeatSource` is a string. For a nonuniform heat source, it could be an expression that contains variables x, y and z. For more details about the :code:`volumeZones` subsection, see :ref:`volumeZones in the solver configuration page `. :code:`heatEquationSolver` ^^^^^^^^^^^^^^^^^^^^^^^^^^^ In addition to the :code:`navierStokesSolver` and :code:`turbulenceModelSolver`, a new subsection :code:`heatEquationSolver` is also needed to control the convergence of the CHT solver. As shown in the following example, for steady-state simulations, there are two :code:`absoluteTolerance`: #. Outer :code:`absoluteTolerance`: This is the overall convergence criterion for the steady-state simulation. If the absolute residual drops below this value, then the simulation is allowed to stop before reaching the :code:`maxPseudoSteps`. #. Inner :code:`absoluteTolerance`: This is the local convergence criterion within each pseudostep. When running the linear solver, if the absolute residual drops below this value, then the heat solver will skip to the next pseudostep. .. code-block:: json "heatEquationSolver": { "modelType" : "HeatEquation", "absoluteTolerance": 1e-11, "linearSolverConfig": { "maxIterations": 25, "absoluteTolerance": 1e-12 }, "equationEvalFrequency": 10, }, More details about the :code:`heatEquationSolver` can be found in :ref:`heatEquationSolver in the solver configuration page `. For your convenience, the `complete Flow360.json `_ is also provided here. Results -------- The temperature fields directly outputted by Flow360, labeled as :code:`T` for the fluid block and :code:`temperatureSolid` for the solid block, are nondimensional. To convert these nondimensional temperatures back to physical temperatures in Kelvin, you need to multiply them by the reference temperature :math:`T_\infty = 288.15 \ \text{K}`. The physical temperature distribution on the surface is shown in :numref:`CHT_surfaceTemperature`. .. _CHT_surfaceTemperature: .. figure:: Figures/surfaceTemperature.png :align: center :width: 70% Temperature field on the surface In the fluid block, the temperature field :code:`T` is non-zero, while :code:`temperatureSolid` is always zero. Conversely, in the solid block, :code:`temperatureSolid` is non-zero, and :code:`T` is always zero. Please note that the zero values do not have physical meaning. Therefore, to obtain a unified temperature field that can be plotted in both the fluid and solid blocks, you can take the maximum value between :code:`T` and :code:`temperatureSolid`. To convert the resulting temperature field to physical temperatures in Kelvin, you need to multiply it by the reference temperature :math:`T_\infty = 288.15 \ \text{K}`. By applying these steps, you can obtain a single temperature field that is valid for both the fluid and solid blocks, representing the physical temperature distribution in Kelvin. .. _CHT_volumeTemperature: .. figure:: Figures/volumeTemperature.svg :align: center :width: 100% Temperature field. Left\: sliced at Y = 0 m. Right\: sliced at X = 0.35 m. Please note that the reference temperature :math:`T_\infty = 288.15 \ \text{K}` provided here is for illustrative purposes, and you should adjust it according to the specific reference temperature used in your simulation.