file_io
moment_kinetics.file_io
— Modulemoment_kinetics.file_io.debug_output_counter
— ConstantGlobal counter for calls to debug_dump
moment_kinetics.file_io.debug_output_file
— ConstantAn nc_info instance that may be initialised for writing debug output
This is a non-const module variable, so does cause type instability, but it is only used for debugging (from debug_dump()
) so performance is not critical.
moment_kinetics.file_io.ascii_ios
— Typestructure containing the various input/output streams
moment_kinetics.file_io.io_dfns_info
— Typestructure containing the data/metadata needed for binary file i/o distribution function data only
moment_kinetics.file_io.io_initial_electron_info
— Typestructure containing the data/metadata needed for binary file i/o for electron initialization
moment_kinetics.file_io.io_input_struct
— TypeContainer for I/O settings
moment_kinetics.file_io.io_moments_info
— Typestructure containing the data/metadata needed for binary file i/o moments & fields only
moment_kinetics.file_io.add_attribute!
— FunctionAdd an attribute to a file, group or variable
moment_kinetics.file_io.append_to_dynamic_var
— Functionappend_to_dynamic_var(io_var, data, t_idx, parallel_io, coords...; only_root=false)
Append data
to the dynamic variable io_var
. The time-index of the data being appended is t_idx
. parallel_io
indicates whether parallel I/O is being used. coords...
is used to get the ranges to write from/to (needed for parallel I/O) - the entries in the coords
tuple can be either coordinate
instances or integers (for an integer n
the range is 1:n
).
If only_root=true
is passed, the data is only written once - from the global root process if parallel I/O is being used (if parallel I/O is not used, this has no effect as each file is only written by one process).
moment_kinetics.file_io.check_io_implementation
— Methodcheck_io_implementation(binary_format)
Check that an implementation is available for binary_format
, raising an error if not.
moment_kinetics.file_io.create_dynamic_variable!
— Functioncreate_dynamic_variable!(file_or_group, name, type,
coords::Union{coordinate,NamedTuple}...; parallel_io,
description=nothing, units=nothing)
Create a time-evolving variable in file_or_group
named name
of type type
.
coords
are the coordinates corresponding to the dimensions of the array, in the order of the array dimensions - they may be either coordinate
structs or NamedTuple
s that contain at least the fields name
, n
.
A description and/or units can be added with the keyword arguments.
parallel_io
is a Bool specifying whether parallel I/O is being used.
moment_kinetics.file_io.debug_dump
— Functiondebug_dump(ff, dens, upar, ppar, phi, t; istage=0, label="")
debug_dump(fvec::scratch_pdf, fields::em_fields_struct, t; istage=0, label="")
Dump variables into a NetCDF file for debugging
Intended to be called more frequently than write_data_to_binary()
, possibly several times within a timestep, so includes a label
argument to identify the call site.
Writes to a file called debug_output.h5
in the current directory.
Can either be called directly with the arrays to be dumped (fist signature), or using scratch_pdf
and em_fields_struct
structs.
nothing
can be passed to any of the positional arguments (if they are unavailable at a certain point in the code, or just not interesting). t=nothing
will set t
to the value saved in the previous call (or 0.0 on the first call). Passing nothing
to the other arguments will set that array to 0.0
for this call (need to write some value so all the arrays have the same length, with an entry for each call to debug_dump()
).
moment_kinetics.file_io.define_dynamic_dfn_variables!
— Methoddefine dynamic (time-evolving) distribution function variables for writing to the output file
moment_kinetics.file_io.define_dynamic_electron_moment_variables!
— Methoddefine dynamic (time-evolving) electron moment variables for writing to the hdf5 file
moment_kinetics.file_io.define_dynamic_em_field_variables!
— Methoddefine dynamic (time-evolving) electromagnetic field variables for writing to the hdf5 file
moment_kinetics.file_io.define_dynamic_ion_moment_variables!
— Methoddefine dynamic (time-evolving) ion moment variables for writing to the hdf5 file
moment_kinetics.file_io.define_dynamic_moment_variables!
— Methoddefine dynamic (time-evolving) moment variables for writing to the hdf5 file
moment_kinetics.file_io.define_dynamic_neutral_moment_variables!
— Methoddefine dynamic (time-evolving) neutral moment variables for writing to the hdf5 file
moment_kinetics.file_io.define_io_coordinate!
— Methoddefine a sub-group for each code coordinate and write to output file
moment_kinetics.file_io.define_io_coordinates!
— MethodDefine coords group for coordinate information in the output file and write information about spatial and velocity space coordinate grids
moment_kinetics.file_io.finish_electron_io
— Methodclose output files for electron initialization
moment_kinetics.file_io.finish_file_io
— Methodclose all opened output files
moment_kinetics.file_io.get_electron_io_info
— MethodGet the file_info
for an existing electron I/O file
moment_kinetics.file_io.get_group
— FunctionGet a (sub-)group from a file or group
moment_kinetics.file_io.get_subgroup_keys
— FunctionGet names of all subgroups
moment_kinetics.file_io.get_variable_keys
— FunctionGet names of all variables
moment_kinetics.file_io.hdf5_get_dynamic_dim_sizes
— Methodgiven a tuple, fixed_coords, containing all dimensions except the time dimension, get the dimension sizes and chunk sizes
moment_kinetics.file_io.hdf5_get_fixed_dim_sizes
— MethodGet sizes of fixed dimensions and chunks (i.e. everything but time) for I/O
coords
should be a tuple whose elements are coordinate structs or integers (e.g. number of species).
moment_kinetics.file_io.input_option_error
— Methodaccepts an option name which has been identified as problematic and returns an appropriate error message
moment_kinetics.file_io.io_has_parallel
— Functionio_has_parallel(Val(binary_format))
Test if the backend supports parallel I/O.
binary_format
should be one of the values of the binary_format_type
enum
moment_kinetics.file_io.is_group
— FunctionTest if a member of a (sub-)group is a group
moment_kinetics.file_io.modify_attribute!
— FunctionModify an attribute to a file, group or variable
moment_kinetics.file_io.open_ascii_output_file
— Methodopens an output file with the requested prefix and extension and returns the corresponding io stream (identifier)
moment_kinetics.file_io.open_output_file
— MethodOpen an output file, selecting the backend based on io_option
moment_kinetics.file_io.open_output_file_implementation
— FunctionLow-level function to open a binary output file
Each implementation (HDF5, NetCDF, etc.) defines a method of this function to open a file of the corresponding type.
moment_kinetics.file_io.reopen_dfns_io
— MethodReopen an existing distribution-functions output file to append more data
moment_kinetics.file_io.reopen_initial_electron_io
— MethodReopen an existing initial electron output file to append more data
moment_kinetics.file_io.reopen_moments_io
— MethodReopen an existing moments output file to append more data
moment_kinetics.file_io.reopen_output_file
— MethodRe-open an existing output file, selecting the backend based on io_option
moment_kinetics.file_io.setup_dfns_io
— Methodsetup file i/o for distribution function variables
moment_kinetics.file_io.setup_electron_io
— Methodopen output file to save the initial electron pressure and distribution function
moment_kinetics.file_io.setup_file_io
— Methodopen the necessary output files
moment_kinetics.file_io.setup_io_input
— MethodRead the settings for I/O
moment_kinetics.file_io.setup_moments_io
— Methodsetup file i/o for moment variables
moment_kinetics.file_io.write_Dict_to_section
— Methodwrite_Dict_to_section(section_io, section_dict, parallel_io)
Write the contents of section_dict
into the I/O group section_io
.
Any nested Dicts in section_dict
are written to subsections.
All the keys in section_dict
(and any nested Dicts) should be Strings.
parallel_io
is a Bool indicating whether parallel I/O is being used.
moment_kinetics.file_io.write_all_dfns_data_to_binary
— Methodwrite time-dependent distribution function data for ions, electrons and neutrals to the binary output file
moment_kinetics.file_io.write_all_moments_data_to_binary
— Functionwrite time-dependent moments data for ions, electrons and neutrals to the binary output file
moment_kinetics.file_io.write_boundary_distributions!
— MethodWrite the distributions that may be used for boundary conditions to the output file
moment_kinetics.file_io.write_data_to_ascii
— Methodmoment_kinetics.file_io.write_electron_dfns_data_to_binary
— Methodwrite time-dependent distribution function data for electrons to the binary output file
Note: should only be called from within a function that (re-)opens the output file.
moment_kinetics.file_io.write_electron_moments_data_to_binary
— Methodwrite time-dependent moments data for electrons to the binary output file
Note: should only be called from within a function that (re-)opens the output file.
moment_kinetics.file_io.write_electron_state
— Methodwrite_electron_state(scratch_electron, moments, t_params, io_initial_electron,
t_idx, r, z, vperp, vpa; pdf_electron_converged=false)
Write the electron state to an output file.
moment_kinetics.file_io.write_em_fields_data_to_binary
— Methodwrite time-dependent EM fields data to the binary output file
Note: should only be called from within a function that (re-)opens the output file.
moment_kinetics.file_io.write_f_ascii
— Methodwrite the function f(z,vpa) at this time slice
moment_kinetics.file_io.write_fields_ascii
— Methodwrite electrostatic potential at this time slice
moment_kinetics.file_io.write_final_timing_data_to_binary
— Methodwrite_final_timing_data_to_binary(io_or_file_info_moments)
Write the timing data in moment_kinetics.timer_utils.global_timer
to the output file. Needs to be called after exiting from the @timeit
block so that all timers are finalised properly.
moment_kinetics.file_io.write_input!
— MethodSave info from the dict with input settings to the output file
Note: assumes all keys in input_dict
are strings.
moment_kinetics.file_io.write_ion_dfns_data_to_binary
— Methodwrite time-dependent distribution function data for ions to the binary output file
Note: should only be called from within a function that (re-)opens the output file.
moment_kinetics.file_io.write_ion_moments_data_to_binary
— Methodwrite time-dependent moments data for ions to the binary output file
Note: should only be called from within a function that (re-)opens the output file.
moment_kinetics.file_io.write_moments_electron_ascii
— Methodwrite moments of the ion species distribution function f at this time slice
moment_kinetics.file_io.write_moments_ion_ascii
— Methodwrite moments of the ion species distribution function f at this time slice
moment_kinetics.file_io.write_moments_neutral_ascii
— Methodwrite moments of the neutral species distribution function f_neutral at this time slice
moment_kinetics.file_io.write_neutral_dfns_data_to_binary
— Methodwrite time-dependent distribution function data for neutrals to the binary output file
Note: should only be called from within a function that (re-)opens the output file.
moment_kinetics.file_io.write_neutral_moments_data_to_binary
— Methodwrite time-dependent moments data for neutrals to the binary output file
Note: should only be called from within a function that (re-)opens the output file.
moment_kinetics.file_io.write_overview!
— Methodwrite some overview information for the simulation to the binary file
moment_kinetics.file_io.write_provenance_tracking_info!
— MethodWrite provenance tracking information, to allow runs to be reproduced.
moment_kinetics.file_io.write_single_value!
— Functionwrite_single_value!(file_or_group, name,
data::Union{Number, AbstractString, AbstractArray{T,N}},
coords::Union{coordinate,mk_int,NamedTuple}...; parallel_io,
description=nothing, units=nothing,
overwrite=false) where {T,N}
Write a single variable to a file or group. If a description or units are passed, add as attributes of the variable.
If overwrite=true
is passed, overwrite the variable if it already exists in the file. Note that when overwriting a String
variable, the new String
must have exactly the same length as the original String
.