# Surface Output

Surface Output in Flow360 lets you visualize flow field variables on the surfaces of your geometry or volume mesh. This is essential for analyzing boundary layer effects, surface pressure distributions, heat transfer, and other surface-related phenomena.


# πŸ“‹ Available Options

Option Description Unit
Name A descriptive name for the output
Output Format Format for saving output data
Surfaces Boundary surfaces to include in the output
Output Fields Flow variables to include in the output
Frequency How often to save outputs number of time steps
Frequency Offset The time step at which to start the output time step
Write Single File Option to write all surfaces to a single file

# πŸ” Detailed Descriptions

# Name

A user-defined name to identify this specific surface output configuration.

  • Default: Surface output
  • Example: Wing pressure distribution
  • Notes: Choose descriptive names to easily identify outputs when reviewing results.

# Output Format

The file format in which surface data will be saved.

  • Default: paraview
  • Options: paraview, tecplot, or both
  • Notes: The Paraview format is saved as .vtu files and Tecplot as .dat files.

# Surfaces

The boundary surfaces from your mesh that will be included in this output.

  • Default: None (user must select at least one surface)
  • Example: wing, fuselage, nacelles
  • Notes: Select all appropriate surfaces needed for your analysis.

# Output Fields

The flow variables that will be included in the surface output files.

  • Default: None (user must select at least one field)
  • Example: Cp, Cf, Mach
  • Notes: Select only the fields you need to keep file sizes manageable.

# Frequency

Controls how often surface output files are saved during the simulation.

  • Default: -1 (only at the end of simulation)
  • Example: 100 (save every 100 time steps)
  • Notes: For steady simulations, use -1 to only output at convergence.

# Frequency Offset

Specifies the time step at which to begin recording surface outputs.

  • Default: 0 (start at beginning of simulation)
  • Example: 1000 (start at time step 1000)
  • Notes: Useful when restarting simulations or skipping initial transients.

# Write Single File

When enabled, all surface outputs are written to a single file instead of separate files for each surface.

  • Default: false
  • Options: true or false
  • Notes: Currently only supported for Tecplot format.

# πŸ“Š Available Output Fields

# Universal Variables

  • Cp - Coefficient of pressure (non-dimensional)
  • Cpt - Coefficient of total pressure (non-dimensional)
  • gradW - Gradient of primitive solution (non-dimensional)
  • kOmega - k and omega (non-dimensional)
  • Mach - Mach number (non-dimensional)
  • mut - Turbulent viscosity (non-dimensional)
  • mutRatio - Turbulent viscosity and freestream dynamic viscosity ratio (non-dimensional)
  • nuHat - Spalart-Almaras variable (non-dimensional)
  • primitiveVars - Density, velocities (u,v,w), and pressure (non-dimensional)
  • qcriterion - Q criterion (non-dimensional)
  • residualNavierStokes - N-S residual (non-dimensional)
  • residualTransition - Transition residual (non-dimensional)
  • residualTurbulence - Turbulence residual (non-dimensional)
  • s - Entropy (non-dimensional)
  • solutionNavierStokes - N-S solution (non-dimensional)
  • solutionTransition - Transition solution (non-dimensional)
  • solutionTurbulence - Turbulence solution (non-dimensional)
  • T - Temperature (non-dimensional)
  • velocity - Velocity vector (non-dimensional)
  • velocity_x - X-component of velocity (non-dimensional)
  • velocity_y - Y-component of velocity (non-dimensional)
  • velocity_z - Z-component of velocity (non-dimensional)
  • velocity_magnitude - Magnitude of velocity vector (non-dimensional)
  • pressure - Pressure (non-dimensional)
  • vorticity - Vorticity (non-dimensional)
  • vorticityMagnitude - Vorticity Magnitude (non-dimensional)
  • wallDistance - Wall distance (non-dimensional)
  • numericalDissipationFactor - NumericalDissipationFactor sensor (non-dimensional)
  • residualHeatSolver - Heat equation residual (non-dimensional)
  • VelocityRelative - Velocity with respect to non-inertial frame (non-dimensional)
  • lowMachPreconditionerSensor - Low-Mach preconditioner factor (non-dimensional)

# Dimensioned Variables

  • velocity_m_per_s - Velocity vector (in m/s)
  • velocity_x_m_per_s - X-component of velocity (in m/s)
  • velocity_y_m_per_s - Y-component of velocity (in m/s)
  • velocity_z_m_per_s - Z-component of velocity (in m/s)
  • velocity_magnitude_m_per_s - Magnitude of velocity vector (in m/s)
  • pressure_pa - Pressure (in Pa)

# Surface-Specific Variables

  • CfVec - Skin friction coefficient vector (non-dimensional)
  • Cf - Magnitude of skin friction coefficient (non-dimensional)
  • heatFlux - Non-dimensional heat flux (non-dimensional)
  • nodeNormals - Wall normals (non-dimensional)
  • nodeForcesPerUnitArea - Forces per unit area (non-dimensional)
  • yPlus - Non-dimensional wall distance (non-dimensional)
  • wallFunctionMetric - Wall function metrics (non-dimensional)
  • heatTransferCoefficientStaticTemperature - Surface heat transfer coefficient (static temperature as reference) (non-dimensional)
  • heatTransferCoefficientTotalTemperature - Surface heat transfer coefficient (total temperature as reference) (non-dimensional)
  • wall_shear_stress_magnitude - Wall shear stress magnitude (non-dimensional)
  • wall_shear_stress_magnitude_pa - Wall shear stress magnitude (in Pa) [Recommended method, available since version 25.2]

πŸ’‘ Tips

# Key Surface Output Fields for Analysis

Pressure Coefficient (Cp)

The pressure coefficient is one of the most important surface fields for analyzing aerodynamic performance:

  • It shows the distribution of pressure on the surface relative to freestream conditions
  • Negative values indicate suction (lower than freestream pressure)
  • Positive values indicate pressure (higher than freestream pressure)
  • For aircraft analysis, compare upper and lower surface Cp to understand lift generation
  • Rapid changes in Cp can indicate shock waves or separation points

To calculate the dimensional pressure from Cp:

p (N/mΒ²) = Cp Γ— (1/2)ρ∞ Γ— U_refΒ² + p∞

Skin Friction Coefficient (Cf, CfVec)

The skin friction coefficient is critical for analyzing boundary layer behavior:

  • CfVec provides both magnitude and direction of skin friction
  • Cf gives only the magnitude
  • Useful for identifying:
    • Regions of high skin friction (and thus drag)
    • Boundary layer separation points
    • Flow reversal areas

Visualization techniques:

  • Color surface by the streamwise component of CfVec (e.g., CfVecX for flow primarily in the x-direction)
  • Use a 3-level color scale centered at zero to easily identify attached flow (positive values) and separated flow (negative values)
  • Create surface streamlines based on the CfVec field instead of velocity to visualize surface flow patterns

For dimensional wall shear stress, use the wall_shear_stress_magnitude_pa field which provides values directly in Pascals (N/mΒ²), eliminating the need for manual conversion. This feature is available since Flow360 version 25.2.

Node Forces Per Unit Area

The nodeForcesPerUnitArea field represents the force (pressure + friction) applied at each surface node divided by the surface area attributed to that node. This field is particularly useful for:

  • Calculating sectional loading values
  • Analyzing pressure and shear force distribution
  • Identifying areas of high loading

When integrated over the entire surface, this field equals the total forces acting on the surface.

# Visualization Tips

  • For pressure analysis: Use Cp with a consistent color scale across different configurations for valid comparisons
  • For boundary layer analysis: Use CfVec components and yPlus together
  • For separation detection: Create surface streamlines using CfVec or look for negative streamwise component values
  • For heat transfer analysis: Use heatFlux and heat transfer coefficient fields

❓ Frequently Asked Questions

How do I visualize only specific surfaces in my output?

Use the entities parameter (alias: surfaces) to specify exactly which surfaces you want to include. You can use both specific surface names or pattern matching:

# Specific surfaces
fl.SurfaceOutput(
    entities=[volume_mesh["wing_left"], volume_mesh["wing_right"]]
)

# Pattern matching for all wing surfaces
fl.SurfaceOutput(
    entities=[volume_mesh["wing*"]]
)

In the GUI, select the specific surfaces from the boundary list.

What's the difference between non-dimensional and dimensional output fields?

  • Non-dimensional fields (e.g., Cp, Mach, velocity) are normalized using reference values and are useful for comparing different simulations.

  • Dimensional fields (e.g., pressure_pa, velocity_m_per_s) provide results in physical units, making it easier to compare with experimental data or understand absolute magnitudes.

For convenience, we recommend using dimensional fields when absolute values are important. For example, pressure_pa provides pressure directly in Pascals rather than requiring manual conversion from Cp.

How do I reduce the size of my output files?

Large output files can be unwieldy. To reduce their size:

  1. Limit output frequency: Use larger values for frequency to save outputs less often
  2. Select only necessary fields: Choose only the specific fields needed for your analysis
  3. Limit surface selection: Include only surfaces relevant to your analysis
  4. Use time-averaged outputs: For unsteady simulations, consider using time-averaged outputs instead of saving every timestep

How can I detect flow separation on surfaces?

Flow separation can be detected using:

  1. Skin friction vector (CfVec): Separation occurs where the streamwise component becomes negative
  2. Surface streamlines: Use ParaView to create streamlines from the CfVec field to visualize separation patterns
  3. Pressure coefficient (Cp): Look for plateau regions or sudden changes in the pressure distribution

For detailed separation analysis, create a color map of the streamwise component of CfVec with a 3-level scale (blue for negative/separation, white for zero, red for positive/attached flow).

Can I output surface data at specific physical times instead of iterations?

The frequency parameter refers to iteration counts, not physical time. For time-accurate simulations:

  1. Calculate the number of iterations corresponding to your desired physical time interval
  2. Set the frequency parameter accordingly
  3. For a more direct approach, you can use a monitor point to trigger a custom output at specific physical times using a script that interacts with the Flow360 API

🐍 Python API Example

# Basic Surface Output

The following example shows how to set up surface output to visualize pressure and skin friction on aircraft wings:

# Define a surface output for all wing surfaces
wing_output = fl.SurfaceOutput(
    name="Wing Surface Analysis",                      # Descriptive name
    entities=[volume_mesh["wing*"]],                   # All surfaces matching "wing*" pattern 
    output_format="paraview",                          # Output in ParaView (.vtu) format
    output_fields=["Cp", "Cf", "Mach", "pressure_pa"], # Include both non-dim and dimensional fields
    frequency=100,                                     # Save every 100 steps
    frequency_offset=0                                 # Start from beginning
)

# Define a body surface output with less frequent saving
body_output = fl.SurfaceOutput(
    name="Body Surface Analysis",
    entities=[volume_mesh["fuselage"], volume_mesh["nacelles"]],  
    output_format="both",                              # Save in both ParaView and Tecplot formats
    output_fields=["Cp", "yPlus", "wallDistance"],     # Fields for boundary layer analysis
    frequency=500,                                     # Save less frequently
    write_single_file=True                             # Write all surfaces to a single file (Tecplot only)
)

# Include in simulation parameters
simulation_params = fl.SimulationParams(
    # ... other parameters ...
    outputs=[wing_output, body_output]
)

# Submit through project interface
project.submit_simulation(simulation_params)

# Time-Averaged Surface Output

For unsteady simulations where time-averaged results are important:

# Define time-averaged surface output
avg_surface_output = fl.TimeAverageSurfaceOutput(
    name="Time-Averaged Wing Analysis",
    entities=[volume_mesh["wing*"]],  
    output_format="paraview",
    output_fields=["Cp", "CfVec", "nodeForcesPerUnitArea"],
    start_step=1000,                  # Start averaging from step 1000
    frequency=500,                    # Output averaged results every 500 steps
    frequency_offset=1500             # Start saving outputs at step 1500
)

# Include in simulation parameters 
simulation_params = fl.SimulationParams(
    # ... other parameters ...
    outputs=[avg_surface_output]
)

# Custom Surface Output with User-Defined Field

Creating a custom output field and using it in surface output:

# Define a custom output field
custom_field = fl.UserDefinedField(
    name="PressureForce",
    expression="double prel = primitiveVars[4] - pressureFreestream; "
               + "PressureForce[0] = prel * nodeNormals[0]; "
               + "PressureForce[1] = prel * nodeNormals[1]; "
               + "PressureForce[2] = prel * nodeNormals[2];"
)

# Surface output with custom field
custom_output = fl.SurfaceOutput(
    name="Custom Surface Analysis",
    entities=[volume_mesh["wing*"]],
    output_format="paraview",
    output_fields=["Cp", "PressureForce"]  # Include the custom field
)

# Include in simulation parameters
simulation_params = fl.SimulationParams(
    # ... other parameters ...
    user_defined_fields=[custom_field],
    outputs=[custom_output]
)