I/O Control

Some aspects of Rayleigh’s I/O can be controlled through variables found in the io_controls namelist. This section covers:

I/O Format Controls

I/O Redirection

I/O Format Controls

By default, integer output is reported with 8 digits and padded with leading zeros. This includes integer iteration numbers reported to stdout at each timestep and integer-number filenames created through diagnostics and checkpointing output. If desired, the number of digits may be controlled through the integer_output_digits variable. When reading in a Checkpoint created with a different number of digits, set the integer_input_digits variable to an appropriate value.

At several points in the code, floating-point output is sent to stdout. This output is formatted using scienific notation, with three digits to the right of the decimal place. The number of digits after the decimal can be controlled through the decimal_places variable.

As an example, the following combination of inputs

&temporal_controls_namelist
checkpoint_interval=10
/
&io_controls_namelist
integer_output_digits=5
integer_input_digits=3
decimal_places=5
/
&initial_conditions_namelist
init_type=-1
restart_iter=10
/

would restart from checkpoint files with the prefix formatted as:

Checkpoints/010_grid_etc.

It would generate status line, shell_slice output, and checkpoints formatted as:

Iteration:  00033   DeltaT:  1.00000E-04   Iter/sec:  2.68500E+00
Shell_Slices/00020
Checkpoints/00020_grid_etc.

Developer’s Note: The format codes generated through the values of these three variables are declared (with descriptive comments) in Controls.F90. For integer variables that may take on a negative value, additional format codes with one extra digit (for the negative sign) are also provided.

I/O Redirection

Rayleigh writes all text output (e.g., error messages, iteration counter, etc.) to stdout by default. Different computing centers handle stdout in different ways, but typically one of two path is taken. On some machines, a log file is created immediately and updated continuously as the simulation runs. On other machines, stdout is buffered on-node and written to disk only when the run has terminated.

There are situations where it can be advantageous to have a regularly updated log file whose update frequency may be controlled. This feature exists in Rayleigh and may be accessed by assigning values to stdout_flush_interval and stdout_file in the io controls namelist.

&io_controls_namelist
stdout_flush_interval = 1000
stdout_file = 'routput'
/

Set stdout_file to the name of a file that will contain Rayleigh’s text output. In the example above, a file named routput will be appear in the simulation directory and will be updated periodically throughout the run. The variable stdout_flush_interval determines how many lines of text are buffered before they are flushed to routput. Rayleigh prints time-step information during each time step, and so setting this variable to a relatively large number (e.g., 100+) prevents excessive disk access from occurring throughout the run. In the example above, a text buffer flush will occur once 1000 lines of text have been accumulated.

Changes in the time-step size and self-termination of the run will also force a text-buffer flush. Unexpected crashes and sudden termination by the system job scheduler do not force a buffer flush. Note that the default value of stdout_file is ‘nofile’. If this value is specified, output will directed to normal stdout.

To save on disk space for logs of very long runs, the number of status outputs can be reduced by specifying statusline_interval in the io_controls_namelist. This causes only every n-th status line to be written.