MONC
Modules | Functions/Subroutines | Variables
writer_federator.F90 File Reference

Go to the source code of this file.

Modules

module  writer_federator_mod
 This federates over the writing of diagnostic and prognostic data to the file system. It also manages the time manipulation of fields and groups.
 

Functions/Subroutines

subroutine, public writer_federator_mod::initialise_writer_federator (io_configuration, diagnostic_generation_frequency, continuation_run)
 Initialises the write federator and configures it based on the user configuration. Also initialises the time manipulations. More...
 
subroutine, public writer_federator_mod::finalise_writer_federator ()
 Finalises the write federator and the manipulations. More...
 
subroutine, public writer_federator_mod::inform_writer_federator_time_point (io_configuration, source, data_id, data_dump)
 
subroutine, public writer_federator_mod::inform_writer_federator_fields_present (io_configuration, field_names, diag_field_names_and_roots)
 Informs the writer federator that specific fields are present and should be reflected in the diagnostics output. More...
 
logical function, public writer_federator_mod::is_field_used_by_writer_federator (field_name, field_namespace)
 Determines whether a field is used by the writer federator or not. More...
 
logical function, public writer_federator_mod::is_field_split_on_q (field_name)
 Determines whether a field is split on Q or not. More...
 
subroutine writer_federator_mod::enable_specific_field_by_name (field_name, diagnostics_mode, expected_here)
 Enables a specific field by its name, this will locate all the fields with this name and enable them. More...
 
subroutine, public writer_federator_mod::provide_q_field_names_to_writer_federator (q_provided_field_names)
 Provides the Q field names to the write federator, this is required as on initialisation we don't know what these are and only when MONC register do they inform the IO server of the specifics. More...
 
subroutine, public writer_federator_mod::provide_ordered_field_to_writer_federator (io_configuration, field_name, field_namespace, field_values, timestep, time, source)
 
subroutine writer_federator_mod::provide_ordered_field_to_writer_federator_real_values (io_configuration, field_name, field_namespace, field_values, timestep, time, source)
 Provides fields (either diagnostics or prognostics) to the write federator which will action these as appropriate. This will split Q fields up if appropriate. More...
 
integer function writer_federator_mod::get_size_of_collective_q (io_configuration, field_name, source)
 Retrieves the data size for each Q entry of a collective Q field for the specific source MONC that has sent data. More...
 
subroutine writer_federator_mod::provide_ordered_single_field_to_writer_federator (io_configuration, field_name, field_namespace, field_values, timestep, time, source)
 Provides a single ordered field, i.e. Q fields have been split by this point. More...
 
subroutine writer_federator_mod::write_collective_write_value (result_values, writer_index, contents_index, source, lookup_key)
 Writes the collective values, this is held differently to independent values which are written directly - instead here we need to store the values for each MONC hence a specific type is used instead. More...
 
subroutine writer_federator_mod::determine_if_outstanding_field_can_be_written (io_configuration, writer_entry, specific_field)
 For a specific field wil determine and handle any outstanding fields writes until an outstanding write can not be performed or the outstanding list is empty. More...
 
subroutine writer_federator_mod::determine_if_field_can_be_written (io_configuration, writer_entry, specific_field, timestep, previous_write_timestep, write_time, previous_write_time, field_written)
 Determines if a file can be written to its overarching write representation. If so then a write is issued, otherwise an outstanding write point is registered which will be checked frequency to do a write later on. More...
 
subroutine, public writer_federator_mod::check_writer_for_trigger (io_configuration, source, data_id, data_dump)
 Checks all writer entries for any trigger fires and issues the underlying file storage. More...
 
subroutine writer_federator_mod::check_writer_trigger (io_configuration, writer_entry_index, timestep, time, terminated)
 Checks a writer trigger and issues a file creation along with field write if the conditions (time or timestep) are met. This will either create and write to the file or store a pending state if one is already open (required due to NetCDF/HDF5 limitations with thread safety and parallel access.) More...
 
subroutine, public writer_federator_mod::issue_actual_write (io_configuration, writer_entry, timestep, time, terminated_write)
 Issues the actual file creation, write of available fields and closure if all completed. More...
 
subroutine writer_federator_mod::clean_time_points ()
 Cleans out old timepoints which are no longer going to be of any relavence to the file writing. This ensures that we don't have lots of stale points that need to be processed and searched beyond but are themselves pointless. More...
 
type(map_type) function writer_federator_mod::extract_applicable_time_points (start_time, end_time)
 Extracts the applicable time points from the overall map that lie within a specific range. More...
 
type(map_type) function writer_federator_mod::sort_applicable_time_points (unsorted_timepoints)
 Sorts the time points based upon their timestep, smallest to largest. Note that this is a bubble sort and as such inefficient, so would be good to change to something else but works OK for now. More...
 
subroutine writer_federator_mod::close_diagnostics_file (io_configuration, writer_entry, timestep, time)
 Closes the diagnostics file, this is done via a global callback to issue the closes synchronously (collective operation) More...
 
subroutine writer_federator_mod::handle_close_diagnostics_globalcallback (io_configuration, values, field_name, timestep)
 Call back for the inter IO reduction which actually does the NetCDF file closing which is a collective (synchronous) operation. Calls out to the NetCDF code to do the call and then checks the list of pending file writes to process any others that are waiting in the queue. More...
 
logical function writer_federator_mod::check_for_and_issue_chain_write (io_configuration, writer_entry)
 Will check whether there are any pending writes and if so will issue a chain write for this. More...
 
subroutine writer_federator_mod::register_pending_file_write (writer_entry_index, timestep, time, terminated_write)
 Registers a pending file write which will be actioned later on. More...
 
logical function writer_federator_mod::get_next_applicable_writer_entry (field_name, field_namespace, writer_index_point, contents_index_point)
 Retrieves the index of the next writer which uses a specific field. If none is found then returns false, otherwise true. More...
 
integer function writer_federator_mod::get_total_number_writer_fields (io_configuration, writer_entry_index)
 Determines the total number of fields that make up a writer entry, this is all the fields of the groups that make up this writer and individual fields specified too. More...
 
integer function writer_federator_mod::get_group_number_of_fields (io_configuration, group_members, num_q_fields, namespace)
 Retrieves the number of fields within a group of fields. More...
 
integer function writer_federator_mod::get_field_number_of_fields (io_configuration, field_name, field_namespace, num_q_fields)
 Retrieves the number of fields that make up this field, if it is a Q field then it will be split into many subfields hence it is not a simple 1-1 mapping. More...
 
integer function writer_federator_mod::add_group_of_fields_to_writer_entry (io_configuration, writer_entry_index, facet_index, current_field_index, writer_field_names, duplicate_field_names, diagnostic_generation_frequency)
 Adds a group of fields to a writer entry, groups are expanded out into individual fields, each inherit the properties of the group. More...
 
integer function writer_federator_mod::add_field_to_writer_entry (io_configuration, writer_entry_index, io_config_facet_index, my_facet_index, field_name, field_namespace, writer_field_names, duplicate_field_names, diagnostic_generation_frequency)
 Adds a field to the writer entry, this will split the Q fields. However at initialisation we don't know what the Q fields are called, hence place a marker which will be replaced later on. More...
 
subroutine writer_federator_mod::add_specific_field_to_writer_entry (io_configuration, writer_entry_index, io_config_facet_index, my_facet_index, field_name, field_namespace, writer_field_names, duplicate_field_names, timestep_frequency, diagnostic_field_configuration, prognostic_field_configuration)
 Adds a specific field and its information to a writer entry. More...
 
subroutine writer_federator_mod::handle_duplicate_field_names (writer_entry, duplicate_field_names)
 Marks duplicate field names in a writer entry as duplicates so that the NetCDF layer can then deal with this by issuing unique names. More...
 
integer function writer_federator_mod::get_index_of_group (io_configuration, group_name)
 Searches the IO server configuration for a group with a specific name and returns the index to that group or 0 if no corresponding group is found. More...
 
subroutine writer_federator_mod::determine_collective_type_and_optimise_if_possible (io_configuration, field_to_write_information)
 Determines whether it can optimise a specific collective field. If the field fits into certain limited parameters then it will optimise it. These parameters are very common, hence most fields can be optimised. Basically, it is looking to contiguous blocks of data from different MONCs so that the number of writes to the NetCDF file is limited. More...
 
subroutine writer_federator_mod::initialise_contiguous_data_regions (io_configuration, field_to_write_information)
 Will initialise the collective data regions that form contiguous blocks within the data. This is quite an expensive operation so only done once for each field, but has the potential for very significant performance advantages for the fields that match it. More...
 
subroutine writer_federator_mod::get_common_starts (dim, val, vals, common_starters, num_common)
 Retrieves the number of common starting points that match a specific input value. More...
 
integer function writer_federator_mod::get_dimension_identifier (dim_name, is_auto_dimension)
 Translates a dimension name to its numeric corresponding identifier. More...
 

Variables

type(writer_type), dimension(:), allocatable, volatile writer_federator_mod::writer_entries
 
type(hashset_type), volatile writer_federator_mod::used_field_names
 
type(hashset_type), volatile writer_federator_mod::q_field_names
 
type(hashmap_type), volatile writer_federator_mod::time_points
 
type(hashmap_type), volatile writer_federator_mod::q_field_splits
 
type(hashmap_type), volatile writer_federator_mod::collective_q_field_dims
 
integer, volatile writer_federator_mod::time_points_rwlock
 
integer, volatile writer_federator_mod::collective_contiguous_initialisation_mutex
 
integer, volatile writer_federator_mod::currently_writing_mutex
 
logical, volatile writer_federator_mod::currently_writing