Time-averaging Probe Outputs#

Time-averaging Probe Outputs in Flow360 allow you to collect statistical data over time during unsteady simulations, providing valuable insights into time-averaged flow behavior.

Note: Time-averaging outputs are only available when using unsteady time stepping.


Available Options#

Option

Description

Applicable

Output fields

Flow variables to monitor at specified locations

always

Start step

Physical time step to start calculating averaging

always

Save interval

When to save outputs

always

Frequency

Frequency at which output is saved

when Save interval is Custom

Frequency offset

Offset at which output begins

when Save interval is Custom

Assigned probes

Points or point arrays where variables will be monitored

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, Frequency offset, and Start step 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 time-averaged at the specified probe locations.

  • Default: None (user must select at least one field)

  • Example: primitiveVars, Cp, Mach

Note: Select only the fields you need for your analysis. See Available Output Fields for a complete list of supported variables.

Start step#

The physical time step at which time-averaging begins.

  • Default: -1 (at end of simulation)

  • Example: 100 (begin averaging from the 100th physical time step)

Notes:

  • Use positive integers to start averaging from a specific time step.

  • Important for child cases - this parameter refers to the global time step, which gets transferred from the parent case (see Global Time Stepping).

Save interval#

Choose the points in the simulation 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#

How often (in physical time steps) the time-averaged data is saved.

  • Default: 1 (every physical time step)

  • Example: 100 — saves output every 100 physical time steps.

    • Standalone case: If you start a simulation from time_step=0 with frequency=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 from time_step=175. With frequency=100 in 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:

  • Set to a positive integer to save at that interval, or -1 to save only at the end.

  • Important for child cases - this parameter refers to the global time step (see Global Time Stepping).

Frequency offset#

Defines when the first time-averaged output occurs.

  • Default: 0 (first output at beginning of simulation)

  • Example: 1000 — with frequency=100, outputs are saved at time steps 1000, 1100, 1200, etc.

    • Standalone case: If you start a simulation from time_step=0 with frequency=100 and frequency_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 from time_step=175. With frequency=100 and frequency_offset=200 in 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:

  • Important for child cases - this parameter refers to the global time step (see Global Time Stepping).

Probes#

The specific points or arrays of points where time-averaged flow variables will be monitored. Regardless of the motion of the mesh, the points retain their positions in the global reference frame during the simulation.

  • Default: None (user must define at least one probe)

  • Example: A point at (0, 1.5, 0), or a line of points between two locations

Note: Points can be added individually or as arrays (lines) with evenly distributed points.

  • Point Definition: The creation of points is described in detail here


💡 Tips

When to Use Time-Averaged Outputs#

  • Use time averaging when you need statistical flow behavior rather than instantaneous snapshots

  • Particularly useful for unsteady flows with periodic or chaotic behavior

  • Effective for filtering out noise and revealing underlying flow patterns

Selecting the Right Start Step#

  • Set Start Step after initial transients have passed for more meaningful averages

  • Monitor convergence of your unsteady simulation to determine appropriate Start Step

  • Too early: averages may include non-physical startup transients

  • Too late: may miss important physical phenomena

Setting Appropriate Frequency#

  • For long simulations, use higher Frequency values to reduce storage requirements

  • For detailed time evolution of averages, use lower Frequency values

  • Balance between data resolution and file size

Point Placement Best Practices#

  • Place points in regions of interest (wakes, boundary layers, separation regions)

  • Use point arrays to capture gradients across important flow features

  • For boundary layer analysis, create point arrays normal to surfaces

Output File Management#

  • Time-averaged outputs generate separate history files from regular outputs

  • File naming convention: [case_name]_TimeAvg[output_name].csv

  • Monitor file sizes when using many output points with high output frequency


❓ Frequently Asked Questions

  • When should I use time-averaged outputs instead of regular outputs?

    Time-averaged outputs are ideal for unsteady simulations where you want to analyze the statistical behavior of the flow rather than instantaneous values. They help filter out noise and reveal underlying flow patterns.

  • Can I have both time-averaged and instantaneous outputs for the same points?

    Yes, you can define both regular probe outputs and time-averaged probe outputs for the same points to monitor both instantaneous and time-averaged values.

  • How does the averaging calculation work?

    Flow360 calculates an average from the Start Step specified until the end of the simulation. The average is computed and saved at the frequency specified.

  • Does time-averaging increase computational cost?

    Time-averaging adds minimal computational overhead as it’s primarily a post-processing operation, but it does require additional memory to store the averaged values.

  • What happens if I set Start Step to -1?

    Setting Start Step to -1 means the time-averaged output will only be calculated and saved at the end of the simulation, providing a single averaged value over the entire simulation (after any specified start step).

  • Can I use time-averaging with steady simulations?

    No, time-averaged outputs are only available when using unsteady time stepping methods, as they require time evolution to calculate meaningful averages.


🐍 Python Example Usage

Time Average Probe Output Example#

# Define a time average probe output with individual points
time_avg_probe_output = fl.TimeAverageProbeOutput(
    name="time_average_probe_group_points",
    entities=[
        fl.Point(
            name="Point_1",
            location=(0.0, 1.5, 0.0) * fl.u.m,
        ),
        fl.Point(
            name="Point_2",
            location=(0.0, -1.5, 0.0) * fl.u.m,
        ),
    ],
    output_fields=["primitiveVars", "Mach"],
    start_step=4,              # Start averaging at the 4th physical step
    frequency=10,              # Output every 10th physical step
    frequency_offset=14,       # First output at the 14th physical step
)

Time Average Probe Output with Point Arrays Example#

# Define a time average probe output with point arrays
time_avg_probe_output_lines = fl.TimeAverageProbeOutput(
    name="time_average_probe_group_lines",
    entities=[
        fl.PointArray(
            name="Line_1",
            start=(1.0, 0.0, 0.0) * fl.u.m,
            end=(1.5, 0.0, 0.0) * fl.u.m,
            number_of_points=6,
        ),
        fl.PointArray(
            name="Line_2",
            start=(-1.0, 0.0, 0.0) * fl.u.m,
            end=(-1.5, 0.0, 0.0) * fl.u.m,
            number_of_points=3,
        ),
    ],
    output_fields=["primitiveVars", "Mach"],
    start_step=4,
    frequency=10,
    frequency_offset=14,
)

Time Average Surface Probe Output Example#

# Define a time average surface probe output
time_avg_surface_probe_output = fl.TimeAverageSurfaceProbeOutput(
    name="time_average_surface_probe_group_points",
    entities=[
        fl.Point(
            name="Point_1", 
            location=(1, 1.02, 0.03) * fl.u.cm
        ),
        fl.Point(
            name="Point_2", 
            location=(2, 1.01, 0.03) * fl.u.m
        ),
        fl.Point(
            name="Point_3", 
            location=(3, 1.02, 0.03) * fl.u.m
        ),
    ],
    target_surfaces=[
        fl.Surface(name="Surface_1", geometry["surface1"]),
        fl.Surface(name="Surface_2", geometry["surface2"]),
    ],
    output_fields=["Mach", "primitiveVars", "yPlus"],
    start_step=4,
    frequency=10,
    frequency_offset=14,
)

Time Average Surface Probe Output with Point Arrays Example#

# Define a time average surface probe output with point arrays
time_avg_surface_probe_output_lines = fl.TimeAverageSurfaceProbeOutput(
    name="time_average_surface_probe_group_lines",
    entities=[
        fl.PointArray(
            name="Line_1",
            start=(1.0, 0.0, 0.0) * fl.u.m,
            end=(1.5, 0.0, 0.0) * fl.u.m,
            number_of_points=6,
        ),
        fl.PointArray(
            name="Line_2",
            start=(-1.0, 0.0, 0.0) * fl.u.m,
            end=(-1.5, 0.0, 0.0) * fl.u.m,
            number_of_points=3,
        ),
    ],
    target_surfaces=[
        fl.Surface(name="Surface_1", geometry["surface1"]),
        fl.Surface(name="Surface_2", geometry["surface2"]),
    ],
    output_fields=["Mach", "primitiveVars", "yPlus"],
    start_step=4,
    frequency=10,
    frequency_offset=14,
)