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 592 for trunk/NEMO/OPA_SRC/TRA/trazdf_imp.F90 – NEMO

Ignore:
Timestamp:
2007-02-09T10:15:25+01:00 (17 years ago)
Author:
opalod
Message:

nemo_v2_update_001 : CT : - add non linear free surface (variable volume) with new cpp key key_vvl

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/TRA/trazdf_imp.F90

    r503 r592  
    3131   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    3232   USE prtctl          ! Print control 
     33   USE domvvl          ! variable volume 
    3334 
    3435   IMPLICIT NONE 
     
    9798      !! * Local declarations 
    9899      INTEGER  ::   ji, jj, jk               ! dummy loop indices 
    99       REAL(wp) ::   zavi, zrhs               ! temporary scalars 
     100      REAL(wp) ::   zavi, zrhs, znvvl,     & ! temporary scalars 
     101         ze3tb, ze3tn, ze3ta, zvsfvvl        ! variable vertical scale factors 
    100102      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    101103         zwi, zwt, zavsi                     ! workspace arrays 
     
    119121      zavsi(:,:,jpk) = 0.e0     ;     zavsi( : ,:,1) = 0.e0 
    120122 
     123      ! I.1 Variable volume : to take into account vertical variable vertical scale factors 
     124      ! ------------------- 
     125      IF( lk_vvl ) THEN   ;    znvvl = 1. 
     126      ELSE                ;    znvvl = 0.e0 
     127      ENDIF 
     128 
    121129      ! II. Vertical trend associated with the vertical physics 
    122130      ! ======================================================= 
     
    145153      END DO 
    146154 
     155#else 
     156      ! No isopycnal diffusion 
     157      zwt(:,:,:) = avt(:,:,:) 
     158# if defined key_zdfddm 
     159      zavsi(:,:,:) = avs(:,:,:) 
     160# endif 
     161 
     162#endif 
     163 
    147164      ! Diagonal, inferior, superior  (including the bottom boundary condition via avt masked) 
    148165      DO jk = 1, jpkm1 
    149166         DO jj = 2, jpjm1 
    150167            DO ji = fs_2, fs_jpim1   ! vector opt. 
    151                zwi(ji,jj,jk) = - p2dt(jk) * zwt(ji,jj,jk  ) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk  ) ) 
    152                zws(ji,jj,jk) = - p2dt(jk) * zwt(ji,jj,jk+1) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk+1) ) 
    153                zwd(ji,jj,jk) = 1. - zwi(ji,jj,jk) - zws(ji,jj,jk) 
    154             END DO 
    155          END DO 
    156       END DO 
    157 #else 
    158       ! Diagonal, inferior, superior  (including the bottom boundary condition via avt masked) 
    159       DO jk = 1, jpkm1 
    160          DO jj = 2, jpjm1 
    161             DO ji = fs_2, fs_jpim1   ! vector opt. 
    162                zwi(ji,jj,jk) = - p2dt(jk) * avt(ji,jj,jk  ) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk  ) ) 
    163                zws(ji,jj,jk) = - p2dt(jk) * avt(ji,jj,jk+1) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk+1) ) 
    164                zwd(ji,jj,jk) = 1. - zwi(ji,jj,jk) - zws(ji,jj,jk) 
    165             END DO 
    166          END DO 
    167       END DO 
    168 #endif 
     168               zvsfvvl = fsve3t(ji,jj,jk) * ( 1 + ssha(ji,jj) * mut(ji,jj,jk) ) 
     169               ze3ta = ( 1. - znvvl ) + znvvl*zvsfvvl                                ! after scale factor at T-point 
     170               ze3tn = ( 1. - znvvl )*fse3t(ji,jj,jk) + znvvl                        ! now   scale factor at T-point 
     171               zwi(ji,jj,jk) = - p2dt(jk) * zwt(ji,jj,jk  ) / ( ze3tn * fse3w(ji,jj,jk  ) ) 
     172               zws(ji,jj,jk) = - p2dt(jk) * zwt(ji,jj,jk+1) / ( ze3tn * fse3w(ji,jj,jk+1) ) 
     173               zwd(ji,jj,jk) = ze3ta - zwi(ji,jj,jk) - zws(ji,jj,jk) 
     174            END DO 
     175         END DO 
     176      END DO 
    169177 
    170178      ! Surface boudary conditions 
    171179      DO jj = 2, jpjm1 
    172180         DO ji = fs_2, fs_jpim1   ! vector opt. 
     181            zvsfvvl = fsve3t(ji,jj,1) * ( 1 + ssha(ji,jj) * mut(ji,jj,1) ) 
     182            ze3ta = ( 1. - znvvl ) + znvvl*zvsfvvl                                   ! after scale factor at T-point 
    173183            zwi(ji,jj,1) = 0.e0 
    174             zwd(ji,jj,1) = 1. - zws(ji,jj,1) 
     184            zwd(ji,jj,1) = ze3ta - zws(ji,jj,1) 
    175185         END DO 
    176186      END DO 
     
    214224      DO jj = 2, jpjm1 
    215225         DO ji = fs_2, fs_jpim1 
    216             ta(ji,jj,1) = tb(ji,jj,1) + p2dt(1) * ta(ji,jj,1) 
    217          END DO 
    218       END DO 
    219       DO jk = 2, jpkm1 
    220          DO jj = 2, jpjm1 
    221             DO ji = fs_2, fs_jpim1 
    222                zrhs = tb(ji,jj,jk) + p2dt(jk) * ta(ji,jj,jk)   ! zrhs=right hand side  
     226            zvsfvvl = fsve3t(ji,jj,1) * ( 1 + sshb(ji,jj) * mut(ji,jj,1) ) 
     227            ze3tb = ( 1. - znvvl ) + znvvl*zvsfvvl 
     228            ze3tn = ( 1. - znvvl ) + znvvl*fse3t (ji,jj,1) 
     229            ta(ji,jj,1) = ze3tb * tb(ji,jj,1) + p2dt(1) * ze3tn * ta(ji,jj,1) 
     230         END DO 
     231      END DO 
     232      DO jk = 2, jpkm1 
     233         DO jj = 2, jpjm1 
     234            DO ji = fs_2, fs_jpim1 
     235               zvsfvvl = fsve3t(ji,jj,jk) * ( 1 + sshb(ji,jj) * mut(ji,jj,jk) ) 
     236               ze3tb = ( 1. - znvvl ) + znvvl*zvsfvvl 
     237               ze3tn = ( 1. - znvvl ) + znvvl*fse3t (ji,jj,jk) 
     238               zrhs = ze3tb * tb(ji,jj,jk) + p2dt(jk) * ze3tn * ta(ji,jj,jk)   ! zrhs=right hand side  
    223239               ta(ji,jj,jk) = zrhs - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) *ta(ji,jj,jk-1) 
    224240            END DO 
     
    249265 
    250266      ! Diagonal, inferior, superior  (including the bottom boundary condition via avs masked) 
    251 # if defined key_ldfslp 
    252267      DO jk = 1, jpkm1 
    253268         DO jj = 2, jpjm1 
    254269            DO ji = fs_2, fs_jpim1   ! vector opt. 
    255                zwi(ji,jj,jk) = - p2dt(jk) * zavsi(ji,jj,jk  ) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk  ) ) 
    256                zws(ji,jj,jk) = - p2dt(jk) * zavsi(ji,jj,jk+1) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk+1) ) 
    257                zwd(ji,jj,jk) = 1. - zwi(ji,jj,jk) - zws(ji,jj,jk) 
    258             END DO 
    259          END DO 
    260       END DO 
    261 # else 
    262       DO jk = 1, jpkm1 
    263          DO jj = 2, jpjm1 
    264             DO ji = fs_2, fs_jpim1   ! vector opt. 
    265                zwi(ji,jj,jk) = - p2dt(jk) * avs(ji,jj,jk  ) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk  ) ) 
    266                zws(ji,jj,jk) = - p2dt(jk) * avs(ji,jj,jk+1) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk+1) ) 
    267                zwd(ji,jj,jk) = 1. - zwi(ji,jj,jk) - zws(ji,jj,jk) 
    268             END DO 
    269          END DO 
    270       END DO 
    271 # endif 
     270               zvsfvvl = fsve3t(ji,jj,jk) * ( 1 + ssha(ji,jj) * mut(ji,jj,jk) ) 
     271               ze3ta = ( 1. - znvvl ) + znvvl*zvsfvvl                                      ! after scale factor at T-point 
     272               ze3tn = ( 1. - znvvl )*fse3t(ji,jj,jk) + znvvl                              ! now   scale factor at T-point 
     273               zwi(ji,jj,jk) = - p2dt(jk) * zavsi(ji,jj,jk  ) / ( ze3tn * fse3w(ji,jj,jk  ) ) 
     274               zws(ji,jj,jk) = - p2dt(jk) * zavsi(ji,jj,jk+1) / ( ze3tn * fse3w(ji,jj,jk+1) ) 
     275               zwd(ji,jj,jk) = ze3ta - zwi(ji,jj,jk) - zws(ji,jj,jk) 
     276            END DO 
     277         END DO 
     278      END DO 
    272279 
    273280      ! Surface boudary conditions 
    274281      DO jj = 2, jpjm1 
    275282         DO ji = fs_2, fs_jpim1   ! vector opt. 
     283            zvsfvvl = fsve3t(ji,jj,1) * ( 1 + ssha(ji,jj) * mut(ji,jj,1) ) 
     284            ze3ta = ( 1. - znvvl ) + znvvl*zvsfvvl                                          ! after scale factor at T-point 
    276285            zwi(ji,jj,1) = 0.e0 
    277             zwd(ji,jj,1) = 1. - zws(ji,jj,1) 
     286            zwd(ji,jj,1) = ze3ta - zws(ji,jj,1) 
    278287         END DO 
    279288      END DO 
     
    316325      DO jj = 2, jpjm1 
    317326         DO ji = fs_2, fs_jpim1 
    318             sa(ji,jj,1) = sb(ji,jj,1) + p2dt(1) * sa(ji,jj,1) 
    319          END DO 
    320       END DO 
    321       DO jk = 2, jpkm1 
    322          DO jj = 2, jpjm1 
    323             DO ji = fs_2, fs_jpim1 
    324                zrhs = sb(ji,jj,jk) + p2dt(jk) * sa(ji,jj,jk)   ! zrhs=right hand side 
     327            zvsfvvl = fsve3t(ji,jj,1) * ( 1 + sshb(ji,jj) * mut(ji,jj,1) ) 
     328            ze3tb = ( 1. - znvvl ) + znvvl*zvsfvvl                               ! before scale factor at T-point 
     329            ze3tn = ( 1. - znvvl ) + znvvl*fse3t(ji,jj,1)                        ! now    scale factor at T-point 
     330            sa(ji,jj,1) = ze3tb * sb(ji,jj,1) + p2dt(1) * ze3tn * sa(ji,jj,1) 
     331         END DO 
     332      END DO 
     333      DO jk = 2, jpkm1 
     334         DO jj = 2, jpjm1 
     335            DO ji = fs_2, fs_jpim1 
     336               zvsfvvl = fsve3t(ji,jj,jk) * ( 1 + sshb(ji,jj) * mut(ji,jj,jk) ) 
     337               ze3tb = ( 1. - znvvl ) + znvvl*zvsfvvl                            ! before scale factor at T-point 
     338               ze3tn = ( 1. - znvvl ) + znvvl*fse3t(ji,jj,jk)                    ! now    scale factor at T-point 
     339               zrhs = ze3tb * sb(ji,jj,jk) + p2dt(jk) * ze3tn * sa(ji,jj,jk)     ! zrhs=right hand side 
    325340               sa(ji,jj,jk) = zrhs - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) *sa(ji,jj,jk-1) 
    326341            END DO 
Note: See TracChangeset for help on using the changeset viewer.