The ice model is assumed to be constructed on a lat-lon grid,
with fields dimensioned (num_lon, num_lat, num_part). This grid
covers the entire sphere. Each grid box is divided into
partitions whose fractional coverage of the grid box is specified,
but which have no special geographical position within the box.
In this version of the model, num_part, which is a namelist
parameter, must be set to 2. Partition 1 is the ice-free fractional
coverage and partition 2 is the ice-covered fractional coverage.
The ice thickness is uniform and is specified as a namelist parameter.
The boundary variables needed by other component models for coupling
are contained in a derived data type. A variable of this derived type
is returned when initializing the ice model. It is used by other
routines in this module and by coupling routines. The contents of
this derived type should only be modified by the ice model.
Fluxes must pass through the ice model to get to the ocean. The
ice model modifies and saves the average of these fluxes for the
ocean model. Similarly, quantities that the ocean model returns to
the atmosphere pass back up through the ice model.
The sea surface parameters of albedo and roughness are calculated on
the ice model grid for all ocean points whether there ice or open water.
All interpolation between the ice, ocean, and atmospheric grids
is handled outside the ice model.
PUBLIC INTERFACE
use ice_model_mod [, only: ice_data_type,
ocean_ice_boundary_type,
atmos_ice_boundary_type,
land_ice_boundary_type,
ice_model_init,
update_ice_model_fast,
update_ice_model_slow_up,
update_ice_model_slow_dn,
ice_model_end ]
ice_data_type
Derived-type variable that contains boundary variables from the
ice model state that are exchanged during the coupling with other
component models.
ice_model_init
Initializes the ice model and returns a variable
of type ice_boundary_data_type. This routine also reads the
namelist (ice_model_nml) and tries to read the restart
file (INPUT/ice_model.res). If the restart file does not
exist the ice model variables are initialized with
specified data (see DATA SETS below).
update_ice_model_fast
Called every atmospheric time step to perform the implicit
heat diffusion, compute quantities needed for coupling,
and storing (and summing) fluxes needed by the ocean.
update_ice_model_slow_dn
Called every ocean time step to update the ice mask for the
current time and to average fluxes (from the fast time loop).
update_ice_model_slow_up
Called after the ocean model and before returning to the
atmospheric time loop. Moves ocean quantities from the
bottom of the ice (input arguments) to the top of the ice
(contained in ice_boundary_data_type variable).
ice_model_end
Called once at the end of a model run to write an ice model
restart file.
PUBLIC DATA
type ocean_ice_boundary_type
type atmos_ice_boundary_type
type land_ice_boundary_type
type ice_data_type
Unless otherwise noted all fields are: real, dimension (:, :, num_part),
where the first two dimensions are the number of longitude and latitude points,
respectively, on the given processor; there are no halo points.
The global grid size is determined from the input arguments to
ice_model_init (and the restart file).
--- ice model variables ---
Domain Ice model domain information
[type(domain2d)]
glon_bnd GLOBAL longitude axis grid box boundaries for temperature points
in radians [real, dimension (num_lon+1)]
glat_bnd GLOBAL latitude axis grid box boundaries for temperature points
in radians [real, dimension (num_lat+1)]
lon_bnd local longitude axis grid box boundaries for temperature points
in radians [real, dimension (num_lon+1)]
lat_bnd local latitude axis grid box boundaries for temperature points
in radians [real, dimension (num_lat+1)]
glon GLOBAL geographic longitude of t-cell centers in radians
glat GLOBAL geographic latitude of t-cell centers in radians
lon local geographic longitude of t-cell centers in radians
lat local geographic latitude of t-cell centers in radians
gmask GLOBAL ocean/land mask for temperature points
(true for ocean, with or without ice)
[logical, dimension (num_lon, num_lat, num_part)]
mask local ocean/land mask for temperature points
(true for ocean, with or without ice)
[logical, dimension (num_lon, num_lat, num_part)]
ice_mask = ice/no-ice mask ( .true. at ice points)
[logical, dimension (num_lon, num_lat, num_part)]
temp = temperature of ice in degrees K (level 1 is top surface)
[real, dimension (num_lon, num_lat, num_part, num_lev)]
part_size = fractional area of partition
thickness = ice thickness (in meters)
frazil = frazil ???
--- passed up to the atmosphere ---
albedo = surface albedo (non-dimensional)
rough_mom = roughness length for computation of surface stress (m)
rough_heat = roughness length for computation of heat fluxes (m)
rough_moist= roughness length for computation of moisture fluxes (m)
t_surf = surface temperature of ice/ocean surface (deg K)
pointer to temp (:,:,:,1)
u_surf = zonal surface current of ocean (m/s)
v_surf = meridional surface current of ocean (m/s)
--- passed between the ocean ---
flux_u = zonal wind stress (pascals)
flux_v = meridional wind stress (pascals)
flux_t = sensible heat flux (W/m2)
flux_q = specific humidity flux (Kg/m2/s)
flux_sw = net (down-up) shortwave flux (W/m2)
flux_lw = net (down-up) longwave flux (W/m2)
lprec = liquid precipitation rate (Kg/m2/s)
fprec = frozen precipitation rate (Kg/m2/s)
runoff = runoff rate (Kg/m2/s)
avg_kount = number in averages passed down to ocean
[integer, scalar]
--- time_type quantities ---
Time_Init = reference (initial) time
Time = current time
Time_step_fast = fast (atmospheric) time step
Time_step_slow = slow (ocean) time step
PUBLIC ROUTINES
call ice_model_init ( Ice, Time_Init, Time,
Time_step_fast, Time_step_slow )
Input/Output
Ice This routine initializes this derived-type variable.
Arrays contained in this variable are allocated and initialized.
[ice_boundary_data_type]
Input
Time_init reference time used for output diagnostic quantities
(usually the time at which the entire integration started)
[time_type, see time_manager_mod]
Time the current time [time_type]
Time_step_fast time step for fast ice model processes
(same as the atmospheric time step)
[time_type]
Time_step_slow time step for slow ice model processes
(same as the atmospheric time step)
[time_type]
--------------------------------------------------------------
call update_ice_model_fast ( Atmos_boundary, Ice )
Input/Output
Ice Derived-type variable containing the publicly-accessible
state of the ice model. [ice_boundary_data_type]
Input
Atmos_boundary
--------------------------------------------------------------
call update_ice_model_slow_dn ( Atmos_boundary, Land_boundary, Ice )
Input/Output
Ice Derived-type variable containing the publicly-accessible
state of the ice model. [ice_boundary_data_type]
Input
Atmos_boundary
Land_boundary
--------------------------------------------------------------
call update_ice_model_slow_up ( Ocean_boundary, Ice )
Input/Output
Ice Derived-type variable containing the publicly-accessible
state of the ice model. [ice_boundary_data_type]
Input
Ocean_boundary
--------------------------------------------------------------
call ice_model_end ( Ice )
Input
Ice Derived-type variable containing the publicly-accessible
state of the ice model. [ice_boundary_data_type]
NAMELIST
&ice_model_nml
num_lev Number of vertical levels of ice.
DO NOT CHANGE THIS VALUE, it must be set to 1.
[integer, default: num_lev = 1]
num_part Number of partition for each grid box.
DO NOT CHANGE THIS VALUE, it must be set to 2.
[integer, default: num_part = 2]
diff thermal diffusivity of ice
[real, default: diff = 2.092]
thickness_min minimum ice thickness in meters
[real, default: thickness_min = 0.10]
specified_ice_thickness Constant thickness for specified ice in meters,
only used when specified_ice=true.
[real, default: specified_ice_thickness = 2.]
temp_ice_freeze Temperature in deg C at which sea ice melts.
[real, default: temp_ice_freeze = -1.66]
roughness_ice Constant roughness in meters for all ice.
[real, default: roughness_ice = 1.e-4]
no_ice Flag that eliminates all ice. If no_ice = true,
then the area of the ice-free partition is set to 1 and
the ice-covered partition to 0.
[logical, default: no_ice = .false.]
use_leads Flag that determines whether partial ice is allowed
in a grid box. Note that some data sets do not specify
fractional sea-ice.
If use_leads = true, the sea-ice fractional coverage
in a grid box can vary between [0,1].
If use_leads = false, the sea-ice fractional coverage
is either 0 or 1.
[logical, default: use_leads = .false.]
use_climo_ice use monthly climatological (AMIP) ice mask
otherwise use observed monthly mean
[logical, default: use_climo_ice = .false.]
use_annual_ice use annual climatological (AMIP) ice mask
otherwise use observed monthly mean
[logical, default: use_annual_ice = .false.]
decomp The domain decomposition, where decomp(1) = x-axis
decomposition, decomp(2) = y-axis decomposition.
* If decomp(1)*decomp(2) does not equal the number
of processors the model will fail.
* If decomp(1)=decomp(2)=0 then default rules apply.
* By default, one-dimensional decomposition (in Y) is used.
When there is fewer than 2 points per processor, then 2-D
decomposition is used.
[integer, dimension(2), default: decomp = 0,0]
interp_method Characters that determines interpolation method between
grids. Default value "conservative" means conservative
scheme is adopted. "bilinear" means bilinear interpolation
is used.
[character(len=*), default: interp_method = "conservative"]
DATA SETS
The restart file is called ice_model.res.
The initialization routine, ice_model_init, reads this file from
directory INPUT and the termination routine, ice_model_end, writes
this file in directory RESTART.
Restart file format
record variable(s) initial value if not present
1 control character*80 string
2 nlon,nlat,npart input arguments to initialization
3 part_size ice free everywhere
4 temp temp_ice_freeze (see namelist)
5 thickness 0.0
6 albedo 0.14
7 rough_mom 0.0004
8 rough_heat 0.0004
9 rough_moist 0.0004
10 u_surf 0.0
11 v_surf 0.0
12 frazil 0.0
NOTE
The control record must be "amip ice model restart format 01"
to be able to read the restart file. If a FATAL error occurs
reading this record you can "cold start" the ice model by
removing the restart file "INPUT/ice_model.res".
ERROR MESSAGES
Fatal Error in avg_bottom_quantities
no ocean model fluxes have been averaged
The averaging count was zero. Routine update_ice_model_fast
may not have been called before update_ice_model_slow.
Fatal Errors in ice_model
this version must have num_part = 2
This version of the ice model must have exactly two partitions,
ice-free and ice-covered. You have probably modified the namelist value.
this version must have num_lev = 1
This version of the ice model must have exactly one ice level.
You have probably modified the namelist value.
this version does not allow varying ice thickness
This version of the ice model has specified ice and ice thickness.
You have probably modified the namelist value for specified_ice.
number of processor requested not compatible with grid
The domain decomposition either requested or computed was
not compatible with the resolution of the grid.
If you requested a decomposition other than the default,
check to make sure it is correct.
Also, the number of processor you are running on may not be
compatible with the resolution of the model.
Otherwise there may be a code error.
Fatal Error in ice_model_init
this version only supports temperature and velocity grid with the same size
The size of input arguments to routine ice_model_init:
glonb, glonb_uv and glatb, glatb_uv must be the same.
invalid restart format
The control record of file INPUT/ice_model.res did not match
the expected control record. You will not be able to read this
restart file. You will have cold start the ice model by removing
file INPUT/ice_model.res.
incorrect resolution on restart
The size of input arguments (lonb,latb) to routine ice_model_init
do not agree with the resolution (record 1) of the input restart file.