
import flow360 as fl
from flow360.component.simulation.unit_system import u
from flow360.examples import OM6wing

OM6wing.get_files()

project = fl.Project.from_volume_mesh(OM6wing.mesh_filename, name="Wall Roughness")

vm = project.volume_mesh

with fl.SI_unit_system:
    params = fl.SimulationParams(
        reference_geometry=fl.ReferenceGeometry(
            area=1.15315084119231,
            moment_center=[0, 0, 0],
            moment_length=[1.47602, 0.801672958512342, 1.47602],
        ),
        operating_condition=fl.AerospaceCondition(velocity_magnitude=286, alpha=10 * fl.u.deg),
        time_stepping=fl.Steady(max_steps=2000),
        outputs=[
            fl.SliceOutput(
                entities=[
                    *[
                        fl.Slice(
                            name=f"slice_y_{name}",
                            normal=(0, 1, 0),
                            origin=(0, y, 0),
                        )
                        for name, y in zip(["0_2", "0_4", "0_6", "0_8"], [0.2, 0.4, 0.6, 0.8])
                    ]
                ],
                output_fields=[
                    "velocity",
                    "velocity_x",
                    "velocity_y",
                    "velocity_z",
                    "Cp",
                ],
            ),
        ],
    )

with fl.SI_unit_system:
    params.models = [
        fl.Wall(surfaces=vm["1"], roughness_height=1e-4 * fl.u.m),
        fl.SlipWall(surfaces=vm["2"]),
        fl.Freestream(surfaces=vm["3"]),
    ]

case_1 = project.run_case(params, "With wall roughness")

params.models[0].roughness_height = 0 * fl.u.m

case_2 = project.run_case(params, "Without wall roughness")

cases = [case_1, case_2]

for case in cases:
    case.wait()
