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 5098 for branches/2015/dev_r5094_UKMO_ISFCLEAN/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90 – NEMO

Ignore:
Timestamp:
2015-02-20T20:11:47+01:00 (9 years ago)
Author:
mathiot
Message:

add wmask, wumask, wvmask and restore loop order and add flag to ignore specific isf code if no isf

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5094_UKMO_ISFCLEAN/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90

    r4990 r5098  
    106106      ! 
    107107      INTEGER  ::  ji, jj, jk, jn   ! dummy loop indices 
     108      INTEGER  ::  ikt 
    108109      REAL(wp) ::  zmsku, zabe1, zcof1, zcoef3   ! local scalars 
    109110      REAL(wp) ::  zmskv, zabe2, zcof2, zcoef4   !   -      - 
     
    149150            END DO 
    150151         END DO 
     152 
     153         ! partial cell correction 
    151154         IF( ln_zps ) THEN      ! partial steps correction at the last ocean level  
    152155            DO jj = 1, jpjm1 
    153156               DO ji = 1, fs_jpim1   ! vector opt. 
    154157! IF useless if zpshde defines pgu everywhere 
    155                   IF (mbku(ji,jj) > 1) zdit(ji,jj,mbku(ji,jj)) = pgu(ji,jj,jn)           
    156                   IF (mbkv(ji,jj) > 1) zdjt(ji,jj,mbkv(ji,jj)) = pgv(ji,jj,jn) 
    157                   ! (ISF) 
     158                  zdit(ji,jj,mbku(ji,jj)) = pgu(ji,jj,jn)           
     159                  zdjt(ji,jj,mbkv(ji,jj)) = pgv(ji,jj,jn) 
     160               END DO 
     161            END DO 
     162         ENDIF 
     163         IF( ln_zps .AND. ln_isfcav ) THEN      ! partial steps correction at the first wet level beneath a cavity 
     164            DO jj = 1, jpjm1 
     165               DO ji = 1, fs_jpim1   ! vector opt. 
    158166                  IF (miku(ji,jj) > 1) zdit(ji,jj,miku(ji,jj)) = pgui(ji,jj,jn)           
    159167                  IF (mikv(ji,jj) > 1) zdjt(ji,jj,mikv(ji,jj)) = pgvi(ji,jj,jn)      
    160168               END DO 
    161169            END DO 
    162          ENDIF 
     170         END IF 
    163171 
    164172         !!---------------------------------------------------------------------- 
    165173         !!   II - horizontal trend  (full) 
    166174         !!---------------------------------------------------------------------- 
    167 !CDIR PARALLEL DO PRIVATE( zdk1t )  
    168          !                                                ! =============== 
    169          DO jj = 1, jpj                                 ! Horizontal slab 
    170             !                                             ! =============== 
    171             DO ji = 1, jpi   ! vector opt. 
    172                DO jk = mikt(ji,jj), jpkm1 
    173                ! 1. Vertical tracer gradient at level jk and jk+1 
    174                ! ------------------------------------------------ 
    175                ! surface boundary condition: zdkt(jk=1)=zdkt(jk=2) 
    176                   zdk1t(ji,jj,jk) = ( ptb(ji,jj,jk,jn) - ptb(ji,jj,jk+1,jn) ) * tmask(ji,jj,jk+1) 
    177                ! 
    178                   IF( jk == mikt(ji,jj) ) THEN  ;   zdkt(ji,jj,jk) = zdk1t(ji,jj,jk) 
    179                   ELSE                          ;   zdkt(ji,jj,jk) = ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) * tmask(ji,jj,jk) 
    180                   ENDIF 
     175!!!!!!!!!!CDIR PARALLEL DO PRIVATE( zdk1t )  
     176            ! 1. Vertical tracer gradient at level jk and jk+1 
     177            ! ------------------------------------------------ 
     178         !  
     179         ! interior value  
     180         DO jk = 2, jpkm1                
     181            DO jj = 1, jpj 
     182               DO ji = 1, jpi   ! vector opt. 
     183                  zdk1t(ji,jj,jk) = ( ptb(ji,jj,jk,jn  ) - ptb(ji,jj,jk+1,jn) ) * wmask(ji,jj,jk+1) 
     184                  ! 
     185                  zdkt(ji,jj,jk)  = ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn  ) ) * wmask(ji,jj,jk) 
    181186               END DO 
    182187            END DO 
    183188         END DO 
     189            ! surface boundary condition: zdkt(jk=1)=zdkt(jk=2) 
     190         zdk1t(:,:,1) = ( ptb(:,:,1,jn  ) - ptb(:,:,2,jn) ) * wmask(:,:,2) 
     191         zdkt (:,:,1) = zdk1t(:,:,1) 
     192         IF ( ln_isfcav ) THEN 
     193            DO jj = 1, jpj 
     194               DO ji = 1, jpi   ! vector opt. 
     195                  ikt = mikt(ji,jj) ! surface level 
     196                  zdk1t(ji,jj,ikt) = ( ptb(ji,jj,ikt,jn  ) - ptb(ji,jj,ikt+1,jn) ) * wmask(ji,jj,ikt+1) 
     197                  zdkt (ji,jj,ikt) = zdk1t(ji,jj,ikt) 
     198               END DO 
     199            END DO 
     200         END IF 
    184201 
    185202            ! 2. Horizontal fluxes 
    186203            ! --------------------    
    187          DO jj = 1 , jpjm1 
    188             DO ji = 1, fs_jpim1   ! vector opt. 
    189                DO jk = mikt(ji,jj), jpkm1 
     204         DO jk = 1, jpkm1 
     205            DO jj = 1 , jpjm1 
     206               DO ji = 1, fs_jpim1   ! vector opt. 
    190207                  zabe1 = ( fsahtu(ji,jj,jk) + pahtb0 ) * re2u_e1u(ji,jj) * fse3u_n(ji,jj,jk) 
    191208                  zabe2 = ( fsahtv(ji,jj,jk) + pahtb0 ) * re1v_e2v(ji,jj) * fse3v_n(ji,jj,jk) 
     
    208225               END DO 
    209226            END DO 
    210          END DO 
    211227 
    212228            ! II.4 Second derivative (divergence) and add to the general trend 
    213229            ! ---------------------------------------------------------------- 
    214          DO jj = 2 , jpjm1 
    215             DO ji = fs_2, fs_jpim1   ! vector opt. 
    216                DO jk = mikt(ji,jj), jpkm1 
    217                   zbtr = 1.0 / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
     230            DO jj = 2 , jpjm1 
     231               DO ji = fs_2, fs_jpim1   ! vector opt. 
     232                  zbtr = 1.0 / ( e12t(ji,jj) * fse3t_n(ji,jj,jk) ) 
    218233                  ztra = zbtr * ( zftu(ji,jj,jk) - zftu(ji-1,jj,jk) + zftv(ji,jj,jk) - zftv(ji,jj-1,jk)  ) 
    219234                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra 
     
    278293            DO jj = 2, jpjm1 
    279294               DO ji = fs_2, fs_jpim1   ! vector opt. 
    280                   zcoef0 = - fsahtw(ji,jj,jk) * tmask(ji,jj,jk) * tmask(ji,jj,jk-1) 
     295                  zcoef0 = - fsahtw(ji,jj,jk) * wmask(ji,jj,jk) 
    281296                  ! 
    282297                  zmsku = 1./MAX(   umask(ji  ,jj,jk-1) + umask(ji-1,jj,jk)      & 
Note: See TracChangeset for help on using the changeset viewer.