Skip to content
Merged
3 changes: 2 additions & 1 deletion pytest.ini
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ markers =
quick:Run the quick tests
setup:Tests checking general features after import
solve:Test running end to end
mesh:Test meshing
mesh:Test meshing
optislang:Test optislang integration scenarios
82 changes: 82 additions & 0 deletions tests/test_optislang/test_optislang_integration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
from pathlib import Path

import pytest

import ansys.fluent.core as pyfluent


@pytest.mark.optislang
@pytest.mark.integration
def test_simple_solve(load_mixing_elbow_param_case_dat):

"""
This optiSLang integration test performs these steps

- Reads a case file with and without data file
- Gets input and output parameters and creates dictionary
- Sets a variation on input parameters
- Solve
- Reread data

This test queries the following using PyTest:
- Input parameters
- Output parameters
"""

# Step 1: Setup logging
pyfluent.set_log_level("ERROR")

# Step 2: Launch fluent session and read case file with and without data file
session = load_mixing_elbow_param_case_dat
assert session.check_health() == "SERVING"
case_path = str(Path(pyfluent.EXAMPLES_PATH) / "elbow_param.cas.h5")
session.solver.tui.file.read_case_data(case_path)

# Step 3: Get input and output parameters and create a dictionary
from ansys.fluent.core.services.scheme_eval import Symbol

input_parameters = session.scheme_eval.eval((Symbol("list-input-parameters"),))
output_parameters = session.scheme_eval.eval((Symbol("list-output-parameters"),))
input_parameters = input_parameters["inlet2_temp"]
output_parameters = output_parameters["outlet_temp-op"]
session.solver.tui.file.read_case(case_path)

# Step 4: Set a variation on these input parameters
# variations/designs are generated by optiSLang based on
# algorithm selected
session.solver.tui.define.parameters.input_parameters.edit(
"inlet2_temp", "inlet2_temp", 600
)
session.solver.tui.file.write_case("design_elbow_param.cas.h5")

# Step 5: Solve
session.solver.tui.solve.initialize.initialize_flow()

# check if solution is steady or transient
workflow = session.scheme_eval.string_eval("(rp-unsteady?)")

# iterate workflow
if workflow == "#t":
session.solver.tui.solve.dual_time_iterate()
else:
session.solver.tui.solve.iterate()

convergence = session.scheme_eval.string_eval("(rpgetvar 'solution/converged?)")

# solution output (test conditional statement)
if convergence == "#f": # -> let user know
print("Failed to converge")
else:
print("Solution is converged")

assert convergence == "#t", "Solution failed to converge"

# Step 6: Read the data again from the case and data file
session.solver.tui.file.read_case_data(case_path)
input_parameters2 = session.scheme_eval.eval((Symbol("list-input-parameters"),))
output_parameters2 = session.scheme_eval.eval((Symbol("list-output-parameters"),))
input_parameters2 = input_parameters2["inlet2_temp"]
output_parameters2 = output_parameters2["outlet_temp-op"]

assert input_parameters[0] == input_parameters2[0]
assert output_parameters[0] == output_parameters2[0]
24 changes: 24 additions & 0 deletions tests/util/fixture_fluent.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,27 @@ def load_mixing_elbow_case_dat(with_launching_container):
)
yield session
session.exit()


_mixing_elbow_param_case_filename = None
_mixing_elbow_param_dat_filename = None


@pytest.fixture
def load_mixing_elbow_param_case_dat(with_launching_container):
session = pyfluent.launch_fluent(precision="double", processor_count=2)
global _mixing_elbow_param_case_filename
if not _mixing_elbow_param_case_filename:
_mixing_elbow_param_case_filename = download_file(
filename="elbow_param.cas.h5", directory="pyfluent/mixing_elbow"
)
global _mixing_elbow_param_dat_filename
if not _mixing_elbow_param_dat_filename:
_mixing_elbow_param_dat_filename = download_file(
filename="elbow_param.dat.h5", directory="pyfluent/mixing_elbow"
)
session.solver.root.file.read(
file_type="case-data", file_name=_mixing_elbow_param_case_filename
)
yield session
session.exit()