New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
limistate.F90 in branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3 – NEMO

source: branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90 @ 5051

Last change on this file since 5051 was 5051, checked in by clem, 9 years ago

LIM3 initialization is now called at the same time as other sbc fields

  • Property svn:keywords set to Id
File size: 24.0 KB
Line 
1MODULE limistate
2   !!======================================================================
3   !!                     ***  MODULE  limistate  ***
4   !!              Initialisation of diagnostics ice variables
5   !!======================================================================
6   !! History :  2.0  ! 2004-01 (C. Ethe, G. Madec)  Original code
7   !!            4.0  ! 2011-02 (G. Madec) dynamical allocation
8   !!             -   ! 2014    (C. Rousset) add N/S initializations
9   !!----------------------------------------------------------------------
10#if defined key_lim3
11   !!----------------------------------------------------------------------
12   !!   'key_lim3' :                                    LIM3 sea-ice model
13   !!----------------------------------------------------------------------
14   !!   lim_istate      :  Initialisation of diagnostics ice variables
15   !!   lim_istate_init :  initialization of ice state and namelist read
16   !!----------------------------------------------------------------------
17   USE phycst           ! physical constant
18   USE oce              ! dynamics and tracers variables
19   USE dom_oce          ! ocean domain
20   USE sbc_oce          ! Surface boundary condition: ocean fields
21   USE sbc_ice          ! Surface boundary condition: ice fields
22   USE eosbn2           ! equation of state
23   USE ice              ! sea-ice variables
24   USE par_ice          ! ice parameters
25   USE par_oce          ! ocean parameters
26   USE dom_ice          ! sea-ice domain
27   USE in_out_manager   ! I/O manager
28   USE lib_mpp          ! MPP library
29   USE lib_fortran      ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 
30   USE wrk_nemo         ! work arrays
31
32   IMPLICIT NONE
33   PRIVATE
34
35   PUBLIC   lim_istate      ! routine called by lim_init.F90
36
37   !                          !!** init namelist (namiceini) **
38   REAL(wp) ::   thres_sst   ! threshold water temperature for initial sea ice
39   REAL(wp) ::   hts_ini_n   ! initial snow thickness in the north
40   REAL(wp) ::   hts_ini_s   ! initial snow thickness in the south
41   REAL(wp) ::   hti_ini_n   ! initial ice thickness in the north
42   REAL(wp) ::   hti_ini_s   ! initial ice thickness in the south
43   REAL(wp) ::   ati_ini_n   ! initial leads area in the north
44   REAL(wp) ::   ati_ini_s   ! initial leads area in the south
45   REAL(wp) ::   smi_ini_n   ! initial salinity
46   REAL(wp) ::   smi_ini_s   ! initial salinity
47   REAL(wp) ::   tmi_ini_n   ! initial temperature
48   REAL(wp) ::   tmi_ini_s   ! initial temperature
49
50   LOGICAL  ::  ln_limini    ! initialization or not
51   !!----------------------------------------------------------------------
52   !!   LIM 3.0,  UCL-LOCEAN-IPSL (2008)
53   !! $Id$
54   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
55   !!----------------------------------------------------------------------
56CONTAINS
57
58   SUBROUTINE lim_istate
59      !!-------------------------------------------------------------------
60      !!                    ***  ROUTINE lim_istate  ***
61      !!
62      !! ** Purpose :   defined the sea-ice initial state
63      !!
64      !! ** Method  :   
65      !!                This routine will put some ice where ocean
66      !!                is at the freezing point, then fill in ice
67      !!                state variables using prescribed initial
68      !!                values in the namelist           
69      !!
70      !! ** Steps   :   
71      !!                1) Read namelist
72      !!                2) Basal temperature; ice and hemisphere masks
73      !!                3) Fill in the ice thickness distribution using gaussian
74      !!                4) Fill in space-dependent arrays for state variables
75      !!                5) Diagnostic arrays
76      !!                6) Lateral boundary conditions
77      !!
78      !! ** Notes   : o_i, t_su, t_s, t_i, s_i must be filled everywhere, even
79      !!              where there is no ice (clem: I do not know why, is it mandatory?)
80      !!
81      !! History :
82      !!   2.0  !  01-04  (C. Ethe, G. Madec)  Original code
83      !!   3.0  !  2007   (M. Vancoppenolle)   Rewrite for ice cats
84      !!   4.0  !  09-11  (M. Vancoppenolle)   Enhanced version for ice cats
85      !!--------------------------------------------------------------------
86
87      !! * Local variables
88      INTEGER    :: ji, jj, jk, jl             ! dummy loop indices
89      REAL(wp)   :: ztmelts, zdh
90      INTEGER    :: i_hemis, i_fill, jl0 
91      REAL(wp)   :: ztest_1, ztest_2, ztest_3, ztest_4, ztests, zsigma, zarg, zA, zV, zA_cons, zV_cons, zconv
92      REAL(wp), POINTER, DIMENSION(:)     :: zht_i_ini, zat_i_ini, zvt_i_ini, zht_s_ini, zsm_i_ini, ztm_i_ini
93      REAL(wp), POINTER, DIMENSION(:,:)   :: zh_i_ini, za_i_ini, zv_i_ini
94      REAL(wp), POINTER, DIMENSION(:,:)   :: zswitch    ! ice indicator
95      INTEGER,  POINTER, DIMENSION(:,:)   :: zhemis   ! hemispheric index
96      !--------------------------------------------------------------------
97
98      CALL wrk_alloc( jpi, jpj, zswitch )
99      CALL wrk_alloc( jpi, jpj, zhemis )
100      CALL wrk_alloc( jpl,   2, zh_i_ini,  za_i_ini,  zv_i_ini )
101      CALL wrk_alloc(   2,      zht_i_ini, zat_i_ini, zvt_i_ini, zht_s_ini, zsm_i_ini, ztm_i_ini )
102
103      IF(lwp) WRITE(numout,*)
104      IF(lwp) WRITE(numout,*) 'lim_istate : Ice initialization '
105      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ '
106
107      !--------------------------------------------------------------------
108      ! 1) Read namelist
109      !--------------------------------------------------------------------
110
111      CALL lim_istate_init     !  reading the initials parameters of the ice
112
113      ! surface temperature
114      DO jl = 1, jpl ! loop over categories
115         t_su  (:,:,jl) = rtt * tms(:,:)
116         tn_ice(:,:,jl) = rtt * tms(:,:)
117      END DO
118
119      ! basal temperature (considered at freezing point)
120      t_bo(:,:) = ( eos_fzp( tsn(:,:,1,jp_sal) ) + rt0 ) * tms(:,:) 
121
122      IF( ln_limini ) THEN
123
124      !--------------------------------------------------------------------
125      ! 2) Basal temperature, ice mask and hemispheric index
126      !--------------------------------------------------------------------
127
128      DO jj = 1, jpj                                       ! ice if sst <= t-freez + ttest
129         DO ji = 1, jpi
130            IF( ( tsn(ji,jj,1,jp_tem)  - ( t_bo(ji,jj) - rt0 ) ) * tms(ji,jj) >= thres_sst ) THEN
131               zswitch(ji,jj) = 0._wp * tms(ji,jj)    ! no ice
132            ELSE                                                                                   
133               zswitch(ji,jj) = 1._wp * tms(ji,jj)    !    ice
134            ENDIF
135         END DO
136      END DO
137
138
139      ! Hemispheric index
140      DO jj = 1, jpj
141         DO ji = 1, jpi
142            IF( fcor(ji,jj) >= 0._wp ) THEN   
143               zhemis(ji,jj) = 1 ! Northern hemisphere
144            ELSE
145               zhemis(ji,jj) = 2 ! Southern hemisphere
146            ENDIF
147         END DO
148      END DO
149
150      !--------------------------------------------------------------------
151      ! 3) Initialization of sea ice state variables
152      !--------------------------------------------------------------------
153
154      !-----------------------------
155      ! 3.1) Hemisphere-dependent arrays
156      !-----------------------------
157      ! assign initial thickness, concentration, snow depth and salinity to an hemisphere-dependent array
158      zht_i_ini(1) = hti_ini_n ; zht_i_ini(2) = hti_ini_s  ! ice thickness
159      zht_s_ini(1) = hts_ini_n ; zht_s_ini(2) = hts_ini_s  ! snow depth
160      zat_i_ini(1) = ati_ini_n ; zat_i_ini(2) = ati_ini_s  ! ice concentration
161      zsm_i_ini(1) = smi_ini_n ; zsm_i_ini(2) = smi_ini_s  ! bulk ice salinity
162      ztm_i_ini(1) = tmi_ini_n ; ztm_i_ini(2) = tmi_ini_s  ! temperature (ice and snow)
163
164      zvt_i_ini(:) = zht_i_ini(:) * zat_i_ini(:)   ! ice volume
165
166      !---------------------------------------------------------------------
167      ! 3.2) Distribute ice concentration and thickness into the categories
168      !---------------------------------------------------------------------
169      ! a gaussian distribution for ice concentration is used
170      ! then we check whether the distribution fullfills
171      ! volume and area conservation, positivity and ice categories bounds
172      DO i_hemis = 1, 2
173
174      ztest_1 = 0 ; ztest_2 = 0 ; ztest_3 = 0 ; ztest_4 = 0
175
176      ! note for the great nemo engineers:
177      ! only very few of the WRITE statements are necessary for the reference version
178      ! they were one day useful, but now i personally doubt of their
179      ! potential for bringing anything useful
180
181      DO i_fill = jpl, 1, -1
182         IF ( ( ztest_1 + ztest_2 + ztest_3 + ztest_4 ) .NE. 4 ) THEN
183            !----------------------------
184            ! fill the i_fill categories
185            !----------------------------
186            ! *** 1 category to fill
187            IF ( i_fill .EQ. 1 ) THEN
188               zh_i_ini(1,i_hemis)       = zht_i_ini(i_hemis)
189               za_i_ini(1,i_hemis)       = zat_i_ini(i_hemis)
190               zh_i_ini(2:jpl,i_hemis)   = 0._wp
191               za_i_ini(2:jpl,i_hemis)   = 0._wp
192            ELSE
193
194               ! *** >1 categores to fill
195               !--- Ice thicknesses in the i_fill - 1 first categories
196               DO jl = 1, i_fill - 1
197                  zh_i_ini(jl,i_hemis) = hi_mean(jl)
198               END DO
199               
200               !--- jl0: most likely index where cc will be maximum
201               DO jl = 1, jpl
202                  IF ( ( zht_i_ini(i_hemis) >  hi_max(jl-1) ) .AND. &
203                     & ( zht_i_ini(i_hemis) <= hi_max(jl)   ) ) THEN
204                     jl0 = jl
205                  ENDIF
206               END DO
207               jl0 = MIN(jl0, i_fill)
208               
209               !--- Concentrations
210               za_i_ini(jl0,i_hemis)      = zat_i_ini(i_hemis) / SQRT(REAL(jpl))
211               DO jl = 1, i_fill - 1
212                  IF ( jl .NE. jl0 ) THEN
213                     zsigma               = 0.5 * zht_i_ini(i_hemis)
214                     zarg                 = ( zh_i_ini(jl,i_hemis) - zht_i_ini(i_hemis) ) / zsigma
215                     za_i_ini(jl,i_hemis) = za_i_ini(jl0,i_hemis) * EXP(-zarg**2)
216                  ENDIF
217               END DO
218               
219               zA = 0. ! sum of the areas in the jpl categories
220               DO jl = 1, i_fill - 1
221                 zA = zA + za_i_ini(jl,i_hemis)
222               END DO
223               za_i_ini(i_fill,i_hemis)   = zat_i_ini(i_hemis) - zA ! ice conc in the last category
224               IF ( i_fill .LT. jpl ) za_i_ini(i_fill+1:jpl, i_hemis) = 0._wp
225         
226               !--- Ice thickness in the last category
227               zV = 0. ! sum of the volumes of the N-1 categories
228               DO jl = 1, i_fill - 1
229                  zV = zV + za_i_ini(jl,i_hemis)*zh_i_ini(jl,i_hemis)
230               END DO
231               zh_i_ini(i_fill,i_hemis) = ( zvt_i_ini(i_hemis) - zV ) / za_i_ini(i_fill,i_hemis) 
232               IF ( i_fill .LT. jpl ) zh_i_ini(i_fill+1:jpl, i_hemis) = 0._wp
233
234               !--- volumes
235               zv_i_ini(:,i_hemis) = za_i_ini(:,i_hemis) * zh_i_ini(:,i_hemis)
236               IF ( i_fill .LT. jpl ) zv_i_ini(i_fill+1:jpl, i_hemis) = 0._wp
237
238            ENDIF ! i_fill
239
240            !---------------------
241            ! Compatibility tests
242            !---------------------
243            ! Test 1: area conservation
244            zA_cons = SUM(za_i_ini(:,i_hemis)) ; zconv = ABS(zat_i_ini(i_hemis) - zA_cons )
245            IF ( zconv .LT. 1.0e-6 ) THEN
246               ztest_1 = 1
247            ELSE 
248              ! this write is useful
249              IF(lwp)  WRITE(numout,*) ' * TEST1 AREA NOT CONSERVED *** zA_cons = ', zA_cons,' zat_i_ini = ',zat_i_ini(i_hemis) 
250               ztest_1 = 0
251            ENDIF
252
253            ! Test 2: volume conservation
254            zV_cons = SUM(zv_i_ini(:,i_hemis))
255            zconv = ABS(zvt_i_ini(i_hemis) - zV_cons)
256
257            IF ( zconv .LT. 1.0e-6 ) THEN
258               ztest_2 = 1
259            ELSE
260              ! this write is useful
261              IF(lwp)  WRITE(numout,*) ' * TEST2 VOLUME NOT CONSERVED *** zV_cons = ', zV_cons, &
262                            ' zvt_i_ini = ', zvt_i_ini(i_hemis)
263               ztest_2 = 0
264            ENDIF
265
266            ! Test 3: thickness of the last category is in-bounds ?
267            IF ( zh_i_ini(i_fill, i_hemis) > hi_max(i_fill-1) ) THEN
268               ztest_3 = 1
269            ELSE
270               ! this write is useful
271               IF(lwp) WRITE(numout,*) ' * TEST 3 THICKNESS OF THE LAST CATEGORY OUT OF BOUNDS *** zh_i_ini(i_fill,i_hemis) = ', &
272               zh_i_ini(i_fill,i_hemis), ' hi_max(jpl-1) = ', hi_max(i_fill-1)
273               ztest_3 = 0
274            ENDIF
275
276            ! Test 4: positivity of ice concentrations
277            ztest_4 = 1
278            DO jl = 1, jpl
279               IF ( za_i_ini(jl,i_hemis) .LT. 0._wp ) THEN 
280                  ! this write is useful
281                  IF(lwp) WRITE(numout,*) ' * TEST 4 POSITIVITY NOT OK FOR CAT ', jl, ' WITH A = ', za_i_ini(jl,i_hemis)
282                  ztest_4 = 0
283               ENDIF
284            END DO
285
286         ENDIF ! ztest_1 + ztest_2 + ztest_3 + ztest_4
287 
288         ztests = ztest_1 + ztest_2 + ztest_3 + ztest_4
289
290      END DO ! i_fill
291
292      IF(lwp) THEN
293         WRITE(numout,*) ' ztests : ', ztests
294         IF ( ztests .NE. 4 ) THEN
295            WRITE(numout,*)
296            WRITE(numout,*) ' !!!! ALERT                  !!! '
297            WRITE(numout,*) ' !!!! Something is wrong in the LIM3 initialization procedure '
298            WRITE(numout,*)
299            WRITE(numout,*) ' *** ztests is not equal to 4 '
300            WRITE(numout,*) ' *** ztest_i (i=1,4) = ', ztest_1, ztest_2, ztest_3, ztest_4
301            WRITE(numout,*) ' zat_i_ini : ', zat_i_ini(i_hemis)
302            WRITE(numout,*) ' zht_i_ini : ', zht_i_ini(i_hemis)
303         ENDIF ! ztests .NE. 4
304      ENDIF
305     
306      END DO ! i_hemis
307
308      !---------------------------------------------------------------------
309      ! 3.3) Space-dependent arrays for ice state variables
310      !---------------------------------------------------------------------
311
312      ! Ice concentration, thickness and volume, ice salinity, ice age, surface temperature
313      DO jl = 1, jpl ! loop over categories
314         DO jj = 1, jpj
315            DO ji = 1, jpi
316               a_i(ji,jj,jl)   = zswitch(ji,jj) * za_i_ini (jl,zhemis(ji,jj))  ! concentration
317               ht_i(ji,jj,jl)  = zswitch(ji,jj) * zh_i_ini(jl,zhemis(ji,jj))  ! ice thickness
318               ht_s(ji,jj,jl)  = ht_i(ji,jj,jl) * ( zht_s_ini( zhemis(ji,jj) ) / zht_i_ini( zhemis(ji,jj) ) )  ! snow depth
319               sm_i(ji,jj,jl)  = zswitch(ji,jj) * zsm_i_ini(zhemis(ji,jj)) !+ ( 1._wp - zswitch(ji,jj) ) * s_i_min ! salinity
320               o_i(ji,jj,jl)   = zswitch(ji,jj) * 1._wp + ( 1._wp - zswitch(ji,jj) ) ! age
321               t_su(ji,jj,jl)  = zswitch(ji,jj) * ztm_i_ini(zhemis(ji,jj)) + ( 1._wp - zswitch(ji,jj) ) * rtt ! surf temp
322
323               ! This case below should not be used if (ht_s/ht_i) is ok in namelist
324               ! In case snow load is in excess that would lead to transformation from snow to ice
325               ! Then, transfer the snow excess into the ice (different from limthd_dh)
326               zdh = MAX( 0._wp, ( rhosn * ht_s(ji,jj,jl) + ( rhoic - rau0 ) * ht_i(ji,jj,jl) ) * r1_rau0 ) 
327               ! recompute ht_i, ht_s avoiding out of bounds values
328               ht_i(ji,jj,jl) = MIN( hi_max(jl), ht_i(ji,jj,jl) + zdh )
329               ht_s(ji,jj,jl) = MAX( 0._wp, ht_s(ji,jj,jl) - zdh * rhoic / rhosn )
330
331               ! ice volume, salt content, age content
332               v_i(ji,jj,jl)   = ht_i(ji,jj,jl) * a_i(ji,jj,jl)              ! ice volume
333               v_s(ji,jj,jl)   = ht_s(ji,jj,jl) * a_i(ji,jj,jl)              ! snow volume
334               smv_i(ji,jj,jl) = MIN( sm_i(ji,jj,jl) , sss_m(ji,jj) ) * v_i(ji,jj,jl) ! salt content
335               oa_i(ji,jj,jl)  = o_i(ji,jj,jl) * a_i(ji,jj,jl)               ! age content
336            END DO ! ji
337         END DO ! jj
338      END DO ! jl
339
340      ! Snow temperature and heat content
341      DO jk = 1, nlay_s
342         DO jl = 1, jpl ! loop over categories
343            DO jj = 1, jpj
344               DO ji = 1, jpi
345                   t_s(ji,jj,jk,jl) = zswitch(ji,jj) * ztm_i_ini(zhemis(ji,jj)) + ( 1._wp - zswitch(ji,jj) ) * rtt
346                   ! Snow energy of melting
347                   e_s(ji,jj,jk,jl) = zswitch(ji,jj) * rhosn * ( cpic * ( rtt - t_s(ji,jj,jk,jl) ) + lfus )
348                   ! Change dimensions
349                   e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) / unit_fac
350                   ! Multiply by volume, so that heat content in Joules
351                   e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * area(ji,jj) * v_s(ji,jj,jl) / nlay_s
352               END DO ! ji
353            END DO ! jj
354         END DO ! jl
355      END DO ! jk
356
357      ! Ice salinity, temperature and heat content
358      DO jk = 1, nlay_i
359         DO jl = 1, jpl ! loop over categories
360            DO jj = 1, jpj
361               DO ji = 1, jpi
362                   t_i(ji,jj,jk,jl) = zswitch(ji,jj) * ztm_i_ini(zhemis(ji,jj)) + ( 1._wp - zswitch(ji,jj) ) * rtt 
363                   s_i(ji,jj,jk,jl) = zswitch(ji,jj) * zsm_i_ini(zhemis(ji,jj)) !+ ( 1._wp - zswitch(ji,jj) ) * s_i_min
364                   ztmelts          = - tmut * s_i(ji,jj,jk,jl) + rtt !Melting temperature in K
365
366                   ! heat content per unit volume
367                   e_i(ji,jj,jk,jl) = zswitch(ji,jj) * rhoic * (   cpic    * ( ztmelts - t_i(ji,jj,jk,jl) ) &
368                      +   lfus    * ( 1._wp - (ztmelts-rtt) / MIN((t_i(ji,jj,jk,jl)-rtt),-epsi20) ) &
369                      -   rcp     * ( ztmelts - rtt ) )
370
371                   ! Correct dimensions to avoid big values
372                   e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) / unit_fac 
373
374                   ! Mutliply by ice volume, and divide by number of layers to get heat content in J
375                   e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * area(ji,jj) * v_i(ji,jj,jl) / nlay_i
376               END DO ! ji
377            END DO ! jj
378         END DO ! jl
379      END DO ! jk
380
381      tn_ice (:,:,:) = t_su (:,:,:)
382
383      ELSE 
384         ! if ln_limini=false
385         a_i  (:,:,:) = 0._wp
386         v_i  (:,:,:) = 0._wp
387         v_s  (:,:,:) = 0._wp
388         smv_i(:,:,:) = 0._wp
389         oa_i (:,:,:) = 0._wp
390         ht_i (:,:,:) = 0._wp
391         ht_s (:,:,:) = 0._wp
392         sm_i (:,:,:) = 0._wp
393         o_i  (:,:,:) = 0._wp
394
395         e_i(:,:,:,:) = 0._wp
396         e_s(:,:,:,:) = 0._wp
397
398         DO jl = 1, jpl
399            DO jk = 1, nlay_i
400               t_i(:,:,jk,jl) = rtt * tms(:,:)
401            END DO
402            DO jk = 1, nlay_s
403               t_s(:,:,jk,jl) = rtt * tms(:,:)
404            END DO
405         END DO
406     
407      ENDIF ! ln_limini
408     
409      at_i (:,:) = 0.0_wp
410      DO jl = 1, jpl
411         at_i (:,:) = at_i (:,:) + a_i (:,:,jl)
412      END DO
413      !
414      !--------------------------------------------------------------------
415      ! 4) Global ice variables for output diagnostics                    |
416      !--------------------------------------------------------------------
417      u_ice (:,:)     = 0._wp
418      v_ice (:,:)     = 0._wp
419      stress1_i(:,:)  = 0._wp
420      stress2_i(:,:)  = 0._wp
421      stress12_i(:,:) = 0._wp
422
423      !--------------------------------------------------------------------
424      ! 5) Moments for advection
425      !--------------------------------------------------------------------
426
427      sxopw (:,:) = 0._wp 
428      syopw (:,:) = 0._wp 
429      sxxopw(:,:) = 0._wp 
430      syyopw(:,:) = 0._wp 
431      sxyopw(:,:) = 0._wp
432
433      sxice (:,:,:)  = 0._wp   ;   sxsn (:,:,:)  = 0._wp   ;   sxa  (:,:,:)  = 0._wp
434      syice (:,:,:)  = 0._wp   ;   sysn (:,:,:)  = 0._wp   ;   sya  (:,:,:)  = 0._wp
435      sxxice(:,:,:)  = 0._wp   ;   sxxsn(:,:,:)  = 0._wp   ;   sxxa (:,:,:)  = 0._wp
436      syyice(:,:,:)  = 0._wp   ;   syysn(:,:,:)  = 0._wp   ;   syya (:,:,:)  = 0._wp
437      sxyice(:,:,:)  = 0._wp   ;   sxysn(:,:,:)  = 0._wp   ;   sxya (:,:,:)  = 0._wp
438
439      sxc0  (:,:,:)  = 0._wp   ;   sxe  (:,:,:,:)= 0._wp   
440      syc0  (:,:,:)  = 0._wp   ;   sye  (:,:,:,:)= 0._wp   
441      sxxc0 (:,:,:)  = 0._wp   ;   sxxe (:,:,:,:)= 0._wp   
442      syyc0 (:,:,:)  = 0._wp   ;   syye (:,:,:,:)= 0._wp   
443      sxyc0 (:,:,:)  = 0._wp   ;   sxye (:,:,:,:)= 0._wp   
444
445      sxsal  (:,:,:)  = 0._wp
446      sysal  (:,:,:)  = 0._wp
447      sxxsal (:,:,:)  = 0._wp
448      syysal (:,:,:)  = 0._wp
449      sxysal (:,:,:)  = 0._wp
450
451      sxage  (:,:,:)  = 0._wp
452      syage  (:,:,:)  = 0._wp
453      sxxage (:,:,:)  = 0._wp
454      syyage (:,:,:)  = 0._wp
455      sxyage (:,:,:)  = 0._wp
456
457
458      CALL wrk_dealloc( jpi, jpj, zswitch )
459      CALL wrk_dealloc( jpi, jpj, zhemis )
460      CALL wrk_dealloc( jpl,   2, zh_i_ini,  za_i_ini,  zv_i_ini )
461      CALL wrk_dealloc(   2,      zht_i_ini, zat_i_ini, zvt_i_ini, zht_s_ini, zsm_i_ini, ztm_i_ini )
462
463   END SUBROUTINE lim_istate
464
465   SUBROUTINE lim_istate_init
466      !!-------------------------------------------------------------------
467      !!                   ***  ROUTINE lim_istate_init  ***
468      !!       
469      !! ** Purpose : Definition of initial state of the ice
470      !!
471      !! ** Method : Read the namiceini namelist and check the parameter
472      !!       values called at the first timestep (nit000)
473      !!
474      !! ** input :
475      !!        Namelist namiceini
476      !!
477      !! history :
478      !!  8.5  ! 03-08 (C. Ethe) original code
479      !!  8.5  ! 07-11 (M. Vancoppenolle) rewritten initialization
480      !!-----------------------------------------------------------------------------
481      NAMELIST/namiceini/ ln_limini, thres_sst, hts_ini_n, hts_ini_s, hti_ini_n, hti_ini_s,  &
482         &                                      ati_ini_n, ati_ini_s, smi_ini_n, smi_ini_s, tmi_ini_n, tmi_ini_s
483      INTEGER :: ios                 ! Local integer output status for namelist read
484      !!-----------------------------------------------------------------------------
485      !
486      REWIND( numnam_ice_ref )              ! Namelist namiceini in reference namelist : Ice initial state
487      READ  ( numnam_ice_ref, namiceini, IOSTAT = ios, ERR = 901)
488901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namiceini in reference namelist', lwp )
489
490      REWIND( numnam_ice_cfg )              ! Namelist namiceini in configuration namelist : Ice initial state
491      READ  ( numnam_ice_cfg, namiceini, IOSTAT = ios, ERR = 902 )
492902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namiceini in configuration namelist', lwp )
493      IF(lwm) WRITE ( numoni, namiceini )
494
495      ! Define the initial parameters
496      ! -------------------------
497
498      IF(lwp) THEN
499         WRITE(numout,*)
500         WRITE(numout,*) 'lim_istate_init : ice parameters inititialisation '
501         WRITE(numout,*) '~~~~~~~~~~~~~~~'
502         WRITE(numout,*) '   initialization with ice (T) or not (F)       ln_limini   = ', ln_limini
503         WRITE(numout,*) '   threshold water temp. for initial sea-ice    thres_sst  = ', thres_sst
504         WRITE(numout,*) '   initial snow thickness in the north          hts_ini_n  = ', hts_ini_n
505         WRITE(numout,*) '   initial snow thickness in the south          hts_ini_s  = ', hts_ini_s 
506         WRITE(numout,*) '   initial ice thickness  in the north          hti_ini_n  = ', hti_ini_n
507         WRITE(numout,*) '   initial ice thickness  in the south          hti_ini_s  = ', hti_ini_s
508         WRITE(numout,*) '   initial ice concentr.  in the north          ati_ini_n  = ', ati_ini_n
509         WRITE(numout,*) '   initial ice concentr.  in the north          ati_ini_s  = ', ati_ini_s
510         WRITE(numout,*) '   initial  ice salinity  in the north          smi_ini_n  = ', smi_ini_n
511         WRITE(numout,*) '   initial  ice salinity  in the south          smi_ini_s  = ', smi_ini_s
512         WRITE(numout,*) '   initial  ice/snw temp  in the north          tmi_ini_n  = ', tmi_ini_n
513         WRITE(numout,*) '   initial  ice/snw temp  in the south          tmi_ini_s  = ', tmi_ini_s
514      ENDIF
515
516   END SUBROUTINE lim_istate_init
517
518#else
519   !!----------------------------------------------------------------------
520   !!   Default option :         Empty module          NO LIM sea-ice model
521   !!----------------------------------------------------------------------
522CONTAINS
523   SUBROUTINE lim_istate          ! Empty routine
524   END SUBROUTINE lim_istate
525#endif
526
527   !!======================================================================
528END MODULE limistate
Note: See TracBrowser for help on using the repository browser.