.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples/00-fluent/brake.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_examples_00-fluent_brake.py: ################################# Automotive Brake Thermal Analysis ################################# Objective: ========== Braking surfaces get heated due to frictional heating during braking. High temperature affects the braking performance and life of the braking system. This example demonstrates: * Fluent setup and simulation using PyFluent * Post processing using PyVista (3D Viewer) and Matplotlib (2D graphs) .. GENERATED FROM PYTHON SOURCE LINES 19-21 Import required libraries/modules ================================================================================== .. GENERATED FROM PYTHON SOURCE LINES 21-31 .. code-block:: Python import csv from pathlib import Path import matplotlib.pyplot as plt import ansys.fluent.core as pyfluent from ansys.fluent.core import examples import ansys.fluent.visualization.pyvista as pv .. GENERATED FROM PYTHON SOURCE LINES 32-37 Specifying save path ==================== save_path can be specified as Path("E:/", "pyfluent-examples-tests") or Path("E:/pyfluent-examples-tests") in a Windows machine for example, or Path("~/pyfluent-examples-tests") in Linux. .. GENERATED FROM PYTHON SOURCE LINES 37-45 .. code-block:: Python save_path = Path(pyfluent.EXAMPLES_PATH) import_filename = examples.download_file( "brake.msh", "pyfluent/examples/Brake-Thermal-PyVista-Matplotlib", save_path=save_path, ) .. GENERATED FROM PYTHON SOURCE LINES 46-48 Fluent Solution Setup ================================================================================== .. GENERATED FROM PYTHON SOURCE LINES 50-52 Launch Fluent session with solver mode -------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 52-56 .. code-block:: Python session = pyfluent.launch_fluent(precision="double", processor_count=2, version="3d") session.health_check.status() .. GENERATED FROM PYTHON SOURCE LINES 57-59 Import mesh ------------ .. GENERATED FROM PYTHON SOURCE LINES 59-62 .. code-block:: Python session.settings.file.read_case(file_name=import_filename) .. GENERATED FROM PYTHON SOURCE LINES 63-65 Define models and material -------------------------- .. GENERATED FROM PYTHON SOURCE LINES 65-69 .. code-block:: Python session.settings.setup.models.energy = {"enabled": True} session.settings.setup.general.solver.time = "unsteady-2nd-order-bounded" session.tui.define.materials.copy("solid", "steel") .. GENERATED FROM PYTHON SOURCE LINES 70-72 Solve only energy equation (conduction) --------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 72-74 .. code-block:: Python session.tui.solve.set.equations("flow", "no", "kw", "no") .. GENERATED FROM PYTHON SOURCE LINES 75-79 Define disc rotation -------------------- (15.79 rps corresponds to 100 km/h car speed with 0.28 m of axis height from ground) .. GENERATED FROM PYTHON SOURCE LINES 79-102 .. code-block:: Python session.settings.setup.cell_zone_conditions.solid["disc2"] = { "solid_motion": { "solid_motion_zone_motion_function": "none", "solid_motion_axis_direction": [0, 1, 0], "solid_motion_axis_origin": [-0.035, -0.821, 0.045], "solid_motion_velocity": [0, 0, 0], "solid_omega": -15.79, "solid_relative_to_thread": "absolute", "enable": True, } } session.settings.setup.cell_zone_conditions.solid["disc1"] = { "solid_motion": { "solid_motion_zone_motion_function": "none", "solid_motion_axis_direction": [0, 1, 0], "solid_motion_axis_origin": [-0.035, -0.821, 0.045], "solid_motion_velocity": [0, 0, 0], "solid_omega": -15.79, "solid_relative_to_thread": "absolute", "enable": True, } } .. GENERATED FROM PYTHON SOURCE LINES 103-107 Apply frictional heating on pad-disc surfaces ---------------------------------------------- Wall thickness 0f 2 mm has been assumed and 2e9 w/m3 is the heat generation which has been calculated from kinetic energy change due to braking. .. GENERATED FROM PYTHON SOURCE LINES 107-115 .. code-block:: Python session.settings.setup.boundary_conditions.wall["wall-pad-disc2"] = { "thermal": {"q_dot": {"value": 2000000000}, "wall_thickness": {"value": 0.002}} } session.settings.setup.boundary_conditions.wall["wall_pad-disc1"] = { "thermal": {"q_dot": {"value": 2000000000}, "wall_thickness": {"value": 0.002}} } .. GENERATED FROM PYTHON SOURCE LINES 116-120 Apply convection cooling on outer surfaces due to air flow ----------------------------------------------------------- Outer surfaces are applied a constant htc of 100 W/(m2 K) and 300 K free stream temperature .. GENERATED FROM PYTHON SOURCE LINES 120-134 .. code-block:: Python session.tui.define.boundary_conditions.set.wall( "wall-disc*", "wall-geom*", "()", "thermal-bc", "yes", "convection", "convective-heat-transfer-coefficient", "no", 100, "q", ) .. GENERATED FROM PYTHON SOURCE LINES 135-138 Initialize ---------- Initialize with 300 K temperature .. GENERATED FROM PYTHON SOURCE LINES 138-142 .. code-block:: Python session.settings.solution.initialization.initialization_type = "standard" session.settings.solution.initialization.standard_initialize() .. GENERATED FROM PYTHON SOURCE LINES 143-149 Post processing setup --------------------- * Report definitions and monitor plots * Set contour plot properties * Set views and camera * Set animation object .. GENERATED FROM PYTHON SOURCE LINES 149-258 .. code-block:: Python session.settings.solution.report_definitions.volume["max-pad-temperature"] = {} session.settings.solution.report_definitions.volume[ "max-pad-temperature" ].report_type = "volume-max" session.settings.solution.report_definitions.volume["max-pad-temperature"] = { "field": "temperature", "cell_zones": ["geom-1-innerpad", "geom-1-outerpad"], } session.settings.solution.report_definitions.volume["max-disc-temperature"] = {} session.settings.solution.report_definitions.volume[ "max-disc-temperature" ].report_type = "volume-max" session.settings.solution.report_definitions.volume["max-disc-temperature"] = { "field": "temperature", "cell_zones": ["disc1", "disc2"], } session.settings.solution.monitor.report_plots.create(name="max-temperature") session.settings.solution.monitor.report_plots["max-temperature"] = { "report_defs": ["max-pad-temperature", "max-disc-temperature"] } report_file_path = Path(save_path) / "max-temperature.out" session.settings.solution.monitor.report_files.create(name="max-temperature") session.settings.solution.monitor.report_files["max-temperature"] = { "report_defs": ["max-pad-temperature", "max-disc-temperature"], "file_name": str(report_file_path), } session.settings.solution.monitor.report_files["max-temperature"].report_defs = [ "max-pad-temperature", "max-disc-temperature", "flow-time", ] session.settings.results.graphics.contour.create(name="contour-1") session.settings.results.graphics.contour["contour-1"] = { "boundary_values": True, "range_option": {"auto_range_on": {"global_range": True}}, "field": "temperature", "draw_mesh": False, "coloring": {"smooth": False}, "color_map": { "user_skip": 9, "log_scale": False, "visible": True, "width": 6, "show_all": True, "font_name": "Helvetica", "font_size": 0.032, "font_automatic": True, "length": 0.54, "size": 100, "format": "%0.2e", "position": 1, "color": "field-velocity", }, "mesh_object": "", "node_values": True, "contour_lines": False, "display_state_name": "None", "filled": True, } session.settings.results.graphics.contour["temperature"] = {} session.settings.results.graphics.contour["temperature"] = { "field": "temperature", "surfaces_list": "wall*", "color_map": { "visible": True, "size": 100, "color": "field-velocity", "log_scale": False, "format": "%0.1f", "user_skip": 9, "show_all": True, "position": 1, "font_name": "Helvetica", "font_automatic": True, "font_size": 0.032, "length": 0.54, "width": 6, "bground_transparent": True, "bground_color": "#CCD3E2", "title_elements": "Variable and Object Name", }, "range_option": { "option": "auto-range-off", "auto_range_off": {"maximum": 400.0, "minimum": 300, "clip_to_range": False}, }, } session.settings.results.graphics.views.restore_view(view_name="top") session.settings.results.graphics.views.camera.zoom(factor=2) session.settings.results.graphics.views.save_view(view_name="animation-view") session.settings.solution.calculation_activity.solution_animations[ "animate-temperature" ] = {} session.settings.solution.calculation_activity.solution_animations[ "animate-temperature" ] = { "animate_on": "temperature", "frequency_of": "flow-time", "flow_time_frequency": 0.05, "view": "animation-view", } .. GENERATED FROM PYTHON SOURCE LINES 259-264 Run simulation --------------- * Run simulation for 2 seconds flow time * Set time step size * Set number of time steps and maximum number of iterations per time step .. GENERATED FROM PYTHON SOURCE LINES 264-270 .. code-block:: Python session.settings.solution.run_calculation.transient_controls.time_step_size = 0.01 session.settings.solution.run_calculation.dual_time_iterate( time_step_count=200, max_iter_per_step=5 ) .. GENERATED FROM PYTHON SOURCE LINES 271-274 Save simulation data -------------------- Write case and data files .. GENERATED FROM PYTHON SOURCE LINES 274-277 .. code-block:: Python save_case_data_as = Path(save_path) / "brake-final.cas.h5" session.settings.file.write(file_type="case-data", file_name=str(save_case_data_as)) .. GENERATED FROM PYTHON SOURCE LINES 278-280 Post processing with PyVista (3D visualization) =============================================== .. GENERATED FROM PYTHON SOURCE LINES 282-284 Create a graphics session ------------------------- .. GENERATED FROM PYTHON SOURCE LINES 284-286 .. code-block:: Python graphics_session1 = pv.Graphics(session) .. GENERATED FROM PYTHON SOURCE LINES 287-289 Temperature contour object -------------------------- .. GENERATED FROM PYTHON SOURCE LINES 289-291 .. code-block:: Python contour1 = graphics_session1.Contours["temperature"] .. GENERATED FROM PYTHON SOURCE LINES 292-294 Check available options for contour object ------------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 294-297 .. code-block:: Python contour1() .. GENERATED FROM PYTHON SOURCE LINES 298-300 Set contour properties ---------------------- .. GENERATED FROM PYTHON SOURCE LINES 300-317 .. code-block:: Python contour1.field = "temperature" contour1.surfaces_list = [ "wall-disc1", "wall-disc2", "wall-pad-disc2", "wall_pad-disc1", "wall-geom-1-bp_inner", "wall-geom-1-bp_outer", "wall-geom-1-innerpad", "wall-geom-1-outerpad", ] contour1.range.option = "auto-range-off" contour1() contour1.range.auto_range_off.minimum = 300 contour1.range.auto_range_off.maximum = 400 .. GENERATED FROM PYTHON SOURCE LINES 318-320 Display contour --------------- .. GENERATED FROM PYTHON SOURCE LINES 320-323 .. code-block:: Python contour1.display() .. GENERATED FROM PYTHON SOURCE LINES 324-327 .. image:: ../../_static/brake_surface_temperature.png :align: center :alt: Brake Surface Temperature Contour .. GENERATED FROM PYTHON SOURCE LINES 329-330 Brake Surface Temperature .. GENERATED FROM PYTHON SOURCE LINES 332-334 Post processing with Matplotlib (2D graph) =============================================== .. GENERATED FROM PYTHON SOURCE LINES 336-338 Read monitor file ----------------- .. GENERATED FROM PYTHON SOURCE LINES 338-352 .. code-block:: Python X = [] Y = [] Z = [] i = -1 with open(report_file_path, "r") as datafile: plotting = csv.reader(datafile, delimiter=" ") for rows in plotting: i = i + 1 if i > 2: X.append(float(rows[3])) Y.append(float(rows[2])) Z.append(float(rows[1])) .. GENERATED FROM PYTHON SOURCE LINES 353-355 Plot graph ---------- .. GENERATED FROM PYTHON SOURCE LINES 355-364 .. code-block:: Python plt.title("Maximum Temperature", fontdict={"color": "darkred", "size": 20}) plt.plot(X, Z, label="Max. Pad Temperature", color="red") plt.plot(X, Y, label="Max. Disc Temperature", color="blue") plt.xlabel("Time (sec)") plt.ylabel("Max Temperature (K)") plt.legend(loc="lower right", shadow=True, fontsize="x-large") .. GENERATED FROM PYTHON SOURCE LINES 365-367 Show graph ---------- .. GENERATED FROM PYTHON SOURCE LINES 367-370 .. code-block:: Python plt.show() .. GENERATED FROM PYTHON SOURCE LINES 371-374 .. image:: ../../_static/brake_maximum_temperature.png :align: center :alt: Brake Maximum Temperature .. GENERATED FROM PYTHON SOURCE LINES 376-377 Brake Maximum Temperature .. GENERATED FROM PYTHON SOURCE LINES 379-381 Close the session ================================================================================== .. GENERATED FROM PYTHON SOURCE LINES 381-384 .. code-block:: Python session.exit() .. _sphx_glr_download_examples_00-fluent_brake.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: brake.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: brake.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: brake.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_