# 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 Custom |
Frequency offset | The time step at which to start the output | |
Assigned boundaries | Boundary surfaces to include in the output | always |
# 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:
paraview
- Options:
paraview
tecplot
both
Notes:
- Choose the format that best suits your post-processing workflow.
- Select
paraview
for.vtu
format,tecplot
for.szplt
format, orboth
to 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:
false
- Options:
true
false
Note: Currently only supported for Tecplot format.
# Save interval
Choos the points in the simulaton where the results are saved.
- Default:
Save at end
- Options:
Save at end
Custom
Notes:
- Choose
Save at end
to save only the final results of the simulation.- Choose
Custom
to 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
(save every 100 time steps)
Note: 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)
Note: Useful when restarting simulations or skipping initial transients.
# 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:
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
- Limit output frequency: Use larger values for
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 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).- Skin friction vector (
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]
)