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/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/LIM_SRC_3 – NEMO

source: branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90 @ 4161

Last change on this file since 4161 was 4161, checked in by cetlod, 10 years ago

dev_LOCEAN_2013 : merge in the 3rd dev branch dev_r4028_CNRS_LIM3, see ticket #1169

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