1 | MODULE ice_2 |
---|
2 | !!====================================================================== |
---|
3 | !! *** MODULE ice *** |
---|
4 | !! Sea Ice physics: diagnostics variables of ice defined in memory |
---|
5 | !!===================================================================== |
---|
6 | !! History : 2.0 ! 2003-08 (C. Ethe) F90: Free form and module |
---|
7 | !! 3.3 ! 2009-05 (G.Garric) addition of the lim2_evp cas |
---|
8 | !! 4.0 ! 2011-01 (A. R. Porter, STFC Daresbury) dynamical allocation |
---|
9 | !!---------------------------------------------------------------------- |
---|
10 | #if defined key_lim2 |
---|
11 | !!---------------------------------------------------------------------- |
---|
12 | !! 'key_lim2' : LIM 2.0 sea-ice model |
---|
13 | !!---------------------------------------------------------------------- |
---|
14 | USE par_ice_2 ! LIM sea-ice parameters |
---|
15 | |
---|
16 | IMPLICIT NONE |
---|
17 | PRIVATE |
---|
18 | |
---|
19 | PUBLIC ice_alloc_2 ! Called in iceini_2.F90 |
---|
20 | |
---|
21 | INTEGER , PUBLIC :: numit !: ice iteration index |
---|
22 | REAL(wp), PUBLIC :: rdt_ice !: ice time step |
---|
23 | |
---|
24 | ! !!* namicerun read in iceini * |
---|
25 | CHARACTER(len=32) , PUBLIC :: cn_icerst_in = "restart_ice_in" !: suffix of ice restart name (input) |
---|
26 | CHARACTER(len=32) , PUBLIC :: cn_icerst_out = "restart_ice" !: suffix of ice restart name (output) |
---|
27 | LOGICAL , PUBLIC :: ln_limdyn = .TRUE. !: flag for ice dynamics (T) or not (F) |
---|
28 | LOGICAL , PUBLIC :: ln_limdmp = .FALSE. !: Ice damping |
---|
29 | LOGICAL , PUBLIC :: ln_vp2evp = .FALSE. !: restart from a vp file in an evp run |
---|
30 | LOGICAL , PUBLIC :: ln_nicep = .TRUE. !: flag grid points output (T) or not (F) |
---|
31 | REAL(wp) , PUBLIC :: hsndif = 0._wp !: snow temp. computation (0) or not (9999) |
---|
32 | REAL(wp) , PUBLIC :: hicdif = 0._wp !: ice temp. computation (0) or not (9999) |
---|
33 | REAL(wp), DIMENSION(2), PUBLIC :: acrit = (/ 1.e-6_wp , 1.e-6_wp /) !: minimum lead fraction in the 2 hemisphere |
---|
34 | |
---|
35 | ! !!* ice-dynamic namelist (namicedyn) * |
---|
36 | INTEGER , PUBLIC :: nbiter = 1 !: number of sub-time steps for relaxation |
---|
37 | INTEGER , PUBLIC :: nbitdr = 250 !: maximum number of iterations for relaxation |
---|
38 | INTEGER , PUBLIC :: nevp = 360 !: number of EVP subcycling iterations |
---|
39 | INTEGER , PUBLIC :: telast = 3600 !: timescale for EVP elastic waves |
---|
40 | REAL(wp), PUBLIC :: epsd = 1.0e-20_wp !: tolerance parameter for dynamic |
---|
41 | REAL(wp), PUBLIC :: alpha = 0.5_wp !: coefficient for semi-implicit coriolis |
---|
42 | REAL(wp), PUBLIC :: dm = 0.6e+03_wp !: diffusion constant for dynamics |
---|
43 | REAL(wp), PUBLIC :: om = 0.5_wp !: relaxation constant |
---|
44 | REAL(wp), PUBLIC :: resl = 5.0e-05_wp !: maximum value for the residual of relaxation |
---|
45 | REAL(wp), PUBLIC :: cw = 5.0e-03_wp !: drag coefficient for oceanic stress |
---|
46 | REAL(wp), PUBLIC :: angvg = 0._wp !: turning angle for oceanic stress |
---|
47 | REAL(wp), PUBLIC :: pstar = 1.0e+04_wp !: first bulk-rheology parameter |
---|
48 | REAL(wp), PUBLIC :: c_rhg = 20._wp !: second bulk-rhelogy parameter |
---|
49 | REAL(wp), PUBLIC :: etamn = 0._wp !: minimun value for viscosity |
---|
50 | REAL(wp), PUBLIC :: creepl = 2.e-08_wp !: creep limit |
---|
51 | REAL(wp), PUBLIC :: ecc = 2._wp !: eccentricity of the elliptical yield curve |
---|
52 | REAL(wp), PUBLIC :: ahi0 = 350._wp !: sea-ice hor. eddy diffusivity coeff. (m2/s) |
---|
53 | REAL(wp), PUBLIC :: alphaevp = 1._wp !: coefficient for the solution of EVP int. stresses |
---|
54 | |
---|
55 | REAL(wp), PUBLIC :: usecc2 !: = 1.0 / ( ecc * ecc ) |
---|
56 | REAL(wp), PUBLIC :: rhoco !: = rau0 * cw |
---|
57 | REAL(wp), PUBLIC :: sangvg, cangvg !: sin and cos of the turning angle for ocean stress |
---|
58 | REAL(wp), PUBLIC :: pstarh !: pstar / 2.0 |
---|
59 | |
---|
60 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ahiu , ahiv !: hor. diffusivity coeff. at ocean U- and V-points (m2/s) |
---|
61 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: pahu , pahv !: ice hor. eddy diffusivity coef. at ocean U- and V-points |
---|
62 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ust2s !: friction velocity |
---|
63 | |
---|
64 | !!* Ice Rheology |
---|
65 | # if defined key_lim2_vp |
---|
66 | ! !!* VP rheology * |
---|
67 | LOGICAL , PUBLIC :: lk_lim2_vp = .TRUE. !: Visco-Plactic reology flag |
---|
68 | ! |
---|
69 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hsnm , hicm !: mean snow and ice thicknesses |
---|
70 | ! |
---|
71 | # else |
---|
72 | ! !!* EVP rheology * |
---|
73 | LOGICAL , PUBLIC:: lk_lim2_vp = .FALSE. !: Visco-Plactic reology flag |
---|
74 | ! |
---|
75 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: stress1_i !: first stress tensor element |
---|
76 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: stress2_i !: second stress tensor element |
---|
77 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: stress12_i !: diagonal stress tensor element |
---|
78 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: delta_i !: rheology delta factor (see Flato and Hibler 95) [s-1] |
---|
79 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: divu_i !: Divergence of the velocity field [s-1] -> limrhg.F90 |
---|
80 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: shear_i !: Shear of the velocity field [s-1] -> limrhg.F90 |
---|
81 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: at_i !: ice fraction |
---|
82 | ! |
---|
83 | REAL(wp), PUBLIC, DIMENSION(:,:) , POINTER :: vt_s ,vt_i !: mean snow and ice thicknesses |
---|
84 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:), TARGET :: hsnm , hicm !: target vt_s,vt_i pointers |
---|
85 | #endif |
---|
86 | |
---|
87 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rdvosif !: ice volume change at ice surface (only used for outputs) |
---|
88 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rdvobif !: ice volume change at ice bottom (only used for outputs) |
---|
89 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fdvolif !: Total ice volume change (only used for outputs) |
---|
90 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rdvonif !: Lateral ice volume change (only used for outputs) |
---|
91 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sist !: Sea-Ice Surface Temperature [Kelvin] |
---|
92 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tfu !: Freezing/Melting point temperature of sea water at SSS |
---|
93 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hicif !: Ice thickness |
---|
94 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hsnif !: Snow thickness |
---|
95 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hicifp !: Ice production/melting |
---|
96 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: frld !: Leads fraction = 1-a/totalarea |
---|
97 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: phicif !: ice thickness at previous time |
---|
98 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: pfrld !: Leads fraction at previous time |
---|
99 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qstoif !: Energy stored in the brine pockets |
---|
100 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fbif !: Heat flux at the ice base |
---|
101 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rdmsnif !: Variation of snow mass |
---|
102 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rdmicif !: Variation of ice mass |
---|
103 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qldif !: heat balance of the lead (or of the open ocean) |
---|
104 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qcmif !: Energy needed to freeze the ocean surface layer |
---|
105 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fdtcn !: net downward heat flux from the ice to the ocean |
---|
106 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qdtcn !: energy from the ice to the ocean point (at a factor 2) |
---|
107 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: thcm !: part of the solar energy used in the lead heat budget |
---|
108 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fstric !: Solar flux transmitted trough the ice |
---|
109 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ffltbif !: linked with the max heat contained in brine pockets (?) |
---|
110 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fscmbq !: Linked with the solar flux below the ice (?) |
---|
111 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fsbbq !: Also linked with the solar flux below the ice (?) |
---|
112 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qfvbq !: used to store energy in case of toral lateral ablation (?) |
---|
113 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: dmgwi !: Variation of the mass of snow ice |
---|
114 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: u_ice, v_ice !: two components of the ice velocity at I-point (m/s) |
---|
115 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: u_oce, v_oce !: two components of the ocean velocity at I-point (m/s) |
---|
116 | |
---|
117 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tbif !: Temperature inside the ice/snow layer |
---|
118 | |
---|
119 | !!* moment used in the advection scheme |
---|
120 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sxice, syice, sxxice, syyice, sxyice !: for ice volume |
---|
121 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sxsn, sysn, sxxsn, syysn, sxysn !: for snow volume |
---|
122 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sxa, sya, sxxa, syya, sxya !: for ice cover area |
---|
123 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sxc0, syc0, sxxc0, syyc0, sxyc0 !: for heat content of snow |
---|
124 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sxc1, syc1, sxxc1, syyc1, sxyc1 !: for heat content of 1st ice layer |
---|
125 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sxc2, syc2, sxxc2, syyc2, sxyc2 !: for heat content of 2nd ice layer |
---|
126 | REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sxst, syst, sxxst, syyst, sxyst !: for heat content of brine pockets |
---|
127 | !!---------------------------------------------------------------------- |
---|
128 | CONTAINS |
---|
129 | |
---|
130 | INTEGER FUNCTION ice_alloc_2() |
---|
131 | !!----------------------------------------------------------------- |
---|
132 | !! *** FUNCTION ice_alloc_2 *** |
---|
133 | !!----------------------------------------------------------------- |
---|
134 | USE lib_mpp, ONLY: ctl_warn ! MPP library |
---|
135 | INTEGER :: ierr(9) ! Local variables |
---|
136 | !!----------------------------------------------------------------- |
---|
137 | ierr(:) = 0 |
---|
138 | ! |
---|
139 | ALLOCATE( ahiu(jpi,jpj) , pahu(jpi,jpj) , & |
---|
140 | & ahiv(jpi,jpj) , pahv(jpi,jpj) , ust2s(jpi,jpj) , STAT=ierr(1) ) |
---|
141 | ! |
---|
142 | !* Ice Rheology |
---|
143 | #if defined key_lim2_vp |
---|
144 | ALLOCATE( hsnm(jpi,jpj) , hicm(jpi,jpj) , STAT=ierr(2) ) |
---|
145 | #else |
---|
146 | ALLOCATE( stress1_i (jpi,jpj) , delta_i(jpi,jpj) , at_i(jpi,jpj) , & |
---|
147 | stress2_i (jpi,jpj) , divu_i (jpi,jpj) , hsnm(jpi,jpj) , & |
---|
148 | stress12_i(jpi,jpj) , shear_i(jpi,jpj) , hicm(jpi,jpj) , STAT=ierr(2) ) |
---|
149 | #endif |
---|
150 | ALLOCATE( rdvosif(jpi,jpj) , rdvobif(jpi,jpj) , & |
---|
151 | & fdvolif(jpi,jpj) , rdvonif(jpi,jpj) , & |
---|
152 | & sist (jpi,jpj) , tfu (jpi,jpj) , hicif(jpi,jpj) , & |
---|
153 | & hsnif (jpi,jpj) , hicifp (jpi,jpj) , frld (jpi,jpj) , STAT=ierr(3) ) |
---|
154 | |
---|
155 | ALLOCATE(phicif(jpi,jpj) , pfrld (jpi,jpj) , qstoif (jpi,jpj) , & |
---|
156 | & fbif (jpi,jpj) , rdmsnif(jpi,jpj) , rdmicif(jpi,jpj) , & |
---|
157 | & qldif (jpi,jpj) , qcmif (jpi,jpj) , fdtcn (jpi,jpj) , & |
---|
158 | & qdtcn (jpi,jpj) , thcm (jpi,jpj) , STAT=ierr(4) ) |
---|
159 | |
---|
160 | ALLOCATE(fstric(jpi,jpj) , ffltbif(jpi,jpj) , fscmbq(jpi,jpj) , & |
---|
161 | & fsbbq (jpi,jpj) , qfvbq (jpi,jpj) , dmgwi (jpi,jpj) , & |
---|
162 | & u_ice (jpi,jpj) , v_ice (jpi,jpj) , & |
---|
163 | & u_oce (jpi,jpj) , v_oce (jpi,jpj) , & |
---|
164 | & tbif (jpi,jpj,jplayersp1) , STAT=ierr(5)) |
---|
165 | |
---|
166 | !* moment used in the advection scheme |
---|
167 | ALLOCATE(sxice (jpi,jpj) , syice (jpi,jpj) , sxxice(jpi,jpj) , & |
---|
168 | & syyice(jpi,jpj) , sxyice(jpi,jpj) , & |
---|
169 | & sxsn (jpi,jpj) , sysn (jpi,jpj) , sxxsn (jpi,jpj) , & |
---|
170 | & syysn (jpi,jpj) , sxysn (jpi,jpj) , STAT=ierr(6) ) |
---|
171 | ALLOCATE(sxa (jpi,jpj) , sya (jpi,jpj) , sxxa (jpi,jpj) , & |
---|
172 | & syya (jpi,jpj) , sxya (jpi,jpj) , & |
---|
173 | & sxc0 (jpi,jpj) , syc0 (jpi,jpj) , sxxc0 (jpi,jpj) , & |
---|
174 | & syyc0 (jpi,jpj) , sxyc0 (jpi,jpj) , STAT=ierr(7)) |
---|
175 | ALLOCATE(sxc1 (jpi,jpj) , syc1 (jpi,jpj) , sxxc1 (jpi,jpj) , & |
---|
176 | & syyc1 (jpi,jpj) , sxyc1 (jpi,jpj) , & |
---|
177 | & sxc2 (jpi,jpj) , syc2 (jpi,jpj) , sxxc2 (jpi,jpj) , & |
---|
178 | & syyc2 (jpi,jpj) , sxyc2 (jpi,jpj) , STAT=ierr(8)) |
---|
179 | ALLOCATE(sxst (jpi,jpj) , syst (jpi,jpj) , sxxst (jpi,jpj) , & |
---|
180 | & syyst (jpi,jpj) , sxyst (jpi,jpj) , STAT=ierr(9)) |
---|
181 | ! |
---|
182 | ice_alloc_2 = MAXVAL( ierr ) |
---|
183 | ! |
---|
184 | IF( ice_alloc_2 /= 0 ) CALL ctl_warn('ice_alloc_2: failed to allocate arrays') |
---|
185 | ! |
---|
186 | END FUNCTION ice_alloc_2 |
---|
187 | |
---|
188 | #else |
---|
189 | !!---------------------------------------------------------------------- |
---|
190 | !! Default option Empty module NO LIM 2.0 sea-ice model |
---|
191 | !!---------------------------------------------------------------------- |
---|
192 | #endif |
---|
193 | !!----------------------------------------------------------------- |
---|
194 | !! NEMO/LIM2 3.3 , UCL - NEMO Consortium (2010) |
---|
195 | !! $Id$ |
---|
196 | !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) |
---|
197 | !!====================================================================== |
---|
198 | END MODULE ice_2 |
---|