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/2014/dev_4728_CNRS04_coupled_interface/NEMOGCM/NEMO/LIM_SRC_3 – NEMO

source: branches/2014/dev_4728_CNRS04_coupled_interface/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90 @ 4855

Last change on this file since 4855 was 4733, checked in by vancop, 10 years ago

Fix energy budget in coupled case

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