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

Ignore:
Timestamp:
2008-05-13T10:28:52+02:00 (16 years ago)
Author:
rblod
Message:

Correct indentation and print for debug in LIM3, see ticket #134, step I

File:
1 edited

Legend:

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

    r888 r921  
    4444   USE ice 
    4545   USE par_ice 
    46   
     46 
    4747   IMPLICIT NONE 
    4848   PRIVATE 
     
    7171 
    7272   SUBROUTINE lim_var_agg(n) 
    73         !!------------------------------------------------------------------ 
    74         !!                ***  ROUTINE lim_var_agg  *** 
    75         !! ** Purpose : 
    76         !!        This routine aggregates ice-thickness-category variables to   
    77         !!                                all-ice variables 
    78         !!        i.e. it turns VGLO into VAGG 
    79         !! ** Method  : 
    80         !! 
    81         !! ** Arguments : 
    82         !!           kideb , kiut : Starting and ending points on which the  
    83         !!                         the computation is applied 
    84         !! 
    85         !! ** Inputs / Ouputs : (global commons) 
    86         !! ** Arguments : n = 1, at_i vt_i only 
    87         !!                n = 2 everything 
    88         !! 
    89         !! ** External :  
    90         !! 
    91         !! ** References : 
    92         !! 
    93         !! ** History : 
    94         !!           (01-2006) Martin Vancoppenolle, UCL-ASTR 
    95         !! 
    96         !! note : you could add an argument when you need only at_i, vt_i 
    97         !!        and when you need everything 
    98         !!------------------------------------------------------------------ 
    99         !! * Arguments 
    100  
    101         !! * Local variables 
    102         INTEGER ::   ji,       &   ! spatial dummy loop index 
    103                      jj,       &   ! spatial dummy loop index 
    104                      jk,       &   ! vertical layering dummy loop index 
    105                      jl            ! ice category dummy loop index 
    106   
    107         REAL ::      zeps, epsi16, zinda, epsi06 
    108   
    109         INTEGER, INTENT( in ) ::   n     ! describes what is needed 
    110          
    111 !!-- End of declarations 
    112 !!---------------------------------------------------------------------------------------------- 
    113        zeps = 1.0e-13 
    114        epsi16 = 1.0e-16 
    115        epsi06 = 1.0e-6 
    116  
    117        !------------------ 
    118        ! Zero everything 
    119        !------------------ 
    120  
    121        vt_i(:,:)  = 0.0 
    122        vt_s(:,:)  = 0.0 
    123        at_i(:,:)  = 0.0  
    124        ato_i(:,:) = 1.0  
    125  
    126        IF ( n .GT. 1 ) THEN 
    127           et_s(:,:)  = 0.0 
    128           ot_i(:,:)  = 0.0 
    129           smt_i(:,:) = 0.0 
    130           et_i(:,:)  = 0.0 
    131        ENDIF 
    132        
    133        !-------------------- 
    134        ! Compute variables 
    135        !-------------------- 
    136  
    137        DO jl = 1, jpl 
    138           DO jj = 1, jpj 
    139              DO ji = 1, jpi 
    140  
    141                 vt_i(ji,jj) = vt_i(ji,jj) + v_i(ji,jj,jl) ! ice volume 
    142                 vt_s(ji,jj) = vt_s(ji,jj) + v_s(ji,jj,jl) ! snow volume 
    143                 at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) ! ice concentration 
    144  
    145                 zinda = MAX( zzero , SIGN( zone , at_i(ji,jj) - 0.10 ) )  
    146                 icethi(ji,jj) = vt_i(ji,jj) / MAX(at_i(ji,jj),epsi16)*zinda   
    147                    ! ice thickness 
    148              END DO 
    149           END DO 
    150        END DO 
    151  
    152        DO jj = 1, jpj 
    153           DO ji = 1, jpi 
    154              ato_i(ji,jj) = MAX(1.0 - at_i(ji,jj), 0.0)   ! open water fraction 
    155           END DO 
    156        END DO  
    157  
    158        IF ( n .GT. 1 ) THEN 
    159  
    160        DO jl = 1, jpl 
    161           DO jj = 1, jpj 
    162              DO ji = 1, jpi 
    163                 et_s(ji,jj)  = et_s(ji,jj)  +     &       ! snow heat content 
    164                                e_s(ji,jj,1,jl) 
    165                 zinda = MAX( zzero , SIGN( zone , vt_i(ji,jj) - 0.10 ) )  
    166                 smt_i(ji,jj) = smt_i(ji,jj) +     &       ! ice salinity 
    167                                smv_i(ji,jj,jl) / MAX( vt_i(ji,jj) , zeps ) * & 
    168                                zinda 
    169                 zinda = MAX( zzero , SIGN( zone , at_i(ji,jj) - 0.10 ) )  
    170                 ot_i(ji,jj)  = ot_i(ji,jj)  +     &       ! ice age 
    171                                oa_i(ji,jj,jl)  / MAX( at_i(ji,jj) , zeps ) * & 
    172                                zinda 
    173              END DO 
    174           END DO 
    175        END DO 
    176                  
    177        DO jl = 1, jpl 
    178           DO jk = 1, nlay_i 
    179              DO jj = 1, jpj 
    180                 DO ji = 1, jpi 
    181                    et_i(ji,jj) = et_i(ji,jj) + e_i(ji,jj,jk,jl) ! ice heat 
    182                                                                 ! content 
    183                 END DO 
    184              END DO 
    185           END DO 
    186        END DO 
    187  
    188        ENDIF ! n .GT. 1 
    189  
    190     END SUBROUTINE lim_var_agg 
    191  
    192 !============================================================================== 
    193  
    194     SUBROUTINE lim_var_glo2eqv 
    195         !!------------------------------------------------------------------ 
    196         !!                ***  ROUTINE lim_var_glo2eqv ***' 
    197         !! ** Purpose : 
    198         !!        This routine computes equivalent variables as function of     
    199         !!                              global variables  
    200         !!        i.e. it turns VGLO into VEQV 
    201         !! ** Method  : 
    202         !! 
    203         !! ** Arguments : 
    204         !!           kideb , kiut : Starting and ending points on which the  
    205         !!                         the computation is applied 
    206         !! 
    207         !! ** Inputs / Ouputs :  
    208         !! 
    209         !! ** External :  
    210         !! 
    211         !! ** References : 
    212         !! 
    213         !! ** History : 
    214         !!           (01-2006) Martin Vancoppenolle, UCL-ASTR 
    215         !! 
    216         !!------------------------------------------------------------------ 
    217  
    218         !! * Local variables 
    219         INTEGER ::   ji,       &   ! spatial dummy loop index 
    220                      jj,       &   ! spatial dummy loop index 
    221                      jk,       &   ! vertical layering dummy loop index 
    222                      jl            ! ice category dummy loop index 
    223  
    224         REAL :: zq_i, zaaa, zbbb, zccc, zdiscrim, & 
    225                 ztmelts, zindb, zq_s, zfac1, zfac2 
    226  
    227         REAL :: zeps, epsi06 
    228  
    229         zeps    = 1.0e-10 
    230         epsi06  = 1.0e-06 
    231  
    232 !!-- End of declarations 
    233 !!------------------------------------------------------------------------------ 
     73      !!------------------------------------------------------------------ 
     74      !!                ***  ROUTINE lim_var_agg  *** 
     75      !! ** Purpose : 
     76      !!        This routine aggregates ice-thickness-category variables to   
     77      !!                                all-ice variables 
     78      !!        i.e. it turns VGLO into VAGG 
     79      !! ** Method  : 
     80      !! 
     81      !! ** Arguments : 
     82      !!           kideb , kiut : Starting and ending points on which the  
     83      !!                         the computation is applied 
     84      !! 
     85      !! ** Inputs / Ouputs : (global commons) 
     86      !! ** Arguments : n = 1, at_i vt_i only 
     87      !!                n = 2 everything 
     88      !! 
     89      !! ** External :  
     90      !! 
     91      !! ** References : 
     92      !! 
     93      !! ** History : 
     94      !!           (01-2006) Martin Vancoppenolle, UCL-ASTR 
     95      !! 
     96      !! note : you could add an argument when you need only at_i, vt_i 
     97      !!        and when you need everything 
     98      !!------------------------------------------------------------------ 
     99      !! * Arguments 
     100 
     101      !! * Local variables 
     102      INTEGER ::   ji,       &   ! spatial dummy loop index 
     103         jj,       &   ! spatial dummy loop index 
     104         jk,       &   ! vertical layering dummy loop index 
     105         jl            ! ice category dummy loop index 
     106 
     107      REAL ::      zeps, epsi16, zinda, epsi06 
     108 
     109      INTEGER, INTENT( in ) ::   n     ! describes what is needed 
     110 
     111      !!-- End of declarations 
     112      !!---------------------------------------------------------------------------------------------- 
     113      zeps = 1.0e-13 
     114      epsi16 = 1.0e-16 
     115      epsi06 = 1.0e-6 
     116 
     117      !------------------ 
     118      ! Zero everything 
     119      !------------------ 
     120 
     121      vt_i(:,:)  = 0.0 
     122      vt_s(:,:)  = 0.0 
     123      at_i(:,:)  = 0.0  
     124      ato_i(:,:) = 1.0  
     125 
     126      IF ( n .GT. 1 ) THEN 
     127         et_s(:,:)  = 0.0 
     128         ot_i(:,:)  = 0.0 
     129         smt_i(:,:) = 0.0 
     130         et_i(:,:)  = 0.0 
     131      ENDIF 
     132 
     133      !-------------------- 
     134      ! Compute variables 
     135      !-------------------- 
     136 
     137      DO jl = 1, jpl 
     138         DO jj = 1, jpj 
     139            DO ji = 1, jpi 
     140 
     141               vt_i(ji,jj) = vt_i(ji,jj) + v_i(ji,jj,jl) ! ice volume 
     142               vt_s(ji,jj) = vt_s(ji,jj) + v_s(ji,jj,jl) ! snow volume 
     143               at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) ! ice concentration 
     144 
     145               zinda = MAX( zzero , SIGN( zone , at_i(ji,jj) - 0.10 ) )  
     146               icethi(ji,jj) = vt_i(ji,jj) / MAX(at_i(ji,jj),epsi16)*zinda   
     147               ! ice thickness 
     148            END DO 
     149         END DO 
     150      END DO 
     151 
     152      DO jj = 1, jpj 
     153         DO ji = 1, jpi 
     154            ato_i(ji,jj) = MAX(1.0 - at_i(ji,jj), 0.0)   ! open water fraction 
     155         END DO 
     156      END DO 
     157 
     158      IF ( n .GT. 1 ) THEN 
     159 
     160         DO jl = 1, jpl 
     161            DO jj = 1, jpj 
     162               DO ji = 1, jpi 
     163                  et_s(ji,jj)  = et_s(ji,jj)  +     &       ! snow heat content 
     164                     e_s(ji,jj,1,jl) 
     165                  zinda = MAX( zzero , SIGN( zone , vt_i(ji,jj) - 0.10 ) )  
     166                  smt_i(ji,jj) = smt_i(ji,jj) +     &       ! ice salinity 
     167                     smv_i(ji,jj,jl) / MAX( vt_i(ji,jj) , zeps ) * & 
     168                     zinda 
     169                  zinda = MAX( zzero , SIGN( zone , at_i(ji,jj) - 0.10 ) )  
     170                  ot_i(ji,jj)  = ot_i(ji,jj)  +     &       ! ice age 
     171                     oa_i(ji,jj,jl)  / MAX( at_i(ji,jj) , zeps ) * & 
     172                     zinda 
     173               END DO 
     174            END DO 
     175         END DO 
     176 
     177         DO jl = 1, jpl 
     178            DO jk = 1, nlay_i 
     179               DO jj = 1, jpj 
     180                  DO ji = 1, jpi 
     181                     et_i(ji,jj) = et_i(ji,jj) + e_i(ji,jj,jk,jl) ! ice heat 
     182                     ! content 
     183                  END DO 
     184               END DO 
     185            END DO 
     186         END DO 
     187 
     188      ENDIF ! n .GT. 1 
     189 
     190   END SUBROUTINE lim_var_agg 
     191 
     192   !============================================================================== 
     193 
     194   SUBROUTINE lim_var_glo2eqv 
     195      !!------------------------------------------------------------------ 
     196      !!                ***  ROUTINE lim_var_glo2eqv ***' 
     197      !! ** Purpose : 
     198      !!        This routine computes equivalent variables as function of     
     199      !!                              global variables  
     200      !!        i.e. it turns VGLO into VEQV 
     201      !! ** Method  : 
     202      !! 
     203      !! ** Arguments : 
     204      !!           kideb , kiut : Starting and ending points on which the  
     205      !!                         the computation is applied 
     206      !! 
     207      !! ** Inputs / Ouputs :  
     208      !! 
     209      !! ** External :  
     210      !! 
     211      !! ** References : 
     212      !! 
     213      !! ** History : 
     214      !!           (01-2006) Martin Vancoppenolle, UCL-ASTR 
     215      !! 
     216      !!------------------------------------------------------------------ 
     217 
     218      !! * Local variables 
     219      INTEGER ::   ji,       &   ! spatial dummy loop index 
     220         jj,       &   ! spatial dummy loop index 
     221         jk,       &   ! vertical layering dummy loop index 
     222         jl            ! ice category dummy loop index 
     223 
     224      REAL :: zq_i, zaaa, zbbb, zccc, zdiscrim, & 
     225         ztmelts, zindb, zq_s, zfac1, zfac2 
     226 
     227      REAL :: zeps, epsi06 
     228 
     229      zeps    = 1.0e-10 
     230      epsi06  = 1.0e-06 
     231 
     232      !!-- End of declarations 
     233      !!------------------------------------------------------------------------------ 
    234234 
    235235      !------------------------------------------------------- 
     
    253253 
    254254!CDIR NOVERRCHK 
    255       DO jl = 1, jpl 
    256 !CDIR NOVERRCHK 
    257          DO jj = 1, jpj 
    258 !CDIR NOVERRCHK 
    259             DO ji = 1, jpi 
    260                zindb          = 1.0-MAX(0.0,SIGN(1.0,-a_i(ji,jj,jl))) !0 if no ice and 1 if yes 
    261                sm_i(ji,jj,jl) = smv_i(ji,jj,jl) / MAX(v_i(ji,jj,jl),zeps) * zindb 
    262             END DO 
    263          END DO 
    264       END DO 
     255         DO jl = 1, jpl 
     256!CDIR NOVERRCHK 
     257            DO jj = 1, jpj 
     258!CDIR NOVERRCHK 
     259               DO ji = 1, jpi 
     260                  zindb          = 1.0-MAX(0.0,SIGN(1.0,-a_i(ji,jj,jl))) !0 if no ice and 1 if yes 
     261                  sm_i(ji,jj,jl) = smv_i(ji,jj,jl) / MAX(v_i(ji,jj,jl),zeps) * zindb 
     262               END DO 
     263            END DO 
     264         END DO 
    265265 
    266266      ENDIF 
     
    275275      DO jl = 1, jpl 
    276276!CDIR NOVERRCHK 
    277         DO jk = 1, nlay_i 
    278 !CDIR NOVERRCHK 
    279           DO jj = 1, jpj 
    280 !CDIR NOVERRCHK 
    281             DO ji = 1, jpi 
    282               !Energy of melting q(S,T) [J.m-3] 
    283               zq_i       = e_i(ji,jj,jk,jl) / area(ji,jj) / & 
    284                            MAX( v_i(ji,jj,jl) , epsi06 ) * nlay_i  
    285               ! zindb = 0 if no ice and 1 if yes 
    286               zindb      = 1.0 - MAX( 0.0 , SIGN( 1.0 , - v_i(ji,jj,jl) ) ) 
    287               !convert units ! very important that this line is here 
    288               zq_i       = zq_i * unit_fac * zindb 
    289               !Ice layer melt temperature 
    290               ztmelts    =  -tmut*s_i(ji,jj,jk,jl) + rtt 
    291               !Conversion q(S,T) -> T (second order equation) 
    292               zaaa       =  cpic 
    293               zbbb       =  ( rcp - cpic ) * ( ztmelts - rtt ) + & 
    294                             zq_i / rhoic - lfus 
    295               zccc       =  lfus * (ztmelts-rtt) 
    296               zdiscrim   =  SQRT( MAX(zbbb*zbbb - 4.0*zaaa*zccc,0.0) ) 
    297               t_i(ji,jj,jk,jl) = rtt + zindb *( - zbbb - zdiscrim ) / &  
    298                                  ( 2.0 *zaaa ) 
    299               t_i(ji,jj,jk,jl) = MIN( rtt, MAX(173.15, t_i(ji,jj,jk,jl) ) ) 
    300             END DO 
    301           END DO 
    302         END DO 
     277         DO jk = 1, nlay_i 
     278!CDIR NOVERRCHK 
     279            DO jj = 1, jpj 
     280!CDIR NOVERRCHK 
     281               DO ji = 1, jpi 
     282                  !Energy of melting q(S,T) [J.m-3] 
     283                  zq_i       = e_i(ji,jj,jk,jl) / area(ji,jj) / & 
     284                     MAX( v_i(ji,jj,jl) , epsi06 ) * nlay_i  
     285                  ! zindb = 0 if no ice and 1 if yes 
     286                  zindb      = 1.0 - MAX( 0.0 , SIGN( 1.0 , - v_i(ji,jj,jl) ) ) 
     287                  !convert units ! very important that this line is here 
     288                  zq_i       = zq_i * unit_fac * zindb 
     289                  !Ice layer melt temperature 
     290                  ztmelts    =  -tmut*s_i(ji,jj,jk,jl) + rtt 
     291                  !Conversion q(S,T) -> T (second order equation) 
     292                  zaaa       =  cpic 
     293                  zbbb       =  ( rcp - cpic ) * ( ztmelts - rtt ) + & 
     294                     zq_i / rhoic - lfus 
     295                  zccc       =  lfus * (ztmelts-rtt) 
     296                  zdiscrim   =  SQRT( MAX(zbbb*zbbb - 4.0*zaaa*zccc,0.0) ) 
     297                  t_i(ji,jj,jk,jl) = rtt + zindb *( - zbbb - zdiscrim ) / &  
     298                     ( 2.0 *zaaa ) 
     299                  t_i(ji,jj,jk,jl) = MIN( rtt, MAX(173.15, t_i(ji,jj,jk,jl) ) ) 
     300               END DO 
     301            END DO 
     302         END DO 
    303303      END DO 
    304304 
     
    311311      DO jl = 1, jpl 
    312312!CDIR NOVERRCHK 
    313         DO jk = 1, nlay_s 
    314 !CDIR NOVERRCHK 
    315           DO jj = 1, jpj 
    316 !CDIR NOVERRCHK 
    317             DO ji = 1, jpi 
    318               !Energy of melting q(S,T) [J.m-3] 
    319               zq_s       = e_s(ji,jj,jk,jl) / area(ji,jj) / & 
    320                            MAX( v_s(ji,jj,jl) , epsi06 ) * nlay_s  
    321               ! zindb = 0 if no ice and 1 if yes 
    322               zindb      = 1.0 - MAX( 0.0 , SIGN( 1.0 , - v_s(ji,jj,jl) ) ) 
    323               !convert units ! very important that this line is here 
    324               zq_s       = zq_s * unit_fac * zindb 
    325               t_s(ji,jj,jk,jl) = rtt + zindb * ( - zfac1 * zq_s + zfac2 ) 
    326               t_s(ji,jj,jk,jl) = MIN( rtt, MAX(173.15, t_s(ji,jj,jk,jl) ) ) 
    327  
    328             END DO 
    329           END DO 
    330         END DO 
     313         DO jk = 1, nlay_s 
     314!CDIR NOVERRCHK 
     315            DO jj = 1, jpj 
     316!CDIR NOVERRCHK 
     317               DO ji = 1, jpi 
     318                  !Energy of melting q(S,T) [J.m-3] 
     319                  zq_s       = e_s(ji,jj,jk,jl) / area(ji,jj) / & 
     320                     MAX( v_s(ji,jj,jl) , epsi06 ) * nlay_s  
     321                  ! zindb = 0 if no ice and 1 if yes 
     322                  zindb      = 1.0 - MAX( 0.0 , SIGN( 1.0 , - v_s(ji,jj,jl) ) ) 
     323                  !convert units ! very important that this line is here 
     324                  zq_s       = zq_s * unit_fac * zindb 
     325                  t_s(ji,jj,jk,jl) = rtt + zindb * ( - zfac1 * zq_s + zfac2 ) 
     326                  t_s(ji,jj,jk,jl) = MIN( rtt, MAX(173.15, t_s(ji,jj,jk,jl) ) ) 
     327 
     328               END DO 
     329            END DO 
     330         END DO 
    331331      END DO 
    332332 
     
    346346                  zindb          = zindb*1.0-MAX(0.0,SIGN(1.0,-v_i(ji,jj,jl))) 
    347347                  tm_i(ji,jj) = tm_i(ji,jj) + t_i(ji,jj,jk,jl)*v_i(ji,jj,jl) / & 
    348                                 REAL(nlay_i) / MAX( vt_i(ji,jj) , zeps ) 
     348                     REAL(nlay_i) / MAX( vt_i(ji,jj) , zeps ) 
    349349               END DO 
    350350            END DO 
     
    354354   END SUBROUTINE lim_var_glo2eqv 
    355355 
    356 !=============================================================================== 
     356   !=============================================================================== 
    357357 
    358358   SUBROUTINE lim_var_eqv2glo 
    359         !!------------------------------------------------------------------ 
    360         !!                ***  ROUTINE lim_var_eqv2glo ***' 
    361         !! ** Purpose : 
    362         !!        This routine computes global     variables as function of     
    363         !!                              equivalent variables 
    364         !!        i.e. it turns VEQV into VGLO 
    365         !! ** Method  : 
    366         !! 
    367         !! ** Arguments : 
    368         !! 
    369         !! ** Inputs / Ouputs : (global commons) 
    370         !! 
    371         !! ** External :  
    372         !! 
    373         !! ** References : 
    374         !! 
    375         !! ** History : 
    376         !!           (01-2006) Martin Vancoppenolle, UCL-ASTR 
    377         !!                     Take it easy man 
    378         !!                     Life is just a simple game, between  
    379         !!                     ups / and downs \ :@) 
    380         !! 
    381         !!------------------------------------------------------------------ 
    382  
    383        v_i(:,:,:)   = ht_i(:,:,:) * a_i(:,:,:) 
    384        v_s(:,:,:)   = ht_s(:,:,:) * a_i(:,:,:) 
    385        smv_i(:,:,:) = sm_i(:,:,:) * v_i(:,:,:) 
    386        oa_i (:,:,:) = o_i (:,:,:) * a_i(:,:,:) 
    387  
    388     END SUBROUTINE lim_var_eqv2glo 
    389  
    390 !=============================================================================== 
    391  
    392     SUBROUTINE lim_var_salprof 
    393         !!------------------------------------------------------------------ 
    394         !!                ***  ROUTINE lim_var_salprof ***' 
    395         !! ** Purpose : 
    396         !!        This routine computes salinity profile in function of 
    397         !!        bulk salinity      
    398         !! 
    399         !! ** Method  : If bulk salinity greater than s_i_1,  
    400         !!              the profile is assumed to be constant (S_inf) 
    401         !!              If bulk salinity lower than s_i_0, 
    402         !!              the profile is linear with 0 at the surface (S_zero) 
    403         !!              If it is between s_i_0 and s_i_1, it is a 
    404         !!              alpha-weighted linear combination of s_inf and s_zero 
    405         !! 
    406         !! ** References : Vancoppenolle et al., 2007 (in preparation) 
    407         !! 
    408         !! ** History : 
    409         !!           (08-2006) Martin Vancoppenolle, UCL-ASTR 
    410         !!                     Take it easy man 
    411         !!                     Life is just a simple game, between ups  
    412         !!                     / and downs \ :@) 
    413         !! 
    414         !!------------------------------------------------------------------ 
    415         !! * Arguments 
    416  
    417         !! * Local variables 
    418         INTEGER ::             & 
    419            ji            ,     & !: spatial dummy loop index 
    420            jj            ,     & !: spatial dummy loop index 
    421            jk            ,     & !: vertical layering dummy loop index 
    422            jl                    !: ice category dummy loop index 
    423  
    424         REAL(wp) ::            & 
    425            dummy_fac0    ,     & !: dummy factor used in computations 
    426            dummy_fac1    ,     & !: dummy factor used in computations 
    427            dummy_fac     ,     & !: dummy factor used in computations 
    428            zind0         ,     & !: switch, = 1 if sm_i lt s_i_0 
    429            zind01        ,     & !: switch, = 1 if sm_i between s_i_0 and s_i_1 
    430            zindbal       ,     & !: switch, = 1, if 2*sm_i gt sss_m 
    431            zargtemp              !: dummy factor 
    432  
    433         REAL(wp), DIMENSION(nlay_i) ::      & 
    434            zs_zero               !: linear salinity profile for salinities under 
    435                                  !: s_i_0 
    436  
    437         REAL(wp), DIMENSION(jpi,jpj,jpl) :: & 
    438            z_slope_s     ,     & !: slope of the salinity profile 
    439            zalpha                !: weight factor for s between s_i_0 and s_i_1 
    440  
    441 !!-- End of declarations 
    442 !!------------------------------------------------------------------------------ 
     359      !!------------------------------------------------------------------ 
     360      !!                ***  ROUTINE lim_var_eqv2glo ***' 
     361      !! ** Purpose : 
     362      !!        This routine computes global     variables as function of     
     363      !!                              equivalent variables 
     364      !!        i.e. it turns VEQV into VGLO 
     365      !! ** Method  : 
     366      !! 
     367      !! ** Arguments : 
     368      !! 
     369      !! ** Inputs / Ouputs : (global commons) 
     370      !! 
     371      !! ** External :  
     372      !! 
     373      !! ** References : 
     374      !! 
     375      !! ** History : 
     376      !!           (01-2006) Martin Vancoppenolle, UCL-ASTR 
     377      !!                     Take it easy man 
     378      !!                     Life is just a simple game, between  
     379      !!                     ups / and downs \ :@) 
     380      !! 
     381      !!------------------------------------------------------------------ 
     382 
     383      v_i(:,:,:)   = ht_i(:,:,:) * a_i(:,:,:) 
     384      v_s(:,:,:)   = ht_s(:,:,:) * a_i(:,:,:) 
     385      smv_i(:,:,:) = sm_i(:,:,:) * v_i(:,:,:) 
     386      oa_i (:,:,:) = o_i (:,:,:) * a_i(:,:,:) 
     387 
     388   END SUBROUTINE lim_var_eqv2glo 
     389 
     390   !=============================================================================== 
     391 
     392   SUBROUTINE lim_var_salprof 
     393      !!------------------------------------------------------------------ 
     394      !!                ***  ROUTINE lim_var_salprof ***' 
     395      !! ** Purpose : 
     396      !!        This routine computes salinity profile in function of 
     397      !!        bulk salinity      
     398      !! 
     399      !! ** Method  : If bulk salinity greater than s_i_1,  
     400      !!              the profile is assumed to be constant (S_inf) 
     401      !!              If bulk salinity lower than s_i_0, 
     402      !!              the profile is linear with 0 at the surface (S_zero) 
     403      !!              If it is between s_i_0 and s_i_1, it is a 
     404      !!              alpha-weighted linear combination of s_inf and s_zero 
     405      !! 
     406      !! ** References : Vancoppenolle et al., 2007 (in preparation) 
     407      !! 
     408      !! ** History : 
     409      !!           (08-2006) Martin Vancoppenolle, UCL-ASTR 
     410      !!                     Take it easy man 
     411      !!                     Life is just a simple game, between ups  
     412      !!                     / and downs \ :@) 
     413      !! 
     414      !!------------------------------------------------------------------ 
     415      !! * Arguments 
     416 
     417      !! * Local variables 
     418      INTEGER ::             & 
     419         ji            ,     & !: spatial dummy loop index 
     420         jj            ,     & !: spatial dummy loop index 
     421         jk            ,     & !: vertical layering dummy loop index 
     422         jl                    !: ice category dummy loop index 
     423 
     424      REAL(wp) ::            & 
     425         dummy_fac0    ,     & !: dummy factor used in computations 
     426         dummy_fac1    ,     & !: dummy factor used in computations 
     427         dummy_fac     ,     & !: dummy factor used in computations 
     428         zind0         ,     & !: switch, = 1 if sm_i lt s_i_0 
     429         zind01        ,     & !: switch, = 1 if sm_i between s_i_0 and s_i_1 
     430         zindbal       ,     & !: switch, = 1, if 2*sm_i gt sss_m 
     431         zargtemp              !: dummy factor 
     432 
     433      REAL(wp), DIMENSION(nlay_i) ::      & 
     434         zs_zero               !: linear salinity profile for salinities under 
     435      !: s_i_0 
     436 
     437      REAL(wp), DIMENSION(jpi,jpj,jpl) :: & 
     438         z_slope_s     ,     & !: slope of the salinity profile 
     439         zalpha                !: weight factor for s between s_i_0 and s_i_1 
     440 
     441      !!-- End of declarations 
     442      !!------------------------------------------------------------------------------ 
    443443 
    444444      !--------------------------------------- 
     
    468468               DO ji = 1, jpi 
    469469                  z_slope_s(ji,jj,jl) = 2.0 * sm_i(ji,jj,jl) / MAX( 0.01      & 
    470                                       , ht_i(ji,jj,jl) ) 
     470                     , ht_i(ji,jj,jl) ) 
    471471               END DO ! ji 
    472472            END DO ! jj 
     
    490490                  ! zind01 = 1 if sm_i is between s_i_0 and s_i_1 and 0 othws  
    491491                  zind01 = ( 1.0 - zind0 ) *                                  & 
    492                            MAX( 0.0   , SIGN( 1.0  , s_i_1 - sm_i(ji,jj,jl) ) )  
     492                     MAX( 0.0   , SIGN( 1.0  , s_i_1 - sm_i(ji,jj,jl) ) )  
    493493                  ! If 2.sm_i GE sss_m then zindbal = 1 
    494494                  zindbal = MAX( 0.0 , SIGN( 1.0 , 2. * sm_i(ji,jj,jl) -      & 
    495                   sss_m(ji,jj) ) ) 
     495                     sss_m(ji,jj) ) ) 
    496496                  zalpha(ji,jj,jl) = zind0  * 1.0                             & 
    497                                    + zind01 * ( sm_i(ji,jj,jl) * dummy_fac0 + & 
    498                                                 dummy_fac1 ) 
     497                     + zind01 * ( sm_i(ji,jj,jl) * dummy_fac0 + & 
     498                     dummy_fac1 ) 
    499499                  zalpha(ji,jj,jl) = zalpha(ji,jj,jl) * ( 1.0 - zindbal ) 
    500500               END DO 
     
    512512                     ! linear profile with 0 at the surface 
    513513                     zs_zero(jk)      = z_slope_s(ji,jj,jl) * ( jk - 1./2. ) * & 
    514                                         ht_i(ji,jj,jl) * dummy_fac 
     514                        ht_i(ji,jj,jl) * dummy_fac 
    515515                     ! weighting the profile 
    516516                     s_i(ji,jj,jk,jl) = zalpha(ji,jj,jl) * zs_zero(jk) +       & 
    517                                      ( 1.0 - zalpha(ji,jj,jl) ) * sm_i(ji,jj,jl) 
     517                        ( 1.0 - zalpha(ji,jj,jl) ) * sm_i(ji,jj,jl) 
    518518                  END DO ! ji 
    519519               END DO ! jj 
     
    527527      !------------------------------------------------------- 
    528528      ! Schwarzacher (1959) multiyear salinity profile (mean = 2.30) 
    529        
     529 
    530530      IF ( num_sal .EQ. 3 ) THEN 
    531531 
     
    542542                     zargtemp  = ( jk - 0.5 ) / nlay_i 
    543543                     s_i(ji,jj,jk,jl) =  1.6 - 1.6 * COS( 3.14169265 * & 
    544                                          ( zargtemp**(0.407/           & 
    545                                          ( 0.573 + zargtemp ) ) ) ) 
     544                        ( zargtemp**(0.407/           & 
     545                        ( 0.573 + zargtemp ) ) ) ) 
    546546                  END DO ! ji 
    547547               END DO ! jj 
     
    553553   END SUBROUTINE lim_var_salprof 
    554554 
    555 !=============================================================================== 
     555   !=============================================================================== 
    556556 
    557557   SUBROUTINE lim_var_bv 
    558         !!------------------------------------------------------------------ 
    559         !!                ***  ROUTINE lim_var_bv ***' 
    560         !! ** Purpose : 
    561         !!        This routine computes mean brine volume (%) in sea ice 
    562         !! 
    563         !! ** Method  : e = - 0.054 * S (ppt) / T (C) 
    564         !! 
    565         !! ** Arguments : 
    566         !! 
    567         !! ** Inputs / Ouputs : (global commons) 
    568         !! 
    569         !! ** External :  
    570         !! 
    571         !! ** References : Vancoppenolle et al., JGR, 2007 
    572         !! 
    573         !! ** History : 
    574         !!           (08-2006) Martin Vancoppenolle, UCL-ASTR 
    575         !! 
    576         !!------------------------------------------------------------------ 
    577         !! * Arguments 
    578  
    579         !! * Local variables 
    580         INTEGER ::   ji,       &   ! spatial dummy loop index 
    581                      jj,       &   ! spatial dummy loop index 
    582                      jk,       &   ! vertical layering dummy loop index 
    583                      jl            ! ice category dummy loop index 
    584  
    585         REAL :: zbvi,          &   ! brine volume for a single ice category 
    586                 zeps,          &   ! very small value 
    587                 zindb              ! is there ice or not 
    588  
    589 !!-- End of declarations 
    590 !!------------------------------------------------------------------------------ 
    591  
    592        zeps = 1.0e-13 
    593        bv_i(:,:) = 0.0 
    594 !CDIR NOVERRCHK 
    595        DO jl = 1, jpl 
    596 !CDIR NOVERRCHK 
    597           DO jk = 1, nlay_i 
    598 !CDIR NOVERRCHK 
    599              DO jj = 1, jpj 
    600 !CDIR NOVERRCHK 
    601                 DO ji = 1, jpi 
    602                    zindb          = 1.0-MAX(0.0,SIGN(1.0,-a_i(ji,jj,jl))) !0 if no ice and 1 if yes 
    603                    zbvi = - zindb * tmut *s_i(ji,jj,jk,jl) /             &  
    604                             MIN( t_i(ji,jj,jk,jl) - 273.15 , zeps )         & 
    605                             * v_i(ji,jj,jl) / REAL(nlay_i) 
    606                    bv_i(ji,jj) = bv_i(ji,jj) + zbvi  & 
    607                             / MAX( vt_i(ji,jj) , zeps ) 
    608                 END DO 
    609              END DO 
    610           END DO 
    611        END DO 
    612  
    613    END SUBROUTINE lim_var_bv  
    614  
    615 !=============================================================================== 
     558      !!------------------------------------------------------------------ 
     559      !!                ***  ROUTINE lim_var_bv ***' 
     560      !! ** Purpose : 
     561      !!        This routine computes mean brine volume (%) in sea ice 
     562      !! 
     563      !! ** Method  : e = - 0.054 * S (ppt) / T (C) 
     564      !! 
     565      !! ** Arguments : 
     566      !! 
     567      !! ** Inputs / Ouputs : (global commons) 
     568      !! 
     569      !! ** External :  
     570      !! 
     571      !! ** References : Vancoppenolle et al., JGR, 2007 
     572      !! 
     573      !! ** History : 
     574      !!           (08-2006) Martin Vancoppenolle, UCL-ASTR 
     575      !! 
     576      !!------------------------------------------------------------------ 
     577      !! * Arguments 
     578 
     579      !! * Local variables 
     580      INTEGER ::   ji,       &   ! spatial dummy loop index 
     581         jj,       &   ! spatial dummy loop index 
     582         jk,       &   ! vertical layering dummy loop index 
     583         jl            ! ice category dummy loop index 
     584 
     585      REAL :: zbvi,          &   ! brine volume for a single ice category 
     586         zeps,          &   ! very small value 
     587         zindb              ! is there ice or not 
     588 
     589      !!-- End of declarations 
     590      !!------------------------------------------------------------------------------ 
     591 
     592      zeps = 1.0e-13 
     593      bv_i(:,:) = 0.0 
     594!CDIR NOVERRCHK 
     595      DO jl = 1, jpl 
     596!CDIR NOVERRCHK 
     597         DO jk = 1, nlay_i 
     598!CDIR NOVERRCHK 
     599            DO jj = 1, jpj 
     600!CDIR NOVERRCHK 
     601               DO ji = 1, jpi 
     602                  zindb          = 1.0-MAX(0.0,SIGN(1.0,-a_i(ji,jj,jl))) !0 if no ice and 1 if yes 
     603                  zbvi = - zindb * tmut *s_i(ji,jj,jk,jl) /             &  
     604                     MIN( t_i(ji,jj,jk,jl) - 273.15 , zeps )         & 
     605                     * v_i(ji,jj,jl) / REAL(nlay_i) 
     606                  bv_i(ji,jj) = bv_i(ji,jj) + zbvi  & 
     607                     / MAX( vt_i(ji,jj) , zeps ) 
     608               END DO 
     609            END DO 
     610         END DO 
     611      END DO 
     612 
     613   END SUBROUTINE lim_var_bv 
     614 
     615   !=============================================================================== 
    616616 
    617617   SUBROUTINE lim_var_salprof1d(kideb,kiut) 
     
    642642         zindbal   ,         &   ! switch if in freshwater area 
    643643         zargtemp 
    644     
     644 
    645645      REAL(wp), DIMENSION(jpij) ::            & 
    646646         z_slope_s 
     
    649649         zs_zero 
    650650      !!------------------------------------------------------------------- 
    651           
     651 
    652652      !--------------------------------------- 
    653653      ! Vertically constant, constant in time 
     
    670670!CDIR NOVERRCHK 
    671671         DO ji = kideb, kiut  
    672                z_slope_s(ji) = 2.0 * sm_i_b(ji) / MAX( 0.01      & 
    673                                       , ht_i_b(ji) ) 
     672            z_slope_s(ji) = 2.0 * sm_i_b(ji) / MAX( 0.01      & 
     673               , ht_i_b(ji) ) 
    674674         END DO ! ji 
    675675 
     
    691691               ! zind01 = 1 if sm_i is between s_i_0 and s_i_1 and 0 othws  
    692692               zind01 = ( 1.0 - zind0 ) *                                  & 
    693                         MAX( 0.0   , SIGN( 1.0  , s_i_1 - sm_i_b(ji) ) )  
     693                  MAX( 0.0   , SIGN( 1.0  , s_i_1 - sm_i_b(ji) ) )  
    694694               ! if 2.sm_i GE sss_m then zindbal = 1 
    695695               zindbal = MAX( 0.0 , SIGN( 1.0 , 2. * sm_i_b(ji) -      & 
    696                sss_m(zji,zjj) ) ) 
     696                  sss_m(zji,zjj) ) ) 
    697697 
    698698               zalpha = zind0  * 1.0                                       & 
    699                       + zind01 * ( sm_i_b(ji) * dummy_fac0 +           & 
    700                                                 dummy_fac1 ) 
     699                  + zind01 * ( sm_i_b(ji) * dummy_fac0 +           & 
     700                  dummy_fac1 ) 
    701701               zalpha = zalpha * ( 1.0 - zindbal ) 
    702702 
    703703               zs_zero(ji,jk) = z_slope_s(ji) * ( jk - 1./2. ) * & 
    704                                 ht_i_b(ji) * dummy_fac2 
     704                  ht_i_b(ji) * dummy_fac2 
    705705               ! weighting the profile 
    706706               s_i_b(ji,jk) = zalpha * zs_zero(ji,jk) +       & 
    707                            ( 1.0 - zalpha ) * sm_i_b(ji) 
     707                  ( 1.0 - zalpha ) * sm_i_b(ji) 
    708708            END DO ! ji 
    709709         END DO ! jk 
     
    726726               zargtemp  = ( jk - 0.5 ) / nlay_i 
    727727               s_i_b(ji,jk)  =  1.6 - 1.6*cos(3.14169265*(zargtemp**(0.407/ & 
    728                                 (0.573+zargtemp)))) 
     728                  (0.573+zargtemp)))) 
    729729            END DO ! jk 
    730730         END DO ! ji 
     
    734734   END SUBROUTINE lim_var_salprof1d 
    735735 
    736 !=============================================================================== 
     736   !=============================================================================== 
    737737 
    738738#else 
     
    751751   END SUBROUTINE lim_var_salprof 
    752752   SUBROUTINE lim_var_bv           ! Emtpy routines 
    753    END SUBROUTINE lim_var_bv  
     753   END SUBROUTINE lim_var_bv 
    754754   SUBROUTINE lim_var_salprof1d    ! Emtpy routines 
    755755   END SUBROUTINE lim_var_salprof1d 
Note: See TracChangeset for help on using the changeset viewer.