Unsteady 2D cylinder#
This tutorial shows how to run a 2D unsteady simulation of a cylinder.
Note: The settings in this example are by no means a validation setup; they are crafted to showcase the capabilities of Flow360 and we have intentionally reduced node count and example FC cost. For rigorous validation, modify the settings as needed.
1. Create Project from volume mesh#
Load Python libraries and Flow360 client. If you use environment variables or tokens, initialize them here so later API calls can authenticate.
Project is created from a volume mesh
[1]:
import flow360 as fl
from flow360.examples import Cylinder2D
Cylinder2D.get_files()
project = fl.Project.from_volume_mesh(
Cylinder2D.mesh_filename, name="Unsteady 2D Cylinder from Python"
)
vm = project.volume_mesh
[17:47:54] INFO: VolumeMesh successfully submitted: type = Volume Mesh name = Unsteady 2D Cylinder from Python id = vm-cf43d640-0fb0-44b8-8c39-3d026f7529ed status = uploaded
2. Define time settings#
To run an unsteady simulation, we need to define a step size and the total number of steps. Additionally, it is also possible to define the maximum number of pseudo steps done between two physical steps.
[2]:
with fl.SI_unit_system:
time_settings = fl.Unsteady(
step_size=2,
steps=20,
max_pseudo_steps=40,
)
[17:48:13] INFO: using: SI unit system for unit inference.
3. Define boundary conditions and solver settings#
The models section includes the boundary conditions definition and the solver settings.
[3]:
with fl.SI_unit_system:
models = [
fl.Fluid(
navier_stokes_solver=fl.NavierStokesSolver(
absolute_tolerance=1e-9,
linear_solver=fl.LinearSolver(max_iterations=25),
),
turbulence_model_solver=fl.NoneSolver(),
),
fl.Wall(surfaces=[vm["fluid/wall"]]),
fl.Freestream(surfaces=[vm["fluid/farfield"]]),
fl.SlipWall(surfaces=[vm["fluid/periodic_0_l"], vm["fluid/periodic_0_r"]]),
]
INFO: using: SI unit system for unit inference.
4. Define SimulationParams#
The simulation parameters are defined in the python class fl.SimulationParams()
THe previous settings are included as well as the operating conditions, outputs and reference geometries.
[4]:
with fl.SI_unit_system:
params = fl.SimulationParams(
operating_condition=fl.AerospaceCondition.from_mach_reynolds(
reynolds_mesh_unit=50, mach=0.1, project_length_unit=fl.u.m
),
models=models,
time_stepping=time_settings,
outputs=[
fl.SurfaceOutput(output_fields=["Cp"], surfaces=[vm["*"]]),
fl.VolumeOutput(
output_fields=[
"primitiveVars",
"vorticity",
"residualNavierStokes",
"T",
"Cp",
"mut",
],
),
],
reference_geometry=fl.ReferenceGeometry(
area=20, moment_center=[0, 0, 0], moment_length=[1, 1, 1]
),
)
INFO: using: SI unit system for unit inference.
INFO: Density and viscosity were calculated based on input data, ThermalState will be automatically created.
5. Run Case#
[5]:
case = project.run_case(params, "Unsteady 2D Cylinder case from Python")
INFO: Density and viscosity were calculated based on input data, ThermalState will be automatically created.
INFO: using: SI unit system for unit inference.
[17:48:15] INFO: Successfully submitted: type = Case name = Unsteady 2D Cylinder case from Python id = case-e96c2490-48ea-4f96-b99b-1a191d63c342 status = pending