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 2715 for trunk/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90 – NEMO

Ignore:
Timestamp:
2011-03-30T17:58:35+02:00 (13 years ago)
Author:
rblod
Message:

First attempt to put dynamic allocation on the trunk

File:
1 edited

Legend:

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

    r2528 r2715  
    11MODULE limvar 
    2    !!---------------------------------------------------------------------- 
    3    !!   'key_lim3'                                      LIM3 sea-ice model 
    4    !!---------------------------------------------------------------------- 
    52   !!====================================================================== 
    63   !!                       ***  MODULE limvar *** 
     
    3229   !!                        - ot_i(jpi,jpj)  !average ice age 
    3330   !!====================================================================== 
     31   !! History :   -   ! 2006-01 (M. Vancoppenolle) Original code 
     32   !!            4.0  ! 2011-02 (G. Madec) dynamical allocation 
     33   !!---------------------------------------------------------------------- 
    3434#if defined key_lim3 
    3535   !!---------------------------------------------------------------------- 
    36    !! * Modules used 
    37    USE dom_ice 
     36   !!   'key_lim3'                                      LIM3 sea-ice model 
     37   !!---------------------------------------------------------------------- 
     38   !!   lim_var_agg       :  
     39   !!   lim_var_glo2eqv   : 
     40   !!   lim_var_eqv2glo   : 
     41   !!   lim_var_salprof   :  
     42   !!   lim_var_salprof1d : 
     43   !!   lim_var_bv        : 
     44   !!---------------------------------------------------------------------- 
    3845   USE par_oce          ! ocean parameters 
    3946   USE phycst           ! physical constants (ocean directory)  
    4047   USE sbc_oce          ! Surface boundary condition: ocean fields 
    41    USE thd_ice 
    42    USE in_out_manager 
    43    USE ice 
    44    USE par_ice 
     48   USE ice              ! LIM variables 
     49   USE par_ice          ! LIM parameters 
     50   USE dom_ice          ! LIM domain 
     51   USE thd_ice          ! LIM thermodynamics 
     52   USE wrk_nemo         ! workspace manager 
     53   USE in_out_manager   ! I/O manager 
     54   USE lib_mpp         ! MPP library 
    4555 
    4656   IMPLICIT NONE 
    4757   PRIVATE 
    4858 
    49    !! * Routine accessibility 
    50    PUBLIC lim_var_agg 
    51    PUBLIC lim_var_glo2eqv 
    52    PUBLIC lim_var_eqv2glo 
    53    PUBLIC lim_var_salprof 
    54    PUBLIC lim_var_bv 
    55    PUBLIC lim_var_salprof1d 
    56  
    57    !! * Module variables 
    58    REAL(wp)  ::           &  ! constant values 
    59       epsi20 = 1e-20   ,  & 
    60       epsi13 = 1e-13   ,  & 
    61       zzero  = 0.e0    ,  & 
    62       zone   = 1.e0 
    63  
    64    !!---------------------------------------------------------------------- 
    65    !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 
     59   PUBLIC   lim_var_agg          ! 
     60   PUBLIC   lim_var_glo2eqv      ! 
     61   PUBLIC   lim_var_eqv2glo      ! 
     62   PUBLIC   lim_var_salprof      ! 
     63   PUBLIC   lim_var_bv           ! 
     64   PUBLIC   lim_var_salprof1d    ! 
     65 
     66   REAL(wp) ::   eps20 = 1.e-20_wp   ! module constants 
     67   REAL(wp) ::   eps16 = 1.e-16_wp   !    -       - 
     68   REAL(wp) ::   eps13 = 1.e-13_wp   !    -       - 
     69   REAL(wp) ::   eps10 = 1.e-10_wp   !    -       - 
     70   REAL(wp) ::   eps06 = 1.e-06_wp   !    -       - 
     71   REAL(wp) ::   zzero = 0.e0        !    -       - 
     72   REAL(wp) ::   zone  = 1.e0        !    -       - 
     73 
     74   !!---------------------------------------------------------------------- 
     75   !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2011) 
    6676   !! $Id$ 
    67    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    68    !!---------------------------------------------------------------------- 
    69  
    70  
     77   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     78   !!---------------------------------------------------------------------- 
    7179CONTAINS 
    7280 
    73    SUBROUTINE lim_var_agg(n) 
     81   SUBROUTINE lim_var_agg( kn ) 
    7482      !!------------------------------------------------------------------ 
    7583      !!                ***  ROUTINE lim_var_agg  *** 
    76       !! ** Purpose : 
    77       !!        This routine aggregates ice-thickness-category variables to   
    78       !!                                all-ice variables 
    79       !!        i.e. it turns VGLO into VAGG 
     84      !! 
     85      !! ** Purpose :   aggregates ice-thickness-category variables to all-ice variables 
     86      !!              i.e. it turns VGLO into VAGG 
    8087      !! ** Method  : 
    8188      !! 
    82       !! ** Arguments : 
    83       !!           kideb , kiut : Starting and ending points on which the  
    84       !!                         the computation is applied 
    85       !! 
    86       !! ** Inputs / Ouputs : (global commons) 
    8789      !! ** Arguments : n = 1, at_i vt_i only 
    8890      !!                n = 2 everything 
    8991      !! 
    90       !! ** External :  
    91       !! 
    92       !! ** References : 
    93       !! 
    94       !! ** History : 
    95       !!           (01-2006) Martin Vancoppenolle, UCL-ASTR 
    96       !! 
    9792      !! note : you could add an argument when you need only at_i, vt_i 
    9893      !!        and when you need everything 
    9994      !!------------------------------------------------------------------ 
    100       !! * Arguments 
    101  
    102       !! * Local variables 
    103       INTEGER ::   ji,       &   ! spatial dummy loop index 
    104          jj,       &   ! spatial dummy loop index 
    105          jk,       &   ! vertical layering dummy loop index 
    106          jl            ! ice category dummy loop index 
    107  
    108       REAL ::      zeps, epsi16, zinda, epsi06 
    109  
    110       INTEGER, INTENT( in ) ::   n     ! describes what is needed 
    111  
    112       !!-- End of declarations 
    113       !!---------------------------------------------------------------------------------------------- 
    114       zeps = 1.0e-13 
    115       epsi16 = 1.0e-16 
    116       epsi06 = 1.0e-6 
    117  
    118       !------------------ 
    119       ! Zero everything 
    120       !------------------ 
    121  
    122       vt_i(:,:)  = 0.0 
    123       vt_s(:,:)  = 0.0 
    124       at_i(:,:)  = 0.0  
    125       ato_i(:,:) = 1.0  
    126  
    127       IF ( n .GT. 1 ) THEN 
    128          et_s(:,:)  = 0.0 
    129          ot_i(:,:)  = 0.0 
    130          smt_i(:,:) = 0.0 
    131          et_i(:,:)  = 0.0 
    132       ENDIF 
     95      INTEGER, INTENT( in ) ::   kn     ! =1 at_i & vt only ; = what is needed 
     96      ! 
     97      INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices 
     98      REAL(wp) ::   zinda 
     99      !!------------------------------------------------------------------ 
    133100 
    134101      !-------------------- 
    135102      ! Compute variables 
    136103      !-------------------- 
    137  
     104      vt_i (:,:) = 0._wp 
     105      vt_s (:,:) = 0._wp 
     106      at_i (:,:) = 0._wp 
     107      ato_i(:,:) = 1._wp 
     108      ! 
    138109      DO jl = 1, jpl 
    139110         DO jj = 1, jpj 
    140111            DO ji = 1, jpi 
    141  
     112               ! 
    142113               vt_i(ji,jj) = vt_i(ji,jj) + v_i(ji,jj,jl) ! ice volume 
    143114               vt_s(ji,jj) = vt_s(ji,jj) + v_s(ji,jj,jl) ! snow volume 
    144115               at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) ! ice concentration 
    145  
     116               ! 
    146117               zinda = MAX( zzero , SIGN( zone , at_i(ji,jj) - 0.10 ) )  
    147                icethi(ji,jj) = vt_i(ji,jj) / MAX(at_i(ji,jj),epsi16)*zinda   
    148                ! ice thickness 
     118               icethi(ji,jj) = vt_i(ji,jj) / MAX( at_i(ji,jj) , eps16 ) * zinda  ! ice thickness 
    149119            END DO 
    150120         END DO 
     
    153123      DO jj = 1, jpj 
    154124         DO ji = 1, jpi 
    155             ato_i(ji,jj) = MAX(1.0 - at_i(ji,jj), 0.0)   ! open water fraction 
    156          END DO 
    157       END DO 
    158  
    159       IF ( n .GT. 1 ) THEN 
    160  
     125            ato_i(ji,jj) = MAX( 1._wp - at_i(ji,jj), 0._wp )   ! open water fraction 
     126         END DO 
     127      END DO 
     128 
     129      IF( kn > 1 ) THEN 
     130         et_s (:,:) = 0._wp 
     131         ot_i (:,:) = 0._wp 
     132         smt_i(:,:) = 0._wp 
     133         et_i (:,:) = 0._wp 
     134         ! 
    161135         DO jl = 1, jpl 
    162136            DO jj = 1, jpj 
    163137               DO ji = 1, jpi 
    164                   et_s(ji,jj)  = et_s(ji,jj)  +     &       ! snow heat content 
    165                      e_s(ji,jj,1,jl) 
     138                  et_s(ji,jj)  = et_s(ji,jj)  + e_s(ji,jj,1,jl)                                       ! snow heat content 
    166139                  zinda = MAX( zzero , SIGN( zone , vt_i(ji,jj) - 0.10 ) )  
    167                   smt_i(ji,jj) = smt_i(ji,jj) +     &       ! ice salinity 
    168                      smv_i(ji,jj,jl) / MAX( vt_i(ji,jj) , zeps ) * & 
    169                      zinda 
     140                  smt_i(ji,jj) = smt_i(ji,jj) + smv_i(ji,jj,jl) / MAX( vt_i(ji,jj) , eps13 ) * zinda   ! ice salinity 
    170141                  zinda = MAX( zzero , SIGN( zone , at_i(ji,jj) - 0.10 ) )  
    171                   ot_i(ji,jj)  = ot_i(ji,jj)  +     &       ! ice age 
    172                      oa_i(ji,jj,jl)  / MAX( at_i(ji,jj) , zeps ) * & 
    173                      zinda 
    174                END DO 
    175             END DO 
    176          END DO 
    177  
     142                  ot_i(ji,jj)  = ot_i(ji,jj)  + oa_i(ji,jj,jl)  / MAX( at_i(ji,jj) , eps13 ) * zinda   ! ice age 
     143               END DO 
     144            END DO 
     145         END DO 
     146         ! 
    178147         DO jl = 1, jpl 
    179148            DO jk = 1, nlay_i 
    180                DO jj = 1, jpj 
    181                   DO ji = 1, jpi 
    182                      et_i(ji,jj) = et_i(ji,jj) + e_i(ji,jj,jk,jl) ! ice heat 
    183                      ! content 
    184                   END DO 
    185                END DO 
    186             END DO 
    187          END DO 
    188  
    189       ENDIF ! n .GT. 1 
    190  
     149               et_i(:,:) = et_i(:,:) + e_i(:,:,jk,jl)       ! ice heat content 
     150            END DO 
     151         END DO 
     152         ! 
     153      ENDIF 
     154      ! 
    191155   END SUBROUTINE lim_var_agg 
    192156 
    193    !============================================================================== 
    194157 
    195158   SUBROUTINE lim_var_glo2eqv 
    196159      !!------------------------------------------------------------------ 
    197       !!                ***  ROUTINE lim_var_glo2eqv ***' 
    198       !! ** Purpose : 
    199       !!        This routine computes equivalent variables as function of     
    200       !!                              global variables  
    201       !!        i.e. it turns VGLO into VEQV 
    202       !! ** Method  : 
    203       !! 
    204       !! ** Arguments : 
    205       !!           kideb , kiut : Starting and ending points on which the  
    206       !!                         the computation is applied 
    207       !! 
    208       !! ** Inputs / Ouputs :  
    209       !! 
    210       !! ** External :  
    211       !! 
    212       !! ** References : 
    213       !! 
    214       !! ** History : 
    215       !!           (01-2006) Martin Vancoppenolle, UCL-ASTR 
    216       !! 
    217       !!------------------------------------------------------------------ 
    218  
    219       !! * Local variables 
    220       INTEGER ::   ji,       &   ! spatial dummy loop index 
    221          jj,       &   ! spatial dummy loop index 
    222          jk,       &   ! vertical layering dummy loop index 
    223          jl            ! ice category dummy loop index 
    224  
    225       REAL :: zq_i, zaaa, zbbb, zccc, zdiscrim, & 
    226          ztmelts, zindb, zq_s, zfac1, zfac2 
    227  
    228       REAL :: zeps, epsi06 
    229  
    230       zeps    = 1.0e-10 
    231       epsi06  = 1.0e-06 
    232  
    233       !!-- End of declarations 
    234       !!------------------------------------------------------------------------------ 
     160      !!                ***  ROUTINE lim_var_glo2eqv *** 
     161      !! 
     162      !! ** Purpose :   computes equivalent variables as function of global variables  
     163      !!              i.e. it turns VGLO into VEQV 
     164      !!------------------------------------------------------------------ 
     165      INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices 
     166      REAL(wp) ::   zq_i, zaaa, zbbb, zccc, zdiscrim     ! local scalars 
     167      REAL(wp) ::   ztmelts, zindb, zq_s, zfac1, zfac2   !   -      - 
     168      !!------------------------------------------------------------------ 
    235169 
    236170      !------------------------------------------------------- 
    237171      ! Ice thickness, snow thickness, ice salinity, ice age 
    238172      !------------------------------------------------------- 
    239 !CDIR NOVERRCHK 
    240173      DO jl = 1, jpl 
    241 !CDIR NOVERRCHK 
    242174         DO jj = 1, jpj 
    243 !CDIR NOVERRCHK 
    244175            DO ji = 1, jpi 
    245                zindb          = 1.0-MAX(0.0,SIGN(1.0,- a_i(ji,jj,jl))) !0 if no ice and 1 if yes 
    246                ht_i(ji,jj,jl) = v_i(ji,jj,jl)   / MAX( a_i(ji,jj,jl) , zeps ) * zindb 
    247                ht_s(ji,jj,jl) = v_s(ji,jj,jl)   / MAX( a_i(ji,jj,jl) , zeps ) * zindb 
    248                o_i(ji,jj,jl)  = oa_i(ji,jj,jl)  / MAX( a_i(ji,jj,jl) , zeps ) * zindb 
    249             END DO 
    250          END DO 
    251       END DO 
    252  
    253       IF ( ( num_sal .EQ. 2 ) .OR. ( num_sal .EQ. 4 ) )THEN 
    254  
    255 !CDIR NOVERRCHK 
     176               zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp,- a_i(ji,jj,jl) ) )   !0 if no ice and 1 if yes 
     177               ht_i(ji,jj,jl) = v_i (ji,jj,jl) / MAX( a_i(ji,jj,jl) , eps10 ) * zindb 
     178               ht_s(ji,jj,jl) = v_s (ji,jj,jl) / MAX( a_i(ji,jj,jl) , eps10 ) * zindb 
     179               o_i(ji,jj,jl)  = oa_i(ji,jj,jl) / MAX( a_i(ji,jj,jl) , eps10 ) * zindb 
     180            END DO 
     181         END DO 
     182      END DO 
     183 
     184      IF(  num_sal == 2  .OR.  num_sal == 4  )THEN 
    256185         DO jl = 1, jpl 
    257 !CDIR NOVERRCHK 
    258             DO jj = 1, jpj 
    259 !CDIR NOVERRCHK 
    260                DO ji = 1, jpi 
    261                   zindb          = 1.0-MAX(0.0,SIGN(1.0,-a_i(ji,jj,jl))) !0 if no ice and 1 if yes 
    262                   sm_i(ji,jj,jl) = smv_i(ji,jj,jl) / MAX(v_i(ji,jj,jl),zeps) * zindb 
    263                END DO 
    264             END DO 
    265          END DO 
    266  
     186            DO jj = 1, jpj 
     187               DO ji = 1, jpi 
     188                  zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp,- a_i(ji,jj,jl) ) )   !0 if no ice and 1 if yes 
     189                  sm_i(ji,jj,jl) = smv_i(ji,jj,jl) / MAX( v_i(ji,jj,jl) , eps10 ) * zindb 
     190               END DO 
     191            END DO 
     192         END DO 
    267193      ENDIF 
    268194 
    269       ! salinity profile 
    270       CALL lim_var_salprof 
     195      CALL lim_var_salprof      ! salinity profile 
    271196 
    272197      !------------------- 
     
    281206!CDIR NOVERRCHK 
    282207               DO ji = 1, jpi 
    283                   !Energy of melting q(S,T) [J.m-3] 
    284                   zq_i       = e_i(ji,jj,jk,jl) / area(ji,jj) / & 
    285                      MAX( v_i(ji,jj,jl) , epsi06 ) * nlay_i  
    286                   ! zindb = 0 if no ice and 1 if yes 
    287                   zindb      = 1.0 - MAX( 0.0 , SIGN( 1.0 , - v_i(ji,jj,jl) ) ) 
    288                   !convert units ! very important that this line is here 
    289                   zq_i       = zq_i * unit_fac * zindb 
    290                   !Ice layer melt temperature 
    291                   ztmelts    =  -tmut*s_i(ji,jj,jk,jl) + rtt 
    292                   !Conversion q(S,T) -> T (second order equation) 
    293                   zaaa       =  cpic 
    294                   zbbb       =  ( rcp - cpic ) * ( ztmelts - rtt ) + & 
    295                      zq_i / rhoic - lfus 
     208                  !                                                              ! Energy of melting q(S,T) [J.m-3] 
     209                  zq_i    = e_i(ji,jj,jk,jl) / area(ji,jj) / MAX( v_i(ji,jj,jl) , eps06 ) * REAL(nlay_i,wp)  
     210                  zindb   = 1.0 - MAX( 0.0 , SIGN( 1.0 , - v_i(ji,jj,jl) ) )     ! zindb = 0 if no ice and 1 if yes 
     211                  zq_i    = zq_i * unit_fac * zindb                              !convert units 
     212                  ztmelts = -tmut * s_i(ji,jj,jk,jl) + rtt                       ! Ice layer melt temperature 
     213                  ! 
     214                  zaaa       =  cpic                  ! Conversion q(S,T) -> T (second order equation) 
     215                  zbbb       =  ( rcp - cpic ) * ( ztmelts - rtt ) + zq_i / rhoic - lfus 
    296216                  zccc       =  lfus * (ztmelts-rtt) 
    297                   zdiscrim   =  SQRT( MAX(zbbb*zbbb - 4.0*zaaa*zccc,0.0) ) 
    298                   t_i(ji,jj,jk,jl) = rtt + zindb *( - zbbb - zdiscrim ) / &  
    299                      ( 2.0 *zaaa ) 
    300                   t_i(ji,jj,jk,jl) = MIN( rtt, MAX(173.15, t_i(ji,jj,jk,jl) ) ) 
     217                  zdiscrim   =  SQRT( MAX(zbbb*zbbb - 4._wp*zaaa*zccc , 0._wp) ) 
     218                  t_i(ji,jj,jk,jl) = rtt + zindb *( - zbbb - zdiscrim ) / ( 2.0 *zaaa ) 
     219                  t_i(ji,jj,jk,jl) = MIN( rtt, MAX( 173.15_wp, t_i(ji,jj,jk,jl) ) )       ! 100-rtt < t_i < rtt 
    301220               END DO 
    302221            END DO 
     
    307226      ! Snow temperatures 
    308227      !-------------------- 
    309       zfac1 = 1. / ( rhosn * cpic ) 
     228      zfac1 = 1._wp / ( rhosn * cpic ) 
    310229      zfac2 = lfus / cpic   
    311 !CDIR NOVERRCHK 
    312230      DO jl = 1, jpl 
    313 !CDIR NOVERRCHK 
    314231         DO jk = 1, nlay_s 
    315 !CDIR NOVERRCHK 
    316             DO jj = 1, jpj 
    317 !CDIR NOVERRCHK 
     232            DO jj = 1, jpj 
    318233               DO ji = 1, jpi 
    319234                  !Energy of melting q(S,T) [J.m-3] 
    320                   zq_s       = e_s(ji,jj,jk,jl) / area(ji,jj) / & 
    321                      MAX( v_s(ji,jj,jl) , epsi06 ) * nlay_s  
    322                   ! zindb = 0 if no ice and 1 if yes 
    323                   zindb      = 1.0 - MAX( 0.0 , SIGN( 1.0 , - v_s(ji,jj,jl) ) ) 
    324                   !convert units ! very important that this line is here 
    325                   zq_s       = zq_s * unit_fac * zindb 
     235                  zq_s  = e_s(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_s(ji,jj,jl) , eps06 ) ) * REAL(nlay_s,wp) 
     236                  zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp , - v_s(ji,jj,jl) ) )     ! zindb = 0 if no ice and 1 if yes 
     237                  zq_s  = zq_s * unit_fac * zindb                                    ! convert units 
     238                  ! 
    326239                  t_s(ji,jj,jk,jl) = rtt + zindb * ( - zfac1 * zq_s + zfac2 ) 
    327                   t_s(ji,jj,jk,jl) = MIN( rtt, MAX(173.15, t_s(ji,jj,jk,jl) ) ) 
    328  
     240                  t_s(ji,jj,jk,jl) = MIN( rtt, MAX( 173.15, t_s(ji,jj,jk,jl) ) )     ! 100-rtt < t_i < rtt 
    329241               END DO 
    330242            END DO 
     
    335247      ! Mean temperature 
    336248      !------------------- 
    337       tm_i(:,:) = 0.0 
    338 !CDIR NOVERRCHK 
     249      tm_i(:,:) = 0._wp 
    339250      DO jl = 1, jpl 
    340 !CDIR NOVERRCHK 
    341251         DO jk = 1, nlay_i 
    342 !CDIR NOVERRCHK 
    343             DO jj = 1, jpj 
    344 !CDIR NOVERRCHK 
    345                DO ji = 1, jpi 
    346                   zindb          = 1.0-MAX(0.0,SIGN(1.0,-a_i(ji,jj,jl))) 
    347                   zindb          = zindb*1.0-MAX(0.0,SIGN(1.0,-v_i(ji,jj,jl))) 
    348                   tm_i(ji,jj) = tm_i(ji,jj) + t_i(ji,jj,jk,jl)*v_i(ji,jj,jl) / & 
    349                      REAL(nlay_i) / MAX( vt_i(ji,jj) , zeps ) 
    350                END DO 
    351             END DO 
    352          END DO 
    353       END DO 
    354  
     252            DO jj = 1, jpj 
     253               DO ji = 1, jpi 
     254                  zindb = (  1._wp - MAX( 0._wp , SIGN( 1._wp , -a_i(ji,jj,jl) ) )  )   & 
     255                     &  * (  1._wp - MAX( 0._wp , SIGN( 1._wp , -v_i(ji,jj,jl) ) )  ) 
     256                  tm_i(ji,jj) = tm_i(ji,jj) + t_i(ji,jj,jk,jl) * v_i(ji,jj,jl)   & 
     257                     &                      / (  REAL(nlay_i,wp) * MAX( vt_i(ji,jj) , eps10 )  ) 
     258               END DO 
     259            END DO 
     260         END DO 
     261      END DO 
     262      ! 
    355263   END SUBROUTINE lim_var_glo2eqv 
    356264 
    357    !=============================================================================== 
    358265 
    359266   SUBROUTINE lim_var_eqv2glo 
    360267      !!------------------------------------------------------------------ 
    361       !!                ***  ROUTINE lim_var_eqv2glo ***' 
    362       !! ** Purpose : 
    363       !!        This routine computes global     variables as function of     
    364       !!                              equivalent variables 
    365       !!        i.e. it turns VEQV into VGLO 
     268      !!                ***  ROUTINE lim_var_eqv2glo *** 
     269      !! 
     270      !! ** Purpose :   computes global variables as function of equivalent variables 
     271      !!                i.e. it turns VEQV into VGLO 
    366272      !! ** Method  : 
    367273      !! 
    368       !! ** Arguments : 
    369       !! 
    370       !! ** Inputs / Ouputs : (global commons) 
    371       !! 
    372       !! ** External :  
    373       !! 
    374       !! ** References : 
    375       !! 
    376       !! ** History : 
    377       !!           (01-2006) Martin Vancoppenolle, UCL-ASTR 
    378       !!                     Take it easy man 
    379       !!                     Life is just a simple game, between  
    380       !!                     ups / and downs \ :@) 
    381       !! 
    382       !!------------------------------------------------------------------ 
    383  
     274      !! ** History :  (01-2006) Martin Vancoppenolle, UCL-ASTR 
     275      !!------------------------------------------------------------------ 
     276      ! 
    384277      v_i(:,:,:)   = ht_i(:,:,:) * a_i(:,:,:) 
    385278      v_s(:,:,:)   = ht_s(:,:,:) * a_i(:,:,:) 
    386279      smv_i(:,:,:) = sm_i(:,:,:) * v_i(:,:,:) 
    387280      oa_i (:,:,:) = o_i (:,:,:) * a_i(:,:,:) 
    388  
     281      ! 
    389282   END SUBROUTINE lim_var_eqv2glo 
    390283 
    391    !=============================================================================== 
    392284 
    393285   SUBROUTINE lim_var_salprof 
    394286      !!------------------------------------------------------------------ 
    395       !!                ***  ROUTINE lim_var_salprof ***' 
    396       !! ** Purpose : 
    397       !!        This routine computes salinity profile in function of 
    398       !!        bulk salinity      
     287      !!                ***  ROUTINE lim_var_salprof *** 
     288      !! 
     289      !! ** Purpose :   computes salinity profile in function of bulk salinity      
    399290      !! 
    400291      !! ** Method  : If bulk salinity greater than s_i_1,  
     
    406297      !! 
    407298      !! ** References : Vancoppenolle et al., 2007 (in preparation) 
    408       !! 
    409       !! ** History : 
    410       !!           (08-2006) Martin Vancoppenolle, UCL-ASTR 
    411       !!                     Take it easy man 
    412       !!                     Life is just a simple game, between ups  
    413       !!                     / and downs \ :@) 
    414       !! 
    415       !!------------------------------------------------------------------ 
    416       !! * Arguments 
    417  
    418       !! * Local variables 
    419       INTEGER ::             & 
    420          ji            ,     & !: spatial dummy loop index 
    421          jj            ,     & !: spatial dummy loop index 
    422          jk            ,     & !: vertical layering dummy loop index 
    423          jl                    !: ice category dummy loop index 
    424  
    425       REAL(wp) ::            & 
    426          dummy_fac0    ,     & !: dummy factor used in computations 
    427          dummy_fac1    ,     & !: dummy factor used in computations 
    428          dummy_fac     ,     & !: dummy factor used in computations 
    429          zind0         ,     & !: switch, = 1 if sm_i lt s_i_0 
    430          zind01        ,     & !: switch, = 1 if sm_i between s_i_0 and s_i_1 
    431          zindbal       ,     & !: switch, = 1, if 2*sm_i gt sss_m 
    432          zargtemp              !: dummy factor 
    433  
    434       REAL(wp), DIMENSION(nlay_i) ::      & 
    435          zs_zero               !: linear salinity profile for salinities under 
    436       !: s_i_0 
    437  
    438       REAL(wp), DIMENSION(jpi,jpj,jpl) :: & 
    439          z_slope_s     ,     & !: slope of the salinity profile 
    440          zalpha                !: weight factor for s between s_i_0 and s_i_1 
    441  
    442       !!-- End of declarations 
    443       !!------------------------------------------------------------------------------ 
     299      !!------------------------------------------------------------------ 
     300      INTEGER  ::   ji, jj, jk, jl   ! dummy loop index 
     301      REAL(wp) ::   dummy_fac0, dummy_fac1, dummy_fac, zsal      ! local scalar 
     302      REAL(wp) ::   zind0, zind01, zindbal, zargtemp , zs_zero   !   -      - 
     303      ! 
     304      REAL(wp), POINTER, DIMENSION(:,:,:) ::   z_slope_s, zalpha   ! 3D pointer 
     305      !!------------------------------------------------------------------ 
     306 
     307      IF( wrk_in_use( 2, 1,2 ) ) THEN 
     308         CALL ctl_stop( 'lim_var_salprof: requested workspace arrays unavailable' )   ;   RETURN 
     309      END IF 
     310 
     311      z_slope_s => wrk_3d_1(:,:,1:jpl)   ! slope of the salinity profile 
     312      zalpha    => wrk_3d_2(:,:,1:jpl)   ! weight factor for s between s_i_0 and s_i_1 
    444313 
    445314      !--------------------------------------- 
    446315      ! Vertically constant, constant in time 
    447316      !--------------------------------------- 
    448  
    449       IF ( num_sal .EQ. 1 ) THEN 
    450  
    451          s_i(:,:,:,:) = bulk_sal 
    452  
    453       ENDIF 
     317      IF( num_sal == 1 )   s_i(:,:,:,:) = bulk_sal 
    454318 
    455319      !----------------------------------- 
     
    457321      !----------------------------------- 
    458322 
    459       IF ( ( num_sal .EQ. 2 ) .OR. ( num_sal .EQ. 4 ) )THEN 
    460  
     323      IF(   num_sal == 2  .OR.   num_sal == 4   ) THEN 
     324         ! 
    461325         DO jk = 1, nlay_i 
    462326            s_i(:,:,jk,:)  = sm_i(:,:,:) 
    463          END DO ! jk 
    464  
    465          ! Slope of the linear profile zs_zero 
    466          !------------------------------------- 
     327         END DO 
     328         ! 
     329         DO jl = 1, jpl                               ! Slope of the linear profile  
     330            DO jj = 1, jpj 
     331               DO ji = 1, jpi 
     332                  z_slope_s(ji,jj,jl) = 2._wp * sm_i(ji,jj,jl) / MAX( 0.01 , ht_i(ji,jj,jl) ) 
     333               END DO 
     334            END DO 
     335         END DO 
     336         ! 
     337         dummy_fac0 = 1._wp / ( s_i_0 - s_i_1 )       ! Weighting factor between zs_zero and zs_inf 
     338         dummy_fac1 = s_i_1 / ( s_i_1 - s_i_0 ) 
     339 
     340         zalpha(:,:,:) = 0._wp 
    467341         DO jl = 1, jpl 
    468342            DO jj = 1, jpj 
    469                DO ji = 1, jpi 
    470                   z_slope_s(ji,jj,jl) = 2.0 * sm_i(ji,jj,jl) / MAX( 0.01      & 
    471                      , ht_i(ji,jj,jl) ) 
    472                END DO ! ji 
    473             END DO ! jj 
    474          END DO ! jl 
    475  
    476          ! Weighting factor between zs_zero and zs_inf 
    477          !--------------------------------------------- 
    478          dummy_fac0 = 1. / ( ( s_i_0 - s_i_1 ) ) 
    479          dummy_fac1 = s_i_1 / ( s_i_1 - s_i_0 ) 
    480  
    481          zalpha(:,:,:) = 0.0 
    482  
    483 !CDIR NOVERRCHK 
    484          DO jl = 1, jpl 
    485 !CDIR NOVERRCHK 
    486             DO jj = 1, jpj 
    487 !CDIR NOVERRCHK 
    488343               DO ji = 1, jpi 
    489344                  ! zind0 = 1 if sm_i le s_i_0 and 0 otherwise 
    490345                  zind0  = MAX( 0.0   , SIGN( 1.0  , s_i_0 - sm_i(ji,jj,jl) ) )  
    491346                  ! zind01 = 1 if sm_i is between s_i_0 and s_i_1 and 0 othws  
    492                   zind01 = ( 1.0 - zind0 ) *                                  & 
    493                      MAX( 0.0   , SIGN( 1.0  , s_i_1 - sm_i(ji,jj,jl) ) )  
     347                  zind01 = ( 1.0 - zind0 ) * MAX( 0.0   , SIGN( 1.0  , s_i_1 - sm_i(ji,jj,jl) ) )  
    494348                  ! If 2.sm_i GE sss_m then zindbal = 1 
    495                   zindbal = MAX( 0.0 , SIGN( 1.0 , 2. * sm_i(ji,jj,jl) -      & 
    496                      sss_m(ji,jj) ) ) 
    497                   zalpha(ji,jj,jl) = zind0  * 1.0                             & 
    498                      + zind01 * ( sm_i(ji,jj,jl) * dummy_fac0 + & 
    499                      dummy_fac1 ) 
     349                  zindbal = MAX( 0.0 , SIGN( 1.0 , 2. * sm_i(ji,jj,jl) - sss_m(ji,jj) ) ) 
     350                  zalpha(ji,jj,jl) = zind0  * 1.0 + zind01 * ( sm_i(ji,jj,jl) * dummy_fac0 + dummy_fac1 ) 
    500351                  zalpha(ji,jj,jl) = zalpha(ji,jj,jl) * ( 1.0 - zindbal ) 
    501352               END DO 
     
    503354         END DO 
    504355 
    505          ! Computation of the profile 
    506          !---------------------------- 
    507          dummy_fac = 1. / nlay_i 
    508  
     356         dummy_fac = 1._wp / nlay_i                   ! Computation of the profile 
    509357         DO jl = 1, jpl 
    510358            DO jk = 1, nlay_i 
    511359               DO jj = 1, jpj 
    512360                  DO ji = 1, jpi 
    513                      ! linear profile with 0 at the surface 
    514                      zs_zero(jk)      = z_slope_s(ji,jj,jl) * ( jk - 1./2. ) * & 
    515                         ht_i(ji,jj,jl) * dummy_fac 
    516                      ! weighting the profile 
    517                      s_i(ji,jj,jk,jl) = zalpha(ji,jj,jl) * zs_zero(jk) +       & 
    518                         ( 1.0 - zalpha(ji,jj,jl) ) * sm_i(ji,jj,jl) 
     361                     !                                      ! linear profile with 0 at the surface 
     362                     zs_zero = z_slope_s(ji,jj,jl) * ( REAL(jk,wp) - 0.5_wp ) * ht_i(ji,jj,jl) * dummy_fac 
     363                     !                                      ! weighting the profile 
     364                     s_i(ji,jj,jk,jl) = zalpha(ji,jj,jl) * zs_zero + ( 1._wp - zalpha(ji,jj,jl) ) * sm_i(ji,jj,jl) 
    519365                  END DO ! ji 
    520366               END DO ! jj 
     
    527373      ! Vertically varying salinity profile, constant in time 
    528374      !------------------------------------------------------- 
    529       ! Schwarzacher (1959) multiyear salinity profile (mean = 2.30) 
    530  
    531       IF ( num_sal .EQ. 3 ) THEN 
    532  
    533          sm_i(:,:,:) = 2.30 
    534  
    535 !CDIR NOVERRCHK 
     375 
     376      IF( num_sal == 3 ) THEN      ! Schwarzacher (1959) multiyear salinity profile (mean = 2.30) 
     377         ! 
     378         sm_i(:,:,:) = 2.30_wp 
     379         ! 
    536380         DO jl = 1, jpl 
    537381!CDIR NOVERRCHK 
    538382            DO jk = 1, nlay_i 
    539 !CDIR NOVERRCHK 
    540                DO jj = 1, jpj 
    541 !CDIR NOVERRCHK 
    542                   DO ji = 1, jpi 
    543                      zargtemp  = ( jk - 0.5 ) / nlay_i 
    544                      s_i(ji,jj,jk,jl) =  1.6 - 1.6 * COS( 3.14169265 * & 
    545                         ( zargtemp**(0.407/           & 
    546                         ( 0.573 + zargtemp ) ) ) ) 
    547                   END DO ! ji 
    548                END DO ! jj 
    549             END DO ! jk 
    550          END DO ! jl 
     383               zargtemp  = ( REAL(jk,wp) - 0.5_wp ) / REAL(nlay_i,wp) 
     384               zsal =  1.6_wp * (  1._wp - COS( rpi * zargtemp**(0.407_wp/(0.573_wp+zargtemp)) )  ) 
     385               s_i(:,:,jk,jl) =  zsal 
     386            END DO 
     387         END DO 
    551388 
    552389      ENDIF ! num_sal 
    553  
     390      ! 
     391      IF( wrk_not_released(2, 1,2) )   CALL ctl_stop('lim_var_salprof: failed to release workspace arrays.') 
     392      ! 
    554393   END SUBROUTINE lim_var_salprof 
    555394 
    556    !=============================================================================== 
    557395 
    558396   SUBROUTINE lim_var_bv 
    559397      !!------------------------------------------------------------------ 
    560       !!                ***  ROUTINE lim_var_bv ***' 
    561       !! ** Purpose : 
    562       !!        This routine computes mean brine volume (%) in sea ice 
     398      !!                ***  ROUTINE lim_var_bv *** 
     399      !! 
     400      !! ** Purpose :  computes mean brine volume (%) in sea ice 
    563401      !! 
    564402      !! ** Method  : e = - 0.054 * S (ppt) / T (C) 
    565403      !! 
    566       !! ** Arguments : 
    567       !! 
    568       !! ** Inputs / Ouputs : (global commons) 
    569       !! 
    570       !! ** External :  
    571       !! 
    572       !! ** References : Vancoppenolle et al., JGR, 2007 
    573       !! 
    574       !! ** History : 
    575       !!           (08-2006) Martin Vancoppenolle, UCL-ASTR 
    576       !! 
    577       !!------------------------------------------------------------------ 
    578       !! * Arguments 
    579  
    580       !! * Local variables 
    581       INTEGER ::   ji,       &   ! spatial dummy loop index 
    582          jj,       &   ! spatial dummy loop index 
    583          jk,       &   ! vertical layering dummy loop index 
    584          jl            ! ice category dummy loop index 
    585  
    586       REAL :: zbvi,          &   ! brine volume for a single ice category 
    587          zeps,          &   ! very small value 
    588          zindb              ! is there ice or not 
    589  
    590       !!-- End of declarations 
    591       !!------------------------------------------------------------------------------ 
    592  
    593       zeps = 1.0e-13 
    594       bv_i(:,:) = 0.0 
    595 !CDIR NOVERRCHK 
     404      !! References : Vancoppenolle et al., JGR, 2007 
     405      !!------------------------------------------------------------------ 
     406      INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices 
     407      REAL(wp) ::   zbvi, zindb      ! local scalars 
     408      !!------------------------------------------------------------------ 
     409      ! 
     410      bv_i(:,:) = 0._wp 
    596411      DO jl = 1, jpl 
    597 !CDIR NOVERRCHK 
    598412         DO jk = 1, nlay_i 
    599 !CDIR NOVERRCHK 
    600             DO jj = 1, jpj 
    601 !CDIR NOVERRCHK 
    602                DO ji = 1, jpi 
    603                   zindb          = 1.0-MAX(0.0,SIGN(1.0,-a_i(ji,jj,jl))) !0 if no ice and 1 if yes 
    604                   zbvi = - zindb * tmut *s_i(ji,jj,jk,jl) /             &  
    605                      MIN( t_i(ji,jj,jk,jl) - 273.15 , zeps )         & 
    606                      * v_i(ji,jj,jl) / REAL(nlay_i) 
    607                   bv_i(ji,jj) = bv_i(ji,jj) + zbvi  & 
    608                      / MAX( vt_i(ji,jj) , zeps ) 
    609                END DO 
    610             END DO 
    611          END DO 
    612       END DO 
    613  
     413            DO jj = 1, jpj 
     414               DO ji = 1, jpi 
     415                  zindb = 1.0-MAX(0.0,SIGN(1.0,-a_i(ji,jj,jl))) !0 if no ice and 1 if yes 
     416                  zbvi  = - zindb * tmut * s_i(ji,jj,jk,jl) / MIN( t_i(ji,jj,jk,jl) - 273.15 , eps13 )   & 
     417                     &                   * v_i(ji,jj,jl)    / REAL(nlay_i,wp) 
     418                  bv_i(ji,jj) = bv_i(ji,jj) + zbvi  / MAX( vt_i(ji,jj) , eps13 ) 
     419               END DO 
     420            END DO 
     421         END DO 
     422      END DO 
     423      ! 
    614424   END SUBROUTINE lim_var_bv 
    615425 
    616    !=============================================================================== 
    617  
    618    SUBROUTINE lim_var_salprof1d(kideb,kiut) 
     426 
     427   SUBROUTINE lim_var_salprof1d( kideb, kiut ) 
    619428      !!------------------------------------------------------------------- 
    620429      !!                  ***  ROUTINE lim_thd_salprof1d  *** 
    621430      !! 
    622431      !! ** Purpose :   1d computation of the sea ice salinity profile 
    623       !!                Works with 1d vectors and is used by thermodynamic 
    624       !!                modules 
    625       !! 
    626       !! history : 
    627       !!   3.0  !  May  2007 M. Vancoppenolle  Original code 
     432      !!                Works with 1d vectors and is used by thermodynamic modules 
    628433      !!------------------------------------------------------------------- 
    629       INTEGER, INTENT(in) :: & 
    630          kideb, kiut             ! thickness category index 
    631  
    632       INTEGER ::             & 
    633          ji, jk,             &   ! geographic and layer index  
    634          zji, zjj 
    635  
    636       REAL(wp) ::            & 
    637          dummy_fac0,         &   ! dummy factors 
    638          dummy_fac1,         & 
    639          dummy_fac2,         & 
    640          zalpha    ,         &   ! weighting factor 
    641          zind0     ,         &   ! switches as in limvar 
    642          zind01    ,         &   ! switch 
    643          zindbal   ,         &   ! switch if in freshwater area 
    644          zargtemp 
    645  
    646       REAL(wp), DIMENSION(jpij) ::            & 
    647          z_slope_s 
    648  
    649       REAL(wp), DIMENSION(jpij,jkmax) ::      & 
    650          zs_zero 
    651       !!------------------------------------------------------------------- 
     434      INTEGER, INTENT(in) ::   kideb, kiut   ! thickness category index 
     435      ! 
     436      INTEGER  ::   ji, jk    ! dummy loop indices 
     437      INTEGER  ::   zji, zjj  ! local integers 
     438      REAL(wp) ::   dummy_fac0, dummy_fac1, dummy_fac2, zargtemp, zsal   ! local scalars 
     439      REAL(wp) ::   zalpha, zind0, zind01, zindbal, zs_zero              !   -      - 
     440      ! 
     441      REAL(wp), POINTER, DIMENSION(:) ::   z_slope_s 
     442      !!--------------------------------------------------------------------- 
     443 
     444      IF(  wrk_in_use(1, 1)  ) THEN 
     445         CALL ctl_stop('lim_var_salprof1d : requestead workspace arrays unavailable.')   ;   RETURN 
     446      END IF 
     447      ! Set-up pointers to sub-arrays of workspace arrays 
     448      z_slope_s  =>  wrk_1d_1 (1:jpij) 
    652449 
    653450      !--------------------------------------- 
    654451      ! Vertically constant, constant in time 
    655452      !--------------------------------------- 
    656  
    657       IF ( num_sal .EQ. 1 ) THEN 
    658  
    659          s_i_b(:,:) = bulk_sal 
    660  
    661       ENDIF 
     453      IF( num_sal == 1 )   s_i_b(:,:) = bulk_sal 
    662454 
    663455      !------------------------------------------------------ 
     
    665457      !------------------------------------------------------ 
    666458 
    667       IF ( ( num_sal .EQ. 2 ) .OR. ( num_sal .EQ. 4 ) ) THEN 
    668  
    669          ! Slope of the linear profile zs_zero 
    670          !------------------------------------- 
    671 !CDIR NOVERRCHK 
    672          DO ji = kideb, kiut  
    673             z_slope_s(ji) = 2.0 * sm_i_b(ji) / MAX( 0.01      & 
    674                , ht_i_b(ji) ) 
    675          END DO ! ji 
     459      IF(  num_sal == 2  .OR.  num_sal == 4  ) THEN 
     460         ! 
     461         DO ji = kideb, kiut          ! Slope of the linear profile zs_zero 
     462            z_slope_s(ji) = 2._wp * sm_i_b(ji) / MAX( 0.01 , ht_i_b(ji) ) 
     463         END DO 
    676464 
    677465         ! Weighting factor between zs_zero and zs_inf 
    678466         !--------------------------------------------- 
    679          dummy_fac0 = 1. / ( ( s_i_0 - s_i_1 ) ) 
     467         dummy_fac0 = 1._wp / ( s_i_0 - s_i_1 ) 
    680468         dummy_fac1 = s_i_1 / ( s_i_1 - s_i_0 ) 
    681          dummy_fac2 = 1. / nlay_i 
     469         dummy_fac2 = 1._wp / REAL(nlay_i,wp) 
    682470 
    683471!CDIR NOVERRCHK 
     
    685473!CDIR NOVERRCHK 
    686474            DO ji = kideb, kiut 
    687                zji    =  MOD( npb(ji) - 1, jpi ) + 1 
    688                zjj    =  ( npb(ji) - 1 ) / jpi + 1 
    689                zalpha = 0.0 
     475               zji =  MOD( npb(ji) - 1 , jpi ) + 1 
     476               zjj =     ( npb(ji) - 1 ) / jpi + 1 
    690477               ! zind0 = 1 if sm_i le s_i_0 and 0 otherwise 
    691                zind0  = MAX( 0.0   , SIGN( 1.0  , s_i_0 - sm_i_b(ji) ) )  
     478               zind0  = MAX( 0._wp , SIGN( 1._wp  , s_i_0 - sm_i_b(ji) ) )  
    692479               ! zind01 = 1 if sm_i is between s_i_0 and s_i_1 and 0 othws  
    693                zind01 = ( 1.0 - zind0 ) *                                  & 
    694                   MAX( 0.0   , SIGN( 1.0  , s_i_1 - sm_i_b(ji) ) )  
     480               zind01 = ( 1._wp - zind0 ) * MAX( 0._wp , SIGN( 1._wp , s_i_1 - sm_i_b(ji) ) )  
    695481               ! if 2.sm_i GE sss_m then zindbal = 1 
    696                zindbal = MAX( 0.0 , SIGN( 1.0 , 2. * sm_i_b(ji) -      & 
    697                   sss_m(zji,zjj) ) ) 
    698  
    699                zalpha = zind0  * 1.0                                       & 
    700                   + zind01 * ( sm_i_b(ji) * dummy_fac0 +           & 
    701                   dummy_fac1 ) 
    702                zalpha = zalpha * ( 1.0 - zindbal ) 
    703  
    704                zs_zero(ji,jk) = z_slope_s(ji) * ( jk - 1./2. ) * & 
    705                   ht_i_b(ji) * dummy_fac2 
     482               zindbal = MAX( 0._wp , SIGN( 1._wp , 2._wp * sm_i_b(ji) - sss_m(zji,zjj) ) ) 
     483               ! 
     484               zalpha = (  zind0 + zind01 * ( sm_i_b(ji) * dummy_fac0 + dummy_fac1 )  ) * ( 1.0 - zindbal ) 
     485               ! 
     486               zs_zero = z_slope_s(ji) * ( REAL(jk,wp) - 0.5_wp ) * ht_i_b(ji) * dummy_fac2 
    706487               ! weighting the profile 
    707                s_i_b(ji,jk) = zalpha * zs_zero(ji,jk) +       & 
    708                   ( 1.0 - zalpha ) * sm_i_b(ji) 
     488               s_i_b(ji,jk) = zalpha * zs_zero + ( 1._wp - zalpha ) * sm_i_b(ji) 
    709489            END DO ! ji 
    710490         END DO ! jk 
     
    715495      ! Vertically varying salinity profile, constant in time 
    716496      !------------------------------------------------------- 
    717       ! Schwarzacher (1959) multiyear salinity profile (mean = 2.30) 
    718  
    719       IF ( num_sal .EQ. 3 ) THEN 
    720  
    721          sm_i_b(:) = 2.30 
    722  
    723 !CDIR NOVERRCHK 
    724          DO ji = kideb, kiut 
    725 !CDIR NOVERRCHK 
    726             DO jk = 1, nlay_i 
    727                zargtemp  = ( jk - 0.5 ) / nlay_i 
    728                s_i_b(ji,jk)  =  1.6 - 1.6*cos(3.14169265*(zargtemp**(0.407/ & 
    729                   (0.573+zargtemp)))) 
    730             END DO ! jk 
    731          END DO ! ji 
    732  
    733       ENDIF ! num_sal 
    734  
     497 
     498      IF( num_sal == 3 ) THEN      ! Schwarzacher (1959) multiyear salinity profile (mean = 2.30) 
     499         ! 
     500         sm_i_b(:) = 2.30_wp 
     501         ! 
     502!CDIR NOVERRCHK 
     503         DO jk = 1, nlay_i 
     504            zargtemp  = ( REAL(jk,wp) - 0.5_wp ) / REAL(nlay_i,wp) 
     505            zsal =  1.6_wp * (  1._wp - COS( rpi * zargtemp**(0.407_wp/(0.573_wp+zargtemp)) )  ) 
     506            DO ji = kideb, kiut 
     507               s_i_b(ji,jk) = zsal 
     508            END DO 
     509         END DO 
     510         ! 
     511      ENDIF 
     512      ! 
     513      IF( wrk_not_released(1, 1) )   CALL ctl_stop( 'lim_var_salprof1d : failed to release workspace arrays' ) 
     514      ! 
    735515   END SUBROUTINE lim_var_salprof1d 
    736516 
    737    !=============================================================================== 
    738  
    739517#else 
    740    !!====================================================================== 
    741    !!                       ***  MODULE limvar  *** 
    742    !!                          no sea ice model 
    743    !!====================================================================== 
     518   !!---------------------------------------------------------------------- 
     519   !!   Default option         Dummy module          NO  LIM3 sea-ice model 
     520   !!---------------------------------------------------------------------- 
    744521CONTAINS 
    745522   SUBROUTINE lim_var_agg          ! Empty routines 
     
    755532   SUBROUTINE lim_var_salprof1d    ! Emtpy routines 
    756533   END SUBROUTINE lim_var_salprof1d 
    757  
    758534#endif 
     535 
     536   !!====================================================================== 
    759537END MODULE limvar 
Note: See TracChangeset for help on using the changeset viewer.