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 |
Applicable |
|---|---|---|
Output fields |
Flow variables to include in the output |
always |
Output format |
Format for saving output data |
always |
Write single file |
Option to write all surfaces to a single file |
always |
Save interval |
When to save outputs |
always |
Frequency |
How often to save outputs |
when Save interval is |
Frequency offset |
The time step at which to start the output |
when Save interval is |
Assigned boundaries |
Boundary surfaces to include in the output |
always |
Global Time Stepping in Child Cases#
When working with child cases (cases forked from a parent simulation), it’s important to understand that the Frequency and Frequency offset parameters refer to the global time step, which is transferred from the parent case.
Example: If the parent case finished at time_step=174, the child case will start from time_step=175. If Frequency=100 is set in the child case, the output will be saved at global time steps 200 (25 time steps into the child simulation), 300 (125 time steps into the child simulation), etc. Frequency offset also refers to the global time step, meaning that if in the previously mentioned child case, Frequency offset=50 was set (with Frequency=100), the output would be saved at global time steps 250 (75 time steps into the child simulation), 350 (175 time steps into the child simulation), etc.
Detailed Descriptions#
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
Note: Select only the fields you need to keep file sizes manageable.
Output format#
The file format in which surface data will be saved.
Default:
paraviewOptions:
paraviewtecplotboth
Notes:
Choose the format that best suits your post-processing workflow.
Select
paraviewfor.vtuformat,tecplotfor.szpltformat, orbothto save in both formats.
Write single file#
When enabled, all surface outputs are written to a single file instead of separate files for each surface.
Default:
falseOptions:
truefalse
Note: Currently only supported for Tecplot format.
Save interval#
Choose the points in the simulation where the results are saved.
Default:
Save at endOptions:
Save at endCustom(only available whenTime steppingisUnsteady)
Notes:
Choose
Save at endto save only the final results of the simulation.Choose
Customto save the results in given intervals.
Frequency#
Controls how often surface output files are saved during the simulation.
Default:
-1(only at the end of simulation)Example:
100— saves output every 100 physical time steps.Standalone case: If you start a simulation from
time_step=0withfrequency=100, outputs are saved at time steps 100, 200, 300, etc.Parent-child case: If the parent finished at
time_step=174, the child starts fromtime_step=175. Withfrequency=100in the child, outputs are saved at global time steps 200 (25 steps into child), 300 (125 steps into child), 400 (225 steps into child), etc.
Notes:
For steady simulations, use
-1to only output at end of runImportant for child cases - this parameter refers to the global time step (see Global Time Stepping).
This setting is only applicable for unsteady cases.
Frequency offset#
Specifies the time step at which to begin recording surface outputs.
Default:
0(start at beginning of simulation)Example:
1000— withfrequency=100, outputs are saved at time steps 1000, 1100, 1200, etc.Standalone case: If you start a simulation from
time_step=0withfrequency=100andfrequency_offset=1000, outputs are saved at time steps 1000, 1100, 1200, etc.Parent-child case: If the parent finished at
time_step=174, the child starts fromtime_step=175. Withfrequency=100andfrequency_offset=200in the child, outputs are saved at global time steps 200 (25 steps into child), 300 (125 steps into child), 400 (225 steps into child), etc.
Notes:
Useful when restarting simulations or skipping initial transients.
Important for child cases - this parameter refers to the global time step (see Global Time Stepping).
This setting is only applicable for unsteady cases.
Assigned boundaries#
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
Note: Select all appropriate surfaces needed for your analysis.
Available Output Fields#
Variables from Available Output Fields and the following specific variables
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:
CfVecprovides both magnitude and direction of skin frictionCfgives only the magnitudeUseful 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.,CfVecXfor 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
CfVecfield 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
Cpwith a consistent color scale across different configurations for valid comparisonsFor boundary layer analysis: Use
CfVeccomponents andyPlustogetherFor separation detection: Create surface streamlines using
CfVecor look for negative streamwise component valuesFor heat transfer analysis: Use
heatFluxand heat transfer coefficient fields
❓ Frequently Asked Questions
How do I visualize only specific surfaces in my output?
Use the
entitiesparameter (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_paprovides 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
frequencyto save outputs less oftenSelect 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 negativeSurface streamlines: Use ParaView to create streamlines from the
CfVecfield to visualize separation patternsPressure 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
CfVecwith 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
frequencyparameter 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
frequencyparameter accordinglyFor 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]
)