Heat Transfer

Contents

Heat Transfer#

This script demonstrates the setup and processing of a Conjugate Heat Transfer (CHT) simulation involving both fluid and solid domains using the Flow360 Python API. It outlines the procedure for loading a mesh, defining simulation parameters including fluid and solid models with material properties and heat sources, configuring outputs, running the simulation, and generating a post-processing report with visualizations.

  1import flow360 as fl
  2from flow360 import u
  3from flow360.examples import TutorialCHTSolver
  4from flow360.plugins.report.report import ReportTemplate
  5from flow360.plugins.report.report_items import (
  6    Camera,
  7    Chart3D,
  8    FrontCamera,
  9    Inputs,
 10    LeftCamera,
 11    Settings,
 12    Summary,
 13)
 14
 15TutorialCHTSolver.get_files()
 16
 17project = fl.Project.from_volume_mesh(
 18    TutorialCHTSolver.mesh_filename, name="CHT results from Python"
 19)
 20
 21volume_mesh = project.volume_mesh
 22
 23with fl.SI_unit_system:
 24    params = fl.SimulationParams(
 25        reference_geometry=fl.ReferenceGeometry(
 26            moment_center=[0, 0, 0] * fl.u.m,
 27            moment_length=[1, 1, 1] * fl.u.m,
 28            area=1 * fl.u.m**2,
 29        ),
 30        operating_condition=fl.AerospaceCondition.from_mach(mach=0.1),
 31        time_stepping=fl.Steady(
 32            max_steps=10000, CFL=fl.RampCFL(initial=1, final=100, ramp_steps=1000)
 33        ),
 34        models=[
 35            fl.Fluid(
 36                navier_stokes_solver=fl.NavierStokesSolver(
 37                    absolute_tolerance=1e-9,
 38                    linear_solver=fl.LinearSolver(max_iterations=35),
 39                    order_of_accuracy=2,
 40                    kappa_MUSCL=-1,
 41                ),
 42                turbulence_model_solver=fl.SpalartAllmaras(
 43                    absolute_tolerance=1e-8,
 44                    linear_solver=fl.LinearSolver(max_iterations=25),
 45                    equation_evaluation_frequency=4,
 46                    order_of_accuracy=2,
 47                ),
 48            ),
 49            fl.Solid(
 50                entities=volume_mesh["solid"],
 51                heat_equation_solver=fl.HeatEquationSolver(
 52                    absolute_tolerance=1e-11,
 53                    linear_solver=fl.LinearSolver(
 54                        max_iterations=25,
 55                        absolute_tolerance=1e-12,
 56                    ),
 57                    equation_evaluation_frequency=10,
 58                ),
 59                material=fl.SolidMaterial(
 60                    name="copper",
 61                    thermal_conductivity=398 * fl.u.W / (fl.u.m * fl.u.K),
 62                ),
 63                volumetric_heat_source=5e3 * fl.u.W / (0.01257 * fl.u.m**3),
 64            ),
 65            fl.Wall(
 66                surfaces=volume_mesh["fluid/centerbody"],
 67            ),
 68            fl.Freestream(
 69                surfaces=volume_mesh["fluid/farfield"],
 70            ),
 71            fl.Wall(
 72                surfaces=volume_mesh["solid/adiabatic"],
 73                heat_spec=fl.HeatFlux(0 * fl.u.W / fl.u.m**2),
 74            ),
 75        ],
 76        outputs=[
 77            fl.VolumeOutput(
 78                output_format="both",
 79                output_fields=[
 80                    "primitiveVars",
 81                    "T",
 82                    "Cp",
 83                    "Mach",
 84                ],
 85            ),
 86            fl.SurfaceOutput(
 87                surfaces=volume_mesh["*"],
 88                output_format="both",
 89                output_fields=["primitiveVars", "T", "Cp", "Cf", "CfVec"],
 90            ),
 91            fl.SliceOutput(
 92                entities=[
 93                    fl.Slice(
 94                        name="slice_x",
 95                        normal=(1, 0, 0),
 96                        origin=(0.35, 0, 0),
 97                    ),
 98                    fl.Slice(
 99                        name="slice_y",
100                        normal=(0, 1, 0),
101                        origin=(0, 0, 0),
102                    ),
103                ],
104                output_fields=["T", "Mach"],
105            ),
106        ],
107    )
108
109case = project.run_case(params=params, name="CHT case from Python")
110
111case.wait()
112
113results = case.results
114
115surface_heat_transfer = results.surface_heat_transfer.as_dataframe()
116print(surface_heat_transfer)
117
118cases = [case]
119
120exclude = ["fluid/farfield", "solid/interface_fluid", "solid/adiabatic"]
121
122front_camera_slice = FrontCamera(dimension=1, dimension_dir="width")
123side_camera_slice = LeftCamera(pan_target=(0.35, 0, 0), dimension=2, dimension_dir="width")
124front_right_top_camera = Camera(
125    position=(-1, -1, 1), look_at=(0.35, 0, 0), dimension=1, dimension_dir="width"
126)
127
128x_slice_screenshot = Chart3D(
129    section_title="Slice temperature at x=0.35",
130    items_in_row=2,
131    force_new_page=True,
132    show="slices",
133    include=["slice_x"],
134    field="T",
135    limits=(285 * u.K, 395 * u.K),
136    camera=front_camera_slice,
137    fig_name="slice_x",
138)
139
140y_slice_screenshot = Chart3D(
141    section_title="Slice temperature at y=0",
142    items_in_row=2,
143    force_new_page=True,
144    show="slices",
145    include=["slice_y"],
146    field="T",
147    limits=(285 * u.K, 395 * u.K),
148    camera=side_camera_slice,
149    fig_name="slice_y",
150)
151
152surface_screenshot = Chart3D(
153    section_title="Surface temperature",
154    items_in_row=2,
155    force_new_page=True,
156    show="boundaries",
157    field="T",
158    limits=(285 * u.K, 395 * u.K),
159    exclude=exclude,
160    camera=front_right_top_camera,
161)
162
163report = ReportTemplate(
164    title="CHT results screenshots",
165    items=[Summary(), Inputs(), x_slice_screenshot, y_slice_screenshot, surface_screenshot],
166    settings=Settings(dpi=150),
167)
168
169report = report.create_in_cloud(
170    "CHT, dpi=default",
171    cases,
172)
173
174report.wait()
175report.download("report.pdf")

Notes#

  • Conjugate Heat Transfer is enabled by defining a fl.Solid model within the models list of SimulationParams.

  • Solid material properties, such as thermal_conductivity, and internal heat generation, like volumetric_heat_source, are specified within the fl.Solid model configuration.

  • Specific thermal boundary conditions, such as adiabatic walls, are applied using the heat_spec parameter within the fl.Wall model, utilizing conditions like fl.HeatFlux.