PUBLIC INTERFACE / DATA / ROUTINES / NAMELIST / DIAGNOSTICS / CHANGES / ERRORS / REFERENCES / NOTES


module ice_model

     Contact:
     Reviewers:

     Tags/Status

OVERVIEW


     A simple ice model with implicit heat diffusion through a single
     ice layer with arbitrary ice/ice-free coverage in a grid box.


   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.


OTHER MODULES USED


      ice_albedo_mod
    ocean_albedo_mod
     ocean_rough_mod
    time_manager_mod
     amip_interp_mod
       constants_mod
             fms_mod
     mpp_domains_mod


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"]


DIAGNOSTIC FIELDS

Diagnostic fields may be output to a netcdf file by specifying the
module name ice_model and the desired field names (given below)
in file diag_table. See the documentation for diag_manager.

Diagnostic fields for module name: ice_model

   field name   field description
   ----------   -----------------

    SH          sensible heat flux           (W/m^2)
    SW          short wave heat flux         (W/m^2)
    LW          long wave heat flux over ice (W/m^2)
    SNOWFL      rate of snow fall            (kg/(m^2*s))
    RAIN        rate of rain fall            (kg/(m^2*s))
    RUNOFF      liquid runoff                (kg/(m^2*s))
    CALVING     frozen runoff                (kg/(m^2*s))
    EVAP        evaporation                  (kg/(m^2*s))
    FA_X        air stress on ice - x component (Pa)
    FA_Y        air stress on ice - y component (Pa)


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".


CHANGE HISTORY

Revision history

changes on or before 11/9/1999

    Corrections made where the freezing point of fresh water 
    replaced the freezing point of sea water.

    The namelist variable for the freezing point of sea water
    (temp_ice_freeze) is now in degrees C.


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.


REFERENCES


     None.


KNOWN BUGS


     None.


NOTES


     None.


FUTURE PLANS


     See Mike Winton.