NASA CRM-HL example

NASA CRM-HL example#

In this tutorial case we are looking at a 3-element airfoil, which is a cross-section of the NASA CRM-HL configuration. Documentation for this tutorial is available here

  1import flow360 as fl
  2from flow360.examples import Tutorial2DCRM
  3
  4Tutorial2DCRM.get_files()
  5
  6project = fl.Project.from_file(Tutorial2DCRM.geometry, name="Tutorial 2D CRM from Python")
  7geometry = project.geometry
  8
  9# show face and edge groupings
 10geometry.show_available_groupings(verbose_mode=True)
 11geometry.group_faces_by_tag("faceName")
 12geometry.group_edges_by_tag("edgeName")
 13
 14
 15with fl.SI_unit_system:
 16    cylinders = [
 17        fl.Cylinder(
 18            name=f"cylinder{i+1}",
 19            axis=[0, 1, 0],
 20            center=[0.7, 0.5, 0],
 21            outer_radius=outer_radius,
 22            height=1.0,
 23        )
 24        for i, outer_radius in enumerate([1.1, 2.2, 3.3, 4.5])
 25    ]
 26    cylinder5 = fl.Cylinder(
 27        name="cylinder5", axis=[-1, 0, 0], center=[6.5, 0.5, 0], outer_radius=6.5, height=10
 28    )
 29    farfield = fl.AutomatedFarfield(name="farfield", method="quasi-3d")
 30    params = fl.SimulationParams(
 31        meshing=fl.MeshingParams(
 32            defaults=fl.MeshingDefaults(
 33                surface_edge_growth_rate=1.17,
 34                surface_max_edge_length=1.1,
 35                curvature_resolution_angle=12 * fl.u.deg,
 36                boundary_layer_growth_rate=1.17,
 37                boundary_layer_first_layer_thickness=1.8487111e-06,
 38            ),
 39            refinement_factor=1.35,
 40            gap_treatment_strength=0.5,
 41            volume_zones=[farfield],
 42            refinements=[
 43                fl.UniformRefinement(name="refinement1", spacing=0.1, entities=[cylinders[0]]),
 44                fl.UniformRefinement(name="refinement2", spacing=0.15, entities=[cylinders[1]]),
 45                fl.UniformRefinement(name="refinement3", spacing=0.225, entities=[cylinders[2]]),
 46                fl.UniformRefinement(name="refinement4", spacing=0.275, entities=[cylinders[3]]),
 47                fl.UniformRefinement(name="refinement5", spacing=0.325, entities=[cylinder5]),
 48                fl.SurfaceRefinement(name="wing", max_edge_length=0.74, faces=[geometry["wing"]]),
 49                fl.SurfaceRefinement(
 50                    name="flap-slat",
 51                    max_edge_length=0.55,
 52                    faces=[geometry["flap"], geometry["slat"]],
 53                ),
 54                fl.SurfaceRefinement(
 55                    name="trailing",
 56                    max_edge_length=0.36,
 57                    faces=[
 58                        geometry["*Trailing"],
 59                    ],
 60                ),
 61                fl.SurfaceEdgeRefinement(
 62                    name="edges",
 63                    method=fl.HeightBasedRefinement(value=0.0007),
 64                    edges=[
 65                        geometry["*trailingEdge"],
 66                        geometry["*leadingEdge"],
 67                    ],
 68                ),
 69                fl.SurfaceEdgeRefinement(
 70                    name="symmetry", method=fl.ProjectAnisoSpacing(), edges=[geometry["symmetry"]]
 71                ),
 72            ],
 73        ),
 74        reference_geometry=fl.ReferenceGeometry(
 75            moment_center=[0.25, 0, 0], moment_length=[1, 1, 1], area=0.01
 76        ),
 77        operating_condition=fl.operating_condition_from_mach_reynolds(
 78            mach=0.2,
 79            reynolds=5e6,
 80            project_length_unit=1 * fl.u.m,
 81            temperature=272.1,
 82            alpha=16 * fl.u.deg,
 83            beta=0 * fl.u.deg,
 84        ),
 85        time_stepping=fl.Steady(
 86            max_steps=3000, CFL=fl.RampCFL(initial=20, final=300, ramp_steps=500)
 87        ),
 88        models=[
 89            fl.Wall(
 90                surfaces=[
 91                    geometry["*"],
 92                ],
 93                name="wall",
 94            ),
 95            fl.Freestream(surfaces=farfield.farfield, name="Freestream"),
 96            fl.SlipWall(surfaces=farfield.symmetry_planes, name="slipwall"),
 97            fl.Fluid(
 98                navier_stokes_solver=fl.NavierStokesSolver(
 99                    absolute_tolerance=1e-11,
100                    linear_solver=fl.LinearSolver(max_iterations=35),
101                    kappa_MUSCL=0.33,
102                ),
103                turbulence_model_solver=fl.SpalartAllmaras(
104                    absolute_tolerance=1e-10,
105                    linear_solver=fl.LinearSolver(max_iterations=25),
106                    equation_evaluation_frequency=1,
107                ),
108            ),
109        ],
110        outputs=[
111            fl.VolumeOutput(
112                name="fl.VolumeOutput",
113                output_fields=[
114                    "primitiveVars",
115                    "vorticity",
116                    "residualNavierStokes",
117                    "residualTurbulence",
118                    "Cp",
119                    "Mach",
120                    "qcriterion",
121                    "mut",
122                ],
123            ),
124            fl.SurfaceOutput(
125                name="fl.SurfaceOutput",
126                surfaces=geometry["*"],
127                output_fields=["primitiveVars", "Cp", "Cf", "CfVec", "yPlus"],
128            ),
129        ],
130    )
131
132
133project.run_case(params=params, name="Case of tutorial 2D CRM from Python")