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 2005 for branches/DEV_r1837_MLF/NEMO/OPA_SRC/DOM/domvvl.F90 – NEMO

Ignore:
Timestamp:
2010-07-09T15:07:02+02:00 (14 years ago)
Author:
mlelod
Message:

ticket: #663 MLF: second part (local compatibility essentially)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DEV_r1837_MLF/NEMO/OPA_SRC/DOM/domvvl.F90

    r1694 r2005  
    5151      !!---------------------------------------------------------------------- 
    5252      INTEGER  ::   ji, jj, jk 
    53       REAL(wp) ::   zcoefu, zcoefv, zcoeff 
     53      REAL(wp) ::   zcoefu , zcoefv   , zcoeff                   ! temporary scalars 
     54      REAL(wp) ::   zv_t_ij, zv_t_ip1j, zv_t_ijp1, zv_t_ip1jp1   !     -        - 
     55      REAL(wp), DIMENSION(jpi,jpj) ::  zs_t, zs_u_1, zs_v_1      !     -     2D workspace 
    5456      !!---------------------------------------------------------------------- 
    5557 
     
    115117         hv_0(:,:) = hv_0(:,:) + fse3v_0(:,:,jk) * vmask(:,:,jk) 
    116118      END DO 
     119       
     120      ! surface at t-points and inverse surface at (u/v)-points used in surface averaging computations 
     121      ! for ssh and scale factors 
     122      zs_t  (:,:) =       e1t(:,:) * e2t(:,:) 
     123      zs_u_1(:,:) = 0.5 / e1u(:,:) * e2u(:,:) 
     124      zs_v_1(:,:) = 0.5 / e1v(:,:) * e2v(:,:) 
    117125 
    118126      DO jj = 1, jpjm1                          ! initialise before and now Sea Surface Height at u-, v-, f-points 
    119127         DO ji = 1, jpim1   ! NO vector opt. 
    120             zcoefu = 0.5  * umask(ji,jj,1) / ( e1u(ji,jj) * e2u(ji,jj) ) 
    121             zcoefv = 0.5  * vmask(ji,jj,1) / ( e1v(ji,jj) * e2v(ji,jj) ) 
    122             zcoeff = 0.25 * umask(ji,jj,1) * umask(ji,jj+1,1) 
    123             sshu_b(ji,jj) = zcoefu * ( e1t(ji  ,jj) * e2t(ji  ,jj) * sshb(ji  ,jj)     & 
    124                &                     + e1t(ji+1,jj) * e2t(ji+1,jj) * sshb(ji+1,jj) )    
    125             sshv_b(ji,jj) = zcoefv * ( e1t(ji,jj  ) * e2t(ji,jj  ) * sshb(ji,jj  )     & 
    126                &                     + e1t(ji,jj+1) * e2t(ji,jj+1) * sshb(ji,jj+1) )    
    127             sshf_b(ji,jj) = zcoeff * ( sshb(ji  ,jj) + sshb(ji  ,jj+1)                 & 
    128                &                     + sshb(ji+1,jj) + sshb(ji+1,jj+1) )                
    129             sshu_n(ji,jj) = zcoefu * ( e1t(ji  ,jj) * e2t(ji  ,jj) * sshn(ji  ,jj)     & 
    130                &                     + e1t(ji+1,jj) * e2t(ji+1,jj) * sshn(ji+1,jj) )    
    131             sshv_n(ji,jj) = zcoefv * ( e1t(ji,jj  ) * e2t(ji,jj  ) * sshn(ji,jj  )     &  
    132                &                     + e1t(ji,jj+1) * e2t(ji,jj+1) * sshn(ji,jj+1) )      
    133             sshf_n(ji,jj) = zcoeff * ( sshn(ji  ,jj) + sshn(ji  ,jj+1)                 & 
    134                &                     + sshn(ji+1,jj) + sshn(ji+1,jj+1) )                
     128            zcoefu = umask(ji,jj,1) * zs_u_1(ji,jj) 
     129            zcoefv = vmask(ji,jj,1) * zs_v_1(ji,jj) 
     130            zcoeff = 0.5 * umask(ji,jj,1) * umask(ji,jj+1,1) / ( e1f(ji,jj) * e2f(ji,jj) ) 
     131            ! before fields 
     132            zv_t_ij       = zs_t(ji  ,jj  ) * sshb(ji  ,jj  ,jk) 
     133            zv_t_ip1j     = zs_t(ji+1,jj  ) * sshb(ji+1,jj  ,jk) 
     134            zv_t_ijp1     = zs_t(ji  ,jj+1) * sshb(ji  ,jj+1,jk) 
     135            sshu_b(ji,jj) = zcoefu * ( zv_t_ij + zv_t_ip1j ) 
     136            sshv_b(ji,jj) = zcoefv * ( zv_t_ij + zv_t_ijp1 ) 
     137            ! now fields 
     138            zv_t_ij       = zs_t(ji  ,jj  ) * sshn(ji  ,jj  ,jk) 
     139            zv_t_ip1j     = zs_t(ji+1,jj  ) * sshn(ji+1,jj  ,jk) 
     140            zv_t_ijp1     = zs_t(ji  ,jj+1) * sshn(ji  ,jj+1,jk) 
     141            zv_t_ip1jp1   = zs_t(ji  ,jj+1) * sshn(ji  ,jj+1,jk) 
     142            sshu_n(ji,jj) = zcoefu * ( zv_t_ij + zv_t_ip1j ) 
     143            sshv_n(ji,jj) = zcoefv * ( zv_t_ij + zv_t_ijp1 ) 
     144            sshf_n(ji,jj) = zcoeff * ( zv_t_ij + zv_t_ip1j + zv_t_ijp1 + zv_t_ip1jp1 ) 
    135145         END DO 
    136146      END DO 
    137       CALL lbc_lnk( sshu_b, 'U', 1. )   ;   CALL lbc_lnk( sshu_n, 'U', 1. )      ! lateral boundary conditions 
    138       CALL lbc_lnk( sshv_b, 'V', 1. )   ;   CALL lbc_lnk( sshv_n, 'V', 1. ) 
    139       CALL lbc_lnk( sshf_b, 'F', 1. )   ;   CALL lbc_lnk( sshf_n, 'F', 1. ) 
     147      CALL lbc_lnk( sshu_n, 'U', 1. )   ;   CALL lbc_lnk( sshu_b, 'U', 1. )      ! lateral boundary conditions 
     148      CALL lbc_lnk( sshv_n, 'V', 1. )   ;   CALL lbc_lnk( sshv_b, 'V', 1. ) 
     149      CALL lbc_lnk( sshf_n, 'F', 1. ) 
     150 
     151                                                ! initialise before scale factors at (u/v)-points 
     152      ! Scale factor anomaly at (u/v)-points: surface averaging of scale factor at t-points 
     153      DO jk = 1, jpkm1 
     154         DO jj = 1, jpjm1 
     155            DO ji = 1, jpim1 
     156               zv_t_ij           = zs_t(ji  ,jj  ) * fse3t_b(ji  ,jj  ,jk) 
     157               zv_t_ip1j         = zs_t(ji+1,jj  ) * fse3t_b(ji+1,jj  ,jk) 
     158               zv_t_ijp1         = zs_t(ji  ,jj+1) * fse3t_b(ji  ,jj+1,jk) 
     159               fse3u_b(ji,jj,jk) = umask(ji,jj,jk) * ( zs_u_1(ji,jj) * ( zv_t_ij + zv_t_ip1j ) - fse3u_0(ji,jj,jk) ) 
     160               fse3v_b(ji,jj,jk) = vmask(ji,jj,jk) * ( zs_v_1(ji,jj) * ( zv_t_ij + zv_t_ijp1 ) - fse3v_0(ji,jj,jk) ) 
     161            END DO 
     162         END DO 
     163      END DO 
     164      CALL lbc_lnk( fse3u_b, 'U', 1. )               ! lateral boundary conditions 
     165      CALL lbc_lnk( fse3v_b, 'U', 1. ) 
     166      ! Add initial scale factor to scale factor anomaly 
     167      fse3u_b(:,:,:) = fse3u_b(:,:,:) + fse3u_0(:,:,:) 
     168      fse3v_b(:,:,:) = fse3v_b(:,:,:) + fse3v_0(:,:,:) 
    140169      ! 
    141170   END SUBROUTINE dom_vvl 
Note: See TracChangeset for help on using the changeset viewer.