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 5204 for branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/TRA/zpshde.F90 – NEMO

Ignore:
Timestamp:
2015-04-09T20:32:14+02:00 (9 years ago)
Author:
mathiot
Message:

ISF cleaning branch: cleaning sbcisf + bug correction in zpshde_isf (ssumask instead of umask(:,:,1))

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/TRA/zpshde.F90

    r5200 r5204  
    268268         DO jj = 1, jpjm1 
    269269            DO ji = 1, jpim1 
    270                iku = mbku(ji,jj)   ;   ikum1 = MAX( iku - 1 , 1 )    ! last and before last ocean level at u- & v-points 
    271                ikv = mbkv(ji,jj)   ;   ikvm1 = MAX( ikv - 1 , 1 )    ! if level first is a p-step, ik.m1=1 
     270 
     271               iku = mbku(ji,jj); ikum1 = MAX( iku - 1 , 1 )    ! last and before last ocean level at u- & v-points 
     272               ikv = mbkv(ji,jj); ikvm1 = MAX( ikv - 1 , 1 )    ! if level first is a p-step, ik.m1=1 
    272273               ze3wu = gdept_0(ji+1,jj,iku) - gdept_0(ji,jj,iku) 
    273274               ze3wv = gdept_0(ji,jj+1,ikv) - gdept_0(ji,jj,ikv) 
     
    279280                  zti (ji,jj,jn) = pta(ji+1,jj,iku,jn) + zmaxu * ( pta(ji+1,jj,ikum1,jn) - pta(ji+1,jj,iku,jn) ) 
    280281                  ! gradient of  tracers 
    281                   pgtu(ji,jj,jn) = umask(ji,jj,1) * ( zti(ji,jj,jn) - pta(ji,jj,iku,jn) ) 
     282                  pgtu(ji,jj,jn) = ssumask(ji,jj) * ( zti(ji,jj,jn) - pta(ji,jj,iku,jn) ) 
    282283               ELSE                           ! case 2 
    283284                  zmaxu = -ze3wu / fse3w(ji,jj,iku) 
     
    285286                  zti (ji,jj,jn) = pta(ji,jj,iku,jn) + zmaxu * ( pta(ji,jj,ikum1,jn) - pta(ji,jj,iku,jn) ) 
    286287                  ! gradient of tracers 
    287                   pgtu(ji,jj,jn) = umask(ji,jj,1) * ( pta(ji+1,jj,iku,jn) - zti(ji,jj,jn) ) 
     288                  pgtu(ji,jj,jn) = ssumask(ji,jj) * ( pta(ji+1,jj,iku,jn) - zti(ji,jj,jn) ) 
    288289               ENDIF 
    289290               ! 
     
    294295                  ztj (ji,jj,jn) = pta(ji,jj+1,ikv,jn) + zmaxv * ( pta(ji,jj+1,ikvm1,jn) - pta(ji,jj+1,ikv,jn) ) 
    295296                  ! gradient of tracers 
    296                   pgtv(ji,jj,jn) = vmask(ji,jj,1) * ( ztj(ji,jj,jn) - pta(ji,jj,ikv,jn) ) 
     297                  pgtv(ji,jj,jn) = ssvmask(ji,jj) * ( ztj(ji,jj,jn) - pta(ji,jj,ikv,jn) ) 
    297298               ELSE                           ! case 2 
    298299                  zmaxv =  -ze3wv / fse3w(ji,jj,ikv) 
     
    300301                  ztj (ji,jj,jn) = pta(ji,jj,ikv,jn) + zmaxv * ( pta(ji,jj,ikvm1,jn) - pta(ji,jj,ikv,jn) ) 
    301302                  ! gradient of tracers 
    302                   pgtv(ji,jj,jn) = vmask(ji,jj,1) * ( pta(ji,jj+1,ikv,jn) - ztj(ji,jj,jn) ) 
    303                ENDIF 
     303                  pgtv(ji,jj,jn) = ssvmask(ji,jj) * ( pta(ji,jj+1,ikv,jn) - ztj(ji,jj,jn) ) 
     304               ENDIF 
     305 
    304306            END DO 
    305307         END DO 
     
    314316         DO jj = 1, jpjm1 
    315317            DO ji = 1, jpim1 
     318 
    316319               iku = mbku(ji,jj) 
    317320               ikv = mbkv(ji,jj) 
     
    337340         DO jj = 1, jpjm1 
    338341            DO ji = 1, jpim1 
     342 
    339343               iku = mbku(ji,jj) 
    340344               ikv = mbkv(ji,jj) 
     
    342346               ze3wv = gdept_0(ji,jj+1,ikv) - gdept_0(ji,jj,ikv) 
    343347 
    344                IF( ze3wu >= 0._wp ) THEN   ;   pgru(ji,jj) = umask(ji,jj,1) * ( zri(ji  ,jj    ) - prd(ji,jj,iku) )   ! i: 1 
    345                ELSE                        ;   pgru(ji,jj) = umask(ji,jj,1) * ( prd(ji+1,jj,iku) - zri(ji,jj    ) )   ! i: 2 
    346                ENDIF 
    347                IF( ze3wv >= 0._wp ) THEN   ;   pgrv(ji,jj) = vmask(ji,jj,1) * ( zrj(ji,jj      ) - prd(ji,jj,ikv) )   ! j: 1 
    348                ELSE                        ;   pgrv(ji,jj) = vmask(ji,jj,1) * ( prd(ji,jj+1,ikv) - zrj(ji,jj    ) )   ! j: 2 
    349                ENDIF 
    350             END DO 
    351          END DO 
     348               IF( ze3wu >= 0._wp ) THEN   ;   pgru(ji,jj) = ssumask(ji,jj) * ( zri(ji  ,jj    ) - prd(ji,jj,iku) )   ! i: 1 
     349               ELSE                        ;   pgru(ji,jj) = ssumask(ji,jj) * ( prd(ji+1,jj,iku) - zri(ji,jj    ) )   ! i: 2 
     350               ENDIF 
     351               IF( ze3wv >= 0._wp ) THEN   ;   pgrv(ji,jj) = ssvmask(ji,jj) * ( zrj(ji,jj      ) - prd(ji,jj,ikv) )   ! j: 1 
     352               ELSE                        ;   pgrv(ji,jj) = ssvmask(ji,jj) * ( prd(ji,jj+1,ikv) - zrj(ji,jj    ) )   ! j: 2 
     353               ENDIF 
     354 
     355            END DO 
     356         END DO 
     357 
    352358         CALL lbc_lnk( pgru , 'U', -1. )   ;   CALL lbc_lnk( pgrv , 'V', -1. )   ! Lateral boundary conditions 
    353359         ! 
     
    357363         DO jj = 1, jpjm1 
    358364            DO ji = 1, jpim1 
    359                iku = miku(ji,jj)   ; ikup1 = miku(ji,jj) + 1 
    360                ikv = mikv(ji,jj)   ; ikvp1 = mikv(ji,jj) + 1 
     365               iku = miku(ji,jj); ikup1 = miku(ji,jj) + 1 
     366               ikv = mikv(ji,jj); ikvp1 = mikv(ji,jj) + 1 
    361367               ! 
    362368               ! (ISF) case partial step top and bottom in adjacent cell in vertical 
     
    366372               ze3wu  =  gdept_0(ji,jj,iku) - gdept_0(ji+1,jj,iku) 
    367373               ze3wv  =  gdept_0(ji,jj,ikv) - gdept_0(ji,jj+1,ikv)  
     374 
    368375               ! i- direction 
    369376               IF( ze3wu >= 0._wp ) THEN      ! case 1 
    370                   zmaxu = ze3wu / fse3w(ji+1,jj,iku+1) 
    371                   ! interpolated values of tracers 
    372                   zti(ji,jj,jn) = pta(ji+1,jj,iku,jn) + zmaxu * ( pta(ji+1,jj,iku+1,jn) - pta(ji+1,jj,iku,jn) ) 
    373                   ! gradient of tracers 
    374                   pgtui(ji,jj,jn) = umask(ji,jj,iku) * ( zti(ji,jj,jn) - pta(ji,jj,iku,jn) ) 
    375                ELSE                           ! case 2 
    376                   zmaxu = - ze3wu / fse3w(ji,jj,iku+1) 
    377                   ! interpolated values of tracers 
    378                   zti(ji,jj,jn) = pta(ji,jj,iku,jn) + zmaxu * ( pta(ji,jj,iku+1,jn) - pta(ji,jj,iku,jn) ) 
     377                  zmaxu = ze3wu / fse3w(ji+1,jj,ikup1) 
     378                  ! interpolated values of tracers 
     379                  zti(ji,jj,jn) = pta(ji+1,jj,iku,jn) + zmaxu * ( pta(ji+1,jj,ikup1,jn) - pta(ji+1,jj,iku,jn) ) 
     380                  ! gradient of tracers 
     381                  pgtui(ji,jj,jn) = ssumask(ji,jj) * ( zti(ji,jj,jn) - pta(ji,jj,iku,jn) ) 
     382               ELSE                           ! case 2 
     383                  zmaxu = - ze3wu / fse3w(ji,jj,ikup1) 
     384                  ! interpolated values of tracers 
     385                  zti(ji,jj,jn) = pta(ji,jj,iku,jn) + zmaxu * ( pta(ji,jj,ikup1,jn) - pta(ji,jj,iku,jn) ) 
    379386                  ! gradient of  tracers 
    380                   pgtui(ji,jj,jn) = umask(ji,jj,iku) * ( pta(ji+1,jj,iku,jn) - zti(ji,jj,jn) ) 
     387                  pgtui(ji,jj,jn) = ssumask(ji,jj) * ( pta(ji+1,jj,iku,jn) - zti(ji,jj,jn) ) 
    381388               ENDIF 
    382389               ! 
    383390               ! j- direction 
    384391               IF( ze3wv >= 0._wp ) THEN      ! case 1 
    385                   zmaxv =  ze3wv / fse3w(ji,jj+1,ikv+1) 
    386                   ! interpolated values of tracers 
    387                   ztj(ji,jj,jn) = pta(ji,jj+1,ikv,jn) + zmaxv * ( pta(ji,jj+1,ikv+1,jn) - pta(ji,jj+1,ikv,jn) ) 
    388                   ! gradient of tracers 
    389                   pgtvi(ji,jj,jn) = vmask(ji,jj,ikv) * ( ztj(ji,jj,jn) - pta(ji,jj,ikv,jn) ) 
    390                ELSE                           ! case 2 
    391                   zmaxv =  - ze3wv / fse3w(ji,jj,ikv+1) 
    392                   ! interpolated values of tracers 
    393                   ztj(ji,jj,jn) = pta(ji,jj,ikv,jn) + zmaxv * ( pta(ji,jj,ikv+1,jn) - pta(ji,jj,ikv,jn) ) 
    394                   ! gradient of tracers 
    395                   pgtvi(ji,jj,jn) = vmask(ji,jj,ikv) * ( pta(ji,jj+1,ikv,jn) - ztj(ji,jj,jn) ) 
    396                ENDIF 
    397             END DO!! 
    398          END DO!! 
    399          CALL lbc_lnk( pgtui(:,:,jn), 'U', -1. )   ;   CALL lbc_lnk( pgtvi(:,:,jn), 'V', -1. )   ! Lateral boundary cond. 
     392                  zmaxv =  ze3wv / fse3w(ji,jj+1,ikvp1) 
     393                  ! interpolated values of tracers 
     394                  ztj(ji,jj,jn) = pta(ji,jj+1,ikv,jn) + zmaxv * ( pta(ji,jj+1,ikvp1,jn) - pta(ji,jj+1,ikv,jn) ) 
     395                  ! gradient of tracers 
     396                  pgtvi(ji,jj,jn) = ssvmask(ji,jj) * ( ztj(ji,jj,jn) - pta(ji,jj,ikv,jn) ) 
     397               ELSE                           ! case 2 
     398                  zmaxv =  - ze3wv / fse3w(ji,jj,ikvp1) 
     399                  ! interpolated values of tracers 
     400                  ztj(ji,jj,jn) = pta(ji,jj,ikv,jn) + zmaxv * ( pta(ji,jj,ikvp1,jn) - pta(ji,jj,ikv,jn) ) 
     401                  ! gradient of tracers 
     402                  pgtvi(ji,jj,jn) = ssvmask(ji,jj) * ( pta(ji,jj+1,ikv,jn) - ztj(ji,jj,jn) ) 
     403               ENDIF 
     404 
     405            END DO 
     406         END DO 
     407         CALL lbc_lnk( pgtui(:,:,jn), 'U', -1. ); CALL lbc_lnk( pgtvi(:,:,jn), 'V', -1. )   ! Lateral boundary cond. 
    400408         ! 
    401409      END DO 
     
    403411      ! horizontal derivative of density anomalies (rd) 
    404412      IF( PRESENT( prd ) ) THEN         ! depth of the partial step level 
    405          pgrui(:,:)  =0.0_wp ; pgrvi(:,:)  =0.0_wp ; 
    406          DO jj = 1, jpjm1 
    407             DO ji = 1, jpim1 
     413         pgrui(:,:)  =0.0_wp; pgrvi(:,:)  =0.0_wp; 
     414         DO jj = 1, jpjm1 
     415            DO ji = 1, jpim1 
     416 
    408417               iku = miku(ji,jj) 
    409418               ikv = mikv(ji,jj) 
     
    430439         DO jj = 1, jpjm1 
    431440            DO ji = 1, jpim1 
    432                iku = miku(ji,jj) ; ikup1 = miku(ji,jj) + 1 
    433                ikv = mikv(ji,jj) ; ikvp1 = mikv(ji,jj) + 1 
     441 
     442               iku = miku(ji,jj)  
     443               ikv = mikv(ji,jj)  
    434444               ze3wu  =  gdept_0(ji,jj,iku) - gdept_0(ji+1,jj,iku) 
    435445               ze3wv  =  gdept_0(ji,jj,ikv) - gdept_0(ji,jj+1,ikv)  
    436446 
    437                IF( ze3wu >= 0._wp ) THEN ; pgrui(ji,jj) = umask(ji,jj,iku) * ( zri(ji  ,jj      ) - prd(ji,jj,iku) )          ! i: 1 
    438                ELSE                      ; pgrui(ji,jj) = umask(ji,jj,iku) * ( prd(ji+1,jj  ,iku) - zri(ji,jj    ) )      ! i: 2 
    439                ENDIF 
    440  
    441                IF( ze3wv >= 0._wp ) THEN ; pgrvi(ji,jj) = vmask(ji,jj,ikv) * ( zrj(ji  ,jj      ) - prd(ji,jj,ikv) ) ! j: 1 
    442                ELSE                      ; pgrvi(ji,jj) = vmask(ji,jj,ikv) * ( prd(ji  ,jj+1,ikv) - zrj(ji,jj    ) ) ! j: 2 
    443                ENDIF 
    444  
    445             END DO 
    446          END DO 
    447          CALL lbc_lnk( pgrui   , 'U', -1. )   ;  CALL lbc_lnk( pgrvi   , 'V', -1. )   ! Lateral boundary conditions 
     447               IF( ze3wu >= 0._wp ) THEN ; pgrui(ji,jj) = ssumask(ji,jj) * ( zri(ji  ,jj      ) - prd(ji,jj,iku) ) ! i: 1 
     448               ELSE                      ; pgrui(ji,jj) = ssumask(ji,jj) * ( prd(ji+1,jj  ,iku) - zri(ji,jj    ) ) ! i: 2 
     449               ENDIF 
     450 
     451               IF( ze3wv >= 0._wp ) THEN ; pgrvi(ji,jj) = ssvmask(ji,jj) * ( zrj(ji  ,jj      ) - prd(ji,jj,ikv) ) ! j: 1 
     452               ELSE                      ; pgrvi(ji,jj) = ssvmask(ji,jj) * ( prd(ji  ,jj+1,ikv) - zrj(ji,jj    ) ) ! j: 2 
     453               ENDIF 
     454 
     455            END DO 
     456         END DO 
     457         CALL lbc_lnk( pgrui   , 'U', -1. ); CALL lbc_lnk( pgrvi   , 'V', -1. )   ! Lateral boundary conditions 
    448458         ! 
    449459      END IF   
Note: See TracChangeset for help on using the changeset viewer.