Skip to content

Commit

Permalink
Creating a release tag for CICE version 4.1. This tag is identical to…
Browse files Browse the repository at this point in the history
… the

cice trunk, r275, except for source/ice_forcing.F90 and special drivers.


Added an alternative parameterization for ice conductivity suggested by 
Pringle et al. (JGR 2007) and tuned the gx1 configuration to improve the 
ice thickness simulation.  These changes involved several parameters now 
in namelist, including the ice thickness above which bare ice albedo is 
constant, a flag for the conductivity parameterization, a parameter that 
determines the ridged ice thickness distribution, and the minimum friction 
velocity for oceanic heat flux to the underside of the ice.  A manuscript 
submitted to Ocean Modelling entitled "Sea Ice Thickness Sensitivities" 
documents these changes (contact E. Hunke).  

Implemented two tracers for tracking the ridged ice area and volume.  The 
actual tracers are for level (undeformed) ice area and volume, which are 
much easier to implement.  Ice that is not level is recognized as ridged.  
Both level ice and ridged ice are offered as history output. 

Added a column configuration.  Because of the boundary conditions and other 
spatial assumptions in the model, this is not a single column, but a small 
array of columns (minimum grid size is 5x5).  However, only the single, 
central column is used (all other columns are designated as land). 

The history module has been generalized to allow output at different 
frequencies.  Five output frequencies ('1', 'h', 'd', 'm', 'y') are available 
simultaneously during a run.   The same variable can be output at different 
frequencies (say daily and monthly) via its f_<variable> string in namelist.  
Variables with a third and/or fourth dimension (i.e., vertical; categories) 
are also available for output in the history files.

Reduced work and memory needed for multiple tracers.  Originally the number 
of tracers was fixed, but in CICE version 4 some tracers may be turned off 
at runtime.  Arrays and loops have been reduced to the size needed only for 
active tracers. 

Added an alternative "T-fold" tripole grid option.  The tripole option in 
CICE 4.0 is for "U-fold" grids.  

Corrected bugs, particularly for nonstandard configurations (for example, 
nghost=2).

Except for the albedo diagnostic output, results are bit-for-bit identical 
to those from the previous release when using the same parameter set 
(conduct='MU71', ahmax=0.5, mu_rdg=4, ustar_min=0.05).   Some of these 
parameters have changed in the new, default ice_in files (for gx1 and col 
configurations, not for gx3).  In particular, ustar_min was much too large 
and has been reduced to 0.0005 m/s.  Now, ahmax=0.3 m corresponds with the 
World Meteorological Organization's definition of white ice.

Physics
 - Added tracers for tracking the ridged ice area and volume
 - Tuned the gx1 configuration to improve the ice thickness simulation  
   (namelist parameters: conduct, ahmax, mu_rdg, ustar_min)
 - Added option for Pringle et al (2007) conductivity

Infrastructure 
 - Simplified and corrected some index calculations for neighbor blocks
 - Generalized indices for mapping data to ghost cells when nghost>1
 - Increment and count tracers during initialization instead of hardwiring them
 - Arrays and loops have been reduced to the size needed only for active tracers
 - Added new, alternative "T-fold" tripole grid option
 - Implemented an alternative method for averaging points along the tripole grid cut
 - Added column configuration
 - Moved several hardwired parameters into namelist

Diagnostics 
 - The history module has been generalized to allow output at different frequencies 
and for additional dimensions
 - Use 'ppt' to denote salinity units instead of 'psu'
 - Call ice_write_hist initially only if write_ic is true
 - Corrected albedo weights used in diagnostics
 - Corrected indices in diagnostic routine quasilocal_max_min

Bug fixes
 - Match order of operations for derived grid quantities to prevent round-off 
differences along the tripole grid cut.
 - Use 0 instead of puny for conditional to load tracer array, for conservation
 - Limit call to atmospheric boundary layer calculation by icells
 - Correct calendar for 360-day years.
 - Correct field_loc and field_type in some subroutine calls 
 - Declare subroutine argument ns outside of netcdf ifdef in routine icecdf 
 - Remove ustar_scale
 - Remove continuation from declaration statement in ice_flux.F90
  • Loading branch information
eclare108213 committed May 5, 2010
1 parent cb83567 commit 43b621c
Show file tree
Hide file tree
Showing 51 changed files with 7,788 additions and 5,182 deletions.
23 changes: 15 additions & 8 deletions README_v4.0 → README_v4.1
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@

CICE version 4.0
August, 2008
CICE version 4.1
May, 2010

This directory contains files needed to run version 4.0 of CICE, the
This directory contains files needed to run version 4.1 of CICE, the
LANL sea ice model, in standalone mode on a 3 degree grid. As
currently configured, the model runs on 4 processors. MPI is used for
message passing between processors. The grid provided here is too
Expand Down Expand Up @@ -53,7 +53,7 @@ data.

cice/

README_v4.0 this file
README_v4.1 this file
clean_ice script that cleans out compile directory
comp_ice script that sets up and compiles the code
ice.log.<OS>* sample diagnostic output files
Expand Down Expand Up @@ -102,9 +102,13 @@ cice/input_templates/gx3/
global_gx3.grid 3.6 x 1.85 deg displaced pole grid, 'gx3'
global_gx3.kmt 3.6 x 1.85 deg land mask (N pole is in Greenland)
ice.restart_file pointer with restart filename
ice_in namelist input parameters for the given OS
ice_in namelist input parameters
iced_gx3_v4.0_kcatbound0 restart file used for initial condition

cice/input_templates/col/

ice_in namelist input parameters for column configuration

cice/mpi/ modules that require MPI calls

ice_boundary.F90 boundary conditions
Expand Down Expand Up @@ -137,6 +141,7 @@ ice_history.F90 writes binary or netCDF output to history files
ice_init.F90 initializations
ice_itd.F90 routines for managing ice thickness distribution
ice_kinds_mod.F90 basic definitions of reals, integers, etc.
ice_lvl.F90 handles most work associated with level ice tracers
ice_mechred.F90 mechanical redistribution (ridging) routines
ice_meltpond.F90 meltpond parameterization
ice_ocean.F90 mixed layer routines
Expand Down Expand Up @@ -179,9 +184,11 @@ ice.restart_file restart pointer from cice/input_templates/gx3/

--- Authors ---

Please report any bugs to the authors:
Elizabeth Hunke (eclare@lanl.gov)
Bill Lipscomb (lipscomb@lanl.gov)
Elizabeth Hunke
Bill Lipscomb
and many others, greatly appreciated.

Please report any bugs to Elizabeth Hunke (eclare@lanl.gov)

Good luck!

46 changes: 46 additions & 0 deletions bld/Macros.Linux.ORNL.jaguar
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#==============================================================================
# Makefile macros for "jaguar," an ORNL Cray XT3 running Linux
#==============================================================================

INCLDIR := -I.
SLIBS :=
ULIBS :=
CPP := /usr/bin/cpp
CPPFLAGS := -P -traditional-cpp -DPOSIX
CPPDEFS := -DLINUX
CFLAGS := -c -fastsse -tp k8-64
FIXEDFLAGS := -Mfixed
FREEFLAGS := -Mfree
FC := ftn
#FFLAGS := $(INCLDIR) -O3 -byteswapio
FFLAGS := $(INCLDIR) -g -O3 -byteswapio -fastsse -tp k8-64 -Knoieee -Mextend -Mdaz
#FFLAGS := $(INCLDIR) -O3 -byteswapio -Ktrap=inv,divz,ovf,unf
#FFLAGS := $(INCLDIR) -O3 -byteswapio -Mflushz
MOD_SUFFIX := mod
LD := ftn
LDFLAGS :=

CPPDEFS := $(CPPDEFS) -DNXGLOB=$(NXGLOB) -DNYGLOB=$(NYGLOB) \
-DBLCKX=$(BLCKX) -DBLCKY=$(BLCKY) -DMXBLCKS=$(MXBLCKS)
# CPPDEFS := $(CPPDEFS) -DAOMIP

ifeq ($(COMMDIR), mpi)
# SLIBS := $(SLIBS) -lmpich
endif

ifeq ($(DITTO), yes)
CPPDEFS := $(CPPDEFS) -DREPRODUCIBLE
endif

ifeq ($(NETCDF), yes)
CPPDEFS := $(CPPDEFS) -Dncdf
INCLDIR := $(INCLDIR) -I/apps/netcdf/prod/jaguar/include
SLIBS := $(SLIBS) -L/apps/netcdf/prod/jaguar/lib -lnetcdf
endif

ifeq ($(USE_ESMF), yes)
CPPDEFS := $(CPPDEFS) -Duse_esmf
INCLDIR := $(INCLDIR) -I /net/bob1/ESMF/esmf/mod/modO/Linux.intel.64.mauve
SLIBS := $(SLIBS) -L /net/bob1/ESMF/esmf/lib/libO/Linux.intel.64.mauve -lesmf -lcprts -lrt -ldl
endif

19 changes: 14 additions & 5 deletions comp_ice
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ setenv SITE LANL.coyote
#setenv SITE LLNL.atlas

### SYSTEM_USERDIR is predefined on ORNL machines
setenv SYSTEM_USERDIR /scratch2/eclare/CICE.v4.0 # coyote
setenv SYSTEM_USERDIR /scratch1/eclare/CICE.v4.0 # coyote
#setenv SYSTEM_USERDIR /scr/eclare # kraken
#setenv SYSTEM_USERDIR /ptmp/eclare # bluevista
#setenv SYSTEM_USERDIR /p/lscratchb/hunke1 # atlas
Expand All @@ -18,6 +18,7 @@ setenv SYSTEM_USERDIR /scratch2/eclare/CICE.v4.0 # coyote
setenv RES gx3 ; setenv GRID 100x116
#setenv RES gx1 ; setenv GRID 320x384
#setenv RES tx1 ; setenv GRID 360x240
#setenv RES col ; setenv GRID 5x5

set NXGLOB = `echo $GRID | sed s/x.\*//`
set NYGLOB = `echo $GRID | sed s/.\*x//`
Expand All @@ -29,9 +30,15 @@ set NYGLOB = `echo $GRID | sed s/.\*x//`
# squarish blocks with distribution_type='rake'
# If BLCKX (BLCKY) does not divide NXGLOB (NYGLOB) evenly, padding
# will be used on the right (top) of the grid.
setenv NTASK 4 # total number of processors
setenv BLCKX 25 # x-dimension of blocks ( not including )
setenv BLCKY 29 # y-dimension of blocks ( ghost cells )
if ($RES == 'col') then # for column configuration:
setenv NTASK 1 # total number of processors
setenv BLCKX 5 # x-dimension of blocks ( not including )
setenv BLCKY 5 # y-dimension of blocks ( ghost cells )
else # test problem: gx3
setenv NTASK 4 # total number of processors
setenv BLCKX 25 # x-dimension of blocks ( not including )
setenv BLCKY 29 # y-dimension of blocks ( ghost cells )
endif

# may need to increase MXBLCKS with rake distribution or padding
@ a = $NXGLOB * $NYGLOB ; @ b = $BLCKX * $BLCKY * $NTASK
Expand All @@ -46,7 +53,7 @@ setenv NETCDF yes # set to no if netcdf library is unavailable
setenv DITTO no # reproducible diagnostics

### Set SRCDIR and EXEDIR to your own paths!
setenv SRCDIR /usr/projects/climate/eclare/CICE.v4.0/cice # coyote
setenv SRCDIR /usr/projects/climate/eclare/CICE.v4.0/release-4.0 # coyote
#setenv SRCDIR $HOME/cice # kraken
#setenv SRCDIR /g/g21/hunke1/cice # atlas
#setenv SRCDIR /ptmp/eclare/cice # bluevista
Expand All @@ -71,8 +78,10 @@ cd $SRCDIR/source

cd $EXEDIR

if !($RES == 'col') then
if !(-e grid) cp $SRCDIR/input_templates/$RES/global_$RES.grid grid
if !(-e kmt) cp $SRCDIR/input_templates/$RES/global_$RES.kmt kmt
endif
if !(-e ice_in) cp $SRCDIR/input_templates/$RES/ice_in .
if !(-e run_ice) cp $SRCDIR/input_templates/run_ice.$ARCH run_ice

Expand Down
Binary file modified doc/cicedoc.pdf
Binary file not shown.
8 changes: 6 additions & 2 deletions drivers/cice4/CICE_InitMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ module CICE_InitMod
use ice_meltpond
use ice_ocean
use ice_orbital
use ice_lvl
use ice_restoring
use ice_shortwave
use ice_therm_itd
use ice_therm_vertical
Expand Down Expand Up @@ -136,7 +138,7 @@ subroutine cice_init

call init_calendar ! initialize some calendar stuff
call init_hist (dt) ! initialize output history file
call init_evp (dt) ! define evp dynamics parameters, variables
call init_evp (dyn_dt) ! define evp dynamics parameters, variables
call init_coupler_flux ! initialize fluxes exchanged with coupler
#ifdef popcice
call sst_sss ! POP data for CICE initialization
Expand All @@ -158,6 +160,7 @@ subroutine cice_init

! tracers
if (tr_iage) call init_age ! ice age tracer
if (tr_lvl) call init_lvl ! level ice tracer
if (tr_pond) call init_meltponds ! melt ponds

call init_diags ! initialize diagnostic output points
Expand Down Expand Up @@ -192,7 +195,8 @@ subroutine cice_init
call init_flux_atm ! initialize atmosphere fluxes sent to coupler
call init_flux_ocn ! initialize ocean fluxes sent to coupler

call ice_write_hist(dt) ! write initial conditions if write_ic = T
if (restore_ice) call ice_HaloRestore_init ! restored boundary conditions
if (write_ic) call ice_write_hist(dt) ! write initial conditions

end subroutine cice_init

Expand Down
56 changes: 39 additions & 17 deletions drivers/cice4/CICE_RunMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ module CICE_RunMod
use ice_init
use ice_itd
use ice_kinds_mod
use ice_lvl
use ice_mechred
use ice_meltpond
use ice_ocean
Expand Down Expand Up @@ -233,6 +234,7 @@ subroutine ice_step
if (write_restart == 1) then
call dumpfile ! core variables for restarting
if (tr_iage) call write_restart_age
if (tr_lvl) call write_restart_lvl
if (tr_pond) call write_restart_pond
endif
call ice_timer_stop(timer_readwrite) ! reading/writing
Expand Down Expand Up @@ -301,12 +303,12 @@ subroutine step_therm1 (dt)
shcoef , & ! transfer coefficient for sensible heat
lhcoef ! transfer coefficient for latent heat

! Local variables to keep track of melt for ponds
real (kind=dbl_kind), dimension (nx_block,ny_block) :: &
melts_old, &
meltt_old, &
melts_tmp, &
meltt_tmp
melttn , & ! top melt in category n (m)
meltbn , & ! bottom melt in category n (m)
meltsn , & ! snow melt in category n (m)
congeln , & ! congelation ice formation in category n (m)
snoicen ! snow-ice formation in category n (m)

type (block) :: &
this_block ! block information for current block
Expand Down Expand Up @@ -386,7 +388,7 @@ subroutine step_therm1 (dt)
enddo ! i
enddo ! j

if (calc_Tsfc .or. calc_strair) then
if ((calc_Tsfc .or. calc_strair) .and. icells > 0) then

!-----------------------------------------------------------------
! Atmosphere boundary layer calculation; compute coefficients
Expand Down Expand Up @@ -460,9 +462,6 @@ subroutine step_therm1 (dt)
sl1 = slyr1(n)
sl2 = slyrn(n)

melts_old = melts(:,:,iblk)
meltt_old = meltt(:,:,iblk)

if (.not.(calc_Tsfc)) then

! If not calculating surface temperature and fluxes, set
Expand Down Expand Up @@ -523,9 +522,9 @@ subroutine step_therm1 (dt)
fswabsn, flwoutn, &
evapn, freshn, &
fsaltn, fhocnn, &
meltt (:,:,iblk), melts (:,:,iblk), &
meltb (:,:,iblk), &
congel (:,:,iblk), snoice (:,:,iblk), &
melttn, meltsn, &
meltbn, &
congeln, snoicen, &
mlt_onset(:,:,iblk), frz_onset(:,:,iblk), &
yday, l_stop, &
istop, jstop)
Expand All @@ -550,12 +549,9 @@ subroutine step_therm1 (dt)

if (tr_pond .and. trim(shortwave) == 'dEdd') then

melts_tmp = melts(:,:,iblk) - melts_old
meltt_tmp = meltt(:,:,iblk) - meltt_old

call compute_ponds(nx_block, ny_block, &
ilo, ihi, jlo, jhi, &
meltt_tmp, melts_tmp, frain(:,:,iblk), &
melttn, meltsn, frain(:,:,iblk), &
aicen (:,:,n,iblk), vicen (:,:,n,iblk), &
vsnon (:,:,n,iblk), trcrn (:,:,:,n,iblk),&
apondn(:,:,n,iblk), hpondn(:,:,n,iblk))
Expand Down Expand Up @@ -586,7 +582,11 @@ subroutine step_therm1 (dt)
evap (:,:,iblk), &
Tref (:,:,iblk), Qref (:,:,iblk), &
fresh (:,:,iblk), fsalt (:,:,iblk), &
fhocn (:,:,iblk), fswthru (:,:,iblk))
fhocn (:,:,iblk), fswthru (:,:,iblk), &
melttn, meltsn, meltbn, congeln, snoicen, &
meltt (:,:,iblk), melts (:,:,iblk), &
meltb (:,:,iblk), &
congel (:,:,iblk), snoice (:,:,iblk))

enddo ! ncat

Expand Down Expand Up @@ -629,6 +629,8 @@ subroutine coupling_prep
i,j , & ! horizontal indices
ilo,ihi,jlo,jhi ! beginning and end of physical domain

real (kind=dbl_kind) :: cszn ! counter for history averaging

call ice_timer_start(timer_column)

!-----------------------------------------------------------------
Expand All @@ -650,6 +652,17 @@ subroutine coupling_prep
alidf(i,j,iblk) = c0
alvdr(i,j,iblk) = c0
alidr(i,j,iblk) = c0

albice(i,j,iblk) = c0
albsno(i,j,iblk) = c0
albpnd(i,j,iblk) = c0

! for history averaging
cszn = c0
if (coszen(i,j,iblk) > puny) cszn = c1
do n = 1, nstreams
albcnt(i,j,iblk,n) = albcnt(i,j,iblk,n) + cszn
enddo
enddo
enddo
do n = 1, ncat
Expand All @@ -663,6 +676,15 @@ subroutine coupling_prep
+ alvdrn(i,j,n,iblk)*aicen(i,j,n,iblk)
alidr(i,j,iblk) = alidr(i,j,iblk) &
+ alidrn(i,j,n,iblk)*aicen(i,j,n,iblk)

if (coszen(i,j,iblk) > puny) then ! sun above horizon
albice(i,j,iblk) = albice(i,j,iblk) &
+ albicen(i,j,n,iblk)*aicen(i,j,n,iblk)
albsno(i,j,iblk) = albsno(i,j,iblk) &
+ albsnon(i,j,n,iblk)*aicen(i,j,n,iblk)
albpnd(i,j,iblk) = albpnd(i,j,iblk) &
+ albpndn(i,j,n,iblk)*aicen(i,j,n,iblk)
endif
enddo
enddo
enddo
Expand Down
Loading

0 comments on commit 43b621c

Please sign in to comment.