4.15. Output Reference

Output is divided into two major categories:

  • Results Output contains binary format simulation results in a form suitable for visualization. While the Results output usually corresponds to the entire model, it can also be applied to portions of the model.

  • Heartbeat Output is generally written to a text file and provides a convenient means of monitoring intermediate simulation results as well as outputting post-processed variables.

This section describes how to use these two output functionalities. A detailed list of all possible commands can be found in the command reference.

4.15.1. Results Output

The results output block allows you to print simulation data to an output database. This database can then be visualized/postprocessed (e.g. in ParaView), used in subsequent simulations, etc. This data includes internal fields such as the DOF solved in each active equation, as well as post-processed nodal and global fields.

A list of the quantities available for output is printed to the log immediately after the mesh is read. This list can be previewed by running fuego with the --check-input option which will verify the input syntax, read the mesh, print the variables available for output, and then exit.

Fuego Region "fuego_region" has the following fields available for output:
  GLOBAL Variables:
    * AREA_X_surface_1
    * AREA_Y_surface_1
    * AREA_Z_surface_1
    * mass_flow_rate_surface_1
    * TOTAL_AREA_surface_1
  NODE_RANK Fields:
    * continuity_residual
    * control_volume
    * density
    * density_derivative
    * dpdx
    * dpdy
    * dpdz
    * gas_volume_fraction
    * grad_q
    * mass_diffusivity
    * mass_fraction
    * model_coordinates
    * molecular_weight
    * pressure
    * pressure_gradient
    * turbulent_dissipation
    * turbulent_kinetic_energy
    * turbulent_production_ke
    * turbulent_viscosity
    * u_star
    * u_tmp
    * v_tmp
    * velocity
    * viscosity
    * w_tmp
    * x_velocity
    * y_velocity
    * ysolve
    * z_velocity
  FACE_RANK Fields:
    * density_bip
    * eff_wall_yp_bnd
    * mass_flux_bip
    * pressure_bip
    * viscous_force_bip
    * wall_area_bip
    * wall_temperature_bip
    * wall_yp_bip
  ELEMENT_RANK Fields:
    * CFL
    * mass_flux
    * num_wall_faces_on_scv
    * subcontrol_volume

The available quantities are split by their entity rank. When specifying a field for output, the associated rank should be used. A quantity is added to the output database using a line of the form

<entity> variables = <internal name> [as <output name>]

where the entity is the rank specified in the output list, and the internal name can optionally be overridden in the output database by specifying an output name e.g.

# Scope: Sierra > Procedure > Fuego Region
begin results output myOutput
  # name of the output database
  Database name = results.e

  # Frequency information
  at step 0 increment = 1

  #Quantities to print
  nodal variables = someMissingField
  nodal variables = density as rho
  element variables = volume_change_ratio
  global variables = avg_temperature
end

Note

It is worth noting that since the ExodusII format has no concept of vector/tensor quantities, Paraview deduces vectors by looking for the same variable with X, Y, and Z (for 3D problems) appended. For example if Ux, Uy, and Uz are all present in an output database, ParaView will group them into a vector called U.

Similarly if a field called displacement is found, it will be recognized by ParaView as the nodal displacements and the mesh will automatically be warped by the field.

Fuego will handle naming of vector/tensor quantities that are requested for output, but it is worth keeping these facts in mind when specifying your own output names.

Note

It is not fatal to request an output quantity that does not exist. Instead, a warning is printed to the log stating that output is skipped since the field cannot be found. If a certain quantity is missing from your output, this can be a good first thing to check for.

******************************************************************************
**  Warning:
**  In region 'myRegion' Results Output block 'myOutput', Nodal variable
**  'someMissingField' was not found and will not be output
******************************************************************************

4.15.2. Heartbeat Output

Unlike Results Output, heartbeats are used to view scalar data such as reduced quantities and running metrics. They can be useful to track progress of simulations, as well as for collecting reduced data for postprocessing.

Available output quantities include:

  • Mass flow rate on inflow and open boundaries

  • Force, heat flux, and yplus on walls

  • Any postprocessed scalar

The complete list of commands available in the heartbeat block can be found in the command summary.

As was stated above, the list of the available globals will be printed to the log

Fuego Region "myRegion" has the following fields available for output:
  GLOBAL Variables:
    * AREA_X_surface_1
    * AREA_Y_surface_1
    * AREA_Z_surface_1
    * mass_flow_rate_surface_1
    * TOTAL_AREA_surface_1
  NODE_RANK Fields:
    * ...
  EDGE_RANK Fields:
    * ...
  ELEMENT_RANK Fields:
    * ...

A quantity is added to the output heartbeat using a line of the form

variable = <entity> <internal name> [as <output name>]

Note that similar to results output, the internal name can be overridden by specifying as <output name>

# Scope: Sierra > Procedure > Fuego Region
Begin Heartbeat myHb
  # name of the output stream
  Stream name = results.csv

  #Formatting of file
  Timestamp Format = ""
  Precision        = 8   # precision of output
  Format           = csv # delimeter
  Labels           = Off # qnty=123 format
  Legend           = On  # header row of labels

  # Frequency information
  at step 0 increment = 1

  #Quantities to print
  variable = global mass_flow_rate_surface_1 as mdot1
  variable = global TOTAL_AREA_SURFACE_1
  ...
End

It is also possible to select a single value from a field by specifying the closest point

variable = <entity> <internal name> nearest location <X> <Y> <Z> as <output name>

or a specified ID

variable = <entity> <internal name> at <entity> <ID> as <output name>

For example:

# Scope: Sierra > Procedure > Fuego Region
Begin Heartbeat myHb
  ...
  Variable = Node density nearest location 0.0 0.0 0.0 as rhoOrigin
  Variable = Node density at node 123 as rho123
  variable = element CFL at element 1 as cfl1
  ...
End

Note

Similar to results output, it is not fatal to request heartbeat of a global that does not exist. Instead, a warning is printed

***********************************************************************************
**  Warning:
**  In Heartbeat Output block 'THE_HEARTBEAT':
**  Global variable 'someMissingGlobal' does not exist and will not be output
***********************************************************************************

The format of the heartbeat output is flexible, and is controlled by the parameters Precision, Format, Labels, and Legend.

If no specific format is required, the following parameters

# Scope: Sierra > Procedure > Fuego Region
Begin Heartbeat myHb
  ...
  Timestamp Format = ""
  Precision        = 8   # precision of output
  Format           = csv # delimeter
  Labels           = Off # qnty=123 format
  Legend           = On  # header row of labels
End

produce a csv file that is human-readable and can be read easily across applications

          time, avg_temperature, max_temperature
0.00000000e+00,  3.50000000e+02,  4.00000000e+02
1.00000000e-01,  3.60000000e+02,  4.10000000e+02
2.00000000e-01,  3.70000000e+02,  4.20000000e+02
...

4.15.3. Output Scheduling

For both results and heartbeat output, the frequency of output is controlled by specifying either the time or step frequency using the following lines respectively

# Scope: Sierra > Procedure > Fuego Region
Begin Heartbeat myHb
  at time 0.0 increment = 0.1
  # or
  at step 0 increment = 1
End

Note that multiple of these lines can be specified to define a more complex output schedule e.g.

# Scope: Sierra > Procedure > Fuego Region
Begin Heartbeat myHb # or results output myOutput
  at time 0.0    increment = 100.0
  at time 300.0  increment = 300.0
  at time 1800.0 increment = 500.0
End

Additional times/steps can also be included using by specifying the respective command lines

# Scope: Sierra > Procedure > Fuego Region
Begin Heartbeat myHb # or results output myOutput
  Additional Steps = 1 2 3
  # or
  Additional Times = 0.1 0.2 0.3
End

By default, the time closest to the requested print interval is written. It is sometimes desired, however, to output exactly at a given print interval. In this case, Timestep adjustment interval = <N> can be set, which allows the time step manager to modify the next N steps to attempt to exactly hit the desired output.

# Scope: Sierra > Procedure > Fuego Region
Begin Heartbeat myHb # or results output myOutput
  ...
  Timestep adjustment interval = 4
End

Finally, note that if a certain output pattern is desired to be used in multiple places, it can be defined as an output scheduler

and given as input to the output block(s) in place of the arguments above. Note that the scheduler must be placed at Sierra scope:

Begin Sierra Job
  # Scope: Sierra!
  begin Output Scheduler mySched
    at time 0.0    increment = 100.0
    at time 300.0  increment = 300.0
    at time 1800.0 increment = 500.0
    ...
  end

  ...
  Begin Procedure theProcedure
      ...

      Begin Fuego Region Fuego_Region
        ...

        # Scope: Sierra > Procedure > Fuego Region
        Begin Heartbeat myHb
          Use Output Scheduler mySched
          ...
        End

        Begin results output myOutput
          Use Output Scheduler mySched
          ...
        End
      End

    End Procedure theProcedure
End Sierra Job

Note

In the case of steady solutions, Fuego output will contain two “time” steps: an initialization output plane, and the steady solution output. Care must be taken to use the appropriate time if these results are used in subsequent analysis (e.g. to provide the initial condition from file for a transient problem).