diff --git a/_data/tutorials.yml b/_data/tutorials.yml index e1540ef7..9c604bd8 100644 --- a/_data/tutorials.yml +++ b/_data/tutorials.yml @@ -44,6 +44,8 @@ - Dynamic_FSI_Python - Static_CHT - Inc_Heated_Cylinders_Unsteady + - SS_CR_CHT + - Inc_Combustion - title: Design Features tutorials: diff --git a/_su2gui/Installation.md b/_su2gui/Installation.md index 48046891..904e95fb 100644 --- a/_su2gui/Installation.md +++ b/_su2gui/Installation.md @@ -23,4 +23,4 @@ To launch the GUI, run the following command in your terminal: SU2_GUI -For a quick introduction to using SU2GUI, visit the [Quick start](./../Quick-start) page. For additional terminal options, refer to the [Terminal Initialization](./../Terminal-Initialization) page. \ No newline at end of file +For a quick introduction to using SU2GUI, visit the [Quick start](./../Quick-Start) page. For additional terminal options, refer to the [Terminal Initialization](./../Terminal-Initialization) page. diff --git a/_su2gui/Logs-Tab-and-Errors.md b/_su2gui/Logs-Tab-and-Errors.md index ed92e4f2..ec09e973 100644 --- a/_su2gui/Logs-Tab-and-Errors.md +++ b/_su2gui/Logs-Tab-and-Errors.md @@ -8,7 +8,7 @@ The SU2 and SU2GUI logs provide essential information about the execution and pe ## SU2 Logs -![SU2 Log Tab](../../su2gui_files/User_guide/logs/su2-logs.png) +![SU2 Log Tab](../../su2gui_files/User_guide/Logs/su2-logs.png) The SU2 logs contain detailed information about the solver's execution, including convergence history, residual values, and solution progress. These logs are invaluable for identifying convergence issues, detecting numerical instabilities, and gaining insights into the overall simulation process. @@ -17,7 +17,7 @@ Each SU2 log file is stored within the corresponding case folder and is unique t --- ## SU2GUI Logs -![SU2GUI Log Tab](../../su2gui_files/User_guide/logs/su2gui-logs.png) +![SU2GUI Log Tab](../../su2gui_files/User_guide/Logs/su2gui-logs.png) The SU2GUI logs capture interactions and events within the graphical user interface. These logs are useful for understanding user actions, identifying errors or warnings, and tracking the workflow followed during a simulation setup. @@ -27,7 +27,7 @@ Unlike the SU2 logs, the SU2GUI log file is updated and cleared each time SU2GUI ## Error/Warn Message -![Error message](../../su2gui_files/User_guide/logs/error-message.png) +![Error message](../../su2gui_files/User_guide/Logs/error-message.png) In addition to capturing interactions and events within the graphical user interface, SU2GUI also displays any Error and Warning messages received in the log files as pop-up dialog box. This feature helps users quickly identify and address any issues or potential problems during the simulation setup or execution. diff --git a/_su2gui/Mesh.md b/_su2gui/Mesh.md index 373256d3..4fc44b8e 100644 --- a/_su2gui/Mesh.md +++ b/_su2gui/Mesh.md @@ -15,13 +15,13 @@ SU2GUI offers the option to load a mesh file through both the GUI and the termin 1. Start a new case. Follow these guides for detailed steps on [starting a new case](./../Manage-Cases/#starting-a-new-case). - 2. Click on the "Load Mesh File" option. ![](../../su2gui_files/User_guide/Mesh/button-mesh-file.png) + 2. Click on the "Load Mesh File" option. ![](../../su2gui_files/User_guide/mesh/button-mesh-file.png) - 3. In the pop-up window, choose the desired mesh file. ![](../../su2gui_files/User_guide/Mesh/choose-mesh-file.png) + 3. In the pop-up window, choose the desired mesh file. ![choose mesh file](../../su2gui_files/User_guide/mesh/choose-mesh-file.png) - 4. The mesh file should now be loaded, and the properties in the GUI should be updated accordingly. ![](../../su2gui_files/User_guide/Mesh/loaded-mesh-file.png) + 4. The mesh file should now be loaded, and the properties in the GUI should be updated accordingly. ![loaded mesh file](../../su2gui_files/User_guide/mesh/loaded-mesh-file.png) diff --git a/_tutorials/incompressible_flow/Inc_Combustion/Inc_Combustion.md b/_tutorials/incompressible_flow/Inc_Combustion/Inc_Combustion.md index c97b2161..a49fbbe7 100644 --- a/_tutorials/incompressible_flow/Inc_Combustion/Inc_Combustion.md +++ b/_tutorials/incompressible_flow/Inc_Combustion/Inc_Combustion.md @@ -2,10 +2,10 @@ title: "Incompressible, Laminar Combustion Simulation" permalink: "/tutorials/Inc_Combustion/" written_by: EvertBunschoten -for_version: 8.0.0 -revised_by: -revision_date: -revised_version: +for_version: 8.1.0 +revised_by: EvertBunschoten +revision_date: 04-10-2024 +revised_version: 8.1.0 solver: INC_NAVIER_STOKES requires: SU2_CFD, mlpcpp complexity: advanced @@ -19,18 +19,17 @@ Version 8.0.0 of SU2 supports the simulation of reduced-order combustion simulat ## Resources and Prerequisites -The resources for this tutorial can be found in the [incompressible_flow/Inc_Combustion](https://github.com/su2code/Tutorials/tree/master/incompressible_flow/Inc_Combustion) directory in the [tutorial repository](https://github.com/su2code/Tutorials). You will need the following files: -1. *Configuration file*: The configuration file for this case is named [hydrogen_configuration.cfg](https://github.com/su2code/Tutorials/tree/master/incompressible_flow/Inc_Combustion/hydrogen_configuration.cfg). -2. *Mesh file*: The geometry for this test case is a simple, 2D burner geometry with a cooled burner plate ([H2_Burner.su2](https://github.com/su2code/Tutorials/tree/master/incompressible_flow/Inc_Combustion/H2_Burner.su2)). +The resources for this tutorial can be found in the [incompressible_flow/Inc_Combustion/1__premixed_hydrogen](https://github.com/su2code/Tutorials/tree/master/incompressible_flow/Inc_Combustion/1__premixed_hydrogen) directory in the [tutorial repository](https://github.com/su2code/Tutorials). You will need the following files: +1. *Configuration file*: The configuration file for this case is named [H2_burner.cfg](https://github.com/su2code/Tutorials/tree/master/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/H2_burner.cfg). +2. *Mesh file*: The geometry for this test case is a simple, 2D burner geometry with a cooled burner plate ([H2_Burner.su2](https://github.com/su2code/Tutorials/tree/master/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/H2_burner.su2)). 3. *Manifold files*: The working principle of the FGM method is the manifold containing the flamelet data. From this manifold, thermo-chemical and reaction source term information is retrieved during the simulation. SU2 supports the use of 2D and 3D look-up tables (LUT), as well as multi-layer perceptrons (MLP). In the current tutorial, MLP's will be utilized. These files have the `.mlp` extension. Evaluating MLP's in SU2 is done through the `MLPCpp` sub-module. Make sure you configure SU2 with the flag `-Denable-mlpcpp=true` to clone this submodule. -The mesh is created using [gmsh](https://gmsh.info/) and a respective `.geo` script is available to recreate/modify the mesh [H2_Burner.geo](https://github.com/su2code/Tutorials/tree/master/incompressible_flow/Inc_Combustion/H2_Burner.geo). The mesh is unstructured (i.e. only contains triangular elements) with 70495 elements and 35926 points. This mesh is quite large, but a high resolution is required in order to resolve the flame front. +The mesh is created using [gmsh](https://gmsh.info/) and a respective `.geo` script is available to recreate/modify the mesh [H2_Burner.geo](https://github.com/su2code/Tutorials/tree/master/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/H2_burner.geo). The mesh is unstructured (i.e. only contains triangular elements) with 70495 elements and 35926 points. This mesh is quite large, but a high resolution is required in order to resolve the flame front. ![Mesh with boundary conditions](../../../tutorials_files/incompressible_flow/Inc_Combustion/mesh.png) Figure (1): Computational mesh with color indication of the used boundary conditions. The MLP files describe five architectures. These are used to predict the thermo-chemical state, preferential diffusion scalars, and reaction source terms. -![MLP architecture used for prediction of temperature, diffusion coefficient, and dynamic viscosity](../../../tutorials_files/incompressible_flow/Inc_Combustion/MLP_Group1.png) ## Prerequisites @@ -39,71 +38,85 @@ The following tutorial assumes you already compiled `SU2_CFD` in serial or paral ## Background -The SU2 FGM solver solves two sets of transport equations: FGM controlling variables and optionally passive species. The solver supports up to three controlling variables, those representing the progress variable $(\mathcal{Y})$, total enthalpy ($h$), and optionally mixture fraction $(Z)$. The controlling variables are used as inputs to the flamelet data manifold to extract the thermo-chemical state variables and reaction source terms. The passive species $(Y_j)$ represent species of interest such as emissions. The solutions of the passive species distribution do not affect the behavior of the controlling variables, but can be used to define custom outputs and objective functions. The solution process is visualized in [solutionprocess](#solutionprocess). +The SU2 FGM solver solves two sets of transport equations: FGM controlling variables and optionally passive species. The solver supports up to three controlling variables, those representing the progress variable $$(\mathcal{Y})$$, total enthalpy ($$h$$), and optionally mixture fraction $$(Z)$$. The controlling variables are used as inputs to the flamelet data manifold to extract the thermo-chemical state variables and reaction source terms. The passive species $$(Y_j)$$ represent species of interest such as emissions. The solutions of the passive species distribution do not affect the behavior of the controlling variables, but can be used to define custom outputs and objective functions. The solution process is visualized in the [solution process](#solutionprocess). -![solutionprocess](../../../tutorials_files/incompressible_flow/Inc_Combustion/SolverProcess.png) +![solution process](../../../tutorials_files/incompressible_flow/Inc_Combustion/SolverProcess.png) The `CSpeciesSolver` object in SU2 solves the controlling variables and passive species transport equations. These come in three variations, depending on the problem set-up and reactants: 1. pre-mixed, no preferential diffusion: + $$ \begin{equation} \frac{\partial \rho \mathcal{Y}}{\partial t} + \nabla\cdot(\rho\vec{u}\mathcal{Y}) - \nabla\cdot\left(\rho D\nabla\mathcal{Y}\right) = \rho\dot{\omega}_\mathcal{Y} \end{equation} $$ + $$ \begin{equation} \frac{\partial \rho h}{\partial t} + \nabla\cdot(\rho\vec{u} h) - \nabla\cdot\left(\rho D\nabla h\right) = 0 \end{equation} $$ + $$ \begin{equation} \frac{\partial \rho Y_j}{\partial t} + \nabla\cdot(\rho\vec{u}Y_j) - \nabla\cdot\left(\rho D\nabla Y_j\right) = \rho\dot{\omega}^+ + \rho\dot{\omega}^- Y_j \end{equation} $$ + 2. partially or non-premixed, no preferential diffusion: + $$ \begin{equation} \frac{\partial \rho \mathcal{Y}}{\partial t} + \nabla\cdot(\rho\vec{u}\mathcal{Y}) - \nabla\cdot\left(\rho D\nabla\mathcal{Y}\right) = \rho\dot{\omega}_\mathcal{Y} \end{equation} $$ + $$ \begin{equation} \frac{\partial \rho h}{\partial t} + \nabla\cdot(\rho\vec{u} h) - \nabla\cdot\left(\rho D\nabla h\right) = 0 \end{equation} $$ + $$ \begin{equation} \frac{\partial \rho Z}{\partial t} + \nabla\cdot(\rho\vec{u}Z) - \nabla\cdot\left(\rho D\nabla Z\right) = \rho\dot{\omega}_\mathcal{Y} \end{equation} $$ + $$ \begin{equation} \frac{\partial \rho Y_j}{\partial t} + \nabla\cdot(\rho\vec{u}Y_j) - \nabla\cdot\left(\rho D\nabla Y_j\right) = \rho\dot{\omega}^+ + \rho\dot{\omega}^- Y_j \end{equation} $$ + 3. pre-mixed, partially pre-mixed, non-premixed, with preferential diffusion: + $$ \begin{equation} \frac{\partial \rho \mathcal{Y}}{\partial t} + \nabla\cdot(\rho\vec{u}\mathcal{Y}) - \nabla\cdot\left(\rho D\nabla\beta_\mathcal{Y}\right) = \rho\dot{\omega}_\mathcal{Y} \end{equation} $$ + $$ \begin{equation} \frac{\partial \rho h}{\partial t} + \nabla\cdot(\rho\vec{u} h) - \nabla\cdot\left(\beta_{h,1}\nabla T + \rho D\nabla\beta_{h,2}\right) = 0 \end{equation} $$ + $$ \begin{equation} \frac{\partial \rho Z}{\partial t} + \nabla\cdot(\rho\vec{u}Z) - \nabla\cdot\left(\rho D\nabla\beta_Z\right) = 0 \end{equation} $$ + $$ \begin{equation} \frac{\partial \rho Y_j}{\partial t} + \nabla\cdot(\rho\vec{u}Y_j) - \nabla\cdot\left(\rho D\nabla Y_j\right) = \rho\dot{\omega}^+ + \rho\dot{\omega}^- Y_j \end{equation} $$ -Here, $D$ is the diffusion coefficient in $m^2s^{-1}$, $\rho\dot{\omega}_\mathcal{Y}$ the progress variable source term in $kg m^{-3} s^{-1}$, and $\rho\dot{\omega}^+$ and $\rho\dot{\omega}^-$ the passive species production and consumption rates respectively. The $\beta-$ terms on the left hand side of equations 8-10 are used to model preferential diffusion. These are discussed in more detail in the section describing the preferential diffusion model. + +Here, $D$ is the diffusion coefficient in $$m^2s^{-1}$$, $$\rho\dot{\omega}_\mathcal{Y}$$ the progress variable source term in $$kg m^{-3} s^{-1}$$, and $$\rho\dot{\omega}^+$$ and $$\rho\dot{\omega}^-$$ the passive species production and consumption rates respectively. The $$\beta-$$ terms on the left hand side of equations 8-10 are used to model preferential diffusion. These are discussed in more detail in the section describing the preferential diffusion model. The test case covered in this tutorial represents a simplified version of a two-dimensional, pre-mixed hydrogen burner with preferential diffusion and a heat exchanger emulator suspended in the hot exhaust. The purpose of this test case is to demonstrate the capabilities of the SU2 FGM solver (differential diffusion, heat loss), not a solution for a realistic hydrogen combustion problem. @@ -119,9 +132,9 @@ During FGM simulations, thermo-chemical, as well as reaction data is interpolate The flamelet fluid model in SU2 requires thermo-chemical and scalar source term data from the manifold to function. First the manifold should have the controlling variable names as input variables in with the corresponding units: -1. Progress variable ($\mathcal{Y}$)[-] -2. Total enthalpy ($h$)[J kg^-1] -3. optional: mixture fraction ($Z$)[-] +1. Progress variable ($$\mathcal{Y}$$)[-] +2. Total enthalpy ($$h$$)[J kg^-1] +3. optional: mixture fraction ($$Z$$)[-] In the current tutorial, the following progress variable definition is used: @@ -149,11 +162,10 @@ Finally, the manifold should contain the source terms for the progress variable The manifold may contain more data for passive look-up purposes. If these are not defined, they will be ignored during the SU2 FGM solution process. - The two manifold formats currently supported in SU2 are the unstructured look-up table and dense, feed-forward multi-layer perceptron. -The look-up table format supported in SU2 is based around the two-dimensional, trapezoidal map approach. The table file format should be in the dragon file format. For pre-mixed problems without differential diffusion (e.g. pre-mixed methane problems), a two-dimensional table is sufficient. An example of such a table can be found in the [methane combustion test case](https://github.com/su2code/TestCases/flamelet/01_laminar_premixed_ch4_flame_cfd/fgm_ch4.drg). The two table dimensions should span the progress variable and total enthalpy dimension. +The look-up table format supported in SU2 is based around the two-dimensional, trapezoidal map approach. The table file format should be in the dragon file format. For pre-mixed problems without differential diffusion (e.g. pre-mixed methane problems), a two-dimensional table is sufficient. An example of such a table can be found in the [methane combustion test case](https://github.com/su2code/TestCases/tree/master/flamelet/01_laminar_premixed_ch4_flame_cfd/fgm_ch4.drg). The two table dimensions should span the progress variable and total enthalpy dimension. -For partially- or non-premixed problems or pre-mixed problems with preferential diffusion, a three-dimensional table is required. SU2 supports a quasi-3D table format, consisting of two-dimensonal trapezoidal maps stacked in the third dimension. An example of this can be found in the [partially premixed methane combustion test case](https://github.com/su2code/TestCases/flamelet/06_laminar_partial_premixed_ch4_flame_cfd/LUT_methane_3D.drg). The first two dimensions should span the progress variable and total enthalpy dimension, while the third dimension should be mixture fraction. +For partially- or non-premixed problems or pre-mixed problems with preferential diffusion, a three-dimensional table is required. SU2 supports a quasi-3D table format, consisting of two-dimensonal trapezoidal maps stacked in the third dimension. An example of this can be found in the [partially premixed methane combustion test case](https://github.com/su2code/TestCases/tree/master/flamelet/06_laminar_partial_premixed_ch4_flame_cfd/LUT_methane_3D.drg). The first two dimensions should span the progress variable and total enthalpy dimension, while the third dimension should be mixture fraction. @@ -166,26 +178,28 @@ $$ \frac{\partial \rho \mathcal{Y}}{\partial t} + \nabla\cdot(\rho\vec{u}\mathcal{Y}) - \nabla\cdot\left(D\nabla\beta_\mathcal{Y}\right) = \rho\dot{\omega}_\mathcal{Y} \end{equation} $$ + $$ \begin{equation} \frac{\partial \rho h}{\partial t} + \nabla\cdot(\rho\vec{u} h) - \nabla\cdot\left(\beta_{h,1}\nabla T + D\nabla\beta_{h,2}\right) = 0 \end{equation} $$ + $$ \begin{equation} \frac{\partial \rho Z}{\partial t} + \nabla\cdot(\rho\vec{u}Z) - \nabla\cdot\left(D\nabla\beta_Z\right) = 0 \end{equation} $$ -Here, $\mathcal{Y},h$ and $Z$ are the progress variable, total enthalpy, and mixture fraction respectively. Preferential diffusion is modeled through the $\beta$-terms in the third term on the left hand side of equations 2-4. [The following work](https://doi.org/10.1080/13647830.2021.1970232) contains details on the definitions of these scalars. +Here, $$\mathcal{Y},h$$ and $$Z$$ are the progress variable, total enthalpy, and mixture fraction respectively. Preferential diffusion is modeled through the $$\beta$$-terms in the third term on the left hand side of equations 2-4. [The following work](https://doi.org/10.1080/13647830.2021.1970232) contains details on the definitions of these scalars. Within the manifold, these scalars shall be named as follows: -1. $\beta_\mathcal{Y}$ (`Beta_ProgVar`)[-] -2. $\beta_{h,1}$ (`Beta_Enth_Thermal`)[J kg^-1 K^-1] -3. $\beta_{h,2}$ (`Beta_Enth`)[J kg^-1] -4. $\beta_Z$ (`Beta_MixFrac`)[-] +1. $$\beta_\mathcal{Y}$$ (`Beta_ProgVar`)[-] +2. $$\beta_{h,1}$$ (`Beta_Enth_Thermal`)[J kg^-1 K^-1] +3. $$\beta_{h,2}$$ (`Beta_Enth`)[J kg^-1] +4. $$\beta_Z$$ (`Beta_MixFrac`)[-] -If not all the $\beta$- terms are detected, while preferential diffusion is enabled, an error will be raised. During the initialization of the fluid model, a message will be displayed in the terminal indicating whether the preferential diffusion model is enabled. +If not all the $$\beta$$- terms are detected, while preferential diffusion is enabled, an error will be raised. During the initialization of the fluid model, a message will be displayed in the terminal indicating whether the preferential diffusion model is enabled. ## Configuration File Options @@ -193,12 +207,14 @@ The SU2 FGM solver is enabled through the options in the configuration file. In ### Enabling Flamelet Fluid Model The SU2 FGM solver is enabled by setting `FLUID_MODEL=FLUID_FLAMELET`. This option results in the `CFluidFlamelet` class to be used as the fluid model during the simulation. Using the `FLUID_FLAMELET` option requires the options for `KIND_SCALAR_MODEL`, `DIFFUSIVITY_MODEL`, `VISCOSITY_MODEL`, and `CONDUCTIVITY_MODEL` to be set to `FLAMELET` as well. For the `INC_DENSITY_MODEL`, there are two options. By setting `INC_DENSITY_MODEL=VARIABLE`, the local density is calculated through the ideal gas law. + $$ \begin{equation} \rho=\frac{pW_M}{R_uT} \end{equation} $$ -where $p$ is the free-stream pressure, $R_u$ the universal gas constant, and $W_M$ and $T$ the mean molecular weight and temperature respectively, which are obtained from the manifold. Finally, the option for `INC_ENERGY_EQUATION` should be set to `YES` when solving FGM problems. In order to enable preferential + +where $$p$$ is the free-stream pressure, $$R_u$$ the universal gas constant, and $$W_M$$ and $$T$$ the mean molecular weight and temperature respectively, which are obtained from the manifold. Finally, the option for `INC_ENERGY_EQUATION` should be set to `YES` when solving FGM problems. In order to enable preferential diffusion, set the option `PREFERENTIAL_DIFFUSION` to `YES` (set by default to `NO`). In the current example for the hydrogen burner, the following options are used: @@ -237,7 +253,7 @@ The table format supported under the option `LUT` allows for the interpolation o Examples of such 2D and 3D tables can be found in the `SU2` [unit tests](https://github.com/su2code/SU2/tree/master/UnitTests/Common/containers/) or [test cases](https://github.com/su2code/TestCases/tree/master/flamelet/01_laminar_premixed_ch4_flame_cfd). -The artificial neural network type supported under the option `MLP` is the dense, feed-forward multi-layer perceptron. For FGM simulations, one or multiple MLP's can be loaded, over which the required flamelet manifold variables should be distributed. This offers the benefit of being able to use different MLP architectures for different data. `SU2` uses the [MLPCpp module](https://github.com/EvertBunschoten/MLPCpp.git) to evaluate MLP's during simulations. After training MLP architectures on flamelet data, it is possible to load these into `SU2` by storing the architecture, weights, biases, and activation function information in the supported `.mlp` format. Information on how to translate networks trained through TensorFlow to the `.mlp` format, see the [MLPCpp repository](https://github.com/EvertBunschoten/MLPCpp.git). Examples of such MLP files can be found in the `SU2` [unit tests](https://github.com/su2code/SU2/tree/master/UnitTests/Common/toolboxes/multilayer_perceptron), [test cases](https://github.com/su2code/TestCases/tree/master/flamelet/07_laminar_premixed_h2_flame_cfd), and the [MLPCpp repository](https://github.com/EvertBunschoten/MLPCpp.git). +The artificial neural network type supported under the option `MLP` is the dense, feed-forward multi-layer perceptron. For FGM simulations, one or multiple MLP's can be loaded, over which the required flamelet manifold variables should be distributed. This offers the benefit of being able to use different MLP architectures for different data. `SU2` uses the [MLPCpp module](https://github.com/EvertBunschoten/MLPCpp.git) to evaluate MLP's during simulations. After training MLP architectures on flamelet data, it is possible to load these into `SU2` by storing the architecture, weights, biases, and activation function information in the supported `.mlp` format. Information on how to translate networks trained through TensorFlow to the `.mlp` format, see the [MLPCpp repository](https://github.com/EvertBunschoten/MLPCpp.git). Examples of such MLP files can be found in the `SU2` [unit tests](https://github.com/su2code/SU2/tree/master/UnitTests/Common/toolboxes/multilayer_perceptron), [test cases](https://github.com/su2code/TestCases/tree/master/flamelet/07_laminar_premixed_h2_flame_cfd), and the [MLPCpp repository](https://github.com/EvertBunschoten/MLPCpp.git). The neural networks were trained using the [SU2 DataMiner](https://github.com/EvertBunschoten/SU2_DataMiner) code. This repository contains test cases and tutorials which explain the data generation and set-up needed to train multi-layer perceptrons for flamelet-generated manifold applications. The preferred choice of manifold depends on the application, available computational resources, and available know-how. Typically, using a table results in shorter query times, and therefore simulation times compared to using MLP's. On the other hand, storing three-dimensional look-up tables with sufficient resolution for accurate FGM simulations requires substial amounts of memory (in the order of giga-bytes per core). If memory usage is not a constraint, using a LUT manifold therefore results in superior computational performance compared to using MLP's. The LUT uses linear interpolation over each cell in 2D queries. For highly non-linear data, this may result in inaccuracies and subsequent numerical instabilities during the simulation process. Using the MLP option allows for the use of non-linear activation functions, resulting in more smooth output data trends. The latter may result in improved solver robustness if the corresponding MLP can be trained to be sufficiently accurate. Finally, training artificial neural networks on flamelet data can be a cumbersome process and choosing an appropriate network architecture may not always be straightforward. On the other hand, generating a look-up table is comparatively easier. @@ -247,7 +263,7 @@ In the current example, a set of MLP's is used to define the manifold: INTERPOLATION_METHOD= MLP FILENAMES_INTERPOLATOR= (MLP_TD1.mlp, MLP_TD2.mlp, MLP_PD.mlp, MLP_SPV.mlp, MLP_PNO.mlp, MLP_null.mlp) ``` -Here, [MLP_TD1.mlp](https://github.com/su2code/Tutorials/tree/feature_new_flamelet/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/MLP_TD1.mlp), and [MLP_TD2.mlp](https://github.com/su2code/Tutorials/tree/feature_new_flamelet/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/MLP_TD2.mlp) are used to predict the thermo-chemical fluid properties, [MLP_PD.mlp](https://github.com/su2code/Tutorials/tree/feature_new_flamelet/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/MLP_PD.mlp) the preferential diffusion scalars, [MLP_SPV.mlp](https://github.com/su2code/Tutorials/tree/feature_new_flamelet/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/MLP_SPV.mlp) the progress variable source term and heat release, and [MLP_PNO.mlp](https://github.com/su2code/Tutorials/tree/feature_new_flamelet/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/MLP_PNO.mlp) the production term for the passive $NO$ specie. [MLP_null.mlp](https://github.com/su2code/Tutorials/tree/feature_new_flamelet/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/MLP_null.mlp) is a dummy MLP which returns 0 irrespective of the controlling variable values. This file is required when using `NULL` for any parameters such as source terms. +Here, [MLP_TD1.mlp](https://github.com/su2code/Tutorials/tree/master/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/MLP_TD1.mlp), and [MLP_TD2.mlp](https://github.com/su2code/Tutorials/tree/master/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/MLP_TD2.mlp) are used to predict the thermo-chemical fluid properties, [MLP_PD.mlp](https://github.com/su2code/Tutorials/tree/master/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/MLP_PD.mlp) the preferential diffusion scalars, [MLP_SPV.mlp](https://github.com/su2code/Tutorials/tree/master/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/MLP_SPV.mlp) the progress variable source term and heat release, and [MLP_PNO.mlp](https://github.com/su2code/Tutorials/tree/master/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/MLP_PNO.mlp) the production term for the passive $NO$ specie. [MLP_null.mlp](https://github.com/su2code/Tutorials/tree/master/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/MLP_null.mlp) is a dummy MLP which returns 0 irrespective of the controlling variable values. This file is required when using `NULL` for any parameters such as source terms. ### Passive species definition @@ -263,7 +279,7 @@ USER_SOURCE_NAMES = ( \ Y_dot_net-NO, NULL \ ) ``` -The solution for $NO$ will be stored in the volume output under the name ```Y_NO``` and only the production term will be used to define this species' source term. The name `Y_dot_net-NO` corresponds to the MLP output in the file [MLP_PNO.mlp](https://github.com/su2code/Tutorials/tree/feature_new_flamelet/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/MLP_PNO.mlp). +The solution for $$NO$$ will be stored in the volume output under the name ```Y_NO``` and only the production term will be used to define this species' source term. The name `Y_dot_net-NO` corresponds to the MLP output in the file [MLP_PNO.mlp](https://github.com/su2code/Tutorials/tree/master/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/MLP_PNO.mlp). ### Passive look-up terms @@ -273,7 +289,7 @@ A quantity of interest which is not computed in `SU2` is the heat release per un ``` LOOKUP_NAMES=(Heat_Release) ``` -which corresponds to the heat release predicted by [MLP_SPV.mlp](https://github.com/su2code/Tutorials/tree/feature_new_flamelet/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/MLP_SPV.mlp). +which corresponds to the heat release predicted by [MLP_SPV.mlp](https://github.com/su2code/Tutorials/tree/master/incompressible_flow/Inc_Combustion/1__premixed_hydrogen/MLP_SPV.mlp). ### Ignition methods @@ -312,17 +328,21 @@ The spark will be initialized at iteration 100 and will remain active for anothe The boundary conditions for the `SU2` FGM solver are defined similarly as those defined for regular species transport problems. Make sure that the the number of species defined under `MARKER_INLET_SPECIES` equates the sum of controlling variables and passive species. By default, all boundary conditions are perceived as weak boundary conditions. Iso-thermal wall or conjugate heat transfer boundary conditions affect the transport of total enthalpy. When using weak boundary conditions for iso-thermal walls, a heat flux term is applied to the enthalpy transport equation: + $$ \begin{equation} f = k \nabla T \cdot \vec{n} \end{equation} $$ + where $f$ is the heat flux perceived as a residual term to the enthalpy transport equation, and $n$ the local boundary normal unit vector. When defining the iso-thermal wall as a strong boundary condition, a 1D Newton solver process is initialized along the boundary, where + $$ h_{i+1} = h_i + c_p(\mathcal{y},h_i,Z) (T_b - T(\mathcal{y},h_i,Z)) $$ -is iterated until the temperature difference $T_b - T(\mathcal{y},h_i,Z)$ is less than $1e-3K$. + +is iterated until the temperature difference $$T_b - T(\mathcal{y},h_i,Z)$$ is less than 1e-3K. For the current example, the equivalence ratio at the inlet was set to 0.5, translating to a mixture fraction of 1.447e-2. The reactants are presumed at a temperature of 300K at the inlet, while isothermal wall boundary conditions are applied on the burner wall (350K) and heat exchanger emulator (400K). The iso-thermal wall boundary conditions are defined as strong boundary conditions, meaning that the total enthalpy is locally enforced to achieve the imposed temperature. ``` @@ -336,14 +356,18 @@ MARKER_ISOTHERMAL= (burner_wall, 350, cylinder_wall, 400) ### Convective scheme Just like for regular species transport problems, there are two options available for the `CONV_NUM_METHOD_SPECIES`, those being `SCALAR_UPWIND` and `BOUNDED_SCALAR`. -The convective residual term in cell volume $\Omega$ as computed through `SCALAR_UPWIND` is as follows: +The convective residual term in cell volume $$\Omega$$ as computed through `SCALAR_UPWIND` is as follows: + $$ R_{C, \mathrm{SCALAR\_UPWIND}} = \iiint_\Omega\nabla\cdot(\rho\vec{u}Y)\,d\Omega $$ + When using the `BOUNDED_SCALAR` option, a correction term is applied, which compensates for the effect of flow divergence. + $$ R_{C, \mathrm{BOUNDED\_SCALAR}} = R_{C, \mathrm{SCALAR\_UPWIND}} - \iiint_\Omega Y \nabla\cdot\rho\vec{u}\,d\Omega $$ + The effect of flow divergence can be significant in the early stages of convergence near boundaries. This may result in solution instabilities for transported scalars with source terms such as the progress variable. Therefore, it is highly recommended to use `BOUNDED_SCALAR` for FGM simulations in SU2. The current example uses the ```BOUNDED_SCALAR``` option. @@ -379,12 +403,14 @@ All networks use the Gaussian Error Linear Unit (GELU) activation function for a ## Initial conditions This test case represents a simplified version of a pre-mixed hydrogen burner with a heat exchanger emulator downstream of the burner hole. The reactants (hydrogen and air at 1 atm) are pre-mixed at an equivalence ratio of 0.5 and at a temperature of 300 Kelvin. Given the species mass fractions at this equivalence ratio and the given temperature, the initial value for the transported species are + $$ \begin{align} \mathcal{Y}_{\mathrm{init}} = -0.575 && h_{\mathrm{init}} = 2227 J kg^{-1} && Z_{\mathrm{init}} = 1.447e-2 \end{align} $$ -No $NO$ is present in the pre-mixed solution, so the value of $Y-{NO}$ is zero upon initialization. The initial values for the species are therefore + +No $$NO$$ is present in the pre-mixed solution, so the value of $$Y_{NO}$$ is zero upon initialization. The initial values for the species are therefore ``` SPECIES_INIT=(-0.575, 2.227e3, 1.447e-2, 0) ``` diff --git a/_tutorials/index.md b/_tutorials/index.md index 53ddb1bf..66bb006f 100644 --- a/_tutorials/index.md +++ b/_tutorials/index.md @@ -95,6 +95,10 @@ Linear Nastran-like model coupled with compressible unsteady RANS equations usin Simulation of multiple heated cylinders in incompressible fluid flow. * [Unsteady Conjugate Heat Transfer](/tutorials/Inc_Heated_Cylinders_Unsteady/) Simulation of an unsteady coupled CHT problem incorporating multiple physical zones. +* [Conjugate Heat Transfer between Solid Domains](/tutorials/SS_CR_CHT/) +Simulation of CHT between solid domains with contact resistance. +* [Pre-mixed Hydrogen Combustion](/tutorials/Inc_Combustion/) +Simulation of a laminar, pre-mixed hydrogen flame on a cooled burner plate. #### Shape Design Features diff --git a/_tutorials/multiphysics/contact_resistance_cht/SS_CR_CHT.md b/_tutorials/multiphysics/contact_resistance_cht/SS_CR_CHT.md new file mode 100644 index 00000000..4b89540c --- /dev/null +++ b/_tutorials/multiphysics/contact_resistance_cht/SS_CR_CHT.md @@ -0,0 +1,154 @@ +--- +title: Solid-to-Solid Conjugate Heat Transfer with Contact Resistance +permalink: /tutorials/SS_CR_CHT/ +written_by: EvertBunschoten +for_version: 8.0.1 +revised_by: EvertBunschoten +revised_version: 8.0.1 +solver: MULTIPHYSICS +requires: SU2_CFD, Gmsh +complexity: advanced +follows: Static_CHT +userguide: Multizone +--- + +## Goals + +This tutorial shows the ability of SU2 to solve conjugate heat transfer problems between solids with contact resistance. Two solids with a different material composition are conducting thermal energy to one another. The thermal energy transfer is limited through the application of contact resistance. In addition, an incompressible flow (air) flows along the two solids, participating in the transfer of thermal energy. + + +## Resources + +The resources for this tutorial can be found in the [multiphysics/contact_resistance_cht](https://github.com/su2code/Tutorials/tree/master/multiphysics/contact_resistance_cht) directory in the [tutorial repository](https://github.com/su2code/Tutorials). You will need the configuration files for all physical zones ([fluid.cfg](https://github.com/su2code/Tutorials/tree/master/multiphysics/contact_resistance_cht/fluid.cfg), [solid_1.cfg](https://github.com/su2code/Tutorials/tree/master/multiphysics/contact_resistance_cht/solid_1.cfg), [solid_2.cfg](https://github.com/su2code/Tutorials/tree/master/multiphysics/steady_cht/contact_resistance_cht/solid_2)), the cofiguration file to invoke a multiphysics simulation run ([master.cfg](https://github.com/su2code/Tutorials/tree/master/multiphysics/contact_resistance_cht/master.cfg)) and the mesh files. These can be generated through GMesh using the .geo files for the [fluid zone](https://github.com/su2code/Tutorials/tree/master/multiphysics/contact_resistance_cht/fluid_3.geo), and solid zones ([solid 1](https://github.com/su2code/Tutorials/tree/master/multiphysics/contact_resistance_cht/solid_1.geo), [solid 2](https://github.com/su2code/Tutorials/tree/master/multiphysics/contact_resistance_cht/solid_2.geo)). + + +## Tutorial + +The following tutorial will walk you through the steps required when solving for a coupled CHT solution incorporating multiple physical zones and contact resistance. It is assumed you have already obtained and compiled the SU2_CFD code for a serial computation. If you have yet to complete these requirements, please see the [Download](/docs_v8/Download/) and [Installation](/docs_v8/Installation/) pages. + +### Background + +Typical engineering applications involving conjugate heat transfer often do not concern a single solid material. For example, a pipe transporting a fluid may be composed of different layers of materials or a heat exchanger in a fluid flow has to be attached to the surrounding structure using insulation material. Depending on the application, the estimation of heat transfer through touching solid mediums can be crucial. Unlike the transfer between solid and fluid mediums, the contact between solid mediums is imperfect. Small cavities between the neighboring solids may result in a significant resistance in heat transfer compared to the idealized situation of perfect contact. SU2 allows the user to model the contact resistance between solid domains. + +The heat flux between a conjugate heat transfer interface and the neighboring cell for an idealized contact (no contact resistance) is defined as + +$$ +q_{w} = \frac{T - T_w}{\frac{l}{k}} +$$ + +where $T$ is the temperature in the neighboring cell, $T_w$ the wall temperature, $l$ the distance between the cell center and the interface, and $k$ the thermal conductivity of the solid medium. The effect of contact resistance is modeled similarly compared to the contact resistance of [Ansys Fluent](https://www.afs.enea.it/project/neptunius/docs/fluent/html/th/node358.htm). + +$$ +q_{w} = \frac{T - T_w}{\frac{l}{k} + R_c} +$$ + +Here, $R_c$ is the contact resistance with the units $m K W^{-1}$, or the inverse of the heat transfer coefficient. For ideal contact, $R_c$ is equal to zero. This results in the temperature on both sides of the interface to be equal. Applying a non-zero value for $R_c$ restricts the heat transfer between the two solid domains, resulting in a temperature discontinuity. To illustrate this, consider the following set-up with two solid domains. + +![Solid domain set-up](../../../tutorials_files/multiphysics/contact_resistance_cht/solid_domains.png) +Figure 1: Two solid domains subject to iso-thermal boundary conditions connected by a zone interface. + + +Here, the two colored blocks have different thermal properties and are subject to two isothermal walls. The temperature profile along the centerline for various values of $R_c$ is shown below. The discontinuity between the temperatures on either side of the interface is proportional to the value of $R_c$. + +![Effect of $R_c$](../../../tutorials_files/multiphysics/contact_resistance_cht/contact_resistance_effect.png) +Figure 2: The effect of altering the contact resistance at the interface between the solid domains. + +What follows is a tutorial with heat transfer between solid and fluid domains that illustrates the use of the contact resistance model. + +### Problem Setup + +This problem will solve for the incompressible flow along side two solid, metal blocks with different thermal properties, subject to heat transfer with contact resistance at the interface between the blocks. The simulation setup is shown below. The two solid blocks are squares with a side length of 1.0e-02m, while the fluid domain has a width of 5.0e-03m. + +![Problem Setup](../../../tutorials_files/multiphysics/contact_resistance_cht/problem_setup.png) +Figure 3: Computational setup for the tutorial problem for conjugate heat transfer between solid and fluid domains. + +The following flow conditions that are set for the fluid domain with a Reynolds number of 260: +- Fluid model: incompressible, ideal gas +- Density = 1.29 kg/m^3 +- Inlet Velocity Magnitude = 0.1 m/s +- Inlet temperature = 300 K +- Viscosity (constant) = 1.0e-05 kg/(m-s) + +Solid domain 1 has the material properties of stainless steel: +- Density = 8935 kg/m^3 +- Specific heat = 3850 J/(kg-K) +- Thermal conductivity = 26 W/(m-K) + +Solid domain 2 has the material properties of copper: +- Density = 8000 kg/m^3 +- Specific heat = 4420 J/(kg-K) +- Thermal conductivity = 61 W/(m-K) + +The two solid blocks each are subject to an iso-thermal wall boundary condition, which drives the transfer of heat between the solid domains and the fluid. The interface type for all domains was set to ```DIRECT_TEMPERATURE_ROBIN_HEATFLUX```, with a contact resistance value of 1.0e-04 K-m/W applied to the interface between Solid 1 and Solid 2. All other boundaries were defined as symmetry boundary conditions. + + +### Mesh Description + +The computational domain for this tutorial is made up of three separate meshes; [Solid 1](https://github.com/su2code/Tutorials/tree/master/multiphysics/contact_resistance_cht/solid_mesh_1.su2), [Solid 2](https://github.com/su2code/Tutorials/tree/master/multiphysics/contact_resistance_cht/solid_mesh_2.su2), and [Fluid](https://github.com/su2code/Tutorials/tree/master/multiphysics/contact_resistance_cht/fluid_mesh.su2). The meshes for the solid domains are simple, square meshes with 40 nodes along each side, while the fluid domain mesh is refined near the interface with the solid domains. These meshes can alternatively be generated through Gmesh. The .geo files for [Solid 1](https://github.com/su2code/Tutorials/tree/master/multiphysics/contact_resistance_cht/solid_1.geo), [Solid 2](https://github.com/su2code/Tutorials/tree/master/multiphysics/contact_resistance_cht/solid_2.geo), and [Fluid](https://github.com/su2code/Tutorials/tree/master/multiphysics/contact_resistance_cht/fluid_3.geo) allow for the generation of the respective SU2 mesh files. + +![Problem Setup Mesh](../../../tutorials_files/multiphysics/contact_resistance_cht/problem_mesh.png) +Figure 4: The computational mesh with all three physical zones. + +### Configuration File Options + +Several of the key configuration file options for this simulation are highlighted here. For this problem, four configuration files are used. The [master configuration file](https://github.com/su2code/Tutorials/tree/master/multiphysics/contact_resistance_cht/master.cfg) describes the interface between the fluid and solid domains as well as the application of contact resistance. +``` +CONFIG_LIST = (solid_1.cfg, solid_2.cfg, fluid.cfg) +MARKER_ZONE_INTERFACE= (cht_interface_1_2, cht_interface_2_1,\ + cht_interface_1_3, cht_interface_3_1,\ + cht_interface_2_3, cht_interface_3_2) + +MARKER_CHT_INTERFACE= (cht_interface_1_2, cht_interface_2_1,\ + cht_interface_1_3, cht_interface_3_1,\ + cht_interface_2_3, cht_interface_3_2) + +``` +Here, ```cht_interface_1_2``` and ```cht_interface_2_1``` are the boundaries connecting Solid 1 with Solid 2, while the other interfaces connect the fluid and solid domains. The contact resistance model in SU2 allows the user to apply a contact resistance value for each of the interfaces. + +``` +CHT_INTERFACE_CONTACT_RESISTANCE = (1e-4,0,0) +``` + +Be mindful that the number of values for contact resistance should match the number of interfaces. For solid-fluid interfaces, the contact resistance model does not apply. Applying a non-zero value for contact resistance for such interfaces will therefore not affect the simulation results. + +The configurations for the [steel solid domain](https://github.com/su2code/Tutorials/tree/master/multiphysics/contact_resistance_cht/solid_1.cfg), [copper solid domain](https://github.com/su2code/Tutorials/tree/master/multiphysics/contact_resistance_cht/solid_2.cfg), and [fluid domain](https://github.com/su2code/Tutorials/tree/master/multiphysics/contact_resistance_cht/fluid_3.cfg) all contain standard settings for multi-physics simulations. + + +### Running SU2 + +In order to run this test case, follow these steps at a terminal command line: + 1. Move to the directory containing the config files and the mesh files. Make sure that the SU2 tools were compiled, installed, and that their install location was added to your path. + 2. Run the executable by entering + + ``` + $ SU2_CFD master.cfg + ``` + + at the command line. + 3. SU2 will print residual updates with each outer iteration of the flow solver, and the simulation will terminate after reaching running for 2000 iterations + 4. Files containing the results will be written upon exiting SU2. The solutions for both solid and fluid domains are contained in a single ParaView multiblock file (.vtm), from which the solutions can be loaded. + +### Results + +The temperature solution of the completed simulation is shown below. The hot, stainless steel block heats up the flow in the fluid domain, which transfers the heat partially to the copper block downstream through convection. + +![Temperature solution](../../../tutorials_files/multiphysics/contact_resistance_cht/solution_temperature.png) +Figure 5: Temperature solution for the current setup. + +The effect of the application of contact resistance becomes clear when visualizing the temperature trend across interfaces. Three temperature trends according to each interface are shown below and are color coded corresponding to the lines shown in Figure 6. + +![Temperature solution lines](../../../tutorials_files/multiphysics/contact_resistance_cht/solution_temperature_lines.png) +Figure 6: Temperature trends across the heat transfer interfaces. + +The temperature trends across the solid-fluid interfaces (green, red) are continuous, the temperature trend across the solid-solid interface (purple) shows a discontinuity at the interface as a result of the application of contact resistance. This effect can be exaggerated when increasing the value for the contact resistance. For example, when applying a contact resistance value of 10 W-m/K, +``` +CHT_INTERFACE_CONTACT_RESISTANCE = (10.0,0,0) +``` + the two solid domains are currently essentially insulated from one another. This results in the following temperature solution. + +![Temperature solution](../../../tutorials_files/multiphysics/contact_resistance_cht/solution_temperature_n.png) +Figure 7: Temperature solution for a contact resistance value of 10.0 W-m/K. + + +![Temperature solution lines](../../../tutorials_files/multiphysics/contact_resistance_cht/solution_temperature_lines_n.png) +Figure 8: Temperature trends across the interfaces for a contact resistance value of 10.0 W-m/K. diff --git a/tutorials_files/multiphysics/contact_resistance_cht/contact_resistance_effect.png b/tutorials_files/multiphysics/contact_resistance_cht/contact_resistance_effect.png new file mode 100644 index 00000000..18e8f85d Binary files /dev/null and b/tutorials_files/multiphysics/contact_resistance_cht/contact_resistance_effect.png differ diff --git a/tutorials_files/multiphysics/contact_resistance_cht/problem_mesh.png b/tutorials_files/multiphysics/contact_resistance_cht/problem_mesh.png new file mode 100644 index 00000000..3544d671 Binary files /dev/null and b/tutorials_files/multiphysics/contact_resistance_cht/problem_mesh.png differ diff --git a/tutorials_files/multiphysics/contact_resistance_cht/problem_setup.png b/tutorials_files/multiphysics/contact_resistance_cht/problem_setup.png new file mode 100644 index 00000000..bf2aed88 Binary files /dev/null and b/tutorials_files/multiphysics/contact_resistance_cht/problem_setup.png differ diff --git a/tutorials_files/multiphysics/contact_resistance_cht/solid_domains.png b/tutorials_files/multiphysics/contact_resistance_cht/solid_domains.png new file mode 100644 index 00000000..751bca36 Binary files /dev/null and b/tutorials_files/multiphysics/contact_resistance_cht/solid_domains.png differ diff --git a/tutorials_files/multiphysics/contact_resistance_cht/solid_solid_no_5e-5.png b/tutorials_files/multiphysics/contact_resistance_cht/solid_solid_no_5e-5.png new file mode 100644 index 00000000..45616b74 Binary files /dev/null and b/tutorials_files/multiphysics/contact_resistance_cht/solid_solid_no_5e-5.png differ diff --git a/tutorials_files/multiphysics/contact_resistance_cht/solid_solid_no_5e-6.png b/tutorials_files/multiphysics/contact_resistance_cht/solid_solid_no_5e-6.png new file mode 100644 index 00000000..89088b2e Binary files /dev/null and b/tutorials_files/multiphysics/contact_resistance_cht/solid_solid_no_5e-6.png differ diff --git a/tutorials_files/multiphysics/contact_resistance_cht/solid_solid_no_Rc.png b/tutorials_files/multiphysics/contact_resistance_cht/solid_solid_no_Rc.png new file mode 100644 index 00000000..069e4a34 Binary files /dev/null and b/tutorials_files/multiphysics/contact_resistance_cht/solid_solid_no_Rc.png differ diff --git a/tutorials_files/multiphysics/contact_resistance_cht/solution_temperature.png b/tutorials_files/multiphysics/contact_resistance_cht/solution_temperature.png new file mode 100644 index 00000000..e2214a80 Binary files /dev/null and b/tutorials_files/multiphysics/contact_resistance_cht/solution_temperature.png differ diff --git a/tutorials_files/multiphysics/contact_resistance_cht/solution_temperature_lines.png b/tutorials_files/multiphysics/contact_resistance_cht/solution_temperature_lines.png new file mode 100644 index 00000000..229e7b00 Binary files /dev/null and b/tutorials_files/multiphysics/contact_resistance_cht/solution_temperature_lines.png differ diff --git a/tutorials_files/multiphysics/contact_resistance_cht/solution_temperature_lines_n.png b/tutorials_files/multiphysics/contact_resistance_cht/solution_temperature_lines_n.png new file mode 100644 index 00000000..a2f7f79d Binary files /dev/null and b/tutorials_files/multiphysics/contact_resistance_cht/solution_temperature_lines_n.png differ diff --git a/tutorials_files/multiphysics/contact_resistance_cht/solution_temperature_n.png b/tutorials_files/multiphysics/contact_resistance_cht/solution_temperature_n.png new file mode 100644 index 00000000..8a9ac836 Binary files /dev/null and b/tutorials_files/multiphysics/contact_resistance_cht/solution_temperature_n.png differ