# 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
, orboth
- 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
orfalse
- 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 frictionCf
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 andyPlus
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 fromCp
.
How do I reduce the size of my output files?
Large output files can be unwieldy. To reduce their size:
- Limit output frequency: Use larger values for
frequency
to save outputs less often- Select only necessary fields: Choose only the specific fields needed for your analysis
- Limit surface selection: Include only surfaces relevant to your analysis
- 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:
- Skin friction vector (
CfVec
): Separation occurs where the streamwise component becomes negative- Surface streamlines: Use ParaView to create streamlines from the
CfVec
field to visualize separation patterns- Pressure coefficient (
Cp
): Look for plateau regions or sudden changes in the pressure distributionFor 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:
- Calculate the number of iterations corresponding to your desired physical time interval
- Set the
frequency
parameter accordingly- 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]
)