diff --git a/flow360/component/simulation/outputs/output_fields.py b/flow360/component/simulation/outputs/output_fields.py index f01178317..53f28e485 100644 --- a/flow360/component/simulation/outputs/output_fields.py +++ b/flow360/component/simulation/outputs/output_fields.py @@ -90,6 +90,9 @@ "pressure", "vorticity", "vorticityMagnitude", + "vorticity_x", + "vorticity_y", + "vorticity_z", "wallDistance", "numericalDissipationFactor", "residualHeatSolver", @@ -175,6 +178,13 @@ "mut", "nuHat", "vorticityMagnitude", + "vorticity_x", + "vorticity_y", + "vorticity_z", + "velocity_magnitude", + "velocity_x", + "velocity_y", + "velocity_z", ] AllFieldNames = Literal[CommonFieldNames, SurfaceFieldNames, VolumeFieldNames, IsoSurfaceFieldNames] @@ -253,23 +263,37 @@ def get_unit_for_field(field_name: str): "pressure": { "type": FIELD_TYPE_SCALAR, }, + "vorticity_x": { + "type": FIELD_TYPE_SCALAR, + }, + "vorticity_y": { + "type": FIELD_TYPE_SCALAR, + }, + "vorticity_z": { + "type": FIELD_TYPE_SCALAR, + }, } # Predefined UDF expressions PREDEFINED_UDF_EXPRESSIONS = { - "velocity": "velocity[0] = primitiveVars[1];" - + "velocity[1] = primitiveVars[2];" - + "velocity[2] = primitiveVars[3];", + "velocity": "velocity[0] = primitiveVars[1] * velocityScale;" + + "velocity[1] = primitiveVars[2] * velocityScale;" + + "velocity[2] = primitiveVars[3] * velocityScale;", "velocity_magnitude": "double velocity[3];" + "velocity[0] = primitiveVars[1];" + "velocity[1] = primitiveVars[2];" + "velocity[2] = primitiveVars[3];" - + "velocity_magnitude = magnitude(velocity);", - "velocity_x": "velocity_x = primitiveVars[1];", - "velocity_y": "velocity_y = primitiveVars[2];", - "velocity_z": "velocity_z = primitiveVars[3];", - "pressure": "pressure = primitiveVars[4];", - "wall_shear_stress_magnitude": "wall_shear_stress_magnitude = magnitude(wallShearStress);", + + "velocity_magnitude = magnitude(velocity) * velocityScale;", + "velocity_x": "velocity_x = primitiveVars[1] * velocityScale;", + "velocity_y": "velocity_y = primitiveVars[2] * velocityScale;", + "velocity_z": "velocity_z = primitiveVars[3] * velocityScale;", + "pressure": "double gamma = 1.4;pressure = (usingLiquidAsMaterial) ? " + + "(primitiveVars[4] - 1.0 / gamma) * (velocityScale * velocityScale) : primitiveVars[4];", + "wall_shear_stress_magnitude": "wall_shear_stress_magnitude = " + + "magnitude(wallShearStress) * (velocityScale * velocityScale);", + "vorticity_x": "vorticity_x = (gradPrimitive[3][1] - gradPrimitive[2][2]) * velocityScale;", + "vorticity_y": "vorticity_y = (gradPrimitive[1][2] - gradPrimitive[3][0]) * velocityScale;", + "vorticity_z": "vorticity_z = (gradPrimitive[2][0] - gradPrimitive[1][1]) * velocityScale;", } @@ -377,3 +401,27 @@ def _distribute_shared_output_fields(solver_values: dict, item_names: str): item.output_fields = [] if field not in item.output_fields: item.output_fields.append(field) + + +def append_component_to_output_fields(output_fields: List[str]) -> List[str]: + """ + If "velocity" or "vorticity" is in the list, append their respective magnitude in output + + Parameters: + ----------- + output_fields : List[str] + The list of output fields to modify. + + Returns: + -------- + List[str] + The modified list of output fields with the component appended. + """ + output_fields_with_component = [] + for field in output_fields: + output_fields_with_component.append(field) + if field == "velocity" and "velocity_magnitude" not in output_fields: + output_fields_with_component.append("velocity_magnitude") + if field == "vorticity" and "vorticityMagnitude" not in output_fields: + output_fields_with_component.append("vorticityMagnitude") + return output_fields_with_component diff --git a/flow360/component/simulation/translator/solver_translator.py b/flow360/component/simulation/translator/solver_translator.py index ad8a9a368..1b60180d5 100644 --- a/flow360/component/simulation/translator/solver_translator.py +++ b/flow360/component/simulation/translator/solver_translator.py @@ -45,7 +45,11 @@ PointArray, PointArray2D, ) -from flow360.component.simulation.outputs.output_fields import generate_predefined_udf +from flow360.component.simulation.outputs.output_fields import ( + PREDEFINED_UDF_EXPRESSIONS, + append_component_to_output_fields, + generate_predefined_udf, +) from flow360.component.simulation.outputs.outputs import ( AeroAcousticOutput, Isosurface, @@ -232,7 +236,7 @@ def translate_output_fields( ], ): """Get output fields""" - return {"outputFields": output_model.output_fields.items} + return {"outputFields": append_component_to_output_fields(output_model.output_fields.items)} def surface_probe_setting_translation_func(entity: SurfaceProbeOutput): @@ -352,9 +356,11 @@ def translate_volume_output( # Get outputFields volume_output.update( { - "outputFields": get_global_setting_from_first_instance( - output_params, volume_output_class, "output_fields" - ).model_dump()["items"], + "outputFields": append_component_to_output_fields( + get_global_setting_from_first_instance( + output_params, volume_output_class, "output_fields" + ).model_dump()["items"] + ), } ) return volume_output @@ -525,7 +531,13 @@ def process_output_fields_for_udf(input_params: SimulationParams): if input_params.outputs: for output in input_params.outputs: if hasattr(output, "output_fields") and output.output_fields: - all_field_names.update(output.output_fields.items) + all_field_names.update( + append_component_to_output_fields(output.output_fields.items) + ) + if isinstance(output, IsosurfaceOutput): + for isosurface in output.entities.items: + if isosurface.field in PREDEFINED_UDF_EXPRESSIONS: + all_field_names.add(isosurface.field) if isinstance(input_params.operating_condition, LiquidOperatingCondition): all_field_names.add("velocity_magnitude") diff --git a/tests/simulation/framework/test_unique_list.py b/tests/simulation/framework/test_unique_list.py index 546fc911a..e2e46ed8c 100644 --- a/tests/simulation/framework/test_unique_list.py +++ b/tests/simulation/framework/test_unique_list.py @@ -114,6 +114,9 @@ def test_unique_list(): "'pressure', " "'vorticity', " "'vorticityMagnitude', " + "'vorticity_x', " + "'vorticity_y', " + "'vorticity_z', " "'wallDistance', " "'numericalDissipationFactor', " "'residualHeatSolver', " diff --git a/tests/simulation/outputs/test_output_fields.py b/tests/simulation/outputs/test_output_fields.py index 5ffbb7fbb..d3315b289 100644 --- a/tests/simulation/outputs/test_output_fields.py +++ b/tests/simulation/outputs/test_output_fields.py @@ -24,9 +24,9 @@ def test_generate_field_udf_no_unit(simulation_params): result = generate_predefined_udf("velocity", simulation_params) expected = ( - "velocity[0] = primitiveVars[1];" - "velocity[1] = primitiveVars[2];" - "velocity[2] = primitiveVars[3];" + "velocity[0] = primitiveVars[1] * velocityScale;" + "velocity[1] = primitiveVars[2] * velocityScale;" + "velocity[2] = primitiveVars[3] * velocityScale;" ) assert result == expected @@ -38,9 +38,9 @@ def test_generate_field_udf_with_unit(simulation_params): expected = ( "double velocity[3];" - "velocity[0] = primitiveVars[1];" - "velocity[1] = primitiveVars[2];" - "velocity[2] = primitiveVars[3];" + "velocity[0] = primitiveVars[1] * velocityScale;" + "velocity[1] = primitiveVars[2] * velocityScale;" + "velocity[2] = primitiveVars[3] * velocityScale;" "velocity_m_per_s[0] = velocity[0] * 340.29400580821283;" "velocity_m_per_s[1] = velocity[1] * 340.29400580821283;" "velocity_m_per_s[2] = velocity[2] * 340.29400580821283;" @@ -55,7 +55,7 @@ def test_generate_field_udf_velocity_components(simulation_params): result = generate_predefined_udf("velocity_x_m_per_s", simulation_params) expected = ( "double velocity_x;" - "velocity_x = primitiveVars[1];" + "velocity_x = primitiveVars[1] * velocityScale;" "velocity_x_m_per_s = velocity_x * 340.29400580821283;" ) assert result == expected @@ -63,7 +63,7 @@ def test_generate_field_udf_velocity_components(simulation_params): result = generate_predefined_udf("velocity_y_m_per_s", simulation_params) expected = ( "double velocity_y;" - "velocity_y = primitiveVars[2];" + "velocity_y = primitiveVars[2] * velocityScale;" "velocity_y_m_per_s = velocity_y * 340.29400580821283;" ) assert result == expected @@ -71,7 +71,7 @@ def test_generate_field_udf_velocity_components(simulation_params): result = generate_predefined_udf("velocity_z_m_per_s", simulation_params) expected = ( "double velocity_z;" - "velocity_z = primitiveVars[3];" + "velocity_z = primitiveVars[3] * velocityScale;" "velocity_z_m_per_s = velocity_z * 340.29400580821283;" ) assert result == expected @@ -86,7 +86,7 @@ def test_generate_field_velocity_magnitude_no_unit(simulation_params): "velocity[0] = primitiveVars[1];" "velocity[1] = primitiveVars[2];" "velocity[2] = primitiveVars[3];" - "velocity_magnitude = magnitude(velocity);" + "velocity_magnitude = magnitude(velocity) * velocityScale;" ) assert result == expected @@ -101,7 +101,7 @@ def test_generate_field_udf_velocity_magnitude(simulation_params): "velocity[0] = primitiveVars[1];" "velocity[1] = primitiveVars[2];" "velocity[2] = primitiveVars[3];" - "velocity_magnitude = magnitude(velocity);" + "velocity_magnitude = magnitude(velocity) * velocityScale;" "velocity_magnitude_m_per_s = velocity_magnitude * 340.29400580821283;" ) assert result == expected @@ -111,7 +111,7 @@ def test_generate_field_pressure_no_unit(simulation_params): """Test generating UDF expression for pressure fields.""" result = generate_predefined_udf("pressure", simulation_params) - expected = "pressure = primitiveVars[4];" + expected = "double gamma = 1.4;pressure = (usingLiquidAsMaterial) ? (primitiveVars[4] - 1.0 / gamma) * (velocityScale * velocityScale) : primitiveVars[4];" assert result == expected @@ -120,8 +120,8 @@ def test_generate_field_udf_pressure(simulation_params): result = generate_predefined_udf("pressure_pa", simulation_params) expected = ( - "double pressure;" - "pressure = primitiveVars[4];" + "double pressure;double gamma = 1.4;" + "pressure = (usingLiquidAsMaterial) ? (primitiveVars[4] - 1.0 / gamma) * (velocityScale * velocityScale) : primitiveVars[4];" "pressure_pa = pressure * 141855.012726525;" ) assert result == expected @@ -131,7 +131,7 @@ def test_genereate_field_wall_shear_stress_no_unit(simulation_params): """Test generating UDF expression for wall shear stress fields.""" result = generate_predefined_udf("wall_shear_stress_magnitude", simulation_params) - expected = "wall_shear_stress_magnitude = magnitude(wallShearStress);" + expected = "wall_shear_stress_magnitude = magnitude(wallShearStress) * (velocityScale * velocityScale);" assert result == expected @@ -141,7 +141,7 @@ def test_generate_field_udf_wall_shear_stress(simulation_params): result = generate_predefined_udf("wall_shear_stress_magnitude_pa", simulation_params) expected = ( "double wall_shear_stress_magnitude;" - "wall_shear_stress_magnitude = magnitude(wallShearStress);" + "wall_shear_stress_magnitude = magnitude(wallShearStress) * (velocityScale * velocityScale);" "wall_shear_stress_magnitude_pa = wall_shear_stress_magnitude * 141855.012726525;" ) assert result == expected @@ -150,7 +150,7 @@ def test_generate_field_udf_wall_shear_stress(simulation_params): def test_generate_field_udf_precedence(simulation_params): """Test that longer matching keys take precedence.""" result = generate_predefined_udf("velocity_x", simulation_params) - expected = "velocity_x = primitiveVars[1];" + expected = "velocity_x = primitiveVars[1] * velocityScale;" assert result == expected diff --git a/tests/simulation/translator/ref/Flow360_TurbFlatPlate137x97_BoxTrip.json b/tests/simulation/translator/ref/Flow360_TurbFlatPlate137x97_BoxTrip.json index a872c5227..a4b01ed10 100644 --- a/tests/simulation/translator/ref/Flow360_TurbFlatPlate137x97_BoxTrip.json +++ b/tests/simulation/translator/ref/Flow360_TurbFlatPlate137x97_BoxTrip.json @@ -166,6 +166,7 @@ "primitiveVars", "residualNavierStokes", "vorticity", + "vorticityMagnitude", "solutionTurbulence", "mutRatio", "solutionTransition" @@ -181,9 +182,9 @@ "v": "v", "w": "w" }, - "userDefinedFields":[], + "userDefinedFields": [], "usingLiquidAsMaterial": false, "outputRescale": { "velocityScale": 1.0 } -} +} \ No newline at end of file diff --git a/tests/simulation/translator/ref/Flow360_liquid.json b/tests/simulation/translator/ref/Flow360_liquid.json index 527aa4e8e..c13b5b1d9 100644 --- a/tests/simulation/translator/ref/Flow360_liquid.json +++ b/tests/simulation/translator/ref/Flow360_liquid.json @@ -90,7 +90,7 @@ }, "userDefinedFields": [ { - "expression": "double velocity[3];velocity[0] = primitiveVars[1];velocity[1] = primitiveVars[2];velocity[2] = primitiveVars[3];velocity_magnitude = magnitude(velocity);", + "expression": "double velocity[3];velocity[0] = primitiveVars[1];velocity[1] = primitiveVars[2];velocity[2] = primitiveVars[3];velocity_magnitude = magnitude(velocity) * velocityScale;", "name": "velocity_magnitude" } ], diff --git a/tests/simulation/translator/ref/Flow360_liquid_rotation_dd.json b/tests/simulation/translator/ref/Flow360_liquid_rotation_dd.json index 84567969a..26b68cb99 100644 --- a/tests/simulation/translator/ref/Flow360_liquid_rotation_dd.json +++ b/tests/simulation/translator/ref/Flow360_liquid_rotation_dd.json @@ -90,7 +90,7 @@ }, "userDefinedFields": [ { - "expression": "double velocity[3];velocity[0] = primitiveVars[1];velocity[1] = primitiveVars[2];velocity[2] = primitiveVars[3];velocity_magnitude = magnitude(velocity);", + "expression": "double velocity[3];velocity[0] = primitiveVars[1];velocity[1] = primitiveVars[2];velocity[2] = primitiveVars[3];velocity_magnitude = magnitude(velocity) * velocityScale;", "name": "velocity_magnitude" } ], diff --git a/tests/simulation/translator/ref/Flow360_om6Wing.json b/tests/simulation/translator/ref/Flow360_om6Wing.json index 277d5c3ed..a6d835bfb 100644 --- a/tests/simulation/translator/ref/Flow360_om6Wing.json +++ b/tests/simulation/translator/ref/Flow360_om6Wing.json @@ -64,6 +64,7 @@ "outputFields": [ "primitiveVars", "vorticity", + "vorticityMagnitude", "T", "s", "Cp", diff --git a/tests/simulation/translator/ref/Flow360_om6Wing_debug_point.json b/tests/simulation/translator/ref/Flow360_om6Wing_debug_point.json index 1301db270..97a53a146 100644 --- a/tests/simulation/translator/ref/Flow360_om6Wing_debug_point.json +++ b/tests/simulation/translator/ref/Flow360_om6Wing_debug_point.json @@ -69,6 +69,7 @@ "outputFields": [ "primitiveVars", "vorticity", + "vorticityMagnitude", "T", "s", "Cp", @@ -189,4 +190,4 @@ "outputRescale": { "velocityScale": 1.0 } -} +} \ No newline at end of file diff --git a/tests/simulation/translator/ref/Flow360_om6Wing_debug_type.json b/tests/simulation/translator/ref/Flow360_om6Wing_debug_type.json index 889dd2d5f..1a1fa9e08 100644 --- a/tests/simulation/translator/ref/Flow360_om6Wing_debug_type.json +++ b/tests/simulation/translator/ref/Flow360_om6Wing_debug_type.json @@ -65,6 +65,7 @@ "outputFields": [ "primitiveVars", "vorticity", + "vorticityMagnitude", "T", "s", "Cp", diff --git a/tests/simulation/translator/ref/Flow360_om6wing_FS_with_turbulence_quantities.json b/tests/simulation/translator/ref/Flow360_om6wing_FS_with_turbulence_quantities.json index 990dfb703..5b7a47d09 100644 --- a/tests/simulation/translator/ref/Flow360_om6wing_FS_with_turbulence_quantities.json +++ b/tests/simulation/translator/ref/Flow360_om6wing_FS_with_turbulence_quantities.json @@ -67,6 +67,7 @@ "outputFields": [ "primitiveVars", "vorticity", + "vorticityMagnitude", "T", "s", "Cp", diff --git a/tests/simulation/translator/ref/Flow360_om6wing_FS_with_vel.json b/tests/simulation/translator/ref/Flow360_om6wing_FS_with_vel.json index df6156825..81a83901e 100644 --- a/tests/simulation/translator/ref/Flow360_om6wing_FS_with_vel.json +++ b/tests/simulation/translator/ref/Flow360_om6wing_FS_with_vel.json @@ -69,6 +69,7 @@ "outputFields": [ "primitiveVars", "vorticity", + "vorticityMagnitude", "T", "s", "Cp", diff --git a/tests/simulation/translator/ref/Flow360_om6wing_FS_with_vel_expression.json b/tests/simulation/translator/ref/Flow360_om6wing_FS_with_vel_expression.json index 8ae3cbd49..685359708 100644 --- a/tests/simulation/translator/ref/Flow360_om6wing_FS_with_vel_expression.json +++ b/tests/simulation/translator/ref/Flow360_om6wing_FS_with_vel_expression.json @@ -69,6 +69,7 @@ "outputFields": [ "primitiveVars", "vorticity", + "vorticityMagnitude", "T", "s", "Cp", diff --git a/tests/simulation/translator/ref/Flow360_om6wing_SA_with_modified_C_w2.json b/tests/simulation/translator/ref/Flow360_om6wing_SA_with_modified_C_w2.json index e30233dd3..7bd85557f 100644 --- a/tests/simulation/translator/ref/Flow360_om6wing_SA_with_modified_C_w2.json +++ b/tests/simulation/translator/ref/Flow360_om6wing_SA_with_modified_C_w2.json @@ -64,6 +64,7 @@ "outputFields": [ "primitiveVars", "vorticity", + "vorticityMagnitude", "T", "s", "Cp", diff --git a/tests/simulation/translator/ref/Flow360_om6wing_SST_with_modified_C_sigma_omega1.json b/tests/simulation/translator/ref/Flow360_om6wing_SST_with_modified_C_sigma_omega1.json index 3019eca1f..ac648b66b 100644 --- a/tests/simulation/translator/ref/Flow360_om6wing_SST_with_modified_C_sigma_omega1.json +++ b/tests/simulation/translator/ref/Flow360_om6wing_SST_with_modified_C_sigma_omega1.json @@ -64,6 +64,7 @@ "outputFields": [ "primitiveVars", "vorticity", + "vorticityMagnitude", "T", "s", "Cp", diff --git a/tests/simulation/translator/ref/Flow360_porous_media_box.json b/tests/simulation/translator/ref/Flow360_porous_media_box.json index 5b5f180a6..a6b5afe34 100644 --- a/tests/simulation/translator/ref/Flow360_porous_media_box.json +++ b/tests/simulation/translator/ref/Flow360_porous_media_box.json @@ -26,8 +26,7 @@ "alphaAngle": 0.0, "betaAngle": 0.0 }, - "geometry": { - }, + "geometry": {}, "navierStokesSolver": { "CFLMultiplier": 1.0, "absoluteTolerance": 1e-10, @@ -176,6 +175,7 @@ "outputFields": [ "primitiveVars", "vorticity", + "vorticityMagnitude", "residualNavierStokes", "T", "s", @@ -194,9 +194,9 @@ "v": "v", "w": "w" }, - "userDefinedFields":[], + "userDefinedFields": [], "usingLiquidAsMaterial": false, "outputRescale": { "velocityScale": 1.0 } -} +} \ No newline at end of file diff --git a/tests/simulation/translator/ref/Flow360_porous_media_volume_zone.json b/tests/simulation/translator/ref/Flow360_porous_media_volume_zone.json index 3d116966a..aca71b3fe 100644 --- a/tests/simulation/translator/ref/Flow360_porous_media_volume_zone.json +++ b/tests/simulation/translator/ref/Flow360_porous_media_volume_zone.json @@ -26,8 +26,7 @@ "alphaAngle": 0.0, "betaAngle": 0.0 }, - "geometry": { - }, + "geometry": {}, "navierStokesSolver": { "CFLMultiplier": 1.0, "absoluteTolerance": 1e-10, @@ -138,6 +137,7 @@ "outputFields": [ "primitiveVars", "vorticity", + "vorticityMagnitude", "residualNavierStokes", "T", "s", @@ -185,9 +185,9 @@ "v": "v", "w": "w" }, - "userDefinedFields":[], + "userDefinedFields": [], "usingLiquidAsMaterial": false, "outputRescale": { "velocityScale": 1.0 } -} +} \ No newline at end of file diff --git a/tests/simulation/translator/test_output_translation.py b/tests/simulation/translator/test_output_translation.py index 9734a42b2..605607b0e 100644 --- a/tests/simulation/translator/test_output_translation.py +++ b/tests/simulation/translator/test_output_translation.py @@ -48,7 +48,7 @@ def volume_output_config(): frequency=1, frequency_offset=2, output_format="both", - output_fields=["primitiveVars", "betMetrics", "qcriterion"], + output_fields=["primitiveVars", "betMetrics", "qcriterion", "velocity", "vorticity"], ), { "animationFrequency": 1, @@ -56,7 +56,15 @@ def volume_output_config(): "animationFrequencyTimeAverage": -1, "animationFrequencyTimeAverageOffset": 0, "computeTimeAverages": False, - "outputFields": ["primitiveVars", "betMetrics", "qcriterion"], + "outputFields": [ + "primitiveVars", + "betMetrics", + "qcriterion", + "velocity", + "velocity_magnitude", + "vorticity", + "vorticityMagnitude", + ], "outputFormat": "paraview,tecplot", "startAverageIntegrationStep": -1, }, @@ -70,7 +78,7 @@ def avg_volume_output_config(): frequency=11, frequency_offset=12, output_format="both", - output_fields=["primitiveVars", "betMetrics", "qcriterion"], + output_fields=["primitiveVars", "betMetrics", "qcriterion", "velocity", "vorticity"], start_step=1, ), { @@ -79,7 +87,15 @@ def avg_volume_output_config(): "animationFrequencyTimeAverage": 11, "animationFrequencyTimeAverageOffset": 12, "computeTimeAverages": True, - "outputFields": ["primitiveVars", "betMetrics", "qcriterion"], + "outputFields": [ + "primitiveVars", + "betMetrics", + "qcriterion", + "velocity", + "velocity_magnitude", + "vorticity", + "vorticityMagnitude", + ], "outputFormat": "paraview,tecplot", "startAverageIntegrationStep": 1, }, @@ -121,7 +137,15 @@ def test_volume_output(volume_output_config, avg_volume_output_config): "animationFrequencyTimeAverage": 11, "animationFrequencyTimeAverageOffset": 12, "computeTimeAverages": True, - "outputFields": ["primitiveVars", "betMetrics", "qcriterion"], + "outputFields": [ + "primitiveVars", + "betMetrics", + "qcriterion", + "velocity", + "velocity_magnitude", + "vorticity", + "vorticityMagnitude", + ], "outputFormat": "paraview,tecplot", "startAverageIntegrationStep": 1, } @@ -144,7 +168,7 @@ def surface_output_config(): entities=[Surface(name="surface11"), Surface(name="surface22")], frequency=123, frequency_offset=321, - output_fields=["T"], + output_fields=["T", "velocity", "vorticity"], output_format="tecplot", ), ], @@ -159,9 +183,25 @@ def surface_output_config(): "startAverageIntegrationStep": -1, "surfaces": { "surface1": {"outputFields": ["Cp"]}, - "surface11": {"outputFields": ["T"]}, + "surface11": { + "outputFields": [ + "T", + "velocity", + "velocity_magnitude", + "vorticity", + "vorticityMagnitude", + ] + }, "surface2": {"outputFields": ["Cp"]}, - "surface22": {"outputFields": ["T"]}, + "surface22": { + "outputFields": [ + "T", + "velocity", + "velocity_magnitude", + "vorticity", + "vorticityMagnitude", + ] + }, }, "writeSingleFile": False, }, @@ -212,9 +252,25 @@ def test_surface_output( "startAverageIntegrationStep": -1, "surfaces": { "surface1": {"outputFields": ["Cp"]}, - "surface11": {"outputFields": ["T"]}, + "surface11": { + "outputFields": [ + "T", + "velocity", + "velocity_magnitude", + "vorticity", + "vorticityMagnitude", + ] + }, "surface2": {"outputFields": ["Cp"]}, - "surface22": {"outputFields": ["T"]}, + "surface22": { + "outputFields": [ + "T", + "velocity", + "velocity_magnitude", + "vorticity", + "vorticityMagnitude", + ] + }, "surface3": {"outputFields": ["T"]}, }, "writeSingleFile": False, @@ -239,7 +295,7 @@ def sliceoutput_config(): origin=(0.12, 0.13, 0.14) * u.m, ), ], - output_fields=["Cp"], + output_fields=["Cp", "velocity", "vorticity", "vorticityMagnitude"], frequency=33, frequency_offset=22, output_format="tecplot", @@ -284,12 +340,24 @@ def sliceoutput_config(): "sliceOrigin": [6.12, 6.13, 6.14], }, "slice10": { - "outputFields": ["Cp"], + "outputFields": [ + "Cp", + "velocity", + "velocity_magnitude", + "vorticity", + "vorticityMagnitude", + ], "sliceNormal": [0.0, 1.0, 0.0], "sliceOrigin": [0.02, 0.03, 0.04], }, "slice20": { - "outputFields": ["Cp"], + "outputFields": [ + "Cp", + "velocity", + "velocity_magnitude", + "vorticity", + "vorticityMagnitude", + ], "sliceNormal": [0.6, 0.8, 0.0], "sliceOrigin": [0.12, 0.13, 0.14], }, @@ -327,6 +395,16 @@ def isosurface_output_config(): iso_value=20.431, field="qcriterion", ), + Isosurface( + name="isosurface 15", + iso_value=0.1, + field="velocity_x", + ), + Isosurface( + name="isosurface 16", + iso_value=0.2, + field="vorticity_z", + ), ], output_fields=["Cp"], frequency=332, @@ -376,6 +454,16 @@ def isosurface_output_config(): "surfaceField": "qcriterion", "surfaceFieldMagnitude": 20.431, }, + "isosurface 15": { + "outputFields": ["Cp"], + "surfaceField": "velocity_x", + "surfaceFieldMagnitude": 0.1, + }, + "isosurface 16": { + "outputFields": ["Cp"], + "surfaceField": "vorticity_z", + "surfaceFieldMagnitude": 0.2, + }, }, "outputFields": [], "outputFormat": "paraview", @@ -1063,6 +1151,11 @@ def test_dimensioned_output_fields_translation(): entities=[Slice(name="my_slice", origin=[0, 0, 0], normal=(0, 1, 0))], output_fields=["my_field"], ), + IsosurfaceOutput( + name="my_isosurface", + entities=Isosurface(name="my_isosurface", iso_value=0.5, field="vorticity_y"), + output_fields=["my_field"], + ), ], user_defined_fields=[ UserDefinedField( @@ -1170,6 +1263,10 @@ def test_dimensioned_output_fields_translation(): "name": "my_field", "expression": "1+1", }, + { + "expression": "vorticity_y = gradPrimitive[1][2] - gradPrimitive[3][0];", + "name": "vorticity_y", + }, ] }