FMS Coupler  2022.03
Data Types | Functions/Subroutines | Variables
full_coupler_mod Module Reference

Data Types

type  coupler_clock_type
 coupler_clock_type derived type consist of all clock ids that will be set and used in full coupler_main. More...
 
type  coupler_components_type
 
type  coupler_chksum_type
 The purpose of objects of coupler_chksum_type is to simplify the list of arguments required for chksum related subroutines in full_coupler_mod. The members of this type point to the model components. More...
 

Functions/Subroutines

subroutine, public coupler_init (Atm, Ocean, Land, Ice, Ocean_state, Atmos_land_boundary, Atmos_ice_boundary, Ocean_ice_boundary, Ice_ocean_boundary, Land_ice_atmos_boundary, Land_ice_boundary, Ice_ocean_driver_CS, Ice_bc_restart, Ocn_bc_restart, ensemble_pelist, slow_ice_ocean_pelist, conc_nthreads, coupler_clocks, coupler_components_obj, coupler_chksum_obj, Time_step_cpld, Time_step_atmos, Time_atmos, Time_ocean, num_cpld_calls, num_atmos_calls, Time, Time_start, Time_end, Time_restart, Time_restart_current)
 Initialize all defined exchange grids and all boundary maps. More...
 
subroutine initialize_coupler_components_obj (this, Atm, Land, Ice, Ocean, Land_ice_atmos_boundary, Atmos_land_boundary, Atmos_ice_boundary, Land_ice_boundary, Ice_ocean_boundary, Ocean_ice_boundary)
 This subroutine associates the pointer in an object of coupler_components_type to the model components. More...
 
subroutine get_component (this, retrieve_component)
 Function get_component returns the requested component in the coupler_components_type object Users are required to provide the component to be retrieved as an input argument. For example, coupler_components_objget_component(Atm) will return Atm = coupler_components_objAtm. More...
 
subroutine initialize_coupler_chksum_obj (this, components_obj)
 This subroutine associates the pointer in an object of coupler_chksum_type to the component models. More...
 
subroutine get_components_obj (this, components_obj)
 This subroutine retrieves coupler_chksum_objcomponents_obj. More...
 
subroutine, public coupler_end (Atm, Land, Ice, Ocean, Ocean_state, Land_ice_atmos_boundary, Atmos_ice_boundary, Atmos_land_boundary, Ice_ocean_boundary, Ocean_ice_boundary, Ocn_bc_restart, Ice_bc_restart, current_timestep, Time_current, Time_start, Time_end, Time_restart_current, coupler_chksum_obj, coupler_clocks)
 This subroutine finalizes the run including a final call to get_coupler_chksums if do_chksum = .True. Coupler_restart is called for the final time. More...
 
subroutine add_domain_dimension_data (fileobj)
 Register the axis data as a variable in the netcdf file and add some dummy data. This is needed so the combiner can work correctly when the io_layout is not 1,1. More...
 
subroutine, public coupler_restart (Atm, Ice, Ocean, Ocn_bc_restart, Ice_bc_restart, Time_current, Time_restart_current, Time_start, time_stamp)
 Writing restart file that contains running time and restart file writing time. More...
 
subroutine get_coupler_chksums (this, id, timestep)
 Print out checksums for several atm, land and ice variables. More...
 
subroutine get_atmos_ice_land_ocean_chksums (this, id, timestep)
 This subroutine calls coupler_chksum as well as atmos_ice_land_chksum and ocean_chksum. More...
 
subroutine get_atmos_ice_land_chksums (this, id, timestep)
 This subroutine calls subroutine that will print out checksums of the elements of the appropriate type. For coupled models typically these types are not defined on all processors. It is assumed that the appropriate pelist has been set before entering this routine. This can be achieved in the following way. More...
 
subroutine get_slow_ice_chksums (this, id, timestep)
 This subroutine calls subroutine that will print out checksums of the elements of the appropriate type. For coupled models typically these types are not defined on all processors. It is assumed that the appropriate pelist has been set before entering this routine. This can be achieved in the following way. More...
 
subroutine get_ocean_chksums (this, id, timestep)
 This subroutine calls subroutine that will print out checksums of the elements of the appropriate type. For coupled models typically these types are not defined on all processors. It is assumed that the appropriate pelist has been set before entering this routine. This can be achieved in the following way. More...
 
subroutine coupler_set_clock_ids (coupler_clocks, Atm, Land, Ice, Ocean, ensemble_pelist, slow_ice_ocean_pelist, ensemble_id)
 This subroutine sets the ID for clocks used in coupler_main. More...
 
subroutine, public coupler_flux_init_finish_stocks (Time, Atm, Land, Ice, Ocean_state, coupler_clocks, init_stocks, finish_stocks)
 This subroutine calls flux_init_stocks or does the final call to flux_check_stocks. More...
 
subroutine, public coupler_flux_check_stocks (nc, Time, Atm, Land, Ice, Ocean_state, coupler_clocks)
 This subroutine calls flux_check_stocks. Clocks and pelists are set before and after call to flux_check_stocks. More...
 
subroutine, public coupler_flux_ocean_to_ice (Ocean, Ice, Ocean_ice_boundary, coupler_clocks, slow_ice_ocean_pelist)
 This subroutine calls flux_ocean_to_ice. Clocks and pelists are set before and after call flux_ocean_to_ice. More...
 
subroutine, public coupler_flux_ice_to_ocean (Ice, Ocean, Ice_ocean_boundary, coupler_clocks, slow_ice_ocean_pelist, set_current_slow_ice_ocean_pelist)
 This subroutine calls flux_ocean_to_ice Clocks are set before and after call flux_ice_to_ocean. Current pelist is set when optional arguments are present and set_current_slow_ice_ocean_pelist=.True. More...
 
subroutine, public coupler_unpack_ocean_ice_boundary (nc, Time_flux_ocean_to_ice, Ice, Ocean_ice_boundary, coupler_clocks, coupler_chksum_obj)
 This subroutine calls flux_ocean_to_ice_finish and unpack_ocean_ice_boundary. Clocks and pelists are set before/after the calls. Checksum is computed if do_chksum=.True. More...
 
subroutine, public coupler_exchange_slow_to_fast_ice (Ice, coupler_clocks)
 This subroutine calls exchange_slow_to_fast_ice Clocks and pelists are set before/after the calls. More...
 
subroutine, public coupler_exchange_fast_to_slow_ice (Ice, coupler_clocks, set_ice_current_pelist)
 This subroutine calls exchange_fast_to_slow_ice. Clocks are set before and after the call. The current pelist is set if the optional argument set_ice_current_pelist is set to true. More...
 
subroutine, public coupler_set_ice_surface_fields (Ice, coupler_clocks)
 This subroutine calls set_ice_surface_fields. Clocks and pelist are set before/after the call. More...
 
subroutine, public coupler_generate_sfc_xgrid (Land, Ice, coupler_clocks)
 This subroutine calls generate_sfc_xgrid. Clocks are set and before the call. More...
 
subroutine, public coupler_atmos_tracer_driver_gather_data (Atm, coupler_clocks)
 This subroutine calls atmo_tracer_driver_gather_data. Clocks are set before and after the call. More...
 
subroutine, public coupler_sfc_boundary_layer (Atm, Land, Ice, Land_ice_atmos_boundary, Time_atmos, current_timestep, coupler_chksum_obj, coupler_clocks)
 This subroutine calls coupler_sfc_boundary_layer. Chksums are computed if do_chksum = .True. Clocks are set for runtime statistics. More...
 
subroutine, public coupler_update_atmos_model_dynamics (Atm, current_timestep, coupler_chksum_obj, coupler_clocks)
 This subroutine calls update_atmos_model_dynamics. Clocks are set for runtime statistics. Chksums and memory usage are computed if do_chksum and do_debug are .True. More...
 
subroutine, public coupler_update_atmos_model_radiation (Atm, Land_ice_atmos_boundary, coupler_clocks, current_timestep, coupler_chksum_obj)
 This subroutine calls update_atmos_model_radiation. Clocks are set for runtime statistics. Chksums are computed if do_chksum is .True. and do_concurrent_radiation is .False.. Memory usage is computed if do_debug is .True. More...
 
subroutine, public coupler_update_atmos_model_down (Atm, Land_ice_atmos_boundary, current_timestep, coupler_chksum_obj, coupler_clocks)
 This subroutine calls update_atmos_model_down. Clocks are set for runtime statistics. Chksums and memory usage are computed if do_chksum and do_debug are .True. More...
 
subroutine, public coupler_flux_down_from_atmos (Atm, Land, Ice, Land_ice_atmos_boundary, Atmos_land_boundary, Atmos_ice_boundary, Time_atmos, current_timestep, coupler_clocks, coupler_chksum_obj)
 This subroutine calls flux_down_from_atmos. Clocks are set for runtime statistics. Chksums are computed if do_chksum = .True. More...
 
subroutine, public coupler_update_land_model_fast (Land, Atmos_land_boundary, atm_pelist, current_timestep, coupler_chksum_obj, coupler_clocks)
 This subroutine calls update_land_model_fast. Clocks are set for runtime statistics. Chksums and memory usage are computed if do_chksum and do_debug are .True. More...
 
subroutine, public coupler_update_ice_model_fast (Ice, Atmos_ice_boundary, atm_pelist, current_timestep, coupler_chksum_obj, coupler_clocks)
 This subroutine calls update_ice_model_fast. Clocks are set for runtime statistics. Chksums and memory usage are computed if do_chksum and do_debug are .True. More...
 
subroutine, public coupler_flux_up_to_atmos (Land, Ice, Land_ice_atmos_boundary, Atmos_land_boundary, Atmos_ice_boundary, Time_atmos, current_timestep, coupler_chksum_obj, coupler_clocks)
 This subroutine calls flux_up_to_atmos. Clocks are set for runtime statistics. Chksums are computed if do_chksum is .True. More...
 
subroutine, public coupler_update_atmos_model_up (Atm, Land_ice_atmos_boundary, current_timestep, coupler_chksum_obj, coupler_clocks)
 This subroutine calls update_atmos_model_up. Clocks are set for runtime statistics. Chksums and memory usage are computed if do_chksum and do_debug are .True. More...
 
subroutine, public coupler_flux_atmos_to_ocean (Atm, Atmos_ice_boundary, Ice, Time_atmos)
 This subroutine calls flux_atmos_to_ocean and calls flux_ex_arrays_dealloc. More...
 
subroutine, public coupler_update_atmos_model_state (Atm, current_timestep, coupler_chksum_obj, coupler_clocks)
 This subroutine calls update_atmos_model_state. Chksums are mem usage are computed if do_chksum and do_debug are .True. respectively. More...
 
subroutine, public coupler_update_land_model_slow (Land, Atmos_land_boundary, atm_pelist, current_timestep, coupler_chksum_obj, coupler_clocks)
 In this subroutine, update_land model_slow is called by the Landpes. The atm_pelist are only required to set the clocks. Chksums are computed if do_chksum = .True. More...
 
subroutine, public coupler_flux_land_to_ice (Land, Ice, Land_ice_boundary, Time, current_timestep, coupler_chksum_obj, coupler_clocks)
 This subroutine calls flux_land_to_ice. Chksums are computed if do_chksum = .True. More...
 
subroutine, public coupler_unpack_land_ice_boundary (Ice, Land_ice_boundary, coupler_clocks)
 This subroutine calls ice_model_fast_cleanup and unpack_land_ice_boundary. More...
 
subroutine, public coupler_update_ice_model_slow_and_stocks (Ice, coupler_clocks)
 This subroutine calls update_ice_model_slow and flux_ice_to_ocean_stocks. More...
 
subroutine, public coupler_update_ocean_model (Ocean, Ocean_state, Ice_ocean_boundary, Time_ocean, Time_step_cpld, current_timestep, coupler_chksum_obj)
 This subroutine calls update_ocean_model. Chksums are computed if do_chksum = .True. More...
 
subroutine, public coupler_intermediate_restart (Atm, Ice, Ocean, Ocean_state, Ocn_bc_restart, Ice_bc_restart, Time_current, Time_restart, Time_restart_current, Time_start)
 Thie subroutine calls component restarts and coupler_restart where the intermediate restart files is produced in the latter calls. Time_restart is the next timestep where the intermediate restart file will be written out. Time_restart_current records the current restart time. More...
 
subroutine, public coupler_summarize_timestep (current_timestep, num_cpld_calls, coupler_chksum_obj, is_atmos_pe, omp_sec, imb_sec)
 This subroutine mainly prints out the current timestep in the stdout. Chksum is computed if do_chksum = .True. More...
 

Variables

integer, dimension(6), public restart_interval = (/ 0, 0, 0, 0, 0, 0/)
 namelist interface More...
 
integer, dimension(6) current_date = (/ 0, 0, 0, 0, 0, 0 /)
 The date that the current integration starts with. (See force_date_from_namelist.) More...
 
character(len=17) calendar = ' '
 
logical force_date_from_namelist = .false.
 Flag that determines whether the namelist variable current_date should override the date in the restart file INPUT/coupler.res. If the restart file does not exist then force_date_from_namelist has no effect, the value of current_date will be used. More...
 
integer, public months =0
 Number of months the current integration will be run. More...
 
integer, public days =0
 Number of days the current integration will be run. More...
 
integer, public hours =0
 Number of hours the current integration will be run. More...
 
integer, public minutes =0
 Number of minutes the current integration will be run. More...
 
integer, public seconds =0
 Number of seconds the current integration will be run. More...
 
integer, public dt_atmos = 0
 Atmospheric model time step in seconds, including the fast coupling with land and sea ice. More...
 
integer, public dt_cpld = 0
 Time step in seconds for coupling between ocean and atmospheric models. This must be an integral multiple of dt_atmos and dt_ocean. This is the "slow" timestep. More...
 
integer, public atmos_npes =0
 The number of MPI tasks to use for the atmosphere. More...
 
integer, public ocean_npes =0
 The number of MPI tasks to use for the ocean. More...
 
integer, public ice_npes =0
 The number of MPI tasks to use for the ice. More...
 
integer, public land_npes =0
 The number of MPI tasks to use for the land. More...
 
integer, public atmos_nthreads =1
 Number of OpenMP threads to use in the atmosphere. More...
 
integer, public ocean_nthreads =1
 Number of OpenMP threads to use in the ocean. More...
 
integer, public radiation_nthreads =1
 Number of threads to use for the radiation. More...
 
logical, public do_atmos =.true.
 Indicates if this component should be executed. If .FALSE., then execution is skipped. This is used when ALL the output fields sent by this component to the coupler have been overridden using the data_override feature. This is for advanced users only. More...
 
logical, public do_land =.true.
 See do_atmos. More...
 
logical, public do_ice =.true.
 See do_atmos. More...
 
logical, public do_ocean =.true.
 See do_atmos. More...
 
logical, public do_flux =.true.
 See do_atmos. More...
 
logical, public concurrent =.FALSE.
 If .TRUE., the ocean executes concurrently with the atmosphere-land-ice on a separate set of PEs. Concurrent should be .TRUE. if concurrent_ice is .TRUE. If .FALSE., the execution is serial: call atmos... followed by call ocean... More...
 
logical, public do_concurrent_radiation =.FALSE.
 If .TRUE. then radiation is done concurrently. More...
 
logical, public use_lag_fluxes =.TRUE.
 If .TRUE., the ocean is forced with SBCs from one coupling timestep ago. If .FALSE., the ocean is forced with most recent SBCs. For an old leapfrog MOM4 coupling with dt_cpld=dt_ocean, lag fluxes can be shown to be stable and current fluxes to be unconditionally unstable. For dt_cpld>dt_ocean there is probably sufficient damping for MOM4. For more modern ocean models (such as MOM5, GOLD or MOM6) that do not use leapfrog timestepping, use_lag_fluxes=.False. should be much more stable. More...
 
logical, public concurrent_ice =.FALSE.
 If .TRUE., the slow sea-ice is forced with the fluxes that were used for the fast ice processes one timestep before. When used in conjuction with setting slow_ice_with_ocean=.TRUE., this approach allows the atmosphere and ocean to run concurrently even if use_lag_fluxes=.FALSE., and it can be shown to ameliorate or eliminate several ice-ocean coupled instabilities. More...
 
logical, public slow_ice_with_ocean =.FALSE.
 If true, the slow sea-ice is advanced on the ocean processors. Otherwise the slow sea-ice processes are on the same PEs as the fast sea-ice. More...
 
logical, public combined_ice_and_ocean =.FALSE.
 
logical, public do_chksum =.FALSE.
 If .TRUE., do multiple checksums throughout the execution of the model. More...
 
logical, public do_endpoint_chksum =.TRUE.
 If .TRUE., do checksums of the initial and final states. More...
 
logical, public do_debug =.FALSE.
 If .TRUE. print additional debugging messages. More...
 
integer, public check_stocks = 0
 -1: never 0: at end of run only n>0: every n coupled steps More...
 
logical, public use_hyper_thread = .false.
 
character(len=80) text
 
character(len=48), parameter mod_name = 'coupler_main_mod'
 
integer calendar_type = INVALID_CALENDAR
 
integer, dimension(6) date_init = (/ 0, 0, 0, 0, 0, 0 /)
 coupled model initial date More...
 

Function/Subroutine Documentation

◆ add_domain_dimension_data()

subroutine full_coupler_mod::add_domain_dimension_data ( type(fmsnetcdfdomainfile_t)  fileobj)
private

Register the axis data as a variable in the netcdf file and add some dummy data. This is needed so the combiner can work correctly when the io_layout is not 1,1.

Parameters
fileobjFms2io domain decomposed fileobj

◆ coupler_atmos_tracer_driver_gather_data()

subroutine, public full_coupler_mod::coupler_atmos_tracer_driver_gather_data ( type(atmos_data_type), intent(inout)  Atm,
type(coupler_clock_type), intent(inout)  coupler_clocks 
)

This subroutine calls atmo_tracer_driver_gather_data. Clocks are set before and after the call.

◆ coupler_end()

subroutine, public full_coupler_mod::coupler_end ( type(atmos_data_type), intent(inout)  Atm,
type(land_data_type), intent(inout)  Land,
type(ice_data_type), intent(inout)  Ice,
type(ocean_public_type), intent(inout)  Ocean,
type(ocean_state_type), intent(inout), pointer  Ocean_state,
type(land_ice_atmos_boundary_type), intent(inout)  Land_ice_atmos_boundary,
type(atmos_ice_boundary_type), intent(inout)  Atmos_ice_boundary,
type(atmos_land_boundary_type), intent(inout)  Atmos_land_boundary,
type(ice_ocean_boundary_type), intent(inout)  Ice_ocean_boundary,
type(ocean_ice_boundary_type), intent(inout)  Ocean_ice_boundary,
type(fmsnetcdfdomainfile_t), dimension(:), intent(inout), pointer  Ocn_bc_restart,
type(fmsnetcdfdomainfile_t), dimension(:), intent(inout), pointer  Ice_bc_restart,
integer, intent(in)  current_timestep,
type(fmstime_type), intent(in)  Time_current,
type(fmstime_type), intent(in)  Time_start,
type(fmstime_type), intent(in)  Time_end,
type(fmstime_type), intent(in)  Time_restart_current,
type(coupler_chksum_type), intent(in)  coupler_chksum_obj,
type(coupler_clock_type), intent(in)  coupler_clocks 
)

This subroutine finalizes the run including a final call to get_coupler_chksums if do_chksum = .True. Coupler_restart is called for the final time.

Parameters
[in,out]land_ice_atmos_boundaryLand_ice_boundary
[in,out]ocn_bc_restartrequired for coupler_restart
[in,out]ice_bc_restartrequired for coupler_restart
[in]current_timestepcurrent_timestep (nc)
[in]coupler_chksum_objrequired for chksum computations
[in]time_currentCurrent timestep
[in]time_startmodel starting time
[in]time_endmodel run time
[in]time_restart_currentTime corresponding to last restart time

◆ coupler_exchange_fast_to_slow_ice()

subroutine, public full_coupler_mod::coupler_exchange_fast_to_slow_ice ( type(ice_data_type), intent(inout)  Ice,
type(coupler_clock_type), intent(inout)  coupler_clocks,
logical, intent(in), optional  set_ice_current_pelist 
)

This subroutine calls exchange_fast_to_slow_ice. Clocks are set before and after the call. The current pelist is set if the optional argument set_ice_current_pelist is set to true.

Parameters
[in]set_ice_current_pelistIf true, call mpp_set_current_pelist(Icepelist)

◆ coupler_exchange_slow_to_fast_ice()

subroutine, public full_coupler_mod::coupler_exchange_slow_to_fast_ice ( type(ice_data_type), intent(inout)  Ice,
type(coupler_clock_type), intent(inout)  coupler_clocks 
)

This subroutine calls exchange_slow_to_fast_ice Clocks and pelists are set before/after the calls.

◆ coupler_flux_atmos_to_ocean()

subroutine, public full_coupler_mod::coupler_flux_atmos_to_ocean ( type(atmos_data_type), intent(inout)  Atm,
type(atmos_ice_boundary_type), intent(inout)  Atmos_ice_boundary,
type(ice_data_type), intent(inout)  Ice,
type(fmstime_type), intent(in)  Time_atmos 
)

This subroutine calls flux_atmos_to_ocean and calls flux_ex_arrays_dealloc.

Parameters
[in]time_atmosTime in seconds

◆ coupler_flux_check_stocks()

subroutine, public full_coupler_mod::coupler_flux_check_stocks ( integer, intent(in)  nc,
type(fmstime_type), intent(in)  Time,
type(atmos_data_type), intent(inout)  Atm,
type(land_data_type), intent(inout)  Land,
type(ice_data_type), intent(inout)  Ice,
type(ocean_state_type), intent(inout), pointer  Ocean_state,
type(coupler_clock_type), intent(inout)  coupler_clocks 
)

This subroutine calls flux_check_stocks. Clocks and pelists are set before and after call to flux_check_stocks.

Parameters
[in]nccurrent outerloop timestep

◆ coupler_flux_down_from_atmos()

subroutine, public full_coupler_mod::coupler_flux_down_from_atmos ( type(atmos_data_type), intent(inout)  Atm,
type(land_data_type), intent(inout)  Land,
type(ice_data_type), intent(inout)  Ice,
type(land_ice_atmos_boundary_type), intent(inout)  Land_ice_atmos_boundary,
type(atmos_land_boundary_type), intent(inout)  Atmos_land_boundary,
type(atmos_ice_boundary_type), intent(inout)  Atmos_ice_boundary,
type(fmstime_type), intent(in)  Time_atmos,
integer, intent(in)  current_timestep,
type(coupler_clock_type), intent(inout)  coupler_clocks,
type(coupler_chksum_type), intent(in)  coupler_chksum_obj 
)

This subroutine calls flux_down_from_atmos. Clocks are set for runtime statistics. Chksums are computed if do_chksum = .True.

Parameters
[in]time_atmosTime_atmos FmsTime_type containing time in seconds
[in]coupler_chksum_objused to compute chksum

◆ coupler_flux_ice_to_ocean()

subroutine, public full_coupler_mod::coupler_flux_ice_to_ocean ( type(ice_data_type), intent(inout)  Ice,
type(ocean_public_type), intent(inout)  Ocean,
type(ice_ocean_boundary_type), intent(inout)  Ice_ocean_boundary,
type(coupler_clock_type), intent(inout)  coupler_clocks,
integer, dimension(:), intent(in), optional  slow_ice_ocean_pelist,
logical, intent(in), optional  set_current_slow_ice_ocean_pelist 
)

This subroutine calls flux_ocean_to_ice Clocks are set before and after call flux_ice_to_ocean. Current pelist is set when optional arguments are present and set_current_slow_ice_ocean_pelist=.True.

Parameters
[in]set_current_slow_ice_ocean_pelistif true, will call mpp_set_current_pelist(slow_ice_ocean_pelist)

mpp_set_current_pelist(slow_ice_ocean_pelist) is not required if coupler_flux_ice_to_ocean is being called after coupler_flux_ocean_to_ice: mpp_set_current_pelist(slow_ice_ocean_pelist) is called in coupler_flux_ocean_to_ice

◆ coupler_flux_init_finish_stocks()

subroutine, public full_coupler_mod::coupler_flux_init_finish_stocks ( type(fmstime_type), intent(in)  Time,
type(atmos_data_type), intent(inout)  Atm,
type(land_data_type), intent(inout)  Land,
type(ice_data_type), intent(inout)  Ice,
type(ocean_state_type), intent(inout), pointer  Ocean_state,
type(coupler_clock_type), intent(inout)  coupler_clocks,
logical, intent(in), optional  init_stocks,
logical, intent(in), optional  finish_stocks 
)

This subroutine calls flux_init_stocks or does the final call to flux_check_stocks.

Parameters
[in]timecurrent Time
[in]finish_stockscontrol flags to either call flux_init_stocks or the final flux_check_stocks

◆ coupler_flux_land_to_ice()

subroutine, public full_coupler_mod::coupler_flux_land_to_ice ( type(land_data_type), intent(inout)  Land,
type(ice_data_type), intent(inout)  Ice,
type(land_ice_boundary_type), intent(inout)  Land_ice_boundary,
type(fmstime_type), intent(in)  Time,
integer, intent(in)  current_timestep,
type(coupler_chksum_type), intent(in)  coupler_chksum_obj,
type(coupler_clock_type), intent(inout)  coupler_clocks 
)

This subroutine calls flux_land_to_ice. Chksums are computed if do_chksum = .True.

Parameters
[in]timeTime (in seconds)
[in]current_timestepcurrent timestep
[in]coupler_chksum_objcoupler_chksum_obj to compute chksums

◆ coupler_flux_ocean_to_ice()

subroutine, public full_coupler_mod::coupler_flux_ocean_to_ice ( type(ocean_public_type), intent(inout)  Ocean,
type(ice_data_type), intent(in)  Ice,
type(ocean_ice_boundary_type), intent(inout)  Ocean_ice_boundary,
type(coupler_clock_type), intent(inout)  coupler_clocks,
integer, dimension(:), intent(in)  slow_ice_ocean_pelist 
)

This subroutine calls flux_ocean_to_ice. Clocks and pelists are set before and after call flux_ocean_to_ice.

◆ coupler_flux_up_to_atmos()

subroutine, public full_coupler_mod::coupler_flux_up_to_atmos ( type(land_data_type), intent(inout)  Land,
type(ice_data_type), intent(inout)  Ice,
type(land_ice_atmos_boundary_type), intent(inout)  Land_ice_atmos_boundary,
type(atmos_land_boundary_type), intent(inout)  Atmos_land_boundary,
type(atmos_ice_boundary_type), intent(inout)  Atmos_ice_boundary,
type(fmstime_type), intent(in)  Time_atmos,
integer, intent(in)  current_timestep,
type(coupler_chksum_type), intent(in)  coupler_chksum_obj,
type(coupler_clock_type), intent(in)  coupler_clocks 
)

This subroutine calls flux_up_to_atmos. Clocks are set for runtime statistics. Chksums are computed if do_chksum is .True.

Parameters
[in]time_atmosTime_atmos, time in seconds
[in]current_timestepcurrent timestep
[in]coupler_chksum_objpoints to component types

◆ coupler_generate_sfc_xgrid()

subroutine, public full_coupler_mod::coupler_generate_sfc_xgrid ( type(land_data_type), intent(inout)  Land,
type(ice_data_type), intent(inout)  Ice,
type(coupler_clock_type), intent(inout)  coupler_clocks 
)

This subroutine calls generate_sfc_xgrid. Clocks are set and before the call.

◆ coupler_init()

subroutine, public full_coupler_mod::coupler_init ( type(atmos_data_type), intent(inout)  Atm,
type(ocean_public_type), intent(inout)  Ocean,
type(land_data_type), intent(inout)  Land,
type(ice_data_type), intent(inout)  Ice,
type(ocean_state_type), intent(inout), pointer  Ocean_state,
type(atmos_land_boundary_type), intent(inout)  Atmos_land_boundary,
type(atmos_ice_boundary_type), intent(inout)  Atmos_ice_boundary,
type(ocean_ice_boundary_type), intent(inout)  Ocean_ice_boundary,
type(ice_ocean_boundary_type), intent(inout)  Ice_ocean_boundary,
type(land_ice_atmos_boundary_type), intent(inout)  Land_ice_atmos_boundary,
type(land_ice_boundary_type), intent(inout)  Land_ice_boundary,
type(ice_ocean_driver_type), intent(inout), pointer  Ice_ocean_driver_CS,
type(fmsnetcdfdomainfile_t), dimension(:), intent(inout), pointer  Ice_bc_restart,
type(fmsnetcdfdomainfile_t), dimension(:), intent(inout), pointer  Ocn_bc_restart,
integer, dimension(:,:), intent(inout), allocatable  ensemble_pelist,
integer, dimension(:), intent(inout), allocatable  slow_ice_ocean_pelist,
integer, intent(inout)  conc_nthreads,
type(coupler_clock_type), intent(inout)  coupler_clocks,
type(coupler_components_type), intent(inout)  coupler_components_obj,
type(coupler_chksum_type), intent(inout)  coupler_chksum_obj,
type(fmstime_type), intent(inout)  Time_step_cpld,
type(fmstime_type), intent(inout)  Time_step_atmos,
type(fmstime_type), intent(inout)  Time_atmos,
type(fmstime_type), intent(inout)  Time_ocean,
integer, intent(inout)  num_cpld_calls,
integer, intent(inout)  num_atmos_calls,
type(fmstime_type), intent(inout)  Time,
type(fmstime_type), intent(inout)  Time_start,
type(fmstime_type), intent(inout)  Time_end,
type(fmstime_type), intent(inout)  Time_restart,
type(fmstime_type), intent(inout)  Time_restart_current 
)

Initialize all defined exchange grids and all boundary maps.

The pelists need to be set before initializing the clocks

Initialize coupler_components_obj memebers to point to model components

Initialize coupler_chksum_obj

◆ coupler_intermediate_restart()

subroutine, public full_coupler_mod::coupler_intermediate_restart ( type(atmos_data_type), intent(inout)  Atm,
type(ice_data_type), intent(inout)  Ice,
type(ocean_public_type), intent(inout)  Ocean,
type(ocean_state_type), intent(inout), pointer  Ocean_state,
type(fmsnetcdfdomainfile_t), dimension(:), intent(inout), pointer  Ocn_bc_restart,
type(fmsnetcdfdomainfile_t), dimension(:), intent(inout), pointer  Ice_bc_restart,
type(fmstime_type), intent(in)  Time_current,
type(fmstime_type), intent(inout)  Time_restart,
type(fmstime_type), intent(inout)  Time_restart_current,
type(fmstime_type), intent(in)  Time_start 
)

Thie subroutine calls component restarts and coupler_restart where the intermediate restart files is produced in the latter calls. Time_restart is the next timestep where the intermediate restart file will be written out. Time_restart_current records the current restart time.

Parameters
[in,out]ocn_bc_restartused for coupler type restarts
[in,out]ice_bc_restartused for coupler type restarts
[in]time_startcurrent Timestep and model start time
[in,out]time_restartRestart files will be written when Time=>Time_restart. Time_restart is incremented by restart_interval Time_restart_current records the current timestep the restart file is being written. Time_restart_current does not necessary = Time_restart.
[in,out]time_restart_currentRestart files will be written when Time=>Time_restart. Time_restart is incremented by restart_interval Time_restart_current records the current timestep the restart file is being written. Time_restart_current does not necessary = Time_restart.

◆ coupler_restart()

subroutine, public full_coupler_mod::coupler_restart ( type(atmos_data_type), intent(inout)  Atm,
type(ice_data_type), intent(inout)  Ice,
type(ocean_public_type), intent(inout)  Ocean,
type(fmsnetcdfdomainfile_t), dimension(:), intent(inout), pointer  Ocn_bc_restart,
type(fmsnetcdfdomainfile_t), dimension(:), intent(inout), pointer  Ice_bc_restart,
type(fmstime_type), intent(in)  Time_current,
type(fmstime_type), intent(in)  Time_restart_current,
type(fmstime_type), intent(in)  Time_start,
character(len=*), intent(in), optional  time_stamp 
)

Writing restart file that contains running time and restart file writing time.

Parameters
[in,out]ocn_bc_restartrequired for restarts
[in,out]ice_bc_restartrequired for restarts
[in]time_currentcurrent model runtime (Time)
[in]time_restart_currentcurrent restart time
[in]time_startmodel start time
[in]time_stamptime_stamp for restart

◆ coupler_set_clock_ids()

subroutine full_coupler_mod::coupler_set_clock_ids ( type(coupler_clock_type), intent(inout)  coupler_clocks,
type(atmos_data_type), intent(in)  Atm,
type(land_data_type), intent(in)  Land,
type(ice_data_type), intent(in)  Ice,
type(ocean_public_type), intent(in)  Ocean,
integer, dimension(:,:), intent(in)  ensemble_pelist,
integer, dimension(:), intent(in)  slow_ice_ocean_pelist,
integer, intent(in)  ensemble_id 
)
private

This subroutine sets the ID for clocks used in coupler_main.

Parameters
[in]atmAtm, required to retrieve pe information
[in]landLand, required to retrieve pe information
[in]oceanOcean, required to retrieve pe information
[in]iceIce, required to retrieve pe information
[in]slow_ice_ocean_pelistslow_ice_oean_pelist
[in]ensemble_idensemble_id used as index in ensemble_pelist

initialization clock

◆ coupler_set_ice_surface_fields()

subroutine, public full_coupler_mod::coupler_set_ice_surface_fields ( type(ice_data_type), intent(inout)  Ice,
type(coupler_clock_type), intent(inout)  coupler_clocks 
)

This subroutine calls set_ice_surface_fields. Clocks and pelist are set before/after the call.

◆ coupler_sfc_boundary_layer()

subroutine, public full_coupler_mod::coupler_sfc_boundary_layer ( type(atmos_data_type), intent(inout)  Atm,
type(land_data_type), intent(inout)  Land,
type(ice_data_type), intent(inout)  Ice,
type(land_ice_atmos_boundary_type), intent(inout)  Land_ice_atmos_boundary,
type(fmstime_type), intent(in)  Time_atmos,
integer, intent(in)  current_timestep,
type(coupler_chksum_type), intent(in)  coupler_chksum_obj,
type(coupler_clock_type), intent(inout)  coupler_clocks 
)

This subroutine calls coupler_sfc_boundary_layer. Chksums are computed if do_chksum = .True. Clocks are set for runtime statistics.

Parameters
[in]time_atmosAtmos time
[in]current_timestep(nc-1)*num_atmos_cal + na

◆ coupler_summarize_timestep()

subroutine, public full_coupler_mod::coupler_summarize_timestep ( integer, intent(in)  current_timestep,
integer, intent(in)  num_cpld_calls,
type(coupler_chksum_type), intent(in)  coupler_chksum_obj,
logical, intent(in)  is_atmos_pe,
real, dimension(:), intent(inout)  omp_sec,
real, dimension(:), intent(inout)  imb_sec 
)

This subroutine mainly prints out the current timestep in the stdout. Chksum is computed if do_chksum = .True.

Parameters
[in]current_timestepcurrent_timestep, nc
[in]num_cpld_callstotal number of outerloop timestep
[in]is_atmos_peAtmpe
[in,out]imb_secfrom omp computation

◆ coupler_unpack_land_ice_boundary()

subroutine, public full_coupler_mod::coupler_unpack_land_ice_boundary ( type(ice_data_type), intent(inout)  Ice,
type(land_ice_boundary_type), intent(inout)  Land_ice_boundary,
type(coupler_clock_type), intent(inout)  coupler_clocks 
)

This subroutine calls ice_model_fast_cleanup and unpack_land_ice_boundary.

These two calls occur on whichever PEs handle the fast ice processess.

◆ coupler_unpack_ocean_ice_boundary()

subroutine, public full_coupler_mod::coupler_unpack_ocean_ice_boundary ( integer, intent(in)  nc,
type(fmstime_type), intent(inout)  Time_flux_ocean_to_ice,
type(ice_data_type), intent(inout)  Ice,
type(ocean_ice_boundary_type), intent(inout)  Ocean_ice_boundary,
type(coupler_clock_type), intent(inout)  coupler_clocks,
type(coupler_chksum_type), intent(in)  coupler_chksum_obj 
)

This subroutine calls flux_ocean_to_ice_finish and unpack_ocean_ice_boundary. Clocks and pelists are set before/after the calls. Checksum is computed if do_chksum=.True.

Parameters
[in]ncCurrent outer loop timestep
[in,out]time_flux_ocean_to_iceTime flux_ocean_to_ice

◆ coupler_update_atmos_model_down()

subroutine, public full_coupler_mod::coupler_update_atmos_model_down ( type(atmos_data_type), intent(inout)  Atm,
type(land_ice_atmos_boundary_type), intent(inout)  Land_ice_atmos_boundary,
integer, intent(in)  current_timestep,
type(coupler_chksum_type), intent(in)  coupler_chksum_obj,
type(coupler_clock_type), intent(inout)  coupler_clocks 
)

This subroutine calls update_atmos_model_down. Clocks are set for runtime statistics. Chksums and memory usage are computed if do_chksum and do_debug are .True.

Parameters
[in,out]land_ice_atmos_boundaryLand ice_atmos_boundary
[in]current_timestepCurrent timestep
[in]coupler_chksum_objcoupler_chksum_obj pointing to component types

◆ coupler_update_atmos_model_dynamics()

subroutine, public full_coupler_mod::coupler_update_atmos_model_dynamics ( type(atmos_data_type), intent(inout)  Atm,
integer, intent(in)  current_timestep,
type(coupler_chksum_type), intent(in)  coupler_chksum_obj,
type(coupler_clock_type), intent(inout)  coupler_clocks 
)

This subroutine calls update_atmos_model_dynamics. Clocks are set for runtime statistics. Chksums and memory usage are computed if do_chksum and do_debug are .True.

Parameters
[in]current_timestepCurrent timestep
[in]coupler_chksum_objcoupler_chksum_obj pointing to component types

◆ coupler_update_atmos_model_radiation()

subroutine, public full_coupler_mod::coupler_update_atmos_model_radiation ( type(atmos_data_type), intent(inout)  Atm,
type(land_ice_atmos_boundary_type), intent(inout)  Land_ice_atmos_boundary,
type(coupler_clock_type), intent(inout)  coupler_clocks,
integer, intent(in), optional  current_timestep,
type(coupler_chksum_type), intent(in), optional  coupler_chksum_obj 
)

This subroutine calls update_atmos_model_radiation. Clocks are set for runtime statistics. Chksums are computed if do_chksum is .True. and do_concurrent_radiation is .False.. Memory usage is computed if do_debug is .True.

Parameters
[in]current_timestepCurrent timestep
[in]coupler_chksum_objpoints to component types

cannot put mpp_chksum for concurrent_radiation as it requires the ability to have two different OpenMP threads inside of MPI at the same time which is not currently allowed

◆ coupler_update_atmos_model_state()

subroutine, public full_coupler_mod::coupler_update_atmos_model_state ( type(atmos_data_type), intent(inout)  Atm,
integer, intent(in)  current_timestep,
type(coupler_chksum_type), intent(in)  coupler_chksum_obj,
type(coupler_clock_type), intent(inout)  coupler_clocks 
)

This subroutine calls update_atmos_model_state. Chksums are mem usage are computed if do_chksum and do_debug are .True. respectively.

Parameters
[in]coupler_chksum_objused to compute chksums

◆ coupler_update_atmos_model_up()

subroutine, public full_coupler_mod::coupler_update_atmos_model_up ( type(atmos_data_type), intent(inout)  Atm,
type(land_ice_atmos_boundary_type), intent(inout)  Land_ice_atmos_boundary,
integer, intent(in)  current_timestep,
type(coupler_chksum_type), intent(in)  coupler_chksum_obj,
type(coupler_clock_type), intent(inout)  coupler_clocks 
)

This subroutine calls update_atmos_model_up. Clocks are set for runtime statistics. Chksums and memory usage are computed if do_chksum and do_debug are .True.

Parameters
[in]coupler_chksum_objpoints to component types

◆ coupler_update_ice_model_fast()

subroutine, public full_coupler_mod::coupler_update_ice_model_fast ( type(ice_data_type), intent(inout)  Ice,
type(atmos_ice_boundary_type), intent(inout)  Atmos_ice_boundary,
integer, dimension(:), intent(in)  atm_pelist,
integer, intent(in)  current_timestep,
type(coupler_chksum_type), intent(in)  coupler_chksum_obj,
type(coupler_clock_type), intent(inout)  coupler_clocks 
)

This subroutine calls update_ice_model_fast. Clocks are set for runtime statistics. Chksums and memory usage are computed if do_chksum and do_debug are .True.

Parameters
[in]atm_pelistAtmpelist to reset the pelist to Atmpelist
[in]coupler_chksum_objpoints to component types
[in,out]coupler_clockscurrent pelist = Atmpelist

◆ coupler_update_ice_model_slow_and_stocks()

subroutine, public full_coupler_mod::coupler_update_ice_model_slow_and_stocks ( type(ice_data_type), intent(inout)  Ice,
type(coupler_clock_type), intent(inout)  coupler_clocks 
)

This subroutine calls update_ice_model_slow and flux_ice_to_ocean_stocks.

◆ coupler_update_land_model_fast()

subroutine, public full_coupler_mod::coupler_update_land_model_fast ( type(land_data_type), intent(inout)  Land,
type(atmos_land_boundary_type), intent(inout)  Atmos_land_boundary,
integer, dimension(:), intent(in)  atm_pelist,
integer, intent(in)  current_timestep,
type(coupler_chksum_type), intent(in)  coupler_chksum_obj,
type(coupler_clock_type), intent(inout)  coupler_clocks 
)

This subroutine calls update_land_model_fast. Clocks are set for runtime statistics. Chksums and memory usage are computed if do_chksum and do_debug are .True.

Parameters
[in]atm_pelistAtmpelist to reset the pelist to Atmpelist
[in]current_timestepcurrent timestep
[in]coupler_chksum_objpoints to component types
[in,out]coupler_clockscurrent pelist=Atmpelist

◆ coupler_update_land_model_slow()

subroutine, public full_coupler_mod::coupler_update_land_model_slow ( type(land_data_type), intent(inout)  Land,
type(atmos_land_boundary_type), intent(inout)  Atmos_land_boundary,
integer, dimension(:), intent(in)  atm_pelist,
integer, intent(in)  current_timestep,
type(coupler_chksum_type), intent(in)  coupler_chksum_obj,
type(coupler_clock_type), intent(inout)  coupler_clocks 
)

In this subroutine, update_land model_slow is called by the Landpes. The atm_pelist are only required to set the clocks. Chksums are computed if do_chksum = .True.

Parameters
[in]atm_pelistatm_pelist used for clocks
[in]current_timestepcurrent timestep
[in]coupler_chksum_objcoupler_chksum_obj for chksum computation

◆ coupler_update_ocean_model()

subroutine, public full_coupler_mod::coupler_update_ocean_model ( type(ocean_public_type), intent(inout)  Ocean,
type(ocean_state_type), intent(inout), pointer  Ocean_state,
type(ice_ocean_boundary_type), intent(inout)  Ice_ocean_boundary,
type(fmstime_type), intent(inout)  Time_ocean,
type(fmstime_type), intent(in)  Time_step_cpld,
integer, intent(in)  current_timestep,
type(coupler_chksum_type), intent(in)  coupler_chksum_obj 
)

This subroutine calls update_ocean_model. Chksums are computed if do_chksum = .True.

Parameters
[in]time_step_cpldtotal number of timesteps
[in]current_timestepcurrent timestep
[in]coupler_chksum_objused for checksum computation

◆ get_atmos_ice_land_chksums()

subroutine full_coupler_mod::get_atmos_ice_land_chksums ( class(coupler_chksum_type), intent(in)  this,
character(len=*), intent(in)  id,
integer, intent(in)  timestep 
)
private

This subroutine calls subroutine that will print out checksums of the elements of the appropriate type. For coupled models typically these types are not defined on all processors. It is assumed that the appropriate pelist has been set before entering this routine. This can be achieved in the following way.

if (atm%pe) then
call mpp_set_current_pelist(atm%pelist)
call atmos_ice_land_chksum('MAIN_LOOP-', nc)
endif

If you are on the global pelist before you enter this routine using the above call, you can return to the global pelist by invoking

call mpp_set_current_pelist()

after you exit. This is only necessary if you need to return to the global pelist.

Parameters
[in]thisself
[in]idid to label CHECKSUMS in stdout

◆ get_atmos_ice_land_ocean_chksums()

subroutine full_coupler_mod::get_atmos_ice_land_ocean_chksums ( class(coupler_chksum_type), intent(in)  this,
character(len=*), intent(in)  id,
integer, intent(in)  timestep 
)
private

This subroutine calls coupler_chksum as well as atmos_ice_land_chksum and ocean_chksum.

Parameters
[in]thisself
[in]idID labelling the set of checksums

◆ get_component()

subroutine full_coupler_mod::get_component ( class(coupler_components_type), intent(in)  this,
class(*), intent(out)  retrieve_component 
)
private

Function get_component returns the requested component in the coupler_components_type object Users are required to provide the component to be retrieved as an input argument. For example, coupler_components_objget_component(Atm) will return Atm = coupler_components_objAtm.

Parameters
[in]thisthe coupler_components_type object
[out]retrieve_componentrequested component to be retrieve. retrieve_component can be of type atmos_data_type, land_data_type, ice_data_type, ocean_public_type, land_ice_atmos_boundary_type, atmos_land_boundary_type, atmos_ice_boundary_type, land_ice_boundary_type, ice_ocean_boundary_type, ocean_ice_boundary_type

◆ get_components_obj()

subroutine full_coupler_mod::get_components_obj ( class(coupler_chksum_type), intent(in)  this,
type(coupler_components_type), intent(out)  components_obj 
)
private

This subroutine retrieves coupler_chksum_objcomponents_obj.

Parameters
[in]thiscoupler_chksum_type
[out]components_objcoupler_components_type to be returned

◆ get_coupler_chksums()

subroutine full_coupler_mod::get_coupler_chksums ( class(coupler_chksum_type), intent(in)  this,
character(len=*), intent(in)  id,
integer, intent(in)  timestep 
)
private

Print out checksums for several atm, land and ice variables.

Parameters
[in]thisself
[in]idid to label CHECKSUMS in stdout

◆ get_ocean_chksums()

subroutine full_coupler_mod::get_ocean_chksums ( class(coupler_chksum_type), intent(in)  this,
character(len=*), intent(in)  id,
integer, intent(in)  timestep 
)
private

This subroutine calls subroutine that will print out checksums of the elements of the appropriate type. For coupled models typically these types are not defined on all processors. It is assumed that the appropriate pelist has been set before entering this routine. This can be achieved in the following way.

if (ocean%is_ocean_pe) then
call mpp_set_current_pelist(ocean%pelist)
call ocean_chksum('MAIN_LOOP-', nc)
endif

If you are on the global pelist before you enter this routine using the above call, you can return to the global pelist by invoking

call mpp_set_current_pelist()

after you exit. This is only necessary if you need to return to the global pelist.

Parameters
[in]thisself
[in]idID labelling the set of CHECKSUMS

◆ get_slow_ice_chksums()

subroutine full_coupler_mod::get_slow_ice_chksums ( class(coupler_chksum_type), intent(in)  this,
character(len=*), intent(in)  id,
integer, intent(in)  timestep 
)
private

This subroutine calls subroutine that will print out checksums of the elements of the appropriate type. For coupled models typically these types are not defined on all processors. It is assumed that the appropriate pelist has been set before entering this routine. This can be achieved in the following way.

if (ice%slow_ice_pe) then
call mpp_set_current_pelist(ice%slow_pelist)
call slow_ice_chksum('MAIN_LOOP-', nc)
endif

If you are on the global pelist before you enter this routine using the above call, you can return to the global pelist by invoking

call mpp_set_current_pelist()

after you exit. This is only necessary if you need to return to the global pelist.

Parameters
[in]thisself
[in]idid to label CHECKSUMS in stdout

◆ initialize_coupler_chksum_obj()

subroutine full_coupler_mod::initialize_coupler_chksum_obj ( class(coupler_chksum_type), intent(inout)  this,
type(coupler_components_type), intent(in), target  components_obj 
)
private

This subroutine associates the pointer in an object of coupler_chksum_type to the component models.

◆ initialize_coupler_components_obj()

subroutine full_coupler_mod::initialize_coupler_components_obj ( class(coupler_components_type), intent(inout)  this,
type(atmos_data_type), intent(in), target  Atm,
type(land_data_type), intent(in), target  Land,
type(ice_data_type), intent(in), target  Ice,
type(ocean_public_type), intent(in), target  Ocean,
type(land_ice_atmos_boundary_type), intent(in), target  Land_ice_atmos_boundary,
type(atmos_land_boundary_type), intent(in), target  Atmos_land_boundary,
type(atmos_ice_boundary_type), intent(in), target  Atmos_ice_boundary,
type(land_ice_boundary_type), intent(in), target  Land_ice_boundary,
type(ice_ocean_boundary_type), intent(in), target  Ice_ocean_boundary,
type(ocean_ice_boundary_type), intent(in), target  Ocean_ice_boundary 
)
private

This subroutine associates the pointer in an object of coupler_components_type to the model components.

Parameters
[in,out]thisself

Variable Documentation

◆ atmos_npes

integer, public full_coupler_mod::atmos_npes =0

The number of MPI tasks to use for the atmosphere.

◆ atmos_nthreads

integer, public full_coupler_mod::atmos_nthreads =1

Number of OpenMP threads to use in the atmosphere.

◆ calendar

character(len=17) full_coupler_mod::calendar = ' '
private

◆ calendar_type

integer full_coupler_mod::calendar_type = INVALID_CALENDAR
private

◆ check_stocks

integer, public full_coupler_mod::check_stocks = 0

-1: never 0: at end of run only n>0: every n coupled steps

◆ combined_ice_and_ocean

logical, public full_coupler_mod::combined_ice_and_ocean =.FALSE.

◆ concurrent

logical, public full_coupler_mod::concurrent =.FALSE.

If .TRUE., the ocean executes concurrently with the atmosphere-land-ice on a separate set of PEs. Concurrent should be .TRUE. if concurrent_ice is .TRUE. If .FALSE., the execution is serial: call atmos... followed by call ocean...

◆ concurrent_ice

logical, public full_coupler_mod::concurrent_ice =.FALSE.

If .TRUE., the slow sea-ice is forced with the fluxes that were used for the fast ice processes one timestep before. When used in conjuction with setting slow_ice_with_ocean=.TRUE., this approach allows the atmosphere and ocean to run concurrently even if use_lag_fluxes=.FALSE., and it can be shown to ameliorate or eliminate several ice-ocean coupled instabilities.

◆ current_date

integer, dimension(6) full_coupler_mod::current_date = (/ 0, 0, 0, 0, 0, 0 /)
private

The date that the current integration starts with. (See force_date_from_namelist.)

The calendar type used by the current integration. Valid values are consistent with the time_manager module: 'gregorian', 'julian', 'noleap', or 'thirty_day'. The value 'no_calendar' cannot be used because the time_manager's date functions are used. All values must be lower case.

◆ date_init

integer, dimension(6) full_coupler_mod::date_init = (/ 0, 0, 0, 0, 0, 0 /)
private

coupled model initial date

◆ days

integer, public full_coupler_mod::days =0

Number of days the current integration will be run.

◆ do_atmos

logical, public full_coupler_mod::do_atmos =.true.

Indicates if this component should be executed. If .FALSE., then execution is skipped. This is used when ALL the output fields sent by this component to the coupler have been overridden using the data_override feature. This is for advanced users only.

◆ do_chksum

logical, public full_coupler_mod::do_chksum =.FALSE.

If .TRUE., do multiple checksums throughout the execution of the model.

◆ do_concurrent_radiation

logical, public full_coupler_mod::do_concurrent_radiation =.FALSE.

If .TRUE. then radiation is done concurrently.

◆ do_debug

logical, public full_coupler_mod::do_debug =.FALSE.

If .TRUE. print additional debugging messages.

◆ do_endpoint_chksum

logical, public full_coupler_mod::do_endpoint_chksum =.TRUE.

If .TRUE., do checksums of the initial and final states.

◆ do_flux

logical, public full_coupler_mod::do_flux =.true.

See do_atmos.

◆ do_ice

logical, public full_coupler_mod::do_ice =.true.

See do_atmos.

◆ do_land

logical, public full_coupler_mod::do_land =.true.

See do_atmos.

◆ do_ocean

logical, public full_coupler_mod::do_ocean =.true.

See do_atmos.

◆ dt_atmos

integer, public full_coupler_mod::dt_atmos = 0

Atmospheric model time step in seconds, including the fast coupling with land and sea ice.

◆ dt_cpld

integer, public full_coupler_mod::dt_cpld = 0

Time step in seconds for coupling between ocean and atmospheric models. This must be an integral multiple of dt_atmos and dt_ocean. This is the "slow" timestep.

◆ force_date_from_namelist

logical full_coupler_mod::force_date_from_namelist = .false.
private

Flag that determines whether the namelist variable current_date should override the date in the restart file INPUT/coupler.res. If the restart file does not exist then force_date_from_namelist has no effect, the value of current_date will be used.

◆ hours

integer, public full_coupler_mod::hours =0

Number of hours the current integration will be run.

◆ ice_npes

integer, public full_coupler_mod::ice_npes =0

The number of MPI tasks to use for the ice.

◆ land_npes

integer, public full_coupler_mod::land_npes =0

The number of MPI tasks to use for the land.

◆ minutes

integer, public full_coupler_mod::minutes =0

Number of minutes the current integration will be run.

◆ mod_name

character(len=48), parameter full_coupler_mod::mod_name = 'coupler_main_mod'
private

◆ months

integer, public full_coupler_mod::months =0

Number of months the current integration will be run.

◆ ocean_npes

integer, public full_coupler_mod::ocean_npes =0

The number of MPI tasks to use for the ocean.

◆ ocean_nthreads

integer, public full_coupler_mod::ocean_nthreads =1

Number of OpenMP threads to use in the ocean.

◆ radiation_nthreads

integer, public full_coupler_mod::radiation_nthreads =1

Number of threads to use for the radiation.

◆ restart_interval

integer, dimension(6), public full_coupler_mod::restart_interval = (/ 0, 0, 0, 0, 0, 0/)

namelist interface

The time interval that write out intermediate restart file. The format is (yr,mo,day,hr,min,sec). When restart_interval is all zero, no intermediate restart file will be written out

◆ seconds

integer, public full_coupler_mod::seconds =0

Number of seconds the current integration will be run.

◆ slow_ice_with_ocean

logical, public full_coupler_mod::slow_ice_with_ocean =.FALSE.

If true, the slow sea-ice is advanced on the ocean processors. Otherwise the slow sea-ice processes are on the same PEs as the fast sea-ice.

If true, there is a single call from the coupler to advance both the slow sea-ice and the ocean. slow_ice_with_ocean and concurrent_ice must both be true if combined_ice_and_ocean is true.

◆ text

character(len=80) full_coupler_mod::text
private

◆ use_hyper_thread

logical, public full_coupler_mod::use_hyper_thread = .false.

◆ use_lag_fluxes

logical, public full_coupler_mod::use_lag_fluxes =.TRUE.

If .TRUE., the ocean is forced with SBCs from one coupling timestep ago. If .FALSE., the ocean is forced with most recent SBCs. For an old leapfrog MOM4 coupling with dt_cpld=dt_ocean, lag fluxes can be shown to be stable and current fluxes to be unconditionally unstable. For dt_cpld>dt_ocean there is probably sufficient damping for MOM4. For more modern ocean models (such as MOM5, GOLD or MOM6) that do not use leapfrog timestepping, use_lag_fluxes=.False. should be much more stable.