From 6404fbee2dedca6f7f7cfbcf0859415bdc9b43a4 Mon Sep 17 00:00:00 2001 From: Mainak Kundu <94432368+mkundu1@users.noreply.github.com> Date: Mon, 10 Jul 2023 09:02:43 -0400 Subject: [PATCH] Add test_parametric_workflow using settings_api (#1783) * Add test_parametric_workflow using settings_api * Add test_parametric_workflow using settings_api * Add test_parametric_workflow using settings_api * Add test_parametric_workflow using settings_api * Fix test * Fix test * Fix test * Fix test * Fix test * Fix test --- .github/workflows/run-custom-tests.yml | 8 +- Makefile | 27 ++-- tests/parametric/test_parametric_workflow.py | 154 +++++++++++++++++++ 3 files changed, 176 insertions(+), 13 deletions(-) create mode 100644 tests/parametric/test_parametric_workflow.py diff --git a/.github/workflows/run-custom-tests.yml b/.github/workflows/run-custom-tests.yml index a11167eaec1..dc0bf6748b6 100644 --- a/.github/workflows/run-custom-tests.yml +++ b/.github/workflows/run-custom-tests.yml @@ -2,8 +2,6 @@ name: Run Custom Tests on: -# Enable to run automatically on PR update - #pull_request: workflow_dispatch: concurrency: @@ -24,6 +22,12 @@ jobs: fail-fast: false matrix: include: + - image-tag: v22.2.0 + version: 222 + - image-tag: v23.1.0 + version: 231 + - image-tag: v23.2.0 + version: 232 - image-tag: v24.1.0 version: 241 diff --git a/Makefile b/Makefile index 6d8fef8830f..63d54037aca 100644 --- a/Makefile +++ b/Makefile @@ -21,74 +21,79 @@ unittest: unittest-dev-231 unittest-custom: @echo "Running custom unittest" + @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples @pip install -r requirements/requirements_tests.txt - @python -m pytest -v -k test_transcript # Update custom testlist + @python -m pytest -v -k test_parametric_workflow # Update custom testlist unittest-dev-222: @echo "Running unittests" + @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples @pip install -r requirements/requirements_tests.txt @python -m pytest -v -m "dev and fluent_222" --cov=ansys.fluent --cov-report=xml:cov_xml.xml --cov-report=html unittest-dev-231: @echo "Running unittests" + @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples @pip install -r requirements/requirements_tests.txt @python -m pytest -v -m "dev and fluent_231" --cov=ansys.fluent --cov-report=xml:cov_xml.xml --cov-report=html unittest-dev-232: @echo "Running unittests" + @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples @pip install -r requirements/requirements_tests.txt @python -m pytest -v -m "dev and fluent_232" --cov=ansys.fluent --cov-report=xml:cov_xml.xml --cov-report=html unittest-dev-241: @echo "Running unittests" + @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples @pip install -r requirements/requirements_tests.txt @python -m pytest -v -m "dev and fluent_241" --cov=ansys.fluent --cov-report=xml:cov_xml.xml --cov-report=html unittest-all-222: - @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples/* @echo "Running all unittests" + @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples @pip install -r requirements/requirements_tests.txt @python -m pytest -v -m "fluent_222" --cov=ansys.fluent --cov-report=xml:cov_xml.xml --cov-report=html --durations=0 unittest-all-222-no-codegen: - @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples/* @echo "Running all unittests" + @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples @pip install -r requirements/requirements_tests.txt @python -m pytest -v -m "fluent_222 and not codegen_required" --cov=ansys.fluent --cov-report=xml:cov_xml.xml --cov-report=html --durations=0 unittest-all-231: - @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples/* @echo "Running all unittests" + @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples @pip install -r requirements/requirements_tests.txt @python -m pytest -v -m "fluent_231" --cov=ansys.fluent --cov-report=xml:cov_xml.xml --cov-report=html --durations=0 unittest-all-231-no-codegen: - @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples/* @echo "Running all unittests" + @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples @pip install -r requirements/requirements_tests.txt @python -m pytest -v -m "fluent_231 and not codegen_required" --cov=ansys.fluent --cov-report=xml:cov_xml.xml --cov-report=html --durations=0 unittest-all-241: - @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples/* @echo "Running all unittests" + @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples @pip install -r requirements/requirements_tests.txt @python -m pytest -v -m "fluent_241" --cov=ansys.fluent --cov-report=xml:cov_xml.xml --cov-report=html --durations=0 unittest-all-241-no-codegen: - @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples/* @echo "Running all unittests" + @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples @pip install -r requirements/requirements_tests.txt @python -m pytest -v -m "fluent_241 and not codegen_required" --cov=ansys.fluent --cov-report=xml:cov_xml.xml --cov-report=html --durations=0 unittest-all-232: - @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples/* @echo "Running all unittests" + @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples @pip install -r requirements/requirements_tests.txt @python -m pytest -v -m "fluent_232" --cov=ansys.fluent --cov-report=xml:cov_xml.xml --cov-report=html --durations=0 unittest-all-232-no-codegen: - @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples/* @echo "Running all unittests" + @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples @pip install -r requirements/requirements_tests.txt @python -m pytest -v -m "fluent_232 and not codegen_required" --cov=ansys.fluent --cov-report=xml:cov_xml.xml --cov-report=html --durations=0 @@ -106,13 +111,13 @@ build-doc-source: @sudo rm -rf doc/source/api/solver/datamodel @sudo rm -rf doc/source/api/solver/tui @sudo rm -rf doc/source/api/solver/_autosummary/settings - @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples/* + @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples @pip install -r requirements/requirements_doc.txt @xvfb-run make -C doc html build-all-docs: @python doc/settings_rstgen.py - @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples/* + @sudo rm -rf /home/ansys/.local/share/ansys_fluent_core/examples @pip install -r requirements/requirements_doc.txt @xvfb-run make -C doc html diff --git a/tests/parametric/test_parametric_workflow.py b/tests/parametric/test_parametric_workflow.py new file mode 100644 index 00000000000..a0b43a3d319 --- /dev/null +++ b/tests/parametric/test_parametric_workflow.py @@ -0,0 +1,154 @@ +from pathlib import Path +import tempfile +import time + +import pytest + +import ansys.fluent.core as pyfluent +from ansys.fluent.core import examples + + +@pytest.mark.fluent_232 +def test_parametric_workflow(): + save_path = tempfile.mkdtemp(dir=pyfluent.EXAMPLES_PATH) + import_filename = examples.download_file( + "Static_Mixer_main.cas.h5", "pyfluent/static_mixer", save_path=save_path + ) + solver_session = pyfluent.launch_fluent(processor_count=2, cwd=save_path) + solver_session.file.read_case(file_name=import_filename) + solver_session.solution.run_calculation.iter_count = 100 + solver_session.tui.define.parameters.enable_in_TUI("yes") + solver_session.tui.define.boundary_conditions.set.velocity_inlet( + "inlet1", (), "vmag", "yes", "inlet1_vel", 1, "quit" + ) + solver_session.tui.define.boundary_conditions.set.velocity_inlet( + "inlet1", (), "temperature", "yes", "inlet1_temp", 300, "quit" + ) + solver_session.tui.define.boundary_conditions.set.velocity_inlet( + "inlet2", (), "vmag", "yes", "no", "inlet2_vel", 1, "quit" + ) + solver_session.tui.define.boundary_conditions.set.velocity_inlet( + "inlet2", (), "temperature", "yes", "no", "inlet2_temp", 350, "quit" + ) + solver_session.solution.report_definitions.surface["outlet-temp-avg"] = {} + solver_session.solution.report_definitions.surface[ + "outlet-temp-avg" + ].report_type = "surface-areaavg" + solver_session.solution.report_definitions.surface[ + "outlet-temp-avg" + ].field = "temperature" + solver_session.solution.report_definitions.surface[ + "outlet-temp-avg" + ].surface_names = ["outlet"] + solver_session.solution.report_definitions.surface["outlet-vel-avg"] = {} + solver_session.solution.report_definitions.surface[ + "outlet-vel-avg" + ].report_type = "surface-areaavg" + solver_session.solution.report_definitions.surface[ + "outlet-vel-avg" + ].field = "velocity-magnitude" + solver_session.solution.report_definitions.surface[ + "outlet-vel-avg" + ].surface_names = ["outlet"] + solver_session.tui.define.parameters.output_parameters.create( + "report-definition", "outlet-temp-avg" + ) + solver_session.tui.define.parameters.output_parameters.create( + "report-definition", "outlet-vel-avg" + ) + solver_session.tui.solve.monitors.residual.criterion_type("0") + case_path = str(Path(save_path) / "Static_Mixer_Parameters.cas.h5") + solver_session.file.write(file_type="case", file_name=case_path) + assert (Path(save_path) / "Static_Mixer_Parameters.cas.h5").exists() + assert len(solver_session.parametric_studies) == 0 + solver_session.parametric_studies.initialize() + assert len(solver_session.parametric_studies) == 1 + study1_name = "Static_Mixer_main-Solve" + assert study1_name in solver_session.parametric_studies + study1 = solver_session.parametric_studies[study1_name] + assert len(study1.design_points) == 1 + base_dp_name = "Base DP" + assert "Base DP" in study1.design_points + base_dp = study1.design_points[base_dp_name] + base_dp.input_parameters["inlet1_vel"] = 0.5 + assert base_dp.input_parameters["inlet1_vel"]() == 0.5 + assert base_dp.input_parameters["inlet2_temp"]() == 350.0 + assert base_dp.input_parameters["inlet2_vel"]() == 1.0 + assert base_dp.input_parameters["inlet1_temp"]() == 300.0 + study1.design_points.update_current() + assert len(study1.design_points) == 1 + assert base_dp.output_parameters["outlet-temp-avg-op"]() == pytest.approx( + 333.348727 + ) + assert base_dp.output_parameters["outlet-vel-avg-op"]() == pytest.approx(1.506855) + dp1_name = study1.design_points.create_1() + dp1 = study1.design_points[dp1_name] + dp1.input_parameters["inlet1_temp"] = 500 + dp1.input_parameters["inlet1_vel"] = 1 + dp1.input_parameters["inlet2_vel"] = 1 + assert len(study1.design_points) == 2 + assert dp1.input_parameters["inlet1_temp"]() == 500 + assert dp1.input_parameters["inlet1_vel"]() == 1 + assert dp1.input_parameters["inlet2_vel"]() == 1 + assert dp1.input_parameters["inlet2_temp"]() == 350.0 + dp_names = set([*study1.design_points.keys()]) + study1.design_points.duplicate(design_point=dp1.obj_name) + dp2_name = set([*study1.design_points.keys()]).difference(dp_names).pop() + dp2 = study1.design_points[dp2_name] + assert dp1.input_parameters() == dp2.input_parameters() + assert len(study1.design_points) == 3 + assert study1.current_design_point() == base_dp_name + study1.design_points.set_as_current(design_point=dp2_name) + assert study1.current_design_point() == dp2_name + study1.design_points.update_all() + assert len(study1.design_points) == 3 + assert base_dp.output_parameters["outlet-temp-avg-op"]() == pytest.approx( + 333.348727 + ) + assert base_dp.output_parameters["outlet-vel-avg-op"]() == pytest.approx(1.506855) + assert dp1.output_parameters["outlet-temp-avg-op"]() == pytest.approx(425.004045) + assert dp1.output_parameters["outlet-vel-avg-op"]() == pytest.approx(2.029792) + assert dp2.output_parameters["outlet-temp-avg-op"]() == pytest.approx(425.004045) + assert dp2.output_parameters["outlet-vel-avg-op"]() == pytest.approx(2.029792) + design_point_table = str(Path(save_path) / "design_point_table_study_1.csv") + solver_session.parametric_studies.export_design_table(filepath=design_point_table) + study1.design_points.delete_design_points(design_points=[dp1_name]) + assert len(study1.design_points) == 2 + study_names = set([*solver_session.parametric_studies.keys()]) + solver_session.parametric_studies.duplicate() + assert len(solver_session.parametric_studies) == 2 + study2_name = ( + set([*solver_session.parametric_studies.keys()]).difference(study_names).pop() + ) + study2 = solver_session.parametric_studies[study2_name] + assert len(study2.design_points) == 2 + solver_session.parametric_studies.rename("New Study", study2_name) + assert "New Study" in solver_session.parametric_studies + del solver_session.parametric_studies[study1_name] + assert len(solver_session.parametric_studies) == 1 + project_filename = Path(save_path) / "static_mixer_study.flprj" + solver_session.file.parametric_project.save_as( + project_filename=str(project_filename) + ) + assert project_filename.exists() + solver_session.exit() + time.sleep(10) + solver_session = pyfluent.launch_fluent(processor_count=2, cwd=save_path) + solver_session.file.parametric_project.open(project_filename=str(project_filename)) + solver_session.file.parametric_project.save() + project_save_as_name = Path(save_path) / "static_mixer_study_save_as.flprj" + solver_session.file.parametric_project.save_as( + project_filename=str(project_save_as_name) + ) + assert project_save_as_name.exists() + project_save_as_copy_name = ( + Path(save_path) / "static_mixer_study_save_copy_as.flprj" + ) + solver_session.file.parametric_project.save_as( + project_filename=str(project_save_as_copy_name) + ) + assert project_save_as_copy_name.exists() + archive_name = Path(save_path) / "static_mixer_study.flprz" + solver_session.file.parametric_project.archive(archive_name=str(archive_name)) + assert archive_name.exists() + solver_session.exit()