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 4375 for branches/2013/dev_r4050_NOC_WaD/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90 – NEMO

Ignore:
Timestamp:
2014-01-28T14:55:35+01:00 (10 years ago)
Author:
hliu
Message:

updated gravity filters

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r4050_NOC_WaD/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90

    r3764 r4375  
    7676      !!             - Save the trend (l_trddyn=T) 
    7777      !!---------------------------------------------------------------------- 
    78       INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
     78      INTEGER, INTENT(in) ::   kt                               ! ocean time-step index 
     79      INTEGER             ::   ji, jj, jk                       ! dummy loop indices 
     80      REAL                ::   zcpx, zcpy                       ! gravity filter for W/D 
     81      REAL                ::   zij, zim1j, zijm1, zim1jm1   ! local variables 
     82      REAL                ::   dij, dim1j, dijm1, dim1jm1   ! local variables 
    7983      REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztrdu, ztrdv 
    8084      !!---------------------------------------------------------------------- 
     
    8286      IF( nn_timing == 1 )  CALL timing_start('dyn_hpg') 
    8387      ! 
    84       IF( l_trddyn ) THEN                    ! Temporary saving of ua and va trends (l_trddyn) 
     88 
     89      IF( l_trddyn .OR. ln_wad ) THEN               ! Temporary saving of ua and va trends (l_trddyn) 
    8590         CALL wrk_alloc( jpi,jpj,jpk, ztrdu, ztrdv ) 
    8691         ztrdu(:,:,:) = ua(:,:,:) 
    8792         ztrdv(:,:,:) = va(:,:,:) 
    8893      ENDIF 
     94 
    8995      ! 
    9096      SELECT CASE ( nhpg )      ! Hydrostatic pressure gradient computation 
     
    95101      CASE (  4 )   ;   CALL hpg_prj    ( kt )      ! s-coordinate (Pressure Jacobian scheme) 
    96102      END SELECT 
     103 
     104      !! Gravity filter for W/D 
     105      IF(ln_wad) THEN 
     106         DO jk = 2, jpkm1 
     107            DO jj = 2, jpjm1 
     108               DO ji = fs_2, fs_jpim1   ! vector opt. 
     109                  zij     =  sshn(ji   , jj   ) 
     110                  zim1j   =  sshn(ji- 1, jj   ) 
     111                  zijm1   =  sshn(ji   , jj- 1) 
     112                  zim1jm1 =  sshn(ji-1 , jj- 1) 
     113                  dij     = bathy(ji   , jj   ) 
     114                  dim1j   = bathy(ji- 1, jj   ) 
     115                  dijm1   = bathy(ji   , jj- 1) 
     116                  dim1jm1 = bathy(ji-1 , jj- 1) 
     117 
     118                  zcpx = 0.5_wp + sign(0.5_wp, min(zij,zim1j) - max(-dij,-dim1j)) 
     119                  zcpy = 0.5_wp + sign(0.5_wp, min(zij,zijm1) - max(-dij,-dijm1)) 
     120                   
     121                  ua(ji,jj,jk) = ztrdu(ji,jj,jk) + zcpx * ( ua(ji,jj,jk) - ztrdu(ji,jj,jk)) 
     122                  va(ji,jj,jk) = ztrdv(ji,jj,jk) + zcpy * ( va(ji,jj,jk) - ztrdv(ji,jj,jk)) 
     123               END DO 
     124            END DO 
     125         END DO 
     126      END IF 
    97127      ! 
    98128      IF( l_trddyn ) THEN      ! save the hydrostatic pressure gradient trends for momentum trend diagnostics 
     
    100130         ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    101131         CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_hpg, 'DYN', kt ) 
     132      ENDIF 
     133 
     134      IF( l_trddyn .OR. ln_wad ) THEN  
    102135         CALL wrk_dealloc( jpi,jpj,jpk, ztrdu, ztrdv ) 
    103136      ENDIF 
     137 
    104138      ! 
    105139      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' hpg  - Ua: ', mask1=umask,   & 
Note: See TracChangeset for help on using the changeset viewer.