Changeset 4432


Ignore:
Timestamp:
2014-02-04T13:14:28+01:00 (7 years ago)
Author:
trackstand2
Message:

mbkmax changes in dynldf_bilapg

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/DEV_r2739_STFC_dCSE/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_bilapg.F90

    r4409 r4432  
    137137      DO jj = 2, jpjm1               ! add the diffusive trend to the general momentum trends 
    138138         DO ji = 2, jpim1 
    139             DO jk = 1, jpkm1 
     139            DO jk = 1, mbkmax(ji,jj)-1 ! jpkm1 
    140140#else 
    141141      DO jj = 2, jpjm1               ! add the diffusive trend to the general momentum trends 
     
    238238 
    239239#if defined key_z_first 
    240       !                               ! ********** !   ! =============== 
    241 !      DO jk = 1, jpkm1                ! First step !   ! Horizontal slab 
    242          !                            ! ********** !   ! =============== 
    243  
    244          ! I.1 Vertical gradient of pu and pv at level jk and jk+1 
    245          ! ------------------------------------------------------- 
    246          ! surface boundary condition: zdku(jk=1)=zdku(jk=2) 
    247          !                             zdkv(jk=1)=zdkv(jk=2) 
    248 #if 0 
    249          DO jjf = 1, jpj 
    250             DO jif = 1, jpi 
    251  
    252 !!$               jj= jjf 
    253 !!$               ji = jif 
    254 !!$ 
    255 !!$               zdk1u = ( pu(ji,jj,jk) - pu(ji,jj,jk+1) ) * umask(ji,jj,jk+1) 
    256 !!$               zdk1v = ( pv(ji,jj,jk) - pv(ji,jj,jk+1) ) * vmask(ji,jj,jk+1) 
    257 !!$ 
    258 !!$               IF( jk == 1 ) THEN 
    259 !!$                  zdku = zdk1u 
    260 !!$                  zdkv = zdk1v 
    261 !!$               ELSE 
    262 !!$                  zdku = ( pu(ji,jj,jk-1) - pu(ji,jj,jk) ) * umask(ji,jj,jk) 
    263 !!$                  zdkv = ( pv(ji,jj,jk-1) - pv(ji,jj,jk) ) * vmask(ji,jj,jk) 
    264 !!$               ENDIF 
    265 !            END DO 
    266 !         END DO 
    267          !                                -----f----- 
    268          ! I.2 Horizontal fluxes on U          | 
    269          ! ------------------------===     t   u   t 
    270          !                                     | 
    271          ! i-flux at t-point              -----f----- 
    272 !         DO jj = 1, jpjm1 
    273 !            DO ji = 2, jpi 
    274 !         DO jjf = 1, jpj 
    275 !            DO jif = 1, jpi 
    276  
    277                jj = MIN(jjf, jpjm1) 
    278                ji = MAX(2, jif) 
    279  
    280 !               zabe1 = e2t(ji,jj) * fse3t(ji,jj,jk) / e1t(ji,jj) 
    281  
    282 !               zmkt  = 1._wp/MAX(  umask(ji-1,jj,jk  )+umask(ji,jj,jk+1)   & 
    283 !                                 + umask(ji-1,jj,jk+1)+umask(ji,jj,jk  ), 1._wp ) 
    284  
    285 !               zcof1 = -e2t(ji,jj) / MAX(  umask(ji-1,jj,jk  )+umask(ji,jj,jk+1)   & 
    286 !                                 + umask(ji-1,jj,jk+1)+umask(ji,jj,jk  ), 1._wp )   & 
    287 !                     * 0.5  * ( uslp(ji-1,jj,jk) + uslp(ji,jj,jk) ) 
    288  
    289                IF( jk == 1 )THEN 
    290                   ziut(ji,jj) = tmask(ji,jj,jk) *   & 
    291                            (  (e2t(ji,jj) * fse3t(ji,jj,jk) / e1t(ji,jj)) * ( pu(ji,jj,jk) - pu(ji-1,jj,jk) )   & 
    292 !                            + zcof1 * ( zdku (ji,jj) + zdk1u(ji-1,jj)     & 
    293                             + (-e2t(ji,jj) / MAX(  umask(ji-1,jj,jk  )+umask(ji,jj,jk+1)   & 
    294                                  + umask(ji-1,jj,jk+1)+umask(ji,jj,jk  ), 1._wp )   & 
    295                      * 0.5  * ( uslp(ji-1,jj,jk) + uslp(ji,jj,jk) ) ) * & 
    296 ( ( pu(ji  ,jj,jk) - pu(ji  ,jj,jk+1) ) * umask(ji,jj,jk+1) + & 
    297   ( pu(ji-1,jj,jk) - pu(ji-1,jj,jk+1) ) * umask(ji-1,jj,jk+1) + & 
    298 !                                       +zdk1u(ji,jj) + zdku (ji-1,jj) )  ) 
    299   ( pu(ji  ,jj,jk) - pu(ji  ,jj,jk+1) ) * umask(ji,jj,jk+1) + & 
    300   ( pu(ji-1,jj,jk) - pu(ji-1,jj,jk+1) ) * umask(ji-1,jj,jk+1) & 
    301 )  ) 
    302                ELSE 
    303                   ziut(ji,jj) = tmask(ji,jj,jk) *   & 
    304                            (  (e2t(ji,jj) * fse3t(ji,jj,jk) / e1t(ji,jj)) * ( pu(ji,jj,jk) - pu(ji-1,jj,jk) )   & 
    305 !                            + zcof1 * ( zdku (ji,jj) + zdk1u(ji-1,jj)     & 
    306                             + (-e2t(ji,jj) / MAX(umask(ji-1,jj,jk)+umask(ji,jj,jk+1)   & 
    307                                  + umask(ji-1,jj,jk+1)+umask(ji,jj,jk), 1._wp )   & 
    308                      * 0.5  * ( uslp(ji-1,jj,jk) + uslp(ji,jj,jk) ) ) * & 
    309 ( ( pu(ji  ,jj,jk-1) - pu(ji  ,jj,jk  ) ) * umask(ji,jj,jk) + & 
    310   ( pu(ji-1,jj,jk  ) - pu(ji-1,jj,jk+1) ) * umask(ji-1,jj,jk+1) +     & 
    311 !                                       +zdk1u(ji,jj) + zdku (ji-1,jj) )  ) 
    312   ( pu(ji  ,jj,jk  ) - pu(ji  ,jj,jk+1) ) * umask(ji,jj,jk+1) + & 
    313   ( pu(ji-1,jj,jk-1) - pu(ji-1,jj,jk  ) ) * umask(ji-1,jj,jk) & 
    314 )  ) 
    315                END IF 
    316 !            END DO 
    317 !         END DO 
    318  
    319          ! j-flux at f-point 
    320 !         DO jj = 1, jpjm1 
    321 !            DO ji = 1, jpim1 
    322 !         DO jjf = 1, jpj 
    323 !            DO jif = 1, jpi 
    324  
    325                jj = MIN(jjf, jpjm1) 
    326                ji = MIN(jif, jpim1) 
    327  
    328                !zabe2 = e1f(ji,jj) * fse3f(ji,jj,jk) / e2f(ji,jj) 
    329  
    330                !zmkf  = 1./MAX(  umask(ji,jj+1,jk  )+umask(ji,jj,jk+1)   & 
    331                !               + umask(ji,jj+1,jk+1)+umask(ji,jj,jk  ), 1. ) 
    332  
    333                !zcof2 = -e1f(ji,jj) /MAX(umask(ji,jj+1,jk)+umask(ji,jj,jk+1)   & 
    334                !                       + umask(ji,jj+1,jk+1)+umask(ji,jj,jk), 1. )   & 
    335                !      * 0.5  * ( vslp(ji+1,jj,jk) + vslp(ji,jj,jk) ) 
    336  
    337                IF(jk == 1)THEN 
    338                   ! zdku = zdk1u 
    339                   zjuf(ji,jj) = fmask(ji,jj,jk) *   & 
    340                            (  (e1f(ji,jj) * fse3f(ji,jj,jk) / e2f(ji,jj) ) * ( pu(ji,jj+1,jk) - pu(ji,jj,jk) )   & 
    341 !                            + zcof2 * ( zdku (ji,jj+1) + zdk1u(ji,jj)     & 
    342                              + (-e1f(ji,jj) /MAX(umask(ji,jj+1,jk)+umask(ji,jj,jk+1)   & 
    343                                       + umask(ji,jj+1,jk+1)+umask(ji,jj,jk), 1. )   & 
    344                      * 0.5  * ( vslp(ji+1,jj,jk) + vslp(ji,jj,jk) ) ) * & 
    345 ( & 
    346              ( pu(ji,jj+1,jk) - pu(ji,jj+1,jk+1) ) * umask(ji,jj+1,jk+1)  & 
    347            + ( pu(ji,jj  ,jk) - pu(ji,jj  ,jk+1) ) * umask(ji,jj  ,jk+1)  & 
    348 !                                       +zdk1u(ji,jj+1) + zdku (ji,jj) )  ) 
    349            + ( pu(ji,jj+1,jk) - pu(ji,jj+1,jk+1) ) * umask(ji,jj+1,jk+1) & 
    350            + ( pu(ji,jj  ,jk) - pu(ji,jj  ,jk+1) ) * umask(ji,jj,jk+1)   & 
    351 )  ) 
    352                 
    353             ELSE 
    354                zjuf(ji,jj) = fmask(ji,jj,jk) *   & 
    355                            (  (e1f(ji,jj) * fse3f(ji,jj,jk) / e2f(ji,jj) ) * ( pu(ji,jj+1,jk) - pu(ji,jj,jk) )   & 
    356 !                            + zcof2 * ( zdku (ji,jj+1) + zdk1u(ji,jj)     & 
    357                              + (-e1f(ji,jj) /MAX(umask(ji,jj+1,jk)+umask(ji,jj,jk+1)   & 
    358                                       + umask(ji,jj+1,jk+1)+umask(ji,jj,jk), 1. )   & 
    359                      * 0.5  * ( vslp(ji+1,jj,jk) + vslp(ji,jj,jk) ) ) * & 
    360 (  & 
    361   (pu(ji,jj+1,jk-1) - pu(ji,jj+1,jk  ) ) * umask(ji,jj+1,jk) +   & 
    362   (pu(ji,jj  ,jk  ) - pu(ji,jj  ,jk+1) ) * umask(ji,jj,jk+1) +   & 
    363 !                                       +zdk1u(ji,jj+1) + zdku (ji,jj) )  ) 
    364   (pu(ji,jj+1,jk  ) - pu(ji,jj+1,jk+1) ) * umask(ji,jj+1,jk+1) + & 
    365   (pu(ji,jj  ,jk-1) - pu(ji,jj  ,jk  ) ) * umask(ji,jj,jk) & 
    366  )  ) 
    367             ENDIF 
    368 !            END DO 
    369 !         END DO 
    370  
    371          !                                 |   t   | 
    372          ! I.3 Horizontal fluxes on V      |       | 
    373          ! ------------------------===     f---v---f 
    374          !                                 |       | 
    375          ! i-flux at f-point               |   t   | 
    376 !         DO jj = 1, jpjm1 
    377 !            DO ji = 1, jpim1 
    378 !         DO jjf = 1, jpj 
    379 !            DO jif = 1, jpi 
    380  
    381                jj = MIN(jjf, jpjm1) 
    382                ji = MIN(jif, jpim1) 
    383  
    384 !               zabe1 = e2f(ji,jj) * fse3f(ji,jj,jk) / e1f(ji,jj) 
    385  
    386 !               zmkf  = 1./MAX(  vmask(ji+1,jj,jk  )+vmask(ji,jj,jk+1)   & 
    387 !                              + vmask(ji+1,jj,jk+1)+vmask(ji,jj,jk  ), 1. ) 
    388  
    389 !               zcof1 = (-e2f(ji,jj) / MAX(  vmask(ji+1,jj,jk  )+vmask(ji,jj,jk+1)   & 
    390 !                              + vmask(ji+1,jj,jk+1)+vmask(ji,jj,jk  ), 1. ))   & 
    391 !                     * 0.5 * ( uslp(ji,jj+1,jk) + uslp(ji,jj,jk) ) 
    392  
    393                IF (jk == 1)THEN 
    394                   ! zdku == zdk1u 
    395                   zivf(ji,jj) = fmask(ji,jj,jk) *   & 
    396                            (  (e2f(ji,jj) * fse3f(ji,jj,jk) / e1f(ji,jj)) * ( pu(ji+1,jj,jk) - pu(ji,jj,jk) )   & 
    397 !                            + zcof1 * ( zdku (ji,jj) + zdk1u(ji+1,jj)     & 
    398                              + ((-e2f(ji,jj) / MAX(  vmask(ji+1,jj,jk  )+vmask(ji,jj,jk+1)   & 
    399                               + vmask(ji+1,jj,jk+1)+vmask(ji,jj,jk  ), 1. ))   & 
    400                      * 0.5 * ( uslp(ji,jj+1,jk) + uslp(ji,jj,jk) )) * ( & 
    401   ( pu(ji  ,jj,jk) - pu(ji  ,jj,jk+1) ) * umask(ji  ,jj,jk+1) + & 
    402   ( pu(ji+1,jj,jk) - pu(ji+1,jj,jk+1) ) * umask(ji+1,jj,jk+1) +    & 
    403 !                                       +zdk1u(ji,jj) + zdku (ji+1,jj) )  )  
    404   ( pu(ji  ,jj,jk) - pu(ji  ,jj,jk+1) ) * umask(ji  ,jj,jk+1) +  & 
    405   ( pu(ji+1,jj,jk) - pu(ji+1,jj,jk+1) ) * umask(ji+1,jj,jk+1) ) ) 
    406                ELSE 
    407                   zivf(ji,jj) = fmask(ji,jj,jk) *   & 
    408                            (  (e2f(ji,jj) * fse3f(ji,jj,jk) / e1f(ji,jj)) * ( pu(ji+1,jj,jk) - pu(ji,jj,jk) )   & 
    409 !                            + zcof1 * ( zdku (ji,jj) + zdk1u(ji+1,jj)     & 
    410 + ((-e2f(ji,jj) / MAX(  vmask(ji+1,jj,jk  )+vmask(ji,jj,jk+1)   & 
    411                               + vmask(ji+1,jj,jk+1)+vmask(ji,jj,jk  ), 1. ))   & 
    412                      * 0.5 * ( uslp(ji,jj+1,jk) + uslp(ji,jj,jk) )) * ( & 
    413   ( pu(ji  ,jj,jk-1) - pu(ji  ,jj,jk  ) ) * umask(ji  ,jj,jk  ) + & 
    414   ( pu(ji+1,jj,jk  ) - pu(ji+1,jj,jk+1) ) * umask(ji+1,jj,jk+1) +    & 
    415 !                                       +zdk1u(ji,jj) + zdku (ji+1,jj) )  ) 
    416   ( pu(ji  ,jj,jk  ) - pu(ji  ,jj,jk+1) ) * umask(ji  ,jj,jk+1) + & 
    417   ( pu(ji+1,jj,jk-1) - pu(ji+1,jj,jk  ) ) * umask(ji+1,jj,jk  ) )  ) 
    418                END IF 
    419 !            END DO 
    420 !         END DO 
    421  
    422          ! j-flux at t-point 
    423 !         DO jj = 2, jpj 
    424 !            DO ji = 1, jpim1 
    425 !         DO jjf = 1, jpj 
    426 !            DO jif = 1, jpi 
    427  
    428                jj = MAX(2,jjf) 
    429                ji = MIN(jif, jpim1) 
    430  
    431                !zabe2 = e1t(ji,jj) * fse3t(ji,jj,jk) / e2t(ji,jj) 
    432  
    433                !zmkt  = 1./MAX(  vmask(ji,jj-1,jk  )+vmask(ji,jj,jk+1)   & 
    434                !               + vmask(ji,jj-1,jk+1)+vmask(ji,jj,jk  ), 1. ) 
    435  
    436                !zcof2 = (-e1t(ji,jj)/MAX(  vmask(ji,jj-1,jk  )+vmask(ji,jj,jk+1)   & 
    437                !               + vmask(ji,jj-1,jk+1)+vmask(ji,jj,jk  ), 1. ) )   & 
    438                !      * 0.5 * ( vslp(ji,jj-1,jk) + vslp(ji,jj,jk) ) 
    439  
    440                IF( jk == 1 )THEN 
    441                   zjvt(ji,jj) = tmask(ji,jj,jk) *   & 
    442                            (  (e1t(ji,jj) * fse3t(ji,jj,jk) / e2t(ji,jj)) * ( pu(ji,jj,jk) - pu(ji,jj-1,jk) )   & 
    443 !                            + zcof2 * ( zdku (ji,jj-1) + zdk1u(ji,jj)     & 
    444                             + ((-e1t(ji,jj)/MAX(  vmask(ji,jj-1,jk  )+vmask(ji,jj,jk+1)   & 
    445                               + vmask(ji,jj-1,jk+1)+vmask(ji,jj,jk  ), 1. ) )   & 
    446                      * 0.5 * ( vslp(ji,jj-1,jk) + vslp(ji,jj,jk) )) * ( & 
    447   ( pu(ji,jj-1,jk) - pu(ji,jj-1,jk+1) ) * umask(ji,jj-1,jk+1) + & 
    448   ( pu(ji,jj  ,jk) - pu(ji,jj  ,jk+1) ) * umask(ji,jj,jk+1)   +  & 
    449 !                                       +zdk1u(ji,jj-1) + zdku (ji,jj) )  ) 
    450   ( pu(ji,jj-1,jk) - pu(ji,jj-1,jk+1) ) * umask(ji,jj-1,jk+1) + & 
    451   ( pu(ji,jj  ,jk) - pu(ji,jj  ,jk+1) ) * umask(ji,jj,jk+1)  )  ) 
    452                ELSE 
    453                   zjvt(ji,jj) = tmask(ji,jj,jk) *   & 
    454                            (  (e1t(ji,jj) * fse3t(ji,jj,jk) / e2t(ji,jj)) * ( pu(ji,jj,jk) - pu(ji,jj-1,jk) )   & 
    455 !                            + zcof2 * ( zdku (ji,jj-1) + zdk1u(ji,jj)     & 
    456                             + ((-e1t(ji,jj)/MAX(  vmask(ji,jj-1,jk  )+vmask(ji,jj,jk+1)   & 
    457                               + vmask(ji,jj-1,jk+1)+vmask(ji,jj,jk  ), 1. ) )   & 
    458                      * 0.5 * ( vslp(ji,jj-1,jk) + vslp(ji,jj,jk) )) * & 
    459 ( & 
    460   ( pu(ji,jj-1,jk-1) - pu(ji,jj-1,jk  ) ) * umask(ji,jj-1,jk) + & 
    461   ( pu(ji,jj  ,jk  ) - pu(ji,jj  ,jk+1) ) * umask(ji,jj,jk+1)  +    & 
    462 !                                       +zdk1u(ji,jj-1) + zdku (ji,jj) )  ) 
    463   ( pu(ji,jj-1,jk  ) - pu(ji,jj-1,jk+1) ) * umask(ji,jj-1,jk+1) + & 
    464   ( pu(ji,jj  ,jk-1) - pu(ji,jj  ,jk  ) ) * umask(ji,jj,jk) )  ) 
    465                END IF 
    466             END DO 
    467          END DO 
    468 #endif 
    469  
    470          ! I.4 Second derivative (divergence) (not divided by the volume) 
    471          ! --------------------- 
    472  
    473  
     240      !                               ! ********** !  
     241                                      ! First step !  
     242         !                            ! ********** !  
    474243         DO jj = 2, jpjm1 
    475244            DO ji = 2, jpim1 
     
    590359 
    591360 
    592                DO jk = 2, jpkm1 
     361               DO jk = 2, mbkmax(ji,jj)-1 ! jpkm1 
    593362 
    594363!               plu(ji,jj,jk) = ziut (ji+1,jj) - & 
     
    715484         END DO 
    716485 
    717          !                                             ! =============== 
    718       END DO                                           !   End of slab 
    719       !                                                ! =============== 
     486         !                                        
     487      END DO 
     488 
    720489#else 
    721490      !                               ! ********** !   ! =============== 
     
    850619#if defined key_z_first 
    851620         DO ji = 2, jpi 
    852             DO jk = 1, jpk 
     621            DO jk = 1, mbkmax(ji,jj) ! jpk 
    853622               ! i-gradient of u at jj 
    854623               zdiu (ji,jk) = tmask(ji,jj  ,jk) * ( pu(ji,jj  ,jk) - pu(ji-1,jj  ,jk) ) 
     
    862631         END DO 
    863632         DO ji = 1, jpim1 
    864             DO jk = 1, jpk 
     633            DO jk = 1, mbkmax(ji,jj) ! jpk 
    865634               ! i-gradient of v at jj 
    866635               zdiv (ji,jk) = fmask(ji,jj  ,jk) * ( pv(ji+1,jj,jk) - pv(ji  ,jj  ,jk) ) 
     
    893662         ! Surface and bottom vertical fluxes set to zero 
    894663 
     664#if defined key_z_first 
     665         DO ji=1, jpi 
     666            zfuw(ji, 1               ) = 0.e0 
     667            zfvw(ji, 1               ) = 0.e0 
     668            zfuw(ji,mbkmax(ji,jj):jpk) = 0.e0 
     669            zfvw(ji,mbkmax(ji,jj):jpk) = 0.e0 
     670         END DO 
     671#else 
    895672         zfuw(:, 1 ) = 0.e0 
    896673         zfvw(:, 1 ) = 0.e0 
    897674         zfuw(:,jpk) = 0.e0 
    898675         zfvw(:,jpk) = 0.e0 
    899  
     676#endif 
    900677         ! interior (2=<jk=<jpk-1) on pu field 
    901678 
    902679#if defined key_z_first 
    903680         DO ji = 2, jpim1 
    904             DO jk = 2, jpkm1 
     681            DO jk = 2, mbkmax(ji,jj)-1 ! jpkm1 
    905682#else 
    906683         DO jk = 2, jpkm1 
     
    935712#if defined key_z_first 
    936713         DO ji = 2, jpim1 
    937             DO jk = 2, jpkm1 
     714            DO jk = 2, mbkmax(ji,jj)-1 ! jpkm1 
    938715#else 
    939716         DO jk = 2, jpkm1 
     
    972749#if defined key_z_first 
    973750            DO ji = 2, jpim1 
    974                DO jk = 1, jpkm1 
     751               DO jk = 1, mbkmax(ji,jj)-1 ! jpkm1 
    975752#else 
    976753            DO jk = 1, jpkm1 
     
    992769#if defined key_z_first 
    993770            DO ji = 2, jpim1 
    994                DO jk = 1, jpkm1 
     771               DO jk = 1, mbkmax(ji,jj)-1 ! jpkm1 
    995772#else 
    996773            DO jk = 1, jpkm1 
Note: See TracChangeset for help on using the changeset viewer.