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.
Changeset 7646 for trunk/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90 – NEMO

Ignore:
Timestamp:
2017-02-06T10:25:03+01:00 (7 years ago)
Author:
timgraham
Message:

Merge of dev_merge_2016 into trunk. UPDATE TO ARCHFILES NEEDED for XIOS2.
LIM_SRC_s/limrhg.F90 to follow in next commit due to change of kind (I'm unable to do it in this commit).
Merged using the following steps:

1) svn merge --reintegrate svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/trunk .
2) Resolve minor conflicts in sette.sh and namelist_cfg for ORCA2LIM3 (due to a change in trunk after branch was created)
3) svn commit
4) svn switch svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/trunk
5) svn merge svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/branches/2016/dev_merge_2016 .
6) At this stage I checked out a clean copy of the branch to compare against what is about to be committed to the trunk.
6) svn commit #Commit code to the trunk

In this commit I have also reverted a change to Fcheck_archfile.sh which was causing problems on the Paris machine.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90

    r6695 r7646  
    55   !!====================================================================== 
    66   !! History :  2.0  ! 2004-01 (C. Ethe, G. Madec)  Original code 
    7    !!            4.0  ! 2011-02 (G. Madec) dynamical allocation 
     7   !!            3.0  ! 2011-02 (G. Madec) dynamical allocation 
    88   !!             -   ! 2014    (C. Rousset) add N/S initializations 
    99   !!---------------------------------------------------------------------- 
     
    2323   USE ice              ! sea-ice variables 
    2424   USE par_oce          ! ocean parameters 
    25    USE dom_ice          ! sea-ice domain 
    2625   USE limvar           ! lim_var_salprof 
     26   ! 
    2727   USE in_out_manager   ! I/O manager 
    2828   USE lib_mpp          ! MPP library 
     
    3636 
    3737   PUBLIC   lim_istate      ! routine called by lim_init.F90 
    38  
    39    !                          !!** init namelist (namiceini) ** 
    40    REAL(wp) ::   rn_thres_sst   ! threshold water temperature for initial sea ice 
    41    REAL(wp) ::   rn_hts_ini_n   ! initial snow thickness in the north 
    42    REAL(wp) ::   rn_hts_ini_s   ! initial snow thickness in the south 
    43    REAL(wp) ::   rn_hti_ini_n   ! initial ice thickness in the north 
    44    REAL(wp) ::   rn_hti_ini_s   ! initial ice thickness in the south 
    45    REAL(wp) ::   rn_ati_ini_n   ! initial leads area in the north 
    46    REAL(wp) ::   rn_ati_ini_s   ! initial leads area in the south 
    47    REAL(wp) ::   rn_smi_ini_n   ! initial salinity  
    48    REAL(wp) ::   rn_smi_ini_s   ! initial salinity 
    49    REAL(wp) ::   rn_tmi_ini_n   ! initial temperature 
    50    REAL(wp) ::   rn_tmi_ini_s   ! initial temperature 
    5138 
    5239   INTEGER , PARAMETER ::   jpfldi = 6           ! maximum number of files to read 
     
    5744   INTEGER , PARAMETER ::   jp_tmi = 5           ! index of ice temp at T-point 
    5845   INTEGER , PARAMETER ::   jp_smi = 6           ! index of ice sali at T-point 
    59    TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   si    ! structure of input fields (file informations, fields read) 
    60  
    61    LOGICAL  ::  ln_iceini        ! initialization or not 
    62    LOGICAL  ::  ln_iceini_file   ! Ice initialization state from 2D netcdf file 
     46   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   si  ! structure of input fields (file informations, fields read) 
    6347   !!---------------------------------------------------------------------- 
    6448   !!   LIM 3.0,  UCL-LOCEAN-IPSL (2008) 
     
    7458      !! ** Purpose :   defined the sea-ice initial state 
    7559      !! 
    76       !! ** Method  :    
    77       !!                This routine will put some ice where ocean 
     60      !! ** Method  :   This routine will put some ice where ocean 
    7861      !!                is at the freezing point, then fill in ice  
    7962      !!                state variables using prescribed initial  
    8063      !!                values in the namelist             
    8164      !! 
    82       !! ** Steps   :    
    83       !!                1) Read namelist 
     65      !! ** Steps   :   1) Read namelist 
    8466      !!                2) Basal temperature; ice and hemisphere masks 
    8567      !!                3) Fill in the ice thickness distribution using gaussian 
     
    9678      !!   4.0  !  09-11  (M. Vancoppenolle)   Enhanced version for ice cats 
    9779      !!-------------------------------------------------------------------- 
    98  
    99       !! * Local variables 
    100       INTEGER    :: ji, jj, jk, jl             ! dummy loop indices 
    101       REAL(wp)   :: ztmelts, zdh 
    102       INTEGER    :: i_hemis, i_fill, jl0   
    103       REAL(wp)   :: ztest_1, ztest_2, ztest_3, ztest_4, ztests, zsigma, zarg, zA, zV, zA_cons, zV_cons, zconv  
     80      INTEGER  :: ji, jj, jk, jl   ! dummy loop indices 
     81      REAL(wp) :: ztmelts, zdh 
     82      INTEGER  :: i_hemis, i_fill, jl0   
     83      REAL(wp)   :: zarg, zV, zconv, zdv  
    10484      REAL(wp), POINTER, DIMENSION(:,:)   :: zswitch    ! ice indicator 
    10585      REAL(wp), POINTER, DIMENSION(:,:)   :: zht_i_ini, zat_i_ini, zvt_i_ini            !data from namelist or nc file 
    10686      REAL(wp), POINTER, DIMENSION(:,:)   :: zts_u_ini, zht_s_ini, zsm_i_ini, ztm_i_ini !data from namelist or nc file 
    107       REAL(wp), POINTER, DIMENSION(:,:,:) :: zh_i_ini, za_i_ini, zv_i_ini               !data by cattegories to fill 
    108       !-------------------------------------------------------------------- 
    109  
    110       CALL wrk_alloc( jpi, jpj, jpl, zh_i_ini,  za_i_ini,  zv_i_ini ) 
     87      REAL(wp), POINTER, DIMENSION(:,:,:) :: zh_i_ini, za_i_ini                         !data by cattegories to fill 
     88      INTEGER , POINTER, DIMENSION(:)     :: itest 
     89      !-------------------------------------------------------------------- 
     90 
     91      CALL wrk_alloc( jpi, jpj, jpl, zh_i_ini,  za_i_ini ) 
    11192      CALL wrk_alloc( jpi, jpj,      zht_i_ini, zat_i_ini, zvt_i_ini, zts_u_ini, zht_s_ini, zsm_i_ini, ztm_i_ini ) 
    11293      CALL wrk_alloc( jpi, jpj,      zswitch ) 
     94      Call wrk_alloc( 4,             itest ) 
    11395 
    11496      IF(lwp) WRITE(numout,*) 
    115       IF(lwp) WRITE(numout,*) 'lim_istate : Ice initialization ' 
    116       IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' 
     97      IF(lwp) WRITE(numout,*) 'lim_istate : sea-ice initialization ' 
     98      IF(lwp) WRITE(numout,*) '~~~~~~~~~~ ' 
    11799 
    118100      !-------------------------------------------------------------------- 
    119101      ! 1) Read namelist 
    120102      !-------------------------------------------------------------------- 
    121  
    122       CALL lim_istate_init     !  reading the initials parameters of the ice 
    123  
    124       ! surface temperature 
    125       DO jl = 1, jpl ! loop over categories 
     103      ! 
     104      CALL lim_istate_init 
     105 
     106      ! init surface temperature 
     107      DO jl = 1, jpl 
    126108         t_su  (:,:,jl) = rt0 * tmask(:,:,1) 
    127109         tn_ice(:,:,jl) = rt0 * tmask(:,:,1) 
    128110      END DO 
    129111 
    130       ! basal temperature (considered at freezing point) 
     112      ! init basal temperature (considered at freezing point) 
    131113      CALL eos_fzp( sss_m(:,:), t_bo(:,:) ) 
    132114      t_bo(:,:) = ( t_bo(:,:) + rt0 ) * tmask(:,:,1)  
    133115 
    134116 
    135       IF( ln_iceini ) THEN 
    136  
    137          !-------------------------------------------------------------------- 
    138          ! 2) Basal temperature, ice mask and hemispheric index 
    139          !-------------------------------------------------------------------- 
    140  
    141          DO jj = 1, jpj                                       ! ice if sst <= t-freez + ttest 
    142             DO ji = 1, jpi 
    143                IF( ( sst_m(ji,jj)  - ( t_bo(ji,jj) - rt0 ) ) * tmask(ji,jj,1) >= rn_thres_sst ) THEN  
    144                   zswitch(ji,jj) = 0._wp * tmask(ji,jj,1)    ! no ice 
    145                ELSE                                                                                    
    146                   zswitch(ji,jj) = 1._wp * tmask(ji,jj,1)    !    ice 
    147                ENDIF 
    148             END DO 
    149          END DO 
    150  
    151          !-------------------------------------------------------------------- 
    152          ! 3) Initialization of sea ice state variables 
    153          !-------------------------------------------------------------------- 
    154          IF( ln_iceini_file )THEN 
    155  
     117      !-------------------------------------------------------------------- 
     118      ! 2) Initialization of sea ice state variables 
     119      !-------------------------------------------------------------------- 
     120      IF( ln_limini ) THEN 
     121         ! 
     122         IF( ln_limini_file )THEN 
     123         ! 
    156124            zht_i_ini(:,:)  = si(jp_hti)%fnow(:,:,1) 
    157125            zht_s_ini(:,:)  = si(jp_hts)%fnow(:,:,1) 
     
    160128            ztm_i_ini(:,:)  = si(jp_tmi)%fnow(:,:,1) 
    161129            zsm_i_ini(:,:)  = si(jp_smi)%fnow(:,:,1) 
    162  
    163          ELSE ! ln_iceini_file = F 
     130            ! 
     131            WHERE( zat_i_ini(:,:) > 0._wp ) ; zswitch(:,:) = tmask(:,:,1)  
     132            ELSEWHERE                       ; zswitch(:,:) = 0._wp 
     133            END WHERE 
     134            ! 
     135         ELSE ! ln_limini_file = F 
     136 
     137            !-------------------------------------------------------------------- 
     138            ! 3) Basal temperature, ice mask 
     139            !-------------------------------------------------------------------- 
     140            ! no ice if sst <= t-freez + ttest 
     141            WHERE( ( sst_m(:,:) - (t_bo(:,:) - rt0) ) * tmask(:,:,1) >= rn_thres_sst ) ; zswitch(:,:) = 0._wp  
     142            ELSEWHERE                                                                  ; zswitch(:,:) = tmask(:,:,1) 
     143            END WHERE 
    164144 
    165145            !----------------------------- 
     
    169149            DO jj = 1, jpj 
    170150               DO ji = 1, jpi 
    171                   IF( fcor(ji,jj) >= 0._wp ) THEN 
    172                      zht_i_ini(ji,jj) = rn_hti_ini_n 
    173                      zht_s_ini(ji,jj) = rn_hts_ini_n 
    174                      zat_i_ini(ji,jj) = rn_ati_ini_n 
    175                      zts_u_ini(ji,jj) = rn_tmi_ini_n 
    176                      zsm_i_ini(ji,jj) = rn_smi_ini_n 
    177                      ztm_i_ini(ji,jj) = rn_tmi_ini_n 
     151                  IF( ff_t(ji,jj) >= 0._wp ) THEN 
     152                     zht_i_ini(ji,jj) = rn_hti_ini_n * zswitch(ji,jj) 
     153                     zht_s_ini(ji,jj) = rn_hts_ini_n * zswitch(ji,jj) 
     154                     zat_i_ini(ji,jj) = rn_ati_ini_n * zswitch(ji,jj) 
     155                     zts_u_ini(ji,jj) = rn_tmi_ini_n * zswitch(ji,jj) 
     156                     zsm_i_ini(ji,jj) = rn_smi_ini_n * zswitch(ji,jj) 
     157                     ztm_i_ini(ji,jj) = rn_tmi_ini_n * zswitch(ji,jj) 
    178158                  ELSE 
    179                      zht_i_ini(ji,jj) = rn_hti_ini_s 
    180                      zht_s_ini(ji,jj) = rn_hts_ini_s 
    181                      zat_i_ini(ji,jj) = rn_ati_ini_s 
    182                      zts_u_ini(ji,jj) = rn_tmi_ini_s 
    183                      zsm_i_ini(ji,jj) = rn_smi_ini_s 
    184                      ztm_i_ini(ji,jj) = rn_tmi_ini_s 
     159                     zht_i_ini(ji,jj) = rn_hti_ini_s * zswitch(ji,jj) 
     160                     zht_s_ini(ji,jj) = rn_hts_ini_s * zswitch(ji,jj) 
     161                     zat_i_ini(ji,jj) = rn_ati_ini_s * zswitch(ji,jj) 
     162                     zts_u_ini(ji,jj) = rn_tmi_ini_s * zswitch(ji,jj) 
     163                     zsm_i_ini(ji,jj) = rn_smi_ini_s * zswitch(ji,jj) 
     164                     ztm_i_ini(ji,jj) = rn_tmi_ini_s * zswitch(ji,jj) 
    185165                  ENDIF 
    186166               END DO 
    187167            END DO 
    188  
    189          ENDIF ! ln_iceini_file 
    190  
     168            ! 
     169         ENDIF ! ln_limini_file 
     170          
    191171         zvt_i_ini(:,:) = zht_i_ini(:,:) * zat_i_ini(:,:)   ! ice volume 
    192  
    193172         !--------------------------------------------------------------------- 
    194173         ! 3.2) Distribute ice concentration and thickness into the categories 
     
    199178         zh_i_ini(:,:,:) = 0._wp  
    200179         za_i_ini(:,:,:) = 0._wp 
    201          zv_i_ini(:,:,:) = 0._wp 
    202  
     180         ! 
    203181         DO jj = 1, jpj 
    204182            DO ji = 1, jpi 
    205  
     183               ! 
    206184               IF( zat_i_ini(ji,jj) > 0._wp .AND. zht_i_ini(ji,jj) > 0._wp )THEN 
    207185 
    208                   ztest_1 = 0 ; ztest_2 = 0 ; ztest_3 = 0 ; ztest_4 = 0 
    209 !                  ztests  = 0  
    210  
    211                   DO i_fill = jpl, 1, -1 
    212  
    213 !                     IF( ztests .NE. 4 ) THEN 
    214                      IF ( ( ztest_1 + ztest_2 + ztest_3 + ztest_4 ) .NE. 4 ) THEN 
    215                         !---------------------------- 
    216                         ! fill the i_fill categories 
    217                         !---------------------------- 
    218                         ! *** 1 category to fill 
    219                         IF ( i_fill .EQ. 1 ) THEN 
    220                            zh_i_ini(ji,jj,    1)   = zht_i_ini(ji,jj) 
    221                            za_i_ini(ji,jj,    1)   = zat_i_ini(ji,jj) 
    222                            zh_i_ini(ji,jj,2:jpl)   = 0._wp 
    223                            za_i_ini(ji,jj,2:jpl)   = 0._wp 
    224                         ELSE 
    225  
    226                            ! *** >1 categores to fill 
    227                            !--- Ice thicknesses in the i_fill - 1 first categories 
    228                            DO jl = 1, i_fill - 1 
    229                               zh_i_ini(ji,jj,jl) = hi_mean(jl) 
    230                            END DO 
    231                 
    232                            !--- jl0: most likely index where cc will be maximum 
    233                            DO jl = 1, jpl 
    234                               IF ( ( zht_i_ini(ji,jj) >  hi_max(jl-1) ) .AND. & 
    235                                  & ( zht_i_ini(ji,jj) <= hi_max(jl)   ) ) THEN 
    236                                  jl0 = jl 
    237                               ENDIF 
    238                            END DO 
    239                            jl0 = MIN(jl0, i_fill) 
    240                 
    241                            !--- Concentrations 
    242                            za_i_ini(ji,jj,jl0) = zat_i_ini(ji,jj) / SQRT(REAL(jpl)) 
    243                            DO jl = 1, i_fill - 1 
    244                               IF( jl .NE. jl0 )THEN 
    245                                  zsigma             = 0.5 * zht_i_ini(ji,jj) 
    246                                  zarg               = ( zh_i_ini(ji,jj,jl) - zht_i_ini(ji,jj) ) / zsigma 
    247                                  za_i_ini(ji,jj,jl) = za_i_ini(ji,jj,jl0) * EXP(-zarg**2) 
    248                               ENDIF 
    249                            END DO 
    250                 
    251                            zA = 0. ! sum of the areas in the jpl categories  
    252                            DO jl = 1, i_fill - 1 
    253                               zA = zA + za_i_ini(ji,jj,jl) 
    254                            END DO 
    255                            za_i_ini(ji,jj,i_fill)   = zat_i_ini(ji,jj) - zA ! ice conc in the last category 
    256                            IF ( i_fill .LT. jpl ) za_i_ini(ji,jj,i_fill+1:jpl) = 0._wp 
    257           
    258                            !--- Ice thickness in the last category 
    259                            zV = 0. ! sum of the volumes of the N-1 categories 
    260                            DO jl = 1, i_fill - 1 
    261                               zV = zV + za_i_ini(ji,jj,jl)*zh_i_ini(ji,jj,jl) 
    262                            END DO 
    263                            zh_i_ini(ji,jj,i_fill) = ( zvt_i_ini(ji,jj) - zV ) / za_i_ini(ji,jj,i_fill)  
    264                            IF ( i_fill .LT. jpl ) zh_i_ini(ji,jj,i_fill+1:jpl) = 0._wp 
    265  
    266                            !--- volumes 
    267                            zv_i_ini(ji,jj,:) = za_i_ini(ji,jj,:) * zh_i_ini(ji,jj,:) 
    268                            IF ( i_fill .LT. jpl ) zv_i_ini(ji,jj,i_fill+1:jpl) = 0._wp 
    269  
    270                         ENDIF ! i_fill 
    271  
    272                         !--------------------- 
    273                         ! Compatibility tests 
    274                         !--------------------- 
    275                         ! Test 1: area conservation 
    276                         zA_cons = SUM(za_i_ini(ji,jj,:)) ; zconv = ABS(zat_i_ini(ji,jj) - zA_cons ) 
    277                         IF ( zconv .LT. 1.0e-6 ) THEN 
    278                            ztest_1 = 1 
    279                         ELSE  
    280                           ztest_1 = 0 
    281                         ENDIF 
    282  
    283                         ! Test 2: volume conservation 
    284                         zV_cons = SUM(zv_i_ini(ji,jj,:)) 
    285                         zconv = ABS(zvt_i_ini(ji,jj) - zV_cons) 
    286  
    287                         IF( zconv .LT. 1.0e-6 ) THEN 
    288                            ztest_2 = 1 
    289                         ELSE 
    290                            ztest_2 = 0 
    291                         ENDIF 
    292  
    293                         ! Test 3: thickness of the last category is in-bounds ? 
    294                         IF ( zh_i_ini(ji,jj,i_fill) > hi_max(i_fill-1) ) THEN 
    295                            ztest_3 = 1 
    296                         ELSE 
    297                            ztest_3 = 0 
    298                         ENDIF 
    299  
    300                         ! Test 4: positivity of ice concentrations 
    301                         ztest_4 = 1 
    302                         DO jl = 1, jpl 
    303                            IF ( za_i_ini(ji,jj,jl) .LT. 0._wp ) THEN  
    304                               ztest_4 = 0 
     186                  !--- jl0: most likely index where cc will be maximum 
     187                  jl0 = jpl 
     188                  DO jl = 1, jpl 
     189                     IF ( ( zht_i_ini(ji,jj) >  hi_max(jl-1) ) .AND. ( zht_i_ini(ji,jj) <= hi_max(jl) ) ) THEN 
     190                        jl0 = jl 
     191                        CYCLE 
     192                     ENDIF 
     193                  END DO 
     194                  ! 
     195                  ! initialisation of tests 
     196                  itest(:)  = 0 
     197                   
     198                  i_fill = jpl + 1                                             !==================================== 
     199                  DO WHILE ( ( SUM( itest(:) ) /= 4 ) .AND. ( i_fill >= 2 ) )  ! iterative loop on i_fill categories 
     200                     ! iteration                                               !==================================== 
     201                     i_fill = i_fill - 1 
     202 
     203                     ! initialisation of ice variables for each try 
     204                     zh_i_ini(ji,jj,:) = 0._wp  
     205                     za_i_ini(ji,jj,:) = 0._wp 
     206                     itest(:) = 0 
     207                     ! 
     208                     ! *** case very thin ice: fill only category 1 
     209                     IF ( i_fill == 1 ) THEN 
     210                        zh_i_ini(ji,jj,1) = zht_i_ini(ji,jj) 
     211                        za_i_ini(ji,jj,1) = zat_i_ini(ji,jj) 
     212 
     213                     ! *** case ice is thicker: fill categories >1 
     214                     ELSE 
     215 
     216                        ! Fill ice thicknesses in the (i_fill-1) cat by hmean  
     217                        DO jl = 1, i_fill-1 
     218                           zh_i_ini(ji,jj,jl) = hi_mean(jl) 
     219                        END DO 
     220                        ! 
     221                        !--- Concentrations 
     222                        za_i_ini(ji,jj,jl0) = zat_i_ini(ji,jj) / SQRT(REAL(jpl)) 
     223                        DO jl = 1, i_fill - 1 
     224                           IF( jl /= jl0 )THEN 
     225                              zarg               = ( zh_i_ini(ji,jj,jl) - zht_i_ini(ji,jj) ) / ( 0.5_wp * zht_i_ini(ji,jj) ) 
     226                              za_i_ini(ji,jj,jl) = za_i_ini(ji,jj,jl0) * EXP(-zarg**2) 
    305227                           ENDIF 
    306228                        END DO 
    307  
    308                      ENDIF ! ztest_1 + ztest_2 + ztest_3 + ztest_4 
    309   
    310                      ztests = ztest_1 + ztest_2 + ztest_3 + ztest_4 
    311  
    312                   END DO ! i_fill 
    313  
    314                   IF(lwp) THEN  
    315                      WRITE(numout,*) ' ztests : ', ztests 
    316                      IF( ztests .NE. 4 )THEN 
    317                         WRITE(numout,*) 
    318                         WRITE(numout,*) ' !!!! ALERT                  !!! ' 
    319                         WRITE(numout,*) ' !!!! Something is wrong in the LIM3 initialization procedure ' 
    320                         WRITE(numout,*) 
    321                         WRITE(numout,*) ' *** ztests is not equal to 4 ' 
    322                         WRITE(numout,*) ' *** ztest_i (i=1,4) = ', ztest_1, ztest_2, ztest_3, ztest_4 
    323                         WRITE(numout,*) ' zat_i_ini : ', zat_i_ini(ji,jj) 
    324                         WRITE(numout,*) ' zht_i_ini : ', zht_i_ini(ji,jj) 
    325                      ENDIF ! ztests .NE. 4 
     229                        ! 
     230                        ! Concentration in the last (i_fill) category 
     231                        za_i_ini(ji,jj,i_fill) = zat_i_ini(ji,jj) - SUM( za_i_ini(ji,jj,1:i_fill-1) ) 
     232 
     233                        ! Ice thickness in the last (i_fill) category 
     234                        zV = SUM( za_i_ini(ji,jj,1:i_fill-1) * zh_i_ini(ji,jj,1:i_fill-1) ) 
     235                        zh_i_ini(ji,jj,i_fill) = ( zvt_i_ini(ji,jj) - zV ) / MAX( za_i_ini(ji,jj,i_fill), epsi10 )  
     236 
     237                        ! clem: correction if concentration of upper cat is greater than lower cat 
     238                        !       (it should be a gaussian around jl0 but sometimes it is not) 
     239                        IF ( jl0 /= jpl ) THEN 
     240                           DO jl = jpl, jl0+1, -1 
     241                              IF ( za_i_ini(ji,jj,jl) > za_i_ini(ji,jj,jl-1) ) THEN 
     242                                 zdv = zh_i_ini(ji,jj,jl) * za_i_ini(ji,jj,jl) 
     243                                 zh_i_ini(ji,jj,jl    ) = 0._wp 
     244                                 za_i_ini(ji,jj,jl    ) = 0._wp 
     245                                 za_i_ini(ji,jj,1:jl-1) = za_i_ini(ji,jj,1:jl-1)  & 
     246                                    &                     + zdv / MAX( REAL(jl-1) * zht_i_ini(ji,jj), epsi10 ) 
     247                              END IF 
     248                           ENDDO 
     249                        ENDIF 
     250                        ! 
     251                     ENDIF ! case ice is thick or thin 
     252 
     253                     !--------------------- 
     254                     ! Compatibility tests 
     255                     !--------------------- 
     256                     ! Test 1: area conservation 
     257                     zconv = ABS( zat_i_ini(ji,jj) - SUM( za_i_ini(ji,jj,1:jpl) ) ) 
     258                     IF ( zconv < epsi06 ) itest(1) = 1 
     259                      
     260                     ! Test 2: volume conservation 
     261                     zconv = ABS(       zat_i_ini(ji,jj)       * zht_i_ini(ji,jj)   & 
     262                        &        - SUM( za_i_ini (ji,jj,1:jpl) * zh_i_ini (ji,jj,1:jpl) ) ) 
     263                     IF ( zconv < epsi06 ) itest(2) = 1 
     264                      
     265                     ! Test 3: thickness of the last category is in-bounds ? 
     266                     IF ( zh_i_ini(ji,jj,i_fill) >= hi_max(i_fill-1) ) itest(3) = 1 
     267                      
     268                     ! Test 4: positivity of ice concentrations 
     269                     itest(4) = 1 
     270                     DO jl = 1, i_fill 
     271                        IF ( za_i_ini(ji,jj,jl) < 0._wp ) itest(4) = 0 
     272                     END DO 
     273                     !                                      !============================ 
     274                  END DO                                    ! end iteration on categories 
     275                  !                                         !============================ 
     276                  ! 
     277                  IF( lwp .AND. SUM(itest) /= 4 ) THEN  
     278                     WRITE(numout,*) 
     279                     WRITE(numout,*) ' !!!! ALERT itest is not equal to 4      !!! ' 
     280                     WRITE(numout,*) ' !!!! Something is wrong in the LIM3 initialization procedure ' 
     281                     WRITE(numout,*) 
     282                     WRITE(numout,*) ' *** itest_i (i=1,4) = ', itest(:) 
     283                     WRITE(numout,*) ' zat_i_ini : ', zat_i_ini(ji,jj) 
     284                     WRITE(numout,*) ' zht_i_ini : ', zht_i_ini(ji,jj) 
    326285                  ENDIF 
    327        
    328                ENDIF !  zat_i_ini(ji,jj) > 0._wp .AND. zhm_i_ini(ji,jj) > 0._wp 
    329  
    330             ENDDO    
    331          ENDDO    
     286                
     287               ENDIF !  zat_i_ini(ji,jj) > 0._wp .AND. zht_i_ini(ji,jj) > 0._wp 
     288               ! 
     289            END DO    
     290         END DO    
    332291 
    333292         !--------------------------------------------------------------------- 
     
    373332            smv_i = sm_i * v_i 
    374333         ENDIF 
    375           
     334             
    376335         ! Snow temperature and heat content 
    377336         DO jk = 1, nlay_s 
     
    413372         tn_ice (:,:,:) = t_su (:,:,:) 
    414373 
    415       ELSE ! if ln_iceini=false 
     374      ELSE ! if ln_limini=false 
    416375         a_i  (:,:,:) = 0._wp 
    417376         v_i  (:,:,:) = 0._wp 
     
    436395         END DO 
    437396 
    438       ENDIF ! ln_iceini 
     397      ENDIF ! ln_limini 
    439398       
    440399      at_i (:,:) = 0.0_wp 
     
    486445      sxyage (:,:,:)  = 0._wp 
    487446 
    488  
    489       CALL wrk_dealloc( jpi, jpj, jpl, zh_i_ini,  za_i_ini,  zv_i_ini ) 
     447!!!clem 
     448!!      ! Output the initial state and forcings 
     449!!      CALL dia_wri_state( 'output.init', nit000 ) 
     450!!!       
     451 
     452      CALL wrk_dealloc( jpi, jpj, jpl, zh_i_ini,  za_i_ini ) 
    490453      CALL wrk_dealloc( jpi, jpj,      zht_i_ini, zat_i_ini, zvt_i_ini, zts_u_ini, zht_s_ini, zsm_i_ini, ztm_i_ini ) 
    491454      CALL wrk_dealloc( jpi, jpj,      zswitch ) 
     455      Call wrk_dealloc( 4,             itest ) 
    492456 
    493457   END SUBROUTINE lim_istate 
     
    518482      TYPE(FLD_N), DIMENSION(jpfldi) ::   slf_i                 ! array of namelist informations on the fields to read 
    519483      ! 
    520       NAMELIST/namiceini/ ln_iceini, ln_iceini_file, rn_thres_sst, rn_hts_ini_n, rn_hts_ini_s,  & 
     484      NAMELIST/namiceini/ ln_limini, ln_limini_file, rn_thres_sst, rn_hts_ini_n, rn_hts_ini_s,  & 
    521485         &                rn_hti_ini_n, rn_hti_ini_s, rn_ati_ini_n, rn_ati_ini_s, rn_smi_ini_n, & 
    522486         &                rn_smi_ini_s, rn_tmi_ini_n, rn_tmi_ini_s,                             & 
     
    544508         WRITE(numout,*) 'lim_istate_init : ice parameters inititialisation ' 
    545509         WRITE(numout,*) '~~~~~~~~~~~~~~~' 
    546          WRITE(numout,*) '   initialization with ice (T) or not (F)       ln_iceini     = ', ln_iceini 
    547          WRITE(numout,*) '   ice initialization from a netcdf file      ln_iceini_file  = ', ln_iceini_file 
     510         WRITE(numout,*) '   initialization with ice (T) or not (F)       ln_limini     = ', ln_limini 
     511         WRITE(numout,*) '   ice initialization from a netcdf file      ln_limini_file  = ', ln_limini_file 
    548512         WRITE(numout,*) '   threshold water temp. for initial sea-ice    rn_thres_sst  = ', rn_thres_sst 
    549513         WRITE(numout,*) '   initial snow thickness in the north          rn_hts_ini_n  = ', rn_hts_ini_n 
     
    559523      ENDIF 
    560524 
    561       IF( ln_iceini_file ) THEN                      ! Ice initialization using input file 
     525      IF( ln_limini_file ) THEN                      ! Ice initialization using input file 
    562526         ! 
    563527         ! set si structure 
Note: See TracChangeset for help on using the changeset viewer.