The flux_exchange module provides interfaces to couple the following component models: atmosphere, ocean, land, and ice. All interpolation between physically distinct model grids is handled by the exchange grid (xgrid_mod) with the interpolated quantities being conserved.
1.This version of flux_exchange_mod allows the definition of physically independent grids for atmosphere, land and sea ice. Ice and ocean must share the same physical grid (though the domain decomposition on parallel systems may be different). Grid information is input through the grid_spec file (URL). The masked region of the land grid and ice/ocean grid must "tile" each other. The masked region of the ice grid and ocean grid must be identical. ATMOSPHERE |----|----|----|----|----|----|----|----| LAND |---|---|---|---|xxx|xxx|xxx|xxx|xxx|xxx| ICE |xxx|xxx|xxx|xxx|---|---|---|---|---|---| OCEAN |xxx|xxx|xxx|xxx|---|---|---|---|---|---| where |xxx| = masked grid point The atmosphere, land, and ice grids exchange information using the exchange grid xmap_sfc. The land and ice grids exchange runoff data using the exchange grid xmap_runoff. Transfer of data between the ice bottom and ocean does not require an exchange grid as the grids are physically identical. The flux routines will automatically detect and redistribute data if their domain decompositions are different. To get information from the atmosphere to the ocean it must pass through the ice model, first by interpolating from the atmospheric grid to the ice grid, and then transferring from the ice grid to the ocean grid. 2.Each component model must have a public defined data type containing specific boundary fields. A list of these quantities is located in the NOTES of this document. 3.The surface flux of sensible heat and surface evaporation can be implicit functions of surface temperature. As a consequence, the parts of the land and sea-ice models that update the surface temperature must be called on the atmospheric time step 4.The surface fluxes of all other tracers and of momentum are assumed to be explicit functions of all surface parameters 5.While no explicit reference in made within this module to the implicit treatment of vertical diffusion in the atmosphere and in the land or sea-ice models, the module is designed to allow for simultaneous implicit time integration on both sides of the surface interface. 6.Due to #5, the diffusion part of the land and ice models must be called on the atmospheric time step. 7. Any field passed from one component to another may be "faked" to a constant value, or to data acquired from a file, using the data_override feature of FMS. The fields to override are runtime configurable, using the text file <tt>data_table</tt> for input. See the data_override_mod documentation for more details. We DO NOT RECOMMEND exercising the data override capabilities of the FMS coupler until the user has acquired considerable sophistication in running FMS. Here is a listing of the override capabilities of the flux_exchange module: FROM the atmosphere boundary TO the exchange grid (in sfc_boundary_layer): t_bot, q_bot, z_bot, p_bot, u_bot, v_bot, p_surf, gust FROM the ice boundary TO the exchange grid (in sfc_boundary_layer): t_surf, rough_mom, rough_heat, rough_moist, albedo, u_surf, v_surf FROM the land boundary TO the exchange grid (in sfc_boundary_layer): t_surf, t_ca, q_ca, rough_mom, rough_heat, albedo FROM the exchange grid TO land_ice_atmos_boundary (in sfc_boundary_layer): t, albedo, land_frac, dt_t, dt_q, u_flux, v_flux, dtaudu, dtaudv, u_star, b_star, rough_mom FROM the atmosphere boundary TO the exchange grid (in flux_down_from_atmos): flux_sw, flux_lw, lprec, fprec, coszen, dtmass, delta_t, delta_q, dflux_t, dflux_q FROM the exchange grid TO the land boundary (in flux_down_from_atmos): t_flux, q_flux, lw_flux, sw_flux, lprec, fprec, dhdt, dedt, dedq, drdt, drag_q, p_surf FROM the exchange grid TO the ice boundary (in flux_down_from_atmos): u_flux, v_flux, t_flux, q_flux, lw_flux, lw_flux_dn, sw_flux, sw_flux_dn, lprec, fprec, dhdt, dedt, drdt, coszen, p FROM the land boundary TO the ice boundary (in flux_land_to_ice): runoff, calving FROM the ice boundary TO the ocean boundary (in flux_ice_to_ocean): u_flux, v_flux, t_flux, q_flux, salt_flux, lw_flux, sw_flux, lprec, fprec, runoff, calving, p FROM the ocean boundary TO the ice boundary (in flux_ocean_to_ice): u, v, t, s, frazil, sea_level FROM the ice boundary TO the atmosphere boundary (in flux_up_to_atmos): t_surf FROM the land boundary TO the atmosphere boundary (in flux_up_to_atmos): t_ca, t_surf, q_ca See NOTES below for an explanation of the field names.
mpp_mod
mpp_domains_mod
mpp_io_mod
atmos_model_mod
ocean_model_mod
ice_model_mod
land_model_mod
surface_flux_mod
monin_obukhov_mod
xgrid_mod
diag_integral_mod
diag_manager_mod
time_manager_mod
sat_vapor_pres_mod
constants_mod
fms_mod
data_override_mod
coupler_types_mod
atmos_ocean_fluxes_mod
atmos_tracer_driver_mod
field_manager_mod
tracer_manager_mod
call flux_exchange_init ( Time, Atm, Land, Ice, Ocean, & atmos_ice_boundary, land_ice_atmos_boundary, & land_ice_boundary, ice_ocean_boundary, ocean_ice_boundary )
Time | current time [time_type] |
Atm | A derived data type to specify atmosphere boundary data. [atmos_data_type] |
Land | A derived data type to specify land boundary data. [land_data_type] |
Ice | A derived data type to specify ice boundary data. [ice_data_type] |
Ocean | A derived data type to specify ocean boundary data. [ocean_data_type] |
atmos_ice_boundary | A derived data type to specify properties and fluxes passed from atmosphere to ice. [atmos_ice_boundary_type] |
land_ice_atmos_boundary | A derived data type to specify properties and fluxes passed from exchange grid to
the atmosphere, land and ice. [land_ice_atmos_boundary_type] |
land_ice_boundary | A derived data type to specify properties and fluxes passed from land to ice. [land_ice_boundary_type] |
ice_ocean_boundary | A derived data type to specify properties and fluxes passed from ice to ocean. [ice_ocean_boundary_type] |
ocean_ice_boundary | A derived data type to specify properties and fluxes passed from ocean to ice. [ocean_ice_boundary_type] |
call sfc_boundary_layer ( dt, Time, Atm, Land, Ice, Boundary )
The following quantities in the land_ice_atmos_boundary_type are computed: t_surf_atm = surface temperature (used for radiation) (K) albedo_atm = surface albedo (used for radiation) (nondimensional) rough_mom_atm = surface roughness for momentum (m) land_frac_atm = fractional area of land beneath an atmospheric grid box dtaudu_atm, dtaudv_atm = derivatives of wind stress w.r.t. the lowest level wind speed (Pa/(m/s)) flux_u_atm = zonal wind stress (Pa) flux_v_atm = meridional wind stress (Pa) u_star_atm = friction velocity (m/s) b_star_atm = buoyancy scale (m2/s) (u_star and b_star are defined so that u_star**2 = magnitude of surface stress divided by density of air at the surface, and u_star*b_star = buoyancy flux at the surface)
dt | time step. [real] |
Time | current time [time_type] |
Atm | A derived data type to specify atmosphere boundary data. [atmos_data_type] |
Land | A derived data type to specify land boundary data. [land_data_type] |
Ice | A derived data type to specify ice boundary data. [ice_data_type] |
Boundary | A derived data type to specify properties and fluxes passed from exchange grid to
the atmosphere, land and ice. [land_ice_atmos_boundary_type] |
call flux_down_from_atmos (Time, Atm, Land, Ice, & Atmos_boundary, Land_boundary, Ice_boundary )
The following elements from Atmos_boundary are used as input: flux_u_atm = zonal wind stress (Pa) flux_v_atm = meridional wind stress (Pa) The following elements of Land_boundary are output: flux_t_land = sensible heat flux (W/m2) flux_q_land = specific humidity flux (Kg/(m2 s) flux_lw_land = net longwave flux (W/m2), uncorrected for changes in surface temperature flux_sw_land = net shortwave flux (W/m2) dhdt_land = derivative of sensible heat flux w.r.t. surface temperature (on land model grid) (W/(m2 K) dedt_land = derivative of specific humidity flux w.r.t. surface temperature (on land model grid) (Kg/(m2 s K) drdt_land = derivative of upward longwave flux w.r.t. surface temperature (on land model grid) (W/(m2 K) lprec_land = liquid precipitation, mass for one time step (Kg/m2) fprec_land = frozen precipitation, mass for one time step (Kg/m2) The following elements of Ice_boundary are output: flux_u_ice = zonal wind stress (Pa) flux_v_ice = meridional wind stress (Pa) coszen_ice = cosine of the zenith angle
Time | current time [time_type] |
Land | A derived data type to specify land boundary data. [land_data_type] |
Ice | A derived data type to specify ice boundary data. [ice_data_type] |
Atmos_boundary | A derived data type to specify properties and fluxes passed from exchange grid to
the atmosphere, land and ice. [land_ice_atmos_boundary_type] |
Atm | A derived data type to specify atmosphere boundary data. [atmos_data_type] |
Land_boundary | A derived data type to specify properties and fluxes passed from atmosphere to land. [atmos_land_boundary_type] |
Ice_boundary | A derived data type to specify properties and fluxes passed from atmosphere to ice. [atmos_ice_boundary_type] |
call flux_land_to_ice (Time, Land, Ice, Land_Ice_Boundary )
The following elements are transferred from the Land to the Land_ice_boundary: discharge --> runoff (kg/m2) discharge_snow --> calving (kg/m2)
Time | current time [time_type] |
Land | A derived data type to specify land boundary data. [land_data_type] |
Ice | A derived data type to specify ice boundary data. [ice_data_type] |
Land_Ice_Boundary | A derived data type to specify properties and fluxes passed from land to ice. [land_ice_boundary_type] |
call flux_ice_to_ocean ( Time, Ice, Ocean, Ice_Ocean_Boundary )
The following quantities are transferred from the Ice to the ice_ocean_boundary_type: flux_u = zonal wind stress (Pa) flux_v = meridional wind stress (Pa) flux_t = sensible heat flux (W/m2) flux_q = specific humidity flux (Kg/m2/s) flux_salt = salt flux (Kg/m2/s) flux_sw = net (down-up) shortwave flux (W/m2) flux_lw = net (down-up) longwave flux (W/m2) lprec = mass of liquid precipitation since last time step (Kg/m2) fprec = mass of frozen precipitation since last time step (Kg/m2) runoff = mass (?) of runoff since last time step (Kg/m2) p_surf = surface pressure (Pa)
Time | current time [time_type] |
Ice | A derived data type to specify ice boundary data. [ice_data_type] |
Ocean | A derived data type to specify ocean boundary data. [ocean_data_type] |
Ice_Ocean_Boundary | A derived data type to specify properties and fluxes passed from ice to ocean. [ice_ocean_boundary_type] |
call flux_ocean_to_ice ( Time, Ocean, Ice, Ocean_Ice_Boundary)
The following quantities are transferred from the Ocean to the ocean_ice_boundary_type: t_surf = surface temperature (deg K) frazil = frazil (???) u_surf = zonal ocean current/ice motion (m/s) v_surf = meridional ocean current/ice motion (m/s
Time | current time [time_type] |
Ocean | A derived data type to specify ocean boundary data. [ocean_data_type] |
Ice | A derived data type to specify ice boundary data. [ice_data_type] |
Ocean_Ice_Boundary | A derived data type to specify properties and fluxes passed from ocean to ice. [ocean_ice_boundary_type] |
call generate_sfc_xgrid ( Land, Ice )
Land | A derived data type to specify land boundary data. [land_data_type] |
Ice | A derived data type to specify ice boundary data. [ice_data_type] |
call flux_up_to_atmos ( Time, Land, Ice, Land_Ice_Atmos_Boundary )
The following elements of the land_ice_atmos_boundary_type are computed: dt_t = temperature change at the lowest atmospheric level (deg k) dt_q = specific humidity change at the lowest atmospheric level (kg/kg)
Time | Current time. [time_type] |
Land | A derived data type to specify land boundary data. [land_data_type] |
Ice | A derived data type to specify ice boundary data. [ice_data_type] |
Land_Ice_Atmos_Boundary | A derived data type to specify properties and fluxes passed from exchange grid to
the atmosphere, land and ice. [land_ice_atmos_boundary_type] |
Diagnostic fields for module name identifier:
field name |
field description (units) |
MAIN PROGRAM EXAMPLE -------------------- DO slow time steps (ocean) call flux_ocean_to_ice call ICE_SLOW_UP DO fast time steps (atmos) call sfc_boundary_layer call ATMOS_DOWN call flux_down_from_atmos call LAND_FAST call ICE_FAST call flux_up_to_atmos call ATMOS_UP END DO call ICE_SLOW_DN call flux_ice_to_ocean call OCEAN END DO LAND_FAST and ICE_FAST must update the surface temperature ======================================================================= REQUIRED VARIABLES IN DEFINED DATA TYPES FOR COMPONENT MODELS -------------------------------------------------------------- type (atmos_boundary_data_type) :: Atm type (surf_diff_type) :: Atm%Surf_Diff real, dimension(:) Atm%lon_bnd longitude axis grid box boundaries in radians must be monotonic Atm%lat_bnd latitude axis grid box boundaries in radians must be monotonic real, dimension(:,:) Atm%t_bot temperature at lowest model level Atm%q_bot specific humidity at lowest model level Atm%z_bot height above the surface for the lowest model level (m) Atm%p_bot pressure at lowest model level (pa) Atm%u_bot zonal wind component at lowest model level (m/s) Atm%v_bot meridional wind component at lowest model level (m/s) Atm%p_surf surface pressure (pa) Atm%gust gustiness factor (m/s) Atm%flux_sw net shortwave flux at the surface Atm%flux_lw downward longwave flux at the surface Atm%lprec liquid precipitation (kg/m2) Atm%fprec water equivalent frozen precipitation (kg/m2) Atm%coszen cosine of the zenith angle (the following five fields are gathered into a data type for convenience in passing this information through the different levels of the atmospheric model -- these fields are rlated to the simultaneous implicit time steps in the atmosphere and surface models -- they are described more fully in flux_exchange.tech.ps and in the documntation for vert_diff_mod Atm%Surf_Diff%dtmass = dt/mass where dt = atmospheric time step ((i+1) = (i-1) for leapfrog) (s) mass = mass per unit area of lowest atmosphehic layer (Kg/m2)) Atm%Surf_Diff%delta_t increment ((i+1) = (i-1) for leapfrog) in temperature of lowest atmospheric layer (K) Atm%Surf_Diff%delta_q increment ((i+1) = (i-1) for leapfrog) in specific humidity of lowest atmospheric layer (nondimensional -- Kg/Kg) Atm%Surf_Diff%dflux_t derivative of implicit part of downward temperature flux at top of lowest atmospheric layer with respect to temperature of lowest atmospheric layer (Kg/(m2 s)) Atm%Surf_Diff%dflux_q derivative of implicit part of downward moisture flux at top of lowest atmospheric layer with respect to specific humidity of of lowest atmospheric layer (Kg/(m2 s)) integer, dimension(4) Atm%axes Axis identifiers returned by diag_axis_init for the atmospheric model axes: X, Y, Z_full, Z_half. ----------------------------------------------- type (land_boundary_data_type) :: Land real, dimension(:) Land%lon_bnd longitude axis grid box boundaries in radians must be monotonic Land%lat_bnd latitude axis grid box boundaries in radians must be monotonic logical, dimension(:,:,:) Land%mask land/sea mask (true for land) Land%glacier glacier mask (true for glacier) real, dimension(:,:,:) Land%tile_size fractional area of each tile (partition) Land%t_surf surface temperature (deg k) Land%albedo surface albedo (fraction) Land%rough_mom surface roughness for momentum (m) Land%rough_heat surface roughness for heat/moisture (m) Land%stomatal stomatal resistance Land%snow snow depth (water equivalent) (kg/m2) Land%water water depth of the uppermost bucket (kg/m2) Land%max_water maximum water depth allowed in the uppermost bucket (kg/m2) ----------------------------------------------- type (ice_boundary_data_type) :: Ice real, dimension(:) Ice%lon_bnd longitude axis grid box boundaries for temperature points in radians (must be monotonic) Ice%lat_bnd latitude axis grid box boundaries for temperature points in radians (must be monotonic) Ice%lon_bnd_uv longitude axis grid box boundaries for momentum points in radians (must be monotonic) Ice%lat_bnd_uv latitude axis grid box boundaries for momentum points in radians (must be monotonic) logical, dimension(:,:,:) Ice%mask ocean/land mask for temperature points (true for ocean, with or without ice) Ice%mask_uv ocean/land mask for momentum points (true for ocean, with or without ice) Ice%ice_mask optional ice mask (true for ice) real, dimension(:,:,:) Ice%part_size fractional area of each partition of a temperature grid box Ice%part_size_uv fractional area of each partition of a momentum grid box the following fields are located on the ice top grid Ice%t_surf surface temperature (deg k) Ice%albedo surface albedo (fraction) Ice%rough_mom surface roughness for momentum (m) Ice%rough_heat surface roughness for heat/moisture (m) Ice%u_surf zonal (ocean/ice) current at the surface (m/s) Ice%v_surf meridional (ocean/ice) current at the surface (m/s) the following fields are located on the ice bottom grid Ice%flux_u zonal wind stress (Pa) Ice%flux_v meridional wind stress (Pa) Ice%flux_t sensible heat flux (w/m2) Ice%flux_q specific humidity flux (kg/m2/s) Ice%flux_sw net (down-up) shortwave flux (w/m2) Ice%flux_lw net (down-up) longwave flux (w/m2) Ice%lprec mass of liquid precipitation since last time step (Kg/m2) Ice%fprec mass of frozen precipitation since last time step (Kg/m2) Ice%runoff mass of runoff water since last time step (Kg/m2) ----------------------------------------------- type (ocean_boundary_data_type) :: Ocean real, dimension(:) Ocean%Data%lon_bnd longitude axis grid box boundaries for temperature points on the ocean DATA GRID (radians) Ocean%Data%lat_bnd latitude axis grid box boundaries for temperature points on the ocean DATA GRID (radians) Ocean%Data%lon_bnd_uv longitude axis grid box boundaries for momentum points on the ocean DATA GRID (radians) Ocean%Data%lat_bnd_uv latitude axis grid box boundaries for momentum points on the ocean DATA GRID (radians) Ocean%Ocean%lon_bnd longitude axis grid box boundaries for temperature points on the ocean MODEL GRID (radians) Ocean%Ocean%lat_bnd latitude axis grid box boundaries for temperature points on the ocean MODEL GRID (radians) Ocean%Ocean%lon_bnd_uv longitude axis grid box boundaries for momentum points on the ocean MODEL GRID (radians) Ocean%Ocean%lat_bnd_uv latitude axis grid box boundaries for momentum points on the ocean MODEL GRID (radians) Note: The data values in all longitude and latitude grid box boundary array must be monotonic. logical, dimension(:,:) Ocean%Data%mask ocean/land mask for temperature points on the ocean DATA GRID (true for ocean) Ocean%Data%mask_uv ocean/land mask for momentum points on the ocean DATA GRID (true for ocean) Ocean%Ocean%mask ocean/land mask for temperature points on the ocean MODEL GRID (true for ocean) Ocean%Ocean%mask_uv ocean/land mask for momentum points on the ocean MODEL GRID (true for ocean) real, dimension(:,:) Ocean%t_surf_data surface temperature on the ocean DATA GRID (deg k) Ocean%t_surf surface temperature on the ocean MODEL GRID (deg k) Ocean%u_surf zonal ocean current at the surface on the ocean MODEL GRID (m/s) Ocean%v_surf meridional ocean current at the surface on the ocean MODEL GRID (m/s) Ocean%frazil frazil at temperature points on the ocean MODEL GRID