From 44bd6853069eb6f8054fb72311327583c65ccd54 Mon Sep 17 00:00:00 2001 From: Maciej Skarysz <83596707+maciej-flexcompute@users.noreply.github.com> Date: Tue, 5 Mar 2024 14:59:53 +0100 Subject: [PATCH] Removed beta features tag and enabled 24.2 features (#187) * removed beta features flags * removed bata tags and enabled 24.2 features * applied PR comments --- flow360/__init__.py | 18 +- .../component/flow360_params/boundaries.py | 383 ++++++--------- .../flow360_params/flow360_output.py | 5 +- .../flow360_params/flow360_params.py | 45 +- flow360/component/flow360_params/solvers.py | 174 +++---- .../flow360_params/turbulence_quantities.py | 445 +++++++++--------- .../component/flow360_params/validations.py | 23 +- flow360/component/results/case_results.py | 1 + tests/params/test_params_boundary.py | 297 ++++++------ tests/params/test_solvers.py | 6 +- tests/params/test_validator_cht_solver.py | 35 +- tests/ref/case_params/heat_equation/ref.json | 6 +- .../case_params/heat_equation/ref_beta.json | 14 - tests/ref/case_params/params.json | 4 +- tests/ref/case_params/params.yaml | 4 +- tests/ref/case_params/params_beta.json | 134 ------ tests/ref/case_params/params_beta.yaml | 103 ---- tests/test_flow360_params.py | 17 +- 18 files changed, 629 insertions(+), 1085 deletions(-) delete mode 100644 tests/ref/case_params/heat_equation/ref_beta.json delete mode 100644 tests/ref/case_params/params_beta.json delete mode 100644 tests/ref/case_params/params_beta.yaml diff --git a/flow360/__init__.py b/flow360/__init__.py index 5edda032..57d591a4 100644 --- a/flow360/__init__.py +++ b/flow360/__init__.py @@ -16,10 +16,12 @@ from .component.flow360_params import solvers from .component.flow360_params.boundaries import ( FreestreamBoundary, + HeatFluxWall, IsothermalWall, MassInflow, MassOutflow, NoSlipWall, + PressureOutflow, RiemannInvariant, RotationallyPeriodic, SlidingInterfaceBoundary, @@ -29,7 +31,10 @@ SubsonicInflow, SubsonicOutflowMach, SubsonicOutflowPressure, + SupersonicInflow, + SymmetryPlane, TranslationallyPeriodic, + VelocityInflow, WallFunction, ) from .component.flow360_params.flow360_output import Slice, Slices @@ -82,6 +87,7 @@ FreestreamInitialCondition, ) from .component.flow360_params.solvers import ( + IncompressibleNavierStokesSolver, LinearSolver, NavierStokesSolver, PressureCorrectionSolver, @@ -93,6 +99,7 @@ TimeStepping, UnsteadyTimeStepping, ) +from .component.flow360_params.turbulence_quantities import TurbulenceQuantities from .component.flow360_params.unit_system import ( CGS_unit_system, SI_unit_system, @@ -134,14 +141,3 @@ from .flags import Flags from .user_config import UserConfig from .version import __version__ - -if Flags.beta_features(): - from .component.flow360_params.boundaries import ( - HeatFluxWall, - PressureOutflow, - SupersonicInflow, - SymmetryPlane, - VelocityInflow, - ) - from .component.flow360_params.solvers import IncompressibleNavierStokesSolver - from .component.flow360_params.turbulence_quantities import TurbulenceQuantities diff --git a/flow360/component/flow360_params/boundaries.py b/flow360/component/flow360_params/boundaries.py index 7f2780f1..06e3c9ee 100644 --- a/flow360/component/flow360_params/boundaries.py +++ b/flow360/component/flow360_params/boundaries.py @@ -9,15 +9,12 @@ from pydantic import StrictStr from flow360.component.flow360_params.unit_system import PressureType -from flow360.flags import Flags from ..types import Axis, PositiveFloat, PositiveInt, Vector from .params_base import Flow360BaseModel +from .turbulence_quantities import TurbulenceQuantitiesType from .unit_system import VelocityType -if Flags.beta_features(): - from .turbulence_quantities import TurbulenceQuantitiesType - BoundaryVelocityType = Union[VelocityType.Vector, Tuple[StrictStr, StrictStr, StrictStr]] BoundaryAxisType = Union[Axis, Tuple[StrictStr, StrictStr, StrictStr]] @@ -32,14 +29,12 @@ class Boundary(Flow360BaseModel, metaclass=ABCMeta): ) -if Flags.beta_features(): - - class BoundaryWithTurbulenceQuantities(Boundary, metaclass=ABCMeta): - """Turbulence Quantities on Boundaries""" +class BoundaryWithTurbulenceQuantities(Boundary, metaclass=ABCMeta): + """Turbulence Quantities on Boundaries""" - turbulence_quantities: Optional[TurbulenceQuantitiesType] = pd.Field( - alias="turbulenceQuantities" - ) + turbulence_quantities: Optional[TurbulenceQuantitiesType] = pd.Field( + alias="turbulenceQuantities" + ) class NoSlipWall(Boundary): @@ -64,27 +59,14 @@ class RiemannInvariant(Boundary): type: Literal["RiemannInvariant"] = pd.Field("RiemannInvariant", const=True) -if Flags.beta_features(): - - class FreestreamBoundary(BoundaryWithTurbulenceQuantities): - """Freestream boundary""" - - type: Literal["Freestream"] = pd.Field("Freestream", const=True) - velocity: Optional[BoundaryVelocityType] = pd.Field(alias="Velocity") - velocity_type: Optional[Literal["absolute", "relative"]] = pd.Field( - default="relative", alias="velocityType" - ) - -else: +class FreestreamBoundary(BoundaryWithTurbulenceQuantities): + """Freestream boundary""" - class FreestreamBoundary(Boundary): - """Freestream boundary""" - - type: Literal["Freestream"] = pd.Field("Freestream", const=True) - velocity: Optional[BoundaryVelocityType] = pd.Field(alias="Velocity") - velocity_type: Optional[Literal["absolute", "relative"]] = pd.Field( - default="relative", alias="velocityType" - ) + type: Literal["Freestream"] = pd.Field("Freestream", const=True) + velocity: Optional[BoundaryVelocityType] = pd.Field(alias="Velocity") + velocity_type: Optional[Literal["absolute", "relative"]] = pd.Field( + default="relative", alias="velocityType" + ) class IsothermalWall(Boundary): @@ -97,141 +79,102 @@ class IsothermalWall(Boundary): velocity: Optional[BoundaryVelocityType] = pd.Field(alias="Velocity") -if Flags.beta_features(): - - class HeatFluxWall(Boundary): - """:class:`HeatFluxWall` class for specifying heat flux wall boundaries - - Parameters - ---------- - heatFlux : float - Heat flux at the wall. - - velocity: BoundaryVelocityType - (Optional) Velocity of the wall. If not specified, the boundary is stationary. - - Returns - ------- - :class:`HeatFluxWall` - An instance of the component class HeatFluxWall. - - Example - ------- - >>> heatFluxWall = HeatFluxWall(heatFlux=-0.01, velocity=(0, 0, 0)) - """ - - type: Literal["HeatFluxWall"] = pd.Field("HeatFluxWall", const=True) - heat_flux: Union[float, StrictStr] = pd.Field( - alias="heatFlux", options=["Value", "Expression"] - ) - velocity: Optional[BoundaryVelocityType] = pd.Field(alias="velocity") - - -if Flags.beta_features(): - - class SubsonicOutflowPressure(BoundaryWithTurbulenceQuantities): - """SubsonicOutflowPressure boundary""" - - type: Literal["SubsonicOutflowPressure"] = pd.Field("SubsonicOutflowPressure", const=True) - static_pressure_ratio: PositiveFloat = pd.Field(alias="staticPressureRatio") - -else: - - class SubsonicOutflowPressure(Boundary): - """SubsonicOutflowPressure boundary""" +class HeatFluxWall(Boundary): + """:class:`HeatFluxWall` class for specifying heat flux wall boundaries - type: Literal["SubsonicOutflowPressure"] = pd.Field("SubsonicOutflowPressure", const=True) - static_pressure_ratio: PositiveFloat = pd.Field(alias="staticPressureRatio") + Parameters + ---------- + heatFlux : float + Heat flux at the wall. + velocity: BoundaryVelocityType + (Optional) Velocity of the wall. If not specified, the boundary is stationary. -if Flags.beta_features(): + Returns + ------- + :class:`HeatFluxWall` + An instance of the component class HeatFluxWall. - class SubsonicOutflowMach(BoundaryWithTurbulenceQuantities): - """SubsonicOutflowMach boundary""" + Example + ------- + >>> heatFluxWall = HeatFluxWall(heatFlux=-0.01, velocity=(0, 0, 0)) + """ - type: Literal["SubsonicOutflowMach"] = pd.Field("SubsonicOutflowMach", const=True) - Mach: PositiveFloat = pd.Field(alias="MachNumber") + type: Literal["HeatFluxWall"] = pd.Field("HeatFluxWall", const=True) + heat_flux: Union[float, StrictStr] = pd.Field(alias="heatFlux", options=["Value", "Expression"]) + velocity: Optional[BoundaryVelocityType] = pd.Field(alias="velocity") -else: - class SubsonicOutflowMach(Boundary): - """SubsonicOutflowMach boundary""" +class SubsonicOutflowPressure(BoundaryWithTurbulenceQuantities): + """SubsonicOutflowPressure boundary""" - type: Literal["SubsonicOutflowMach"] = pd.Field("SubsonicOutflowMach", const=True) - Mach: PositiveFloat = pd.Field(alias="MachNumber") + type: Literal["SubsonicOutflowPressure"] = pd.Field("SubsonicOutflowPressure", const=True) + static_pressure_ratio: PositiveFloat = pd.Field(alias="staticPressureRatio") -if Flags.beta_features(): +class SubsonicOutflowMach(BoundaryWithTurbulenceQuantities): + """SubsonicOutflowMach boundary""" - class SubsonicInflow(BoundaryWithTurbulenceQuantities): - """SubsonicInflow boundary""" + type: Literal["SubsonicOutflowMach"] = pd.Field("SubsonicOutflowMach", const=True) + Mach: PositiveFloat = pd.Field(alias="MachNumber") - type: Literal["SubsonicInflow"] = pd.Field("SubsonicInflow", const=True) - total_pressure_ratio: PositiveFloat = pd.Field(alias="totalPressureRatio") - total_temperature_ratio: PositiveFloat = pd.Field(alias="totalTemperatureRatio") - ramp_steps: Optional[PositiveInt] = pd.Field(alias="rampSteps") - velocity_direction: Optional[BoundaryAxisType] = pd.Field(alias="velocityDirection") -else: +class SubsonicInflow(BoundaryWithTurbulenceQuantities): + """SubsonicInflow boundary""" - class SubsonicInflow(Boundary): - """SubsonicInflow boundary""" + type: Literal["SubsonicInflow"] = pd.Field("SubsonicInflow", const=True) + total_pressure_ratio: PositiveFloat = pd.Field(alias="totalPressureRatio") + total_temperature_ratio: PositiveFloat = pd.Field(alias="totalTemperatureRatio") + ramp_steps: Optional[PositiveInt] = pd.Field(alias="rampSteps") + velocity_direction: Optional[BoundaryAxisType] = pd.Field(alias="velocityDirection") - type: Literal["SubsonicInflow"] = pd.Field("SubsonicInflow", const=True) - total_pressure_ratio: PositiveFloat = pd.Field(alias="totalPressureRatio") - total_temperature_ratio: PositiveFloat = pd.Field(alias="totalTemperatureRatio") - ramp_steps: Optional[PositiveInt] = pd.Field(alias="rampSteps") - velocity_direction: Optional[BoundaryAxisType] = pd.Field(alias="velocityDirection") +class SupersonicInflow(Boundary): + """:class:`SupersonicInflow` class for specifying the full fluid state at supersonic inflow boundaries -if Flags.beta_features(): + Parameters + ---------- + total_temperature_ratio : PositiveFloat + Ratio of total temperature to static temperature at the inlet. - class SupersonicInflow(Boundary): - """:class:`SupersonicInflow` class for specifying the full fluid state at supersonic inflow boundaries + total_pressure_ratio: PositiveFloat + Ratio of the total pressure to static pressure at the inlet. - Parameters - ---------- - total_temperature_ratio : PositiveFloat - Ratio of total temperature to static temperature at the inlet. + static_pressure_ratio: PositiveFloat + Ratio of the inlet static pressure to the freestream static pressure. Default freestream static pressure in + Flow360 = 1.0/gamma. - total_pressure_ratio: PositiveFloat - Ratio of the total pressure to static pressure at the inlet. + velocity_direction: BoundaryAxisType + (Optional) 3-array of either float values or string expressions. Unit vector which specifies the direction + of the incoming flow. If not specified, the boundary patch normal is used to specify direction. - static_pressure_ratio: PositiveFloat - Ratio of the inlet static pressure to the freestream static pressure. Default freestream static pressure in - Flow360 = 1.0/gamma. + Returns + ------- + :class:`SupersonicInflow` + An instance of the component class SupersonicInflow. - velocity_direction: BoundaryAxisType - (Optional) 3-array of either float values or string expressions. Unit vector which specifies the direction - of the incoming flow. If not specified, the boundary patch normal is used to specify direction. - - Returns - ------- - :class:`SupersonicInflow` - An instance of the component class SupersonicInflow. - - Example - ------- - >>> supersonicInflow = SupersonicInflow( - totalTemperatureRatio=2.1, - totalPressureRatio=3.0, - staticPressureRatio=1.2 - ) - """ + Example + ------- + >>> supersonicInflow = SupersonicInflow( + totalTemperatureRatio=2.1, + totalPressureRatio=3.0, + staticPressureRatio=1.2 + ) + """ - type: Literal["SupersonicInflow"] = pd.Field("SupersonicInflow", const=True) - total_temperature_ratio: PositiveFloat = pd.Field( - alias="totalTemperatureRatio", supported_solver_version="release-23.3.2.0gt" - ) - total_pressure_ratio: PositiveFloat = pd.Field( - alias="totalPressureRatio", supported_solver_version="release-23.3.2.0gt" - ) - static_pressure_ratio: PositiveFloat = pd.Field( - alias="staticPressureRatio", supported_solver_version="release-23.3.2.0gt" - ) - velocity_direction: Optional[BoundaryAxisType] = pd.Field( - alias="velocityDirection", supported_solver_version="release-23.3.2.0gt" - ) + type: Literal["SupersonicInflow"] = pd.Field("SupersonicInflow", const=True) + total_temperature_ratio: PositiveFloat = pd.Field( + alias="totalTemperatureRatio", supported_solver_version="release-23.3.2.0gt" + ) + total_pressure_ratio: PositiveFloat = pd.Field( + alias="totalPressureRatio", supported_solver_version="release-23.3.2.0gt" + ) + static_pressure_ratio: PositiveFloat = pd.Field( + alias="staticPressureRatio", supported_solver_version="release-23.3.2.0gt" + ) + velocity_direction: Optional[BoundaryAxisType] = pd.Field( + alias="velocityDirection", supported_solver_version="release-23.3.2.0gt" + ) class SlidingInterfaceBoundary(Boundary): @@ -246,40 +189,20 @@ class WallFunction(Boundary): type: Literal["WallFunction"] = pd.Field("WallFunction", const=True) -if Flags.beta_features(): - - class MassInflow(BoundaryWithTurbulenceQuantities): - """:class: `MassInflow` boundary""" - - type: Literal["MassInflow"] = pd.Field("MassInflow", const=True) - mass_flow_rate: PositiveFloat = pd.Field(alias="massFlowRate") - ramp_steps: Optional[PositiveInt] = pd.Field(alias="rampSteps") - -else: - - class MassInflow(Boundary): - """:class: `MassInflow` boundary""" +class MassInflow(BoundaryWithTurbulenceQuantities): + """:class: `MassInflow` boundary""" - type: Literal["MassInflow"] = pd.Field("MassInflow", const=True) - mass_flow_rate: PositiveFloat = pd.Field(alias="massFlowRate") + type: Literal["MassInflow"] = pd.Field("MassInflow", const=True) + mass_flow_rate: PositiveFloat = pd.Field(alias="massFlowRate") + ramp_steps: Optional[PositiveInt] = pd.Field(alias="rampSteps") -if Flags.beta_features(): +class MassOutflow(BoundaryWithTurbulenceQuantities): + """:class: `MassOutflow` boundary""" - class MassOutflow(BoundaryWithTurbulenceQuantities): - """:class: `MassOutflow` boundary""" - - type: Literal["MassOutflow"] = pd.Field("MassOutflow", const=True) - mass_flow_rate: PositiveFloat = pd.Field(alias="massFlowRate") - ramp_steps: Optional[PositiveInt] = pd.Field(alias="rampSteps") - -else: - - class MassOutflow(Boundary): - """:class: `MassOutflow` boundary""" - - type: Literal["MassOutflow"] = pd.Field("MassOutflow", const=True) - mass_flow_rate: PositiveFloat = pd.Field(alias="massFlowRate") + type: Literal["MassOutflow"] = pd.Field("MassOutflow", const=True) + mass_flow_rate: PositiveFloat = pd.Field(alias="massFlowRate") + ramp_steps: Optional[PositiveInt] = pd.Field(alias="rampSteps") class SolidIsothermalWall(Boundary): @@ -314,73 +237,47 @@ class RotationallyPeriodic(Boundary): theta_radians: Optional[float] = pd.Field(alias="thetaRadians") -if Flags.beta_features(): - - class SymmetryPlane(Boundary): - """Symmetry plane boundary - normal gradients forced to be zero""" - - type: Literal["SymmetryPlane"] = pd.Field("SymmetryPlane", const=True) - - -if Flags.beta_features(): - - class VelocityInflow(BoundaryWithTurbulenceQuantities): - """Inflow velocity for incompressible solver""" - - type: Literal["VelocityInflow"] = pd.Field("VelocityInflow", const=True) - velocity: Optional[BoundaryVelocityType] = pd.Field(alias="Velocity") - - -if Flags.beta_features(): - - class PressureOutflow(BoundaryWithTurbulenceQuantities): - """Outflow pressure for incompressible solver""" - - type: Literal["PressureOutflow"] = pd.Field("PressureOutflow", const=True) - static_pressure: Optional[PressureType] = pd.Field(alias="staticPressure") - length_scale_factor: Optional[PositiveFloat] = pd.Field(alias="lengthScaleFactor") - - -if Flags.beta_features(): - BoundaryType = Union[ - NoSlipWall, - SlipWall, - FreestreamBoundary, - IsothermalWall, - HeatFluxWall, - SubsonicOutflowPressure, - SubsonicOutflowMach, - SubsonicInflow, - SupersonicInflow, - SlidingInterfaceBoundary, - WallFunction, - MassInflow, - MassOutflow, - SolidIsothermalWall, - SolidAdiabaticWall, - TranslationallyPeriodic, - RotationallyPeriodic, - SymmetryPlane, - RiemannInvariant, - VelocityInflow, - PressureOutflow, - ] -else: - BoundaryType = Union[ - NoSlipWall, - SlipWall, - FreestreamBoundary, - IsothermalWall, - SubsonicOutflowPressure, - SubsonicOutflowMach, - SubsonicInflow, - SlidingInterfaceBoundary, - WallFunction, - MassInflow, - MassOutflow, - SolidIsothermalWall, - SolidAdiabaticWall, - TranslationallyPeriodic, - RotationallyPeriodic, - RiemannInvariant, - ] +class SymmetryPlane(Boundary): + """Symmetry plane boundary - normal gradients forced to be zero""" + + type: Literal["SymmetryPlane"] = pd.Field("SymmetryPlane", const=True) + + +class VelocityInflow(BoundaryWithTurbulenceQuantities): + """Inflow velocity for incompressible solver""" + + type: Literal["VelocityInflow"] = pd.Field("VelocityInflow", const=True) + velocity: Optional[BoundaryVelocityType] = pd.Field(alias="Velocity") + + +class PressureOutflow(BoundaryWithTurbulenceQuantities): + """Outflow pressure for incompressible solver""" + + type: Literal["PressureOutflow"] = pd.Field("PressureOutflow", const=True) + static_pressure: Optional[PressureType] = pd.Field(alias="staticPressure") + length_scale_factor: Optional[PositiveFloat] = pd.Field(alias="lengthScaleFactor") + + +BoundaryType = Union[ + NoSlipWall, + SlipWall, + FreestreamBoundary, + IsothermalWall, + HeatFluxWall, + SubsonicOutflowPressure, + SubsonicOutflowMach, + SubsonicInflow, + SupersonicInflow, + SlidingInterfaceBoundary, + WallFunction, + MassInflow, + MassOutflow, + SolidIsothermalWall, + SolidAdiabaticWall, + TranslationallyPeriodic, + RotationallyPeriodic, + SymmetryPlane, + RiemannInvariant, + VelocityInflow, + PressureOutflow, +] diff --git a/flow360/component/flow360_params/flow360_output.py b/flow360/component/flow360_params/flow360_output.py index 65bb20a6..61f55f4b 100644 --- a/flow360/component/flow360_params/flow360_output.py +++ b/flow360/component/flow360_params/flow360_output.py @@ -10,8 +10,6 @@ import pydantic as pd from pydantic import conlist -from flow360.flags import Flags - from ..types import Axis, Coordinate, NonNegativeAndNegOneInt, PositiveAndNegOneInt from .flow360_fields import ( CommonFieldNames, @@ -563,8 +561,7 @@ class AeroacousticOutput(Flow360BaseModel): patch_type: Optional[str] = pd.Field("solid", const=True, alias="patchType") observers: List[Coordinate] = pd.Field() - if Flags.beta_features(): - write_per_surface_output: Optional[bool] = pd.Field(False, alias="writePerSurfaceOutput") + write_per_surface_output: Optional[bool] = pd.Field(False, alias="writePerSurfaceOutput") class LegacyOutputFormat(pd.BaseModel, metaclass=ABCMeta): diff --git a/flow360/component/flow360_params/flow360_params.py b/flow360/component/flow360_params/flow360_params.py index 1c6de0e4..1ea74a2d 100644 --- a/flow360/component/flow360_params/flow360_params.py +++ b/flow360/component/flow360_params/flow360_params.py @@ -27,7 +27,6 @@ from typing_extensions import Literal from flow360 import units -from flow360.flags import Flags from ...error_messages import unit_system_inconsistent_msg, use_unit_system_msg from ...exceptions import ( @@ -48,7 +47,7 @@ PositiveInt, Vector, ) -from ..utils import _get_value_or_none, beta_feature +from ..utils import _get_value_or_none from .boundaries import BoundaryType, WallFunction from .conversions import ExtraDimensionedProperty from .flow360_legacy import ( @@ -95,6 +94,7 @@ LinearSolver, NavierStokesSolver, NavierStokesSolverLegacy, + NavierStokesSolverType, NoneSolver, SpalartAllmaras, TransitionModelSolver, @@ -108,6 +108,7 @@ TimeStepping, UnsteadyTimeStepping, ) +from .turbulence_quantities import TurbulenceQuantitiesType from .unit_system import ( AngularVelocityType, AreaType, @@ -147,16 +148,12 @@ _check_duplicate_boundary_name, _check_equation_eval_frequency_for_unsteady_simulations, _check_incompressible_navier_stokes_solver, - _check_numericalDissipationFactor_output, + _check_numerical_dissipation_factor_output, _check_periodic_boundary_mapping, _check_tri_quad_boundaries, ) from .volume_zones import FluidDynamicsVolumeZone, ReferenceFrameType, VolumeZoneType -if Flags.beta_features(): - from .solvers import NavierStokesSolverType - from .turbulence_quantities import TurbulenceQuantitiesType - # pylint: disable=invalid-name def get_time_non_dim_unit(mesh_unit_length, C_inf, extra_msg=""): @@ -536,23 +533,16 @@ class FreestreamBase(Flow360BaseModel, metaclass=ABCMeta): ## Legacy update pending. ## The validation for turbulenceQuantities (make sure we have correct combinations, maybe in root validator) ## is also pending. TODO - if Flags.beta_features(): - turbulence_quantities: Optional[TurbulenceQuantitiesType] = pd.Field( - alias="turbulenceQuantities" - ) - - # pylint: disable=missing-class-docstring,too-few-public-methods - class Config(Flow360BaseModel.Config): - conflicting_fields = [ - Conflicts(field1="turbulent_viscosity_ratio", field2="turbulence_quantities") - ] - exclude_on_flow360_export = ["model_type"] - - else: + turbulence_quantities: Optional[TurbulenceQuantitiesType] = pd.Field( + alias="turbulenceQuantities" + ) - class Config(Flow360BaseModel.Config): - # pylint: disable=missing-class-docstring,too-few-public-methods - exclude_on_flow360_export = ["model_type"] + # pylint: disable=missing-class-docstring,too-few-public-methods + class Config(Flow360BaseModel.Config): + conflicting_fields = [ + Conflicts(field1="turbulent_viscosity_ratio", field2="turbulence_quantities") + ] + exclude_on_flow360_export = ["model_type"] class FreestreamFromMach(FreestreamBase): @@ -1023,12 +1013,7 @@ class Flow360Params(Flow360BaseModel): volume_zones: Optional[VolumeZones] = pd.Field(alias="volumeZones") aeroacoustic_output: Optional[AeroacousticOutput] = pd.Field(alias="aeroacousticOutput") - if Flags.beta_features(): - navier_stokes_solver: Optional[NavierStokesSolverType] = pd.Field( - alias="navierStokesSolver" - ) - else: - navier_stokes_solver: Optional[NavierStokesSolver] = pd.Field(alias="navierStokesSolver") + navier_stokes_solver: Optional[NavierStokesSolverType] = pd.Field(alias="navierStokesSolver") def _init_check_unit_system(self, **kwargs): if unit_system_manager.current is None: @@ -1296,7 +1281,7 @@ def check_numerical_dissipation_factor_output(cls, values): """ Detect output of numericalDissipationFactor if not enabled. """ - return _check_numericalDissipationFactor_output(values) + return _check_numerical_dissipation_factor_output(values) class Flow360MeshParams(Flow360BaseModel): diff --git a/flow360/component/flow360_params/solvers.py b/flow360/component/flow360_params/solvers.py index 293c6dc6..1a1a3a61 100644 --- a/flow360/component/flow360_params/solvers.py +++ b/flow360/component/flow360_params/solvers.py @@ -11,8 +11,6 @@ import pydantic as pd from typing_extensions import Literal -from flow360.flags import Flags - from ..types import NonNegativeFloat, NonNegativeInt, PositiveFloat, PositiveInt from .flow360_legacy import LegacyModel, try_set, try_update from .params_base import Conflicts, DeprecatedAlias, Flow360BaseModel @@ -31,22 +29,13 @@ class GenericFlowSolverSettings(Flow360BaseModel, metaclass=ABCMeta): max_force_jac_update_physical_steps: Optional[NonNegativeInt] = pd.Field( 0, alias="maxForceJacUpdatePhysicalSteps", displayed="Max force JAC update physical steps" ) - if Flags.beta_features(): - # pylint: disable=missing-class-docstring,too-few-public-methods - class Config(Flow360BaseModel.Config): - deprecated_aliases = [ - DeprecatedAlias(name="linear_solver", deprecated="linearSolverConfig"), - DeprecatedAlias(name="absolute_tolerance", deprecated="tolerance"), - ] - - else: - class Config( - Flow360BaseModel.Config - ): # pylint: disable=missing-class-docstring,too-few-public-methods - deprecated_aliases = [ - DeprecatedAlias(name="absolute_tolerance", deprecated="tolerance"), - ] + # pylint: disable=missing-class-docstring,too-few-public-methods + class Config(Flow360BaseModel.Config): + deprecated_aliases = [ + DeprecatedAlias(name="linear_solver", deprecated="linearSolverConfig"), + DeprecatedAlias(name="absolute_tolerance", deprecated="tolerance"), + ] class LinearSolver(Flow360BaseModel): @@ -179,74 +168,57 @@ class NavierStokesSolver(GenericFlowSolverSettings): limit_velocity: Optional[bool] = pd.Field(False, alias="limitVelocity") limit_pressure_density: Optional[bool] = pd.Field(False, alias="limitPressureDensity") - if Flags.beta_features(): - linear_solver: Optional[LinearSolver] = pd.Field( - LinearSolver(max_iterations=30), alias="linearSolver", displayed="Linear solver" - ) - - else: - linear_solver_config: Optional[LinearSolver] = pd.Field( - LinearSolver(max_iterations=30), - alias="linearSolverConfig", - displayed="Linear solver config", - ) + linear_solver: Optional[LinearSolver] = pd.Field( + LinearSolver(max_iterations=30), alias="linearSolver", displayed="Linear solver" + ) model_type: Literal["Compressible"] = pd.Field("Compressible", alias="modelType", const=True) -if Flags.beta_features(): - - class IncompressibleNavierStokesSolver(GenericFlowSolverSettings): - """:class:`IncompressibleNavierStokesSolver` class for setting up incompressible Navier-Stokes solver +class IncompressibleNavierStokesSolver(GenericFlowSolverSettings): + """:class:`IncompressibleNavierStokesSolver` class for setting up incompressible Navier-Stokes solver - Parameters - ---------- - pressure_correction_solver : - Pressure correction solver settings + Parameters + ---------- + pressure_correction_solver : + Pressure correction solver settings - linear_solver: - Linear solver settings + linear_solver: + Linear solver settings - update_jacobian_frequency : - Frequency at which the jacobian is updated. + update_jacobian_frequency : + Frequency at which the jacobian is updated. - equation_eval_frequency : - Frequency at which to update the incompressible NS equation in loosely-coupled simulations + equation_eval_frequency : + Frequency at which to update the incompressible NS equation in loosely-coupled simulations - Returns - ------- - :class:`IncompressibleNavierStokesSolver` - An instance of the component class IncompressibleNavierStokesSolver. + Returns + ------- + :class:`IncompressibleNavierStokesSolver` + An instance of the component class IncompressibleNavierStokesSolver. - Example - ------- - >>> ns = IncompressibleNavierStokesSolver(absolute_tolerance=1e-10) - """ + Example + ------- + >>> ns = IncompressibleNavierStokesSolver(absolute_tolerance=1e-10) + """ - pressure_correction_solver: Optional[PressureCorrectionSolver] = pd.Field( - alias="pressureCorrectionSolver", default=PressureCorrectionSolver() - ) - equation_eval_frequency: Optional[PositiveInt] = pd.Field(1, alias="equationEvalFrequency") - kappa_MUSCL: Optional[pd.confloat(ge=-1, le=1)] = pd.Field( - -1, alias="kappaMUSCL", displayed="Kappa MUSCL" - ) - if Flags.beta_features(): - linear_solver: Optional[LinearSolver] = pd.Field( - LinearSolver(max_iterations=30), alias="linearSolver", displayed="Linear solver" - ) + pressure_correction_solver: Optional[PressureCorrectionSolver] = pd.Field( + alias="pressureCorrectionSolver", default=PressureCorrectionSolver() + ) + equation_eval_frequency: Optional[PositiveInt] = pd.Field(1, alias="equationEvalFrequency") + kappa_MUSCL: Optional[pd.confloat(ge=-1, le=1)] = pd.Field( + -1, alias="kappaMUSCL", displayed="Kappa MUSCL" + ) + linear_solver: Optional[LinearSolver] = pd.Field( + LinearSolver(max_iterations=30), alias="linearSolver", displayed="Linear solver" + ) - else: - linear_solver_config: Optional[LinearSolver] = pd.Field( - LinearSolver(max_iterations=30), - alias="linearSolverConfig", - displayed="Linear solver config", - ) + model_type: Literal["Incompressible"] = pd.Field( + "Incompressible", alias="modelType", const=True + ) - model_type: Literal["Incompressible"] = pd.Field( - "Incompressible", alias="modelType", const=True - ) - NavierStokesSolverType = Union[NavierStokesSolver, IncompressibleNavierStokesSolver] +NavierStokesSolverType = Union[NavierStokesSolver, IncompressibleNavierStokesSolver] class TurbulenceModelConstantsSA(Flow360BaseModel): @@ -355,17 +327,9 @@ class TurbulenceModelSolver(GenericFlowSolverSettings, metaclass=ABCMeta): alias="modelConstants", discriminator="model_type" ) - if Flags.beta_features(): - linear_solver: Optional[LinearSolver] = pd.Field( - LinearSolver(max_iterations=20), alias="linearSolver", displayed="Linear solver config" - ) - - else: - linear_solver_config: Optional[LinearSolver] = pd.Field( - LinearSolver(max_iterations=20), - alias="linearSolverConfig", - displayed="Linear solver config", - ) + linear_solver: Optional[LinearSolver] = pd.Field( + LinearSolver(max_iterations=20), alias="linearSolver", displayed="Linear solver config" + ) class KOmegaSST(TurbulenceModelSolver): @@ -439,26 +403,14 @@ class HeatEquationSolver(GenericFlowSolverSettings): equation_eval_frequency: Optional[PositiveInt] = pd.Field(alias="equationEvalFrequency") order_of_accuracy: Optional[Literal[2]] = pd.Field(2, alias="orderOfAccuracy", const=True) - if Flags.beta_features(): - linear_solver: Optional[LinearSolver] = pd.Field(LinearSolver(), alias="linearSolver") - - # pylint: disable=missing-class-docstring,too-few-public-methods - class Config(Flow360BaseModel.Config): - deprecated_aliases = [ - DeprecatedAlias(name="linear_solver", deprecated="linearSolverConfig"), - DeprecatedAlias(name="absolute_tolerance", deprecated="tolerance"), - ] + linear_solver: Optional[LinearSolver] = pd.Field(LinearSolver(), alias="linearSolver") - else: - linear_solver_config: Optional[LinearSolver] = pd.Field( - LinearSolver(), alias="linearSolverConfig" - ) - - # pylint: disable=missing-class-docstring,too-few-public-methods - class Config(Flow360BaseModel.Config): - deprecated_aliases = [ - DeprecatedAlias(name="absolute_tolerance", deprecated="tolerance"), - ] + # pylint: disable=missing-class-docstring,too-few-public-methods + class Config(Flow360BaseModel.Config): + deprecated_aliases = [ + DeprecatedAlias(name="linear_solver", deprecated="linearSolverConfig"), + DeprecatedAlias(name="absolute_tolerance", deprecated="tolerance"), + ] class TransitionModelSolver(GenericFlowSolverSettings): @@ -492,17 +444,9 @@ class TransitionModelSolver(GenericFlowSolverSettings): 1.0, alias="reconstructionGradientLimiter" ) - if Flags.beta_features(): - linear_solver: Optional[LinearSolver] = pd.Field( - LinearSolver(max_iterations=20), alias="linearSolver", displayed="Linear solver config" - ) - - else: - linear_solver_config: Optional[LinearSolver] = pd.Field( - LinearSolver(max_iterations=20), - alias="linearSolverConfig", - displayed="Linear solver config", - ) + linear_solver: Optional[LinearSolver] = pd.Field( + LinearSolver(max_iterations=20), alias="linearSolver", displayed="Linear solver config" + ) # pylint: disable=arguments-differ,invalid-name def to_solver(self, params, **kwargs) -> TransitionModelSolver: @@ -667,7 +611,7 @@ def update_model(self) -> Flow360BaseModel: "absoluteTolerance": self.absolute_tolerance, "relativeTolerance": self.relative_tolerance, "modelType": self.model_type, - "linearSolverConfig": try_update(self.linear_solver_config), + "linearSolver": try_update(self.linear_solver_config), "updateJacobianFrequency": self.update_jacobian_frequency, "equationEvalFrequency": self.equation_eval_frequency, "maxForceJacUpdatePhysicalSteps": self.max_force_jac_update_physical_steps, @@ -676,7 +620,7 @@ def update_model(self) -> Flow360BaseModel: "Ncrit": self.N_crit, } - if self.linear_iterations is not None and model["linearSolverConfig"] is not None: - model["linearSolverConfig"]["maxIterations"] = self.linear_iterations + if self.linear_iterations is not None and model["linearSolver"] is not None: + model["linearSolver"]["maxIterations"] = self.linear_iterations return TransitionModelSolver.parse_obj(model) diff --git a/flow360/component/flow360_params/turbulence_quantities.py b/flow360/component/flow360_params/turbulence_quantities.py index fcd4e8c7..ca3087e6 100644 --- a/flow360/component/flow360_params/turbulence_quantities.py +++ b/flow360/component/flow360_params/turbulence_quantities.py @@ -2,240 +2,247 @@ Turbulence quantities parameters """ -from flow360.flags import Flags +# pylint: disable=unused-import +from abc import ABCMeta +from typing import Optional, Union -if Flags.beta_features(): - # pylint: disable=unused-import - from abc import ABCMeta - from typing import Optional, Union +import pydantic as pd - import pydantic as pd +from ..types import NonNegativeFloat, PositiveFloat +from .params_base import Flow360BaseModel - from ..types import NonNegativeFloat, PositiveFloat - from .params_base import Flow360BaseModel - class TurbulentKineticEnergy(Flow360BaseModel): - """ - turbulentKineticEnergy : non-dimensional [`C_inf^2`] - Turbulent kinetic energy. Applicable only when using SST model. - """ +class TurbulentKineticEnergy(Flow360BaseModel): + """ + turbulentKineticEnergy : non-dimensional [`C_inf^2`] + Turbulent kinetic energy. Applicable only when using SST model. + """ - turbulent_kinetic_energy: Optional[NonNegativeFloat] = pd.Field( - alias="turbulentKineticEnergy" - ) + turbulent_kinetic_energy: Optional[NonNegativeFloat] = pd.Field(alias="turbulentKineticEnergy") - class TurbulentIntensity(Flow360BaseModel): - """ - turbulentIntensity : non-dimensional [`-`] - Turbulent intensity. Applicable only when using SST model. - This is related to turbulent kinetic energy as: - `turbulentKineticEnergy = 1.5*pow(U_ref * turbulentIntensity, 2)`. - Note the use of the freestream velocity U_ref instead of C_inf. - """ - - turbulent_intensity: Optional[NonNegativeFloat] = pd.Field(alias="turbulentIntensity") - - class _SpecificDissipationRate(Flow360BaseModel, metaclass=ABCMeta): - """ - specificDissipationRate : non-dimensional [`C_inf/L_gridUnit`] - Turbulent specific dissipation rate. Applicable only when using SST model. - """ - - specific_dissipation_rate: Optional[NonNegativeFloat] = pd.Field( - alias="specificDissipationRate" - ) - class TurbulentViscosityRatio(Flow360BaseModel): - """ - turbulentViscosityRatio : non-dimensional [`-`] - The ratio of turbulent eddy viscosity over the freestream viscosity. Applicable for both SA and SST model. - """ +class TurbulentIntensity(Flow360BaseModel): + """ + turbulentIntensity : non-dimensional [`-`] + Turbulent intensity. Applicable only when using SST model. + This is related to turbulent kinetic energy as: + `turbulentKineticEnergy = 1.5*pow(U_ref * turbulentIntensity, 2)`. + Note the use of the freestream velocity U_ref instead of C_inf. + """ - turbulent_viscosity_ratio: Optional[NonNegativeFloat] = pd.Field( - alias="turbulentViscosityRatio" - ) + turbulent_intensity: Optional[NonNegativeFloat] = pd.Field(alias="turbulentIntensity") - class TurbulentLengthScale(Flow360BaseModel, metaclass=ABCMeta): - """ - turbulentLengthScale : non-dimensional [`L_gridUnit`] - The turbulent length scale is an estimation of the size of the eddies that are modeled/not resolved. - Applicable only when using SST model. This is related to the turbulent kinetic energy and turbulent - specific dissipation rate as: `L_T = sqrt(k)/(pow(beta_0^*, 0.25)*w)` where `L_T` is turbulent length scale, - `k` is turbulent kinetic energy, `beta_0^*` is 0.09 and `w` is turbulent specific dissipation rate. - Applicable only when using SST model. - """ - - turbulent_length_scale: Optional[PositiveFloat] = pd.Field(alias="turbulentLengthScale") - - class ModifiedTurbulentViscosityRatio(Flow360BaseModel): - """ - modifiedTurbulentViscosityRatio : non-dimensional [`-`] - The ratio of modified turbulent eddy viscosity (SA) over the freestream viscosity. - Applicable only when using SA model. - """ - - modified_turbulent_viscosity_ratio: Optional[PositiveFloat] = pd.Field( - alias="modifiedTurbulentViscosityRatio" - ) - class ModifiedTurbulentViscosity(Flow360BaseModel): - """ - modifiedTurbulentViscosity : non-dimensional [`C_inf*L_gridUnit`] - The modified turbulent eddy viscosity (SA). Applicable only when using SA model. - """ +class _SpecificDissipationRate(Flow360BaseModel, metaclass=ABCMeta): + """ + specificDissipationRate : non-dimensional [`C_inf/L_gridUnit`] + Turbulent specific dissipation rate. Applicable only when using SST model. + """ - modified_turbulent_viscosity: Optional[PositiveFloat] = pd.Field( - alias="modifiedTurbulentViscosity" - ) + specific_dissipation_rate: Optional[NonNegativeFloat] = pd.Field( + alias="specificDissipationRate" + ) - # pylint: disable=missing-class-docstring - class SpecificDissipationRateAndTurbulentKineticEnergy( - _SpecificDissipationRate, TurbulentKineticEnergy - ): - pass - - class TurbulentViscosityRatioAndTurbulentKineticEnergy( - TurbulentViscosityRatio, TurbulentKineticEnergy - ): - pass - - class TurbulentLengthScaleAndTurbulentKineticEnergy( - TurbulentLengthScale, TurbulentKineticEnergy - ): - pass - - class TurbulentIntensityAndSpecificDissipationRate( - TurbulentIntensity, _SpecificDissipationRate - ): - pass - - class TurbulentIntensityAndTurbulentViscosityRatio(TurbulentIntensity, TurbulentViscosityRatio): - pass - - class TurbulentIntensityAndTurbulentLengthScale(TurbulentIntensity, TurbulentLengthScale): - pass - - class SpecificDissipationRateAndTurbulentViscosityRatio( - _SpecificDissipationRate, TurbulentViscosityRatio - ): - pass - - class SpecificDissipationRateAndTurbulentLengthScale( - _SpecificDissipationRate, TurbulentLengthScale - ): - pass - - class TurbulentViscosityRatioAndTurbulentLengthScale( - TurbulentViscosityRatio, TurbulentLengthScale - ): - pass - - # pylint: enable=missing-class-docstring - - TurbulenceQuantitiesType = Union[ - TurbulentViscosityRatio, - TurbulentKineticEnergy, - TurbulentIntensity, - TurbulentLengthScale, - ModifiedTurbulentViscosityRatio, - ModifiedTurbulentViscosity, - SpecificDissipationRateAndTurbulentKineticEnergy, - TurbulentViscosityRatioAndTurbulentKineticEnergy, - TurbulentLengthScaleAndTurbulentKineticEnergy, - TurbulentIntensityAndSpecificDissipationRate, - TurbulentIntensityAndTurbulentViscosityRatio, - TurbulentIntensityAndTurbulentLengthScale, - SpecificDissipationRateAndTurbulentViscosityRatio, - SpecificDissipationRateAndTurbulentLengthScale, - TurbulentViscosityRatioAndTurbulentLengthScale, - ] - - # pylint: disable=too-many-arguments, too-many-return-statements, too-many-branches, invalid-name - # using class naming convetion here - def TurbulenceQuantities( - viscosity_ratio=None, - modified_viscosity_ratio=None, - modified_viscosity=None, - specific_dissipation_rate=None, - turbulent_kinetic_energy=None, - turbulent_length_scale=None, - turbulent_intensity=None, - ) -> TurbulenceQuantitiesType: - """Return a matching tubulence specification object""" - non_none_arg_count = sum(arg is not None for arg in locals().values()) - if non_none_arg_count == 0: - return None - - if viscosity_ratio is not None: - if non_none_arg_count == 1: - return TurbulentViscosityRatio(turbulent_viscosity_ratio=viscosity_ratio) - if turbulent_kinetic_energy is not None: - return TurbulentViscosityRatioAndTurbulentKineticEnergy( - turbulent_viscosity_ratio=viscosity_ratio, - turbulent_kinetic_energy=turbulent_kinetic_energy, - ) - if turbulent_intensity is not None: - return TurbulentIntensityAndTurbulentViscosityRatio( - turbulent_viscosity_ratio=viscosity_ratio, - turbulent_intensity=turbulent_intensity, - ) - if specific_dissipation_rate is not None: - return SpecificDissipationRateAndTurbulentViscosityRatio( - turbulent_viscosity_ratio=viscosity_ratio, - specific_dissipation_rate=specific_dissipation_rate, - ) - if turbulent_length_scale is not None: - return TurbulentViscosityRatioAndTurbulentLengthScale( - turbulent_viscosity_ratio=viscosity_ratio, - turbulent_length_scale=turbulent_length_scale, - ) - - if modified_viscosity_ratio is not None and non_none_arg_count == 1: - return ModifiedTurbulentViscosityRatio( - modified_turbulent_viscosity_ratio=modified_viscosity_ratio - ) - if modified_viscosity is not None and non_none_arg_count == 1: - return ModifiedTurbulentViscosity(modified_turbulent_viscosity=modified_viscosity) +class TurbulentViscosityRatio(Flow360BaseModel): + """ + turbulentViscosityRatio : non-dimensional [`-`] + The ratio of turbulent eddy viscosity over the freestream viscosity. Applicable for both SA and SST model. + """ - if turbulent_intensity is not None: - if non_none_arg_count == 1: - return TurbulentIntensity(turbulent_intensity=turbulent_intensity) - if specific_dissipation_rate is not None: - return TurbulentIntensityAndSpecificDissipationRate( - turbulent_intensity=turbulent_intensity, - specific_dissipation_rate=specific_dissipation_rate, - ) - if turbulent_length_scale is not None: - return TurbulentIntensityAndTurbulentLengthScale( - turbulent_intensity=turbulent_intensity, - turbulent_length_scale=turbulent_length_scale, - ) + turbulent_viscosity_ratio: Optional[NonNegativeFloat] = pd.Field( + alias="turbulentViscosityRatio" + ) - if turbulent_kinetic_energy is not None: - if non_none_arg_count == 1: - return TurbulentKineticEnergy(turbulent_kinetic_energy=turbulent_kinetic_energy) - if specific_dissipation_rate is not None: - return SpecificDissipationRateAndTurbulentKineticEnergy( - turbulent_kinetic_energy=turbulent_kinetic_energy, - specific_dissipation_rate=specific_dissipation_rate, - ) - if turbulent_length_scale is not None: - return TurbulentLengthScaleAndTurbulentKineticEnergy( - turbulent_kinetic_energy=turbulent_kinetic_energy, - turbulent_length_scale=turbulent_length_scale, - ) - - if turbulent_length_scale is not None and non_none_arg_count == 1: - return TurbulentLengthScale(turbulent_length_scale=turbulent_length_scale) +class TurbulentLengthScale(Flow360BaseModel, metaclass=ABCMeta): + """ + turbulentLengthScale : non-dimensional [`L_gridUnit`] + The turbulent length scale is an estimation of the size of the eddies that are modeled/not resolved. + Applicable only when using SST model. This is related to the turbulent kinetic energy and turbulent + specific dissipation rate as: `L_T = sqrt(k)/(pow(beta_0^*, 0.25)*w)` where `L_T` is turbulent length scale, + `k` is turbulent kinetic energy, `beta_0^*` is 0.09 and `w` is turbulent specific dissipation rate. + Applicable only when using SST model. + """ + + turbulent_length_scale: Optional[PositiveFloat] = pd.Field(alias="turbulentLengthScale") + + +class ModifiedTurbulentViscosityRatio(Flow360BaseModel): + """ + modifiedTurbulentViscosityRatio : non-dimensional [`-`] + The ratio of modified turbulent eddy viscosity (SA) over the freestream viscosity. + Applicable only when using SA model. + """ + + modified_turbulent_viscosity_ratio: Optional[PositiveFloat] = pd.Field( + alias="modifiedTurbulentViscosityRatio" + ) + + +class ModifiedTurbulentViscosity(Flow360BaseModel): + """ + modifiedTurbulentViscosity : non-dimensional [`C_inf*L_gridUnit`] + The modified turbulent eddy viscosity (SA). Applicable only when using SA model. + """ + + modified_turbulent_viscosity: Optional[PositiveFloat] = pd.Field( + alias="modifiedTurbulentViscosity" + ) + + +# pylint: disable=missing-class-docstring +class SpecificDissipationRateAndTurbulentKineticEnergy( + _SpecificDissipationRate, TurbulentKineticEnergy +): + pass + + +class TurbulentViscosityRatioAndTurbulentKineticEnergy( + TurbulentViscosityRatio, TurbulentKineticEnergy +): + pass + + +class TurbulentLengthScaleAndTurbulentKineticEnergy(TurbulentLengthScale, TurbulentKineticEnergy): + pass + + +class TurbulentIntensityAndSpecificDissipationRate(TurbulentIntensity, _SpecificDissipationRate): + pass + + +class TurbulentIntensityAndTurbulentViscosityRatio(TurbulentIntensity, TurbulentViscosityRatio): + pass + + +class TurbulentIntensityAndTurbulentLengthScale(TurbulentIntensity, TurbulentLengthScale): + pass + + +class SpecificDissipationRateAndTurbulentViscosityRatio( + _SpecificDissipationRate, TurbulentViscosityRatio +): + pass + + +class SpecificDissipationRateAndTurbulentLengthScale( + _SpecificDissipationRate, TurbulentLengthScale +): + pass + + +class TurbulentViscosityRatioAndTurbulentLengthScale(TurbulentViscosityRatio, TurbulentLengthScale): + pass + + +# pylint: enable=missing-class-docstring + +TurbulenceQuantitiesType = Union[ + TurbulentViscosityRatio, + TurbulentKineticEnergy, + TurbulentIntensity, + TurbulentLengthScale, + ModifiedTurbulentViscosityRatio, + ModifiedTurbulentViscosity, + SpecificDissipationRateAndTurbulentKineticEnergy, + TurbulentViscosityRatioAndTurbulentKineticEnergy, + TurbulentLengthScaleAndTurbulentKineticEnergy, + TurbulentIntensityAndSpecificDissipationRate, + TurbulentIntensityAndTurbulentViscosityRatio, + TurbulentIntensityAndTurbulentLengthScale, + SpecificDissipationRateAndTurbulentViscosityRatio, + SpecificDissipationRateAndTurbulentLengthScale, + TurbulentViscosityRatioAndTurbulentLengthScale, +] + + +# pylint: disable=too-many-arguments, too-many-return-statements, too-many-branches, invalid-name +# using class naming convetion here +def TurbulenceQuantities( + viscosity_ratio=None, + modified_viscosity_ratio=None, + modified_viscosity=None, + specific_dissipation_rate=None, + turbulent_kinetic_energy=None, + turbulent_length_scale=None, + turbulent_intensity=None, +) -> TurbulenceQuantitiesType: + """Return a matching tubulence specification object""" + non_none_arg_count = sum(arg is not None for arg in locals().values()) + if non_none_arg_count == 0: + return None + + if viscosity_ratio is not None: + if non_none_arg_count == 1: + return TurbulentViscosityRatio(turbulent_viscosity_ratio=viscosity_ratio) + if turbulent_kinetic_energy is not None: + return TurbulentViscosityRatioAndTurbulentKineticEnergy( + turbulent_viscosity_ratio=viscosity_ratio, + turbulent_kinetic_energy=turbulent_kinetic_energy, + ) + if turbulent_intensity is not None: + return TurbulentIntensityAndTurbulentViscosityRatio( + turbulent_viscosity_ratio=viscosity_ratio, + turbulent_intensity=turbulent_intensity, + ) if specific_dissipation_rate is not None: - if turbulent_length_scale is not None: - return SpecificDissipationRateAndTurbulentLengthScale( - specific_dissipation_rate=specific_dissipation_rate, - turbulent_length_scale=turbulent_length_scale, - ) - - raise ValueError( - "Please recheck TurbulenceQuantities inputs and make sure they represents a valid specification." + return SpecificDissipationRateAndTurbulentViscosityRatio( + turbulent_viscosity_ratio=viscosity_ratio, + specific_dissipation_rate=specific_dissipation_rate, + ) + if turbulent_length_scale is not None: + return TurbulentViscosityRatioAndTurbulentLengthScale( + turbulent_viscosity_ratio=viscosity_ratio, + turbulent_length_scale=turbulent_length_scale, + ) + + if modified_viscosity_ratio is not None and non_none_arg_count == 1: + return ModifiedTurbulentViscosityRatio( + modified_turbulent_viscosity_ratio=modified_viscosity_ratio ) + + if modified_viscosity is not None and non_none_arg_count == 1: + return ModifiedTurbulentViscosity(modified_turbulent_viscosity=modified_viscosity) + + if turbulent_intensity is not None: + if non_none_arg_count == 1: + return TurbulentIntensity(turbulent_intensity=turbulent_intensity) + if specific_dissipation_rate is not None: + return TurbulentIntensityAndSpecificDissipationRate( + turbulent_intensity=turbulent_intensity, + specific_dissipation_rate=specific_dissipation_rate, + ) + if turbulent_length_scale is not None: + return TurbulentIntensityAndTurbulentLengthScale( + turbulent_intensity=turbulent_intensity, + turbulent_length_scale=turbulent_length_scale, + ) + + if turbulent_kinetic_energy is not None: + if non_none_arg_count == 1: + return TurbulentKineticEnergy(turbulent_kinetic_energy=turbulent_kinetic_energy) + if specific_dissipation_rate is not None: + return SpecificDissipationRateAndTurbulentKineticEnergy( + turbulent_kinetic_energy=turbulent_kinetic_energy, + specific_dissipation_rate=specific_dissipation_rate, + ) + if turbulent_length_scale is not None: + return TurbulentLengthScaleAndTurbulentKineticEnergy( + turbulent_kinetic_energy=turbulent_kinetic_energy, + turbulent_length_scale=turbulent_length_scale, + ) + + if turbulent_length_scale is not None and non_none_arg_count == 1: + return TurbulentLengthScale(turbulent_length_scale=turbulent_length_scale) + + if specific_dissipation_rate is not None: + if turbulent_length_scale is not None: + return SpecificDissipationRateAndTurbulentLengthScale( + specific_dissipation_rate=specific_dissipation_rate, + turbulent_length_scale=turbulent_length_scale, + ) + + raise ValueError( + "Please recheck TurbulenceQuantities inputs and make sure they represents a valid specification." + ) diff --git a/flow360/component/flow360_params/validations.py b/flow360/component/flow360_params/validations.py index db7945eb..ce5a413d 100644 --- a/flow360/component/flow360_params/validations.py +++ b/flow360/component/flow360_params/validations.py @@ -4,8 +4,6 @@ from typing import NoReturn, Optional, Tuple -from flow360.flags import Flags - from ...log import log from .boundaries import ( RotationallyPeriodic, @@ -18,12 +16,10 @@ from .flow360_fields import get_aliases from .initial_condition import ExpressionInitialCondition from .params_utils import get_all_output_fields +from .solvers import IncompressibleNavierStokesSolver from .time_stepping import SteadyTimeStepping, UnsteadyTimeStepping from .volume_zones import HeatTransferVolumeZone -if Flags.beta_features(): - from .solvers import IncompressibleNavierStokesSolver - def _check_tri_quad_boundaries(values): boundaries = values.get("boundaries") @@ -156,13 +152,10 @@ def _validate_cht_no_heat_transfer_zone(values): def _validate_cht_has_heat_transfer_zone(values): navier_stokes_solver = values.get("navier_stokes_solver") - if Flags.beta_features(): - if navier_stokes_solver is not None and isinstance( - navier_stokes_solver, IncompressibleNavierStokesSolver - ): - raise ValueError( - "Conjugate heat transfer can not be used with incompressible flow solver." - ) + if navier_stokes_solver is not None and isinstance( + navier_stokes_solver, IncompressibleNavierStokesSolver + ): + raise ValueError("Conjugate heat transfer can not be used with incompressible flow solver.") time_stepping = values.get("time_stepping") volume_zones = values.get("volume_zones") @@ -467,9 +460,11 @@ def _get_all_output_fields(values): return used_output_fields -def _check_numericalDissipationFactor_output(values): +def _check_numerical_dissipation_factor_output(values): navier_stokes_solver = values.get("navier_stokes_solver") - if navier_stokes_solver is not None: + if navier_stokes_solver is not None and not isinstance( + navier_stokes_solver, IncompressibleNavierStokesSolver + ): numerical_dissipation_factor = navier_stokes_solver.numerical_dissipation_factor low_dissipation_flag = int(round(1.0 / numerical_dissipation_factor)) - 1 if low_dissipation_flag == 0 and "numericalDissipationFactor" in _get_all_output_fields( diff --git a/flow360/component/results/case_results.py b/flow360/component/results/case_results.py index ae551566..89a7b5a0 100644 --- a/flow360/component/results/case_results.py +++ b/flow360/component/results/case_results.py @@ -29,6 +29,7 @@ is_flow360_unit, ) +# pylint: disable=consider-using-with TMP_DIR = tempfile.TemporaryDirectory() diff --git a/tests/params/test_params_boundary.py b/tests/params/test_params_boundary.py index 751f6607..4b758d61 100644 --- a/tests/params/test_params_boundary.py +++ b/tests/params/test_params_boundary.py @@ -7,6 +7,7 @@ import flow360 as fl from flow360.component.flow360_params.boundaries import ( FreestreamBoundary, + HeatFluxWall, IsothermalWall, MassInflow, MassOutflow, @@ -26,12 +27,7 @@ MeshBoundary, SteadyTimeStepping, ) -from flow360.flags import Flags - -if Flags.beta_features(): - from flow360.component.flow360_params.boundaries import HeatFluxWall - from flow360.component.flow360_params.turbulence_quantities import TurbulenceQuantities - +from flow360.component.flow360_params.turbulence_quantities import TurbulenceQuantities from tests.utils import compare_to_ref, to_file_from_file_test assertions = unittest.TestCase("__init__") @@ -240,10 +236,9 @@ def test_boundary_types(): assert IsothermalWall(Temperature=1).type == "IsothermalWall" assert IsothermalWall(Temperature="exp(x)") - if Flags.beta_features(): - assert HeatFluxWall(heatFlux=-0.01).type == "HeatFluxWall" - with fl.flow360_unit_system: - assert HeatFluxWall(heatFlux="exp(x)", velocity=(0, 0, 0)) + assert HeatFluxWall(heatFlux=-0.01).type == "HeatFluxWall" + with fl.flow360_unit_system: + assert HeatFluxWall(heatFlux="exp(x)", velocity=(0, 0, 0)) assert SubsonicOutflowPressure(staticPressureRatio=1).type == "SubsonicOutflowPressure" with pytest.raises(pd.ValidationError): @@ -266,185 +261,181 @@ def test_boundary_types(): with pytest.raises(pd.ValidationError): MassOutflow(massFlowRate=-1) - if Flags.beta_features(): - # Test the turbulence quantities on the boundaries - bc = SubsonicOutflowMach( - name="SomeBC", - Mach=0.2, - turbulence_quantities=TurbulenceQuantities(turbulent_intensity=0.2, viscosity_ratio=10), - ) + # Test the turbulence quantities on the boundaries + bc = SubsonicOutflowMach( + name="SomeBC", + Mach=0.2, + turbulence_quantities=TurbulenceQuantities(turbulent_intensity=0.2, viscosity_ratio=10), + ) - assert bc.turbulence_quantities.turbulent_intensity == 0.2 - assert bc.turbulence_quantities.turbulent_viscosity_ratio == 10 + assert bc.turbulence_quantities.turbulent_intensity == 0.2 + assert bc.turbulence_quantities.turbulent_viscosity_ratio == 10 - bc = SubsonicOutflowPressure( - name="SomeBC", - static_pressure_ratio=0.2, - turbulence_quantities=TurbulenceQuantities(), - ) + bc = SubsonicOutflowPressure( + name="SomeBC", + static_pressure_ratio=0.2, + turbulence_quantities=TurbulenceQuantities(), + ) - assert bc.turbulence_quantities is None + assert bc.turbulence_quantities is None - bc = FreestreamBoundary( - name="SomeBC", - turbulence_quantities=TurbulenceQuantities(viscosity_ratio=14), - ) + bc = FreestreamBoundary( + name="SomeBC", + turbulence_quantities=TurbulenceQuantities(viscosity_ratio=14), + ) - assert bc.turbulence_quantities.turbulent_viscosity_ratio == 14 + assert bc.turbulence_quantities.turbulent_viscosity_ratio == 14 - bc = SubsonicOutflowPressure( - name="SomeBC", - static_pressure_ratio=0.2, - turbulence_quantities=TurbulenceQuantities( - viscosity_ratio=124, turbulent_kinetic_energy=0.2 - ), - ) + bc = SubsonicOutflowPressure( + name="SomeBC", + static_pressure_ratio=0.2, + turbulence_quantities=TurbulenceQuantities( + viscosity_ratio=124, turbulent_kinetic_energy=0.2 + ), + ) - assert bc.turbulence_quantities.turbulent_viscosity_ratio == 124 - assert bc.turbulence_quantities.turbulent_kinetic_energy == 0.2 + assert bc.turbulence_quantities.turbulent_viscosity_ratio == 124 + assert bc.turbulence_quantities.turbulent_kinetic_energy == 0.2 - bc = SubsonicOutflowMach( - name="SomeBC", - Mach=0.2, - turbulence_quantities=TurbulenceQuantities( - specific_dissipation_rate=124, viscosity_ratio=0.2 - ), - ) + bc = SubsonicOutflowMach( + name="SomeBC", + Mach=0.2, + turbulence_quantities=TurbulenceQuantities( + specific_dissipation_rate=124, viscosity_ratio=0.2 + ), + ) - assert bc.turbulence_quantities.specific_dissipation_rate == 124 - assert bc.turbulence_quantities.turbulent_viscosity_ratio == 0.2 + assert bc.turbulence_quantities.specific_dissipation_rate == 124 + assert bc.turbulence_quantities.turbulent_viscosity_ratio == 0.2 - bc = SubsonicInflow( - name="SomeBC", - total_pressure_ratio=0.2, - total_temperature_ratio=0.43, - turbulence_quantities=TurbulenceQuantities( - viscosity_ratio=124, turbulent_length_scale=1.2 - ), - ) + bc = SubsonicInflow( + name="SomeBC", + total_pressure_ratio=0.2, + total_temperature_ratio=0.43, + turbulence_quantities=TurbulenceQuantities(viscosity_ratio=124, turbulent_length_scale=1.2), + ) - assert bc.turbulence_quantities.turbulent_viscosity_ratio == 124 - assert bc.turbulence_quantities.turbulent_length_scale == 1.2 + assert bc.turbulence_quantities.turbulent_viscosity_ratio == 124 + assert bc.turbulence_quantities.turbulent_length_scale == 1.2 - bc = MassInflow( - name="SomeBC", - mass_flow_rate=0.2, - turbulence_quantities=TurbulenceQuantities(modified_viscosity_ratio=1.2), - ) + bc = MassInflow( + name="SomeBC", + mass_flow_rate=0.2, + turbulence_quantities=TurbulenceQuantities(modified_viscosity_ratio=1.2), + ) - assert bc.turbulence_quantities.modified_turbulent_viscosity_ratio == 1.2 + assert bc.turbulence_quantities.modified_turbulent_viscosity_ratio == 1.2 - bc = MassInflow( - name="SomeBC", - mass_flow_rate=0.2, - turbulence_quantities=TurbulenceQuantities(turbulent_intensity=0.2), - ) + bc = MassInflow( + name="SomeBC", + mass_flow_rate=0.2, + turbulence_quantities=TurbulenceQuantities(turbulent_intensity=0.2), + ) - assert bc.turbulence_quantities.turbulent_intensity == 0.2 + assert bc.turbulence_quantities.turbulent_intensity == 0.2 - bc = MassInflow( - name="SomeBC", - mass_flow_rate=0.2, - turbulence_quantities=TurbulenceQuantities(turbulent_kinetic_energy=12.2), - ) + bc = MassInflow( + name="SomeBC", + mass_flow_rate=0.2, + turbulence_quantities=TurbulenceQuantities(turbulent_kinetic_energy=12.2), + ) - assert bc.turbulence_quantities.turbulent_kinetic_energy == 12.2 + assert bc.turbulence_quantities.turbulent_kinetic_energy == 12.2 - bc = MassInflow( - name="SomeBC", - mass_flow_rate=0.2, - turbulence_quantities=TurbulenceQuantities(turbulent_length_scale=1.23), - ) + bc = MassInflow( + name="SomeBC", + mass_flow_rate=0.2, + turbulence_quantities=TurbulenceQuantities(turbulent_length_scale=1.23), + ) - assert bc.turbulence_quantities.turbulent_length_scale == 1.23 + assert bc.turbulence_quantities.turbulent_length_scale == 1.23 - bc = MassOutflow( - name="SomeBC", - mass_flow_rate=0.2, - turbulence_quantities=TurbulenceQuantities(modified_viscosity=1.2), - ) + bc = MassOutflow( + name="SomeBC", + mass_flow_rate=0.2, + turbulence_quantities=TurbulenceQuantities(modified_viscosity=1.2), + ) - assert bc.turbulence_quantities.modified_turbulent_viscosity == 1.2 + assert bc.turbulence_quantities.modified_turbulent_viscosity == 1.2 - bc = MassOutflow( - name="SomeBC", - mass_flow_rate=0.2, - turbulence_quantities=TurbulenceQuantities( - turbulent_intensity=0.88, specific_dissipation_rate=100 - ), - ) + bc = MassOutflow( + name="SomeBC", + mass_flow_rate=0.2, + turbulence_quantities=TurbulenceQuantities( + turbulent_intensity=0.88, specific_dissipation_rate=100 + ), + ) - assert bc.turbulence_quantities.turbulent_intensity == 0.88 - assert bc.turbulence_quantities.specific_dissipation_rate == 100 + assert bc.turbulence_quantities.turbulent_intensity == 0.88 + assert bc.turbulence_quantities.specific_dissipation_rate == 100 - bc = MassOutflow( - name="SomeBC", - mass_flow_rate=0.2, - turbulence_quantities=TurbulenceQuantities( - turbulent_intensity=0.88, turbulent_length_scale=10 - ), - ) + bc = MassOutflow( + name="SomeBC", + mass_flow_rate=0.2, + turbulence_quantities=TurbulenceQuantities( + turbulent_intensity=0.88, turbulent_length_scale=10 + ), + ) - assert bc.turbulence_quantities.turbulent_intensity == 0.88 - assert bc.turbulence_quantities.turbulent_length_scale == 10 + assert bc.turbulence_quantities.turbulent_intensity == 0.88 + assert bc.turbulence_quantities.turbulent_length_scale == 10 - bc = MassOutflow( - name="SomeBC", - mass_flow_rate=0.2, - turbulence_quantities=TurbulenceQuantities( - turbulent_kinetic_energy=0.88, specific_dissipation_rate=10 - ), - ) + bc = MassOutflow( + name="SomeBC", + mass_flow_rate=0.2, + turbulence_quantities=TurbulenceQuantities( + turbulent_kinetic_energy=0.88, specific_dissipation_rate=10 + ), + ) - assert bc.turbulence_quantities.turbulent_kinetic_energy == 0.88 - assert bc.turbulence_quantities.specific_dissipation_rate == 10 + assert bc.turbulence_quantities.turbulent_kinetic_energy == 0.88 + assert bc.turbulence_quantities.specific_dissipation_rate == 10 - bc = MassOutflow( - name="SomeBC", - mass_flow_rate=0.2, - turbulence_quantities=TurbulenceQuantities( - turbulent_kinetic_energy=0.88, specific_dissipation_rate=10 - ), - ) + bc = MassOutflow( + name="SomeBC", + mass_flow_rate=0.2, + turbulence_quantities=TurbulenceQuantities( + turbulent_kinetic_energy=0.88, specific_dissipation_rate=10 + ), + ) + + assert bc.turbulence_quantities.turbulent_kinetic_energy == 0.88 + assert bc.turbulence_quantities.specific_dissipation_rate == 10 + + bc = MassOutflow( + name="SomeBC", + mass_flow_rate=0.2, + turbulence_quantities=TurbulenceQuantities( + turbulent_kinetic_energy=0.88, turbulent_length_scale=10 + ), + ) + + assert bc.turbulence_quantities.turbulent_kinetic_energy == 0.88 + assert bc.turbulence_quantities.turbulent_length_scale == 10 + + bc = MassOutflow( + name="SomeBC", + mass_flow_rate=0.2, + turbulence_quantities=TurbulenceQuantities( + specific_dissipation_rate=0.88, turbulent_length_scale=10 + ), + ) - assert bc.turbulence_quantities.turbulent_kinetic_energy == 0.88 - assert bc.turbulence_quantities.specific_dissipation_rate == 10 + assert bc.turbulence_quantities.specific_dissipation_rate == 0.88 + assert bc.turbulence_quantities.turbulent_length_scale == 10 - bc = MassOutflow( + with pytest.raises(ValueError): + MassOutflow( name="SomeBC", mass_flow_rate=0.2, turbulence_quantities=TurbulenceQuantities( - turbulent_kinetic_energy=0.88, turbulent_length_scale=10 + specific_dissipation_rate=0.88, modified_viscosity=10 ), ) - assert bc.turbulence_quantities.turbulent_kinetic_energy == 0.88 - assert bc.turbulence_quantities.turbulent_length_scale == 10 - - bc = MassOutflow( + with pytest.raises(ValueError): + MassOutflow( name="SomeBC", mass_flow_rate=0.2, - turbulence_quantities=TurbulenceQuantities( - specific_dissipation_rate=0.88, turbulent_length_scale=10 - ), + turbulence_quantities=TurbulenceQuantities(specific_dissipation_rate=0.88), ) - - if Flags.beta_features(): - assert bc.turbulence_quantities.specific_dissipation_rate == 0.88 - assert bc.turbulence_quantities.turbulent_length_scale == 10 - - with pytest.raises(ValueError): - MassOutflow( - name="SomeBC", - mass_flow_rate=0.2, - turbulence_quantities=TurbulenceQuantities( - specific_dissipation_rate=0.88, modified_viscosity=10 - ), - ) - - with pytest.raises(ValueError): - MassOutflow( - name="SomeBC", - mass_flow_rate=0.2, - turbulence_quantities=TurbulenceQuantities(specific_dissipation_rate=0.88), - ) diff --git a/tests/params/test_solvers.py b/tests/params/test_solvers.py index 96b1e425..d3544089 100644 --- a/tests/params/test_solvers.py +++ b/tests/params/test_solvers.py @@ -15,7 +15,6 @@ TransitionModelSolver, ) from flow360.component.flow360_params.solvers import NavierStokesSolver -from flow360.flags import Flags from tests.utils import compare_to_ref, to_file_from_file_test assertions = unittest.TestCase("__init__") @@ -162,10 +161,7 @@ def test_heat_equation(): assert he - if Flags.beta_features(): - compare_to_ref(he, "../ref/case_params/heat_equation/ref_beta.json", content_only=True) - else: - compare_to_ref(he, "../ref/case_params/heat_equation/ref.json", content_only=True) + compare_to_ref(he, "../ref/case_params/heat_equation/ref.json", content_only=True) with pytest.raises( pd.ValidationError, diff --git a/tests/params/test_validator_cht_solver.py b/tests/params/test_validator_cht_solver.py index 27d9f632..ec8fc97e 100644 --- a/tests/params/test_validator_cht_solver.py +++ b/tests/params/test_validator_cht_solver.py @@ -4,7 +4,6 @@ import pytest import flow360 as fl -from flow360 import Flags from flow360.component.flow360_params.boundaries import ( SolidAdiabaticWall, SolidIsothermalWall, @@ -31,10 +30,7 @@ assertions = unittest.TestCase("__init__") -if Flags.beta_features(): - from flow360.component.flow360_params.solvers import ( - IncompressibleNavierStokesSolver, - ) +from flow360.component.flow360_params.solvers import IncompressibleNavierStokesSolver @pytest.fixture(autouse=True) @@ -202,21 +198,20 @@ def test_cht_solver_has_heat_transfer_zone(): freestream=fl.FreestreamFromMach(Mach=1, temperature=1, mu_ref=1), ) - if Flags.beta_features(): - with pytest.raises( - ValueError, - match="Conjugate heat transfer can not be used with incompressible flow solver.", - ): - with fl.SI_unit_system: - param = Flow360Params( - navier_stokes_solver=IncompressibleNavierStokesSolver(), - volume_zones={ - "blk-1": HeatTransferVolumeZone(thermal_conductivity=0.1), - "blk-2": FluidDynamicsVolumeZone(), - }, - boundaries={}, - freestream=fl.FreestreamFromMach(Mach=1, temperature=1, mu_ref=1), - ) + with pytest.raises( + ValueError, + match="Conjugate heat transfer can not be used with incompressible flow solver.", + ): + with fl.SI_unit_system: + param = Flow360Params( + navier_stokes_solver=IncompressibleNavierStokesSolver(), + volume_zones={ + "blk-1": HeatTransferVolumeZone(thermal_conductivity=0.1), + "blk-2": FluidDynamicsVolumeZone(), + }, + boundaries={}, + freestream=fl.FreestreamFromMach(Mach=1, temperature=1, mu_ref=1), + ) with fl.SI_unit_system: param = Flow360Params( diff --git a/tests/ref/case_params/heat_equation/ref.json b/tests/ref/case_params/heat_equation/ref.json index 382e5269..952a8ee8 100644 --- a/tests/ref/case_params/heat_equation/ref.json +++ b/tests/ref/case_params/heat_equation/ref.json @@ -1,8 +1,8 @@ { "absoluteTolerance": 1e-09, - "linearSolverConfig": { - "maxIterations": 50, - "absoluteTolerance": 1e-10 + "linearSolver": { + "absoluteTolerance": 1e-10, + "maxIterations": 50 }, "equationEvalFrequency": 10, "CFLMultiplier": 1.0, diff --git a/tests/ref/case_params/heat_equation/ref_beta.json b/tests/ref/case_params/heat_equation/ref_beta.json deleted file mode 100644 index 952a8ee8..00000000 --- a/tests/ref/case_params/heat_equation/ref_beta.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "absoluteTolerance": 1e-09, - "linearSolver": { - "absoluteTolerance": 1e-10, - "maxIterations": 50 - }, - "equationEvalFrequency": 10, - "CFLMultiplier": 1.0, - "maxForceJacUpdatePhysicalSteps": 0, - "modelType": "HeatEquation", - "orderOfAccuracy": 2, - "relativeTolerance": 0.001, - "updateJacobianFrequency": 1 -} diff --git a/tests/ref/case_params/params.json b/tests/ref/case_params/params.json index 65a1db31..16e896fb 100644 --- a/tests/ref/case_params/params.json +++ b/tests/ref/case_params/params.json @@ -51,7 +51,7 @@ "numericalDissipationFactor": 1.0, "limitVelocity": false, "limitPressureDensity": false, - "linearSolverConfig": { + "linearSolver": { "maxIterations": 30 }, "modelType": "Compressible" @@ -149,5 +149,5 @@ } } }, - "hash": "50f2961a91287259ea3bb9678212ed0749f12d73e8b1c3a7ffac79322f1f0dd6" + "hash": "1bcb9beab809128a2a13215b9e6fa9adcfa38b8e14a4908d2f3654d4e476243b" } diff --git a/tests/ref/case_params/params.yaml b/tests/ref/case_params/params.yaml index b2a9a8c0..92097292 100644 --- a/tests/ref/case_params/params.yaml +++ b/tests/ref/case_params/params.yaml @@ -21,7 +21,7 @@ geometry: refArea: units: 2*m**2 value: 1.0 -hash: 50f2961a91287259ea3bb9678212ed0749f12d73e8b1c3a7ffac79322f1f0dd6 +hash: 1bcb9beab809128a2a13215b9e6fa9adcfa38b8e14a4908d2f3654d4e476243b navierStokesSolver: CFLMultiplier: 1.0 absoluteTolerance: 1.0e-10 @@ -29,7 +29,7 @@ navierStokesSolver: kappaMUSCL: -1.0 limitPressureDensity: false limitVelocity: false - linearSolverConfig: + linearSolver: maxIterations: 30 maxForceJacUpdatePhysicalSteps: 0 modelType: Compressible diff --git a/tests/ref/case_params/params_beta.json b/tests/ref/case_params/params_beta.json deleted file mode 100644 index 2134441d..00000000 --- a/tests/ref/case_params/params_beta.json +++ /dev/null @@ -1,134 +0,0 @@ -{ - "unitSystem": { - "name": "SI" - }, - "version": "0.2.0b18", - "geometry": { - "refArea": { - "value": 1.15315084119231, - "units": "m**2" - }, - "momentLength": { - "value": [ - 1.47602, - 0.801672958512342, - 1.47602 - ], - "units": "m" - }, - "meshUnit": { - "value": 1.0, - "units": "m" - } - }, - "boundaries": { - "3": { - "type": "Freestream", - "name": "freestream" - }, - "1": { - "type": "NoSlipWall", - "name": "wing" - }, - "2": { - "type": "SlipWall", - "name": "symmetry" - } - }, - "timeStepping": { - "maxPseudoSteps": 2000, - "modelType": "Steady", - "physicalSteps": 1, - "timeStepSize": "inf" - }, - "navierStokesSolver": { - "absoluteTolerance": 1.0e-10, - "relativeTolerance": 0.0, - "CFLMultiplier": 1.0, - "kappaMUSCL": -1.0, - "updateJacobianFrequency": 4, - "equationEvalFrequency": 1, - "maxForceJacUpdatePhysicalSteps": 0, - "orderOfAccuracy": 2, - "numericalDissipationFactor": 1.0, - "linearSolver": { - "maxIterations": 30, - "absoluteTolerance": 1e-10 - }, - "limitVelocity": false, - "limitPressureDensity": false - }, - "freestream": { - "modelType": "FromVelocity", - "alphaAngle": 3.06, - "betaAngle": 0.0, - "velocity": { - "value": 286.0, - "units": "m/s" - } - }, - "surfaceOutput": { - "outputFormat": "tecplot", - "outputFields": [ - "yPlus", - "primitiveVars" - ], - "surfaces": { - "symmetry": { - "outputFields": ["T", "heatFlux"] - }, - "freestream": { - "outputFields": ["Cp", "Mach"] - }, - "wing": { - "outputFields": ["CfVec"] - } - } - }, - "volumeOutput": { - "outputFormat": "tecplot", - "outputFields": [ - "Mach", - "primitiveVars" - ] - }, - "sliceOutput": { - "outputFormat": "tecplot", - "outputFields": [ - "Cp" - ], - "slices": { - "x0": { - "sliceNormal": [ - 1, - 0, - 0 - ], - "sliceOrigin": [ - 0.0, - 0.0, - 0.0 - ], - "outputFields": [ - "Mach" - ] - }, - "y1": { - "sliceNormal": [ - 0, - 1, - 0 - ], - "sliceOrigin": [ - 2.0, - 1.0, - 0.0 - ], - "outputFields": [ - "T" - ] - } - } - }, - "hash": "59598bf304cc69850cbf07d31fc18638cbe0accf2496406294c34f8d947747e2" -} diff --git a/tests/ref/case_params/params_beta.yaml b/tests/ref/case_params/params_beta.yaml deleted file mode 100644 index 0297ab99..00000000 --- a/tests/ref/case_params/params_beta.yaml +++ /dev/null @@ -1,103 +0,0 @@ -boundaries: - '1': - name: wing - type: NoSlipWall - '2': - name: symmetry - type: SlipWall - '3': - name: freestream - type: Freestream -freestream: - alphaAngle: 3.06 - betaAngle: 0.0 - modelType: FromVelocity - velocity: - units: m/s - value: 286.0 -geometry: - meshUnit: - units: m - value: 1.0 - momentLength: - units: m - value: - - 1.47602 - - 0.801672958512342 - - 1.47602 - refArea: - units: m**2 - value: 1.15315084119231 -hash: 59598bf304cc69850cbf07d31fc18638cbe0accf2496406294c34f8d947747e2 -navierStokesSolver: - CFLMultiplier: 1.0 - absoluteTolerance: 1.0e-10 - equationEvalFrequency: 1 - kappaMUSCL: -1.0 - limitPressureDensity: false - limitVelocity: false - linearSolver: - absoluteTolerance: 1.0e-10 - maxIterations: 30 - maxForceJacUpdatePhysicalSteps: 0 - numericalDissipationFactor: 1.0 - orderOfAccuracy: 2 - relativeTolerance: 0.0 - updateJacobianFrequency: 4 -sliceOutput: - outputFields: - - Cp - outputFormat: tecplot - slices: - x0: - outputFields: - - Mach - sliceNormal: - - 1 - - 0 - - 0 - sliceOrigin: - - 0.0 - - 0.0 - - 0.0 - y1: - outputFields: - - T - sliceNormal: - - 0 - - 1 - - 0 - sliceOrigin: - - 2.0 - - 1.0 - - 0.0 -surfaceOutput: - outputFields: - - yPlus - - primitiveVars - outputFormat: tecplot - surfaces: - freestream: - outputFields: - - Cp - - Mach - symmetry: - outputFields: - - T - - heatFlux - wing: - outputFields: - - CfVec -timeStepping: - maxPseudoSteps: 2000 - modelType: Steady - physicalSteps: 1 - timeStepSize: inf -unitSystem: - name: SI -version: 0.2.0b18 -volumeOutput: - outputFields: - - Mach - - primitiveVars - outputFormat: tecplot diff --git a/tests/test_flow360_params.py b/tests/test_flow360_params.py index 2f2dbac3..a2565c46 100644 --- a/tests/test_flow360_params.py +++ b/tests/test_flow360_params.py @@ -11,6 +11,7 @@ from flow360 import units as u from flow360.component.flow360_params.boundaries import ( FreestreamBoundary, + HeatFluxWall, IsothermalWall, MassInflow, MassOutflow, @@ -22,6 +23,7 @@ SubsonicInflow, SubsonicOutflowMach, SubsonicOutflowPressure, + SupersonicInflow, WallFunction, ) from flow360.component.flow360_params.flow360_params import ( @@ -54,16 +56,9 @@ Flow360RuntimeError, Flow360ValidationError, ) -from flow360.flags import Flags from .utils import array_equality_override, compare_to_ref, to_file_from_file_test -if Flags.beta_features(): - from flow360.component.flow360_params.boundaries import ( - HeatFluxWall, - SupersonicInflow, - ) - assertions = unittest.TestCase("__init__") @@ -225,12 +220,8 @@ def test_update_from_multiple_files(): to_file_from_file_test(params) - if Flags.beta_features(): - compare_to_ref(params, "ref/case_params/params_beta.yaml") - compare_to_ref(params, "ref/case_params/params_beta.json", content_only=True) - else: - compare_to_ref(params, "ref/case_params/params.yaml") - compare_to_ref(params, "ref/case_params/params.json", content_only=True) + compare_to_ref(params, "ref/case_params/params.yaml") + compare_to_ref(params, "ref/case_params/params.json", content_only=True) def test_update_from_multiple_files_dont_overwrite():