.. _io_statepoint:

=======================
State Point File Format
=======================

The current version of the statepoint file format is 18.2.

**/**

:Attributes: - **filetype** (*char[]*) -- String indicating the type of file.
             - **version** (*int[2]*) -- Major and minor version of the
               statepoint file format.
             - **openmc_version** (*int[3]*) -- Major, minor, and release
               version number for OpenMC.
             - **git_sha1** (*char[40]*) -- Git commit SHA-1 hash.
             - **date_and_time** (*char[]*) -- Date and time the summary was
               written.
             - **path** (*char[]*) -- Path to directory containing input files.
             - **tallies_present** (*int*) -- Flag indicating whether tallies
               are present (1) or not (0).
             - **source_present** (*int*) -- Flag indicating whether the source
               bank is present (1) or not (0).

:Datasets: - **seed** (*int8_t*) -- Pseudo-random number generator seed.
           - **stride** (*uint64_t*) -- Pseudo-random number generator stride.
           - **energy_mode** (*char[]*) -- Energy mode of the run, either
             'continuous-energy' or 'multi-group'.
           - **run_mode** (*char[]*) -- Run mode used, either 'eigenvalue' or
             'fixed source'.
           - **n_particles** (*int8_t*) -- Number of particles used per generation.
           - **n_batches** (*int*) -- Number of batches to simulate.
           - **current_batch** (*int*) -- The number of batches already simulated.
           - **n_inactive** (*int*) -- Number of inactive batches. Only present
             when `run_mode` is 'eigenvalue'.
           - **generations_per_batch** (*int*) -- Number of generations per
             batch. Only present when `run_mode` is 'eigenvalue'.
           - **k_generation** (*double[]*) -- k-effective for each generation
             simulated.
           - **entropy** (*double[]*) -- Shannon entropy for each generation
             simulated.
           - **k_col_abs** (*double*) -- Sum of product of collision/absorption
             estimates of k-effective.
           - **k_col_tra** (*double*) -- Sum of product of
             collision/track-length estimates of k-effective.
           - **k_abs_tra** (*double*) -- Sum of product of
             absorption/track-length estimates of k-effective.
           - **k_combined** (*double[2]*) -- Mean and standard deviation of a
             combined estimate of k-effective.
           - **n_realizations** (*int*) -- Number of realizations for global
             tallies.
           - **global_tallies** (*double[][2]*) -- Accumulated sum and
             sum-of-squares for each global tally.
           - **source_bank** (Compound type) -- Source bank information for each
             particle. The compound type has fields ``r``, ``u``, ``E``,
             ``time``, ``wgt``, ``delayed_group``, ``surf_id``, and
             ``particle``, which represent the position, direction, energy,
             time, weight, delayed group, surface ID, and particle type
             (PDG number), respectively. Only present when `run_mode` is
             'eigenvalue'.

**/tallies/**

:Attributes: - **n_tallies** (*int*) -- Number of user-defined tallies.
             - **ids** (*int[]*) -- User-defined unique ID of each tally.

**/tallies/meshes/**

:Attributes: - **n_meshes** (*int*) -- Number of meshes in the problem.
             - **ids** (*int[]*) -- User-defined unique ID of each mesh.

.. _mesh-spec-hdf5:

**/tallies/meshes/mesh <uid>/**

:Attributes: - **id** (*int*) -- ID of the mesh

:Datasets: - **name** (*char[]*) -- Name of the mesh.
           - **type** (*char[]*) -- Type of mesh.
           - **dimension** (*int*) -- Number of mesh cells in each dimension.
           - **Regular Mesh Only:**
              - **lower_left** (*double[]*) -- Coordinates of lower-left corner of
                mesh.
              - **upper_right** (*double[]*) -- Coordinates of upper-right corner
                of mesh.
              - **width** (*double[]*) -- Width of each mesh cell in each
                dimension.
           - **Rectilinear Mesh Only:**
              - **x_grid** (*double[]*) -- Mesh divisions along the x-axis.
              - **y_grid** (*double[]*) -- Mesh divisions along the y-axis.
              - **z_grid** (*double[]*) -- Mesh divisions along the z-axis.
           - **Cylindrical & Spherical Mesh Only:**
              - **r_grid** (*double[]*) -- The mesh divisions along the r-axis.
              - **phi_grid** (*double[]*) -- The mesh divisions along the phi-axis.
              - **origin** (*double[]*) -- The origin in cartesian coordinates.
           - **Spherical Mesh Only:**
              - **theta_grid** (*double[]*) -- The mesh divisions along the theta-axis.
           - **Unstructured Mesh Only:**
              - **filename** (*char[]*) -- Name of the mesh file.
              - **library** (*char[]*) -- Mesh library used to represent the
                                          mesh ("moab" or "libmesh").
              - **length_multiplier** (*double*) Scaling factor applied to the mesh.
              - **options** (*char[]*) -- Special options that control spatial
                                          search data structures used.
              - **volumes** (*double[]*) -- Volume of each mesh cell.
              - **vertices** (*double[]*) -- x, y, z values of the mesh vertices.
              - **connectivity** (*int[]*) -- Connectivity array for the mesh
                cells.
              - **element_types** (*int[]*) -- Mesh element types.

**/tallies/filters/**

:Attributes: - **n_filters** (*int*) -- Number of filters in the problem.
             - **ids** (*int[]*) -- User-defined unique ID of each filter.

**/tallies/filters/filter <uid>/**

:Datasets: - **type** (*char[]*) -- Type of the j-th filter. Can be 'universe',
             'material', 'cell', 'cellborn', 'surface', 'mesh', 'energy',
             'energyout', 'distribcell', 'mu', 'polar', 'azimuthal',
             'delayedgroup', or 'energyfunction'.
           - **n_bins** (*int*) -- Number of bins for the j-th filter. Not
             present for 'energyfunction' filters.
           - **bins** (*int[]* or *double[]*) -- Value for each filter bin of
             this type. Not present for 'energyfunction' filters.
           - **energy** (*double[]*) -- Energy grid points for energyfunction
             interpolation. Only used for 'energyfunction' filters.
           - **y** (*double[]*) -- Interpolant values for energyfunction
             interpolation. Only used for 'energyfunction' filters.

             :Attributes:
                          - **interpolation** (*int*) -- Interpolation type. Only used for
                            'energyfunction' filters.

**/tallies/derivatives/derivative <id>/**

:Datasets: - **independent variable** (*char[]*) -- Independent variable of
             tally derivative.
           - **material** (*int*) -- ID of the perturbed material.
           - **nuclide** (*char[]*) -- Alias of the perturbed nuclide.
           - **estimator** (*char[]*) -- Type of tally estimator, either
             'analog', 'tracklength', or 'collision'.

**/tallies/tally <uid>/**

:Attributes:
             - **internal** (*int*) -- Flag indicating the presence of tally
               data (0) or absence of tally data (1). All user defined
               tallies will have a value of 0 unless otherwise instructed.
             - **multiply_density** (*int*) -- Flag indicating whether reaction
               rates should be multiplied by atom density (1) or not (0).
             - **higher_moments** (*int*) -- Flag indicating whether
               higher-order tally moments are enabled (1) or not (0).

:Datasets: - **n_realizations** (*int*) -- Number of realizations.
           - **n_filters** (*int*) -- Number of filters used.
           - **filters** (*int[]*) -- User-defined unique IDs of the filters on
             the tally
           - **nuclides** (*char[][]*) -- Array of nuclides to tally. Note that
             if no nuclide is specified in the user input, a single 'total'
             nuclide appears here.
           - **derivative** (*int*) -- ID of the derivative applied to the
             tally.
           - **n_score_bins** (*int*) -- Number of scoring bins for a single
             nuclide.
           - **score_bins** (*char[][]*) -- Values of specified scores.
           - **results** (*double[][][2]*) -- Accumulated sum and sum-of-squares
             for each bin of the i-th tally. The first dimension represents
             combinations of filter bins, the second dimensions represents
             scoring bins, and the third dimension has two entries for the sum
             and the sum-of-squares.

**/runtime/**

All values are given in seconds and are measured on the master process.

:Datasets: - **total initialization** (*double*) -- Time spent reading inputs,
             allocating arrays, etc.
           - **reading cross sections** (*double*) -- Time spent loading cross
             section libraries (this is a subset of initialization).
           - **simulation** (*double*) -- Time spent between initialization and
             finalization.
           - **transport** (*double*) -- Time spent transporting particles.
           - **inactive batches** (*double*) -- Time spent in the inactive
             batches (including non-transport activities like communicating
             sites).
           - **active batches** (*double*) -- Time spent in the active batches
             (including non-transport activities like communicating sites).
           - **synchronizing fission bank** (*double*) -- Time spent sampling
             source particles from fission sites and communicating them to other
             processes for load balancing.
           - **sampling source sites** (*double*) -- Time spent sampling source
             particles from fission sites.
           - **SEND-RECV source sites** (*double*) -- Time spent communicating
             source sites between processes for load balancing.
           - **accumulating tallies** (*double*) -- Time spent communicating
             tally results and evaluating their statistics.
           - **writing statepoints** (*double*) -- Time spent writing statepoint
             files
