Changeset 12688


Ignore:
Timestamp:
2020-04-06T14:39:52+02:00 (7 months ago)
Author:
davestorkey
Message:

UKMO/NEMO_4.0.1_biharmonic_GM : Switch to bhm coefficient at W points.

Location:
NEMO/branches/UKMO/NEMO_4.0.1_biharmonic_GM/src/OCE
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.1_biharmonic_GM/src/OCE/DYN/dynldf_lap_blp.F90

    r12535 r12688  
    226226      ! =============== 
    227227      !CW: calculate -bhm * d/dz(del^2 u)   
     228      ! Use of wumask and wvmask to ensure diffusive fluxes at topography are zero. 
    228229      DO jk = 2, jpkm1  
    229230         DO jj = 2, jpjm1 
    230231            DO ji = fs_2, jpim1   ! vector opt. 
    231                 zulapdz(ji,jj,jk) = -bhmu(ji,jj,jk)*(zulap(ji,jj,jk-1) - zulap(ji,jj,jk)) / e3uw_n(ji,jj,jk) 
    232                 zvlapdz(ji,jj,jk) = -bhmv(ji,jj,jk)*(zvlap(ji,jj,jk-1) - zvlap(ji,jj,jk)) / e3vw_n(ji,jj,jk) 
     232                zulapdz(ji,jj,jk) = -0.5_wp*(bhm(ji+1,jj  ,jk)+bhm(ji,jj,jk))*(zulap(ji,jj,jk-1) - zulap(ji,jj,jk)) * wumask(ji,jj,jk) / e3uw_n(ji,jj,jk) 
     233                zvlapdz(ji,jj,jk) = -0.5_wp*(bhm(ji  ,jj+1,jk)+bhm(ji,jj,jk))*(zvlap(ji,jj,jk-1) - zvlap(ji,jj,jk)) * wvmask(ji,jj,jk) / e3vw_n(ji,jj,jk) 
    233234            ENDDO 
    234235         ENDDO 
  • NEMO/branches/UKMO/NEMO_4.0.1_biharmonic_GM/src/OCE/LDF/ldfdyn.F90

    r12535 r12688  
    6666 
    6767   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ahmt, ahmf   !: eddy viscosity coef. at T- and F-points [m2/s or m4/s] 
    68    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   bhmu, bhmv   !: eddy viscosity coef. for bi-Laplacian GM at u- and v-points [m4/s] 
     68   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   bhm          !: eddy viscosity coef. for bi-Laplacian GM at W-points (cf. avm) [m4/s] 
    6969   REAL(wp),         ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   dtensq       !: horizontal tension squared         (Smagorinsky only) 
    7070   REAL(wp),         ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   dshesq       !: horizontal shearing strain squared (Smagorinsky only) 
     
    117117      INTEGER  ::   ji, jj, jk                     ! dummy loop indices 
    118118      INTEGER  ::   ioptio, ierr, inum, ios, inn   ! local integer 
    119       INTEGER  ::   iku, ikv, ikt                  ! local integer 
     119      INTEGER  ::   ikw                            ! local integer 
    120120      REAL(wp) ::   zah0, zah_max, zUfac           ! local scalar 
    121121      REAL(wp) ::   bhm0, lhscrit, lhscritmax      ! local scalar 
     
    279279         !CW 
    280280         !IF(lwp) WRITE(numout,*) '   ==>>>   No viscous operator selected. ahmt and ahmf are not allocated' 
    281          IF(lwp) WRITE(numout,*) '   ==>>>   No viscous operator selected. ahmt, ahmf, bhmu, bhmv are not allocated' 
     281         IF(lwp) WRITE(numout,*) '   ==>>>   No viscous operator selected. ahmt, ahmf, bhm are not allocated' 
    282282         ! 
    283283         RETURN 
     
    286286         ! 
    287287         !                                         ! allocate the ahm arrays 
    288          ALLOCATE( ahmt(jpi,jpj,jpk) , ahmf(jpi,jpj,jpk) , bhmu(jpi,jpj,jpk) , bhmv(jpi,jpj,jpk) , STAT=ierr ) 
     288         ALLOCATE( ahmt(jpi,jpj,jpk) , ahmf(jpi,jpj,jpk) , bhm(jpi,jpj,jpk) , STAT=ierr ) 
    289289         ! 
    290290         IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'ldf_dyn_init: failed to allocate arrays') 
     
    292292         ahmt(:,:,:) = 0._wp                       ! init to 0 needed  
    293293         ahmf(:,:,:) = 0._wp 
    294          bhmu(:,:,:) = 0._wp                       ! init to 0 needed  
    295          bhmv(:,:,:) = 0._wp 
     294         bhm(:,:,:)  = 0._wp                       ! init to 0 needed  
    296295         !                                        ! value of lap/blp eddy mixing coef. 
    297296         IF(     ln_dynldf_lap ) THEN   ;   zUfac = r1_2 *rn_Uv   ;   inn = 1   ;   cl_Units = ' m2/s'   !   laplacian 
     
    386385               DO jj = 2, jpjm1 
    387386                  DO ji = 2, jpim1 
    388                      bhmu(ji,jj,:) = bhm0 
    389                      bhmv(ji,jj,:) = bhm0 
     387                     bhm(ji,jj,:) = bhm0 
    390388                  ENDDO 
    391389               ENDDO 
    392390 
    393391               !     Surface BC : set to zero 
    394                bhmu(:,:,1)   = 0._wp   ;   bhmv(:,:,1)   = 0._wp 
     392               bhm(:,:,1)   = 0._wp 
    395393               !     Flat bottom BC : set to zero 
    396                bhmu(:,:,jpk) = 0._wp   ;   bhmv(:,:,jpk) = 0._wp 
    397                !     Variable bathymetry case, including z-partial steps, as in dynhpg.F90, subroutine hpg_zps 
    398                !     and exactly mirroring top, bottom BC d/dz(del^2 u) = 0 for BGM calculation in dynldf_lap_blp 
    399                DO jj = 2, jpjm1 
    400                   DO ji = 2, jpim1 
    401                      iku = mbku(ji,jj)+1 
    402                      ikv = mbkv(ji,jj)+1 
    403                      bhmu(:,:,iku) = 0._wp 
    404                      bhmv(:,:,ikv) = 0._wp 
    405                   ENDDO 
    406                ENDDO 
     394               bhm(:,:,jpk) = 0._wp  
     395               !     Variable bathymetry case: diffusive fluxes masked in dyn_ldf_bgm 
    407396 
    408397               !CW Test criterion for two grid-length mode for BGM scheme with leapfrog timestepping 
     
    417406               DO jj = 2, jpjm1 
    418407                  DO ji = 2, jpim1 
    419                      ikt = mbkt(ji,jj) !bottom last wet T-level 
    420                      DO jk = 2, ikt 
     408                     ikw = mbkt(ji,jj) !bottom last wet T-level 
     409                     DO jk = 2, ikw 
    421410                        lhscrit=bhm0*rdt/(e3t_n(ji,jj,jk)**2*e1t(ji,jj)**2) 
    422411                        IF(lhscrit .gt. lhscritmax) lhscritmax=lhscrit 
     
    463452                     DO jj = 2, jpjm1 
    464453                        DO ji = 2, jpim1 
    465                            bhmu(ji,jj,jk) = bhm0 * gdept_1d(jk)/rn_bgmzcrit 
    466                            bhmv(ji,jj,jk) = bhm0 * gdept_1d(jk)/rn_bgmzcrit 
     454                           bhm(ji,jj,jk) = bhm0 * gdepw_1d(jk)/rn_bgmzcrit 
    467455                        ENDDO 
    468456                     ENDDO 
     
    473461                     DO jj = 2, jpjm1 
    474462                        DO ji = 2, jpim1 
    475                            bhmu(ji,jj,jk) = bhm0 
    476                            bhmv(ji,jj,jk) = bhm0 
     463                           bhm(ji,jj,jk) = bhm0 
    477464                        ENDDO 
    478465                     ENDDO 
     
    482469               ENDDO 
    483470 
    484  
    485471               !     Surface BC : set to zero 
    486                bhmu(:,:,1)   = 0._wp   ;   bhmv(:,:,1)   = 0._wp 
     472               bhm(:,:,1)   = 0._wp  
    487473               !     Flat bottom BC : set to zero 
    488                bhmu(:,:,jpk) = 0._wp   ;   bhmv(:,:,jpk) = 0._wp 
    489                !     Variable bathymetry case, including z-partial steps, as in dynhpg.F90, subroutine hpg_zps 
    490                !     and exactly mirroring top, bottom BC d/dz(del^2 u) = 0 for BGM calculation in dynldf_lap_blp 
    491                DO jj = 2, jpjm1 
    492                   DO ji = 2, jpim1 
    493                      iku = mbku(ji,jj)+1 
    494                      ikv = mbkv(ji,jj)+1 
    495                      bhmu(:,:,iku) = 0._wp 
    496                      bhmv(:,:,ikv) = 0._wp 
    497                   ENDDO 
    498                ENDDO 
     474               bhm(:,:,jpk) = 0._wp  
     475               !     Variable bathymetry case: diffusive fluxes masked in dyn_ldf_bgm 
    499476 
    500477               !-------------------------------- 
     
    516493                  DO jj = 2, jpjm1 
    517494                     DO ji = 2, jpim1 
    518                         bhmu(ji,jj,jk) = bhm0*e1u(ji,jj)**2*e3t_n(ji,jj,jk)**2 
    519                         bhmv(ji,jj,jk) = bhm0*e1v(ji,jj)**2*e3t_n(ji,jj,jk)**2 
     495                        bhm(ji,jj,jk) = bhm0*e1t(ji,jj)**2*e3w_n(ji,jj,jk)**2 
    520496                     ENDDO 
    521497                  ENDDO 
    522498               ENDDO 
    523499 
    524  
    525500               !     Surface BC : set to zero 
    526                bhmu(:,:,1)   = 0._wp   ;   bhmv(:,:,1)   = 0._wp 
     501               bhm(:,:,1)   = 0._wp  
    527502               !     Flat bottom BC : set to zero 
    528                bhmu(:,:,jpk) = 0._wp   ;   bhmv(:,:,jpk) = 0._wp 
    529                !     Variable bathymetry case, including z-partial steps, as in dynhpg.F90, subroutine hpg_zps 
    530                !     and exactly mirroring top, bottom BC d/dz(del^2 u) = 0 for BGM calculation in dynldf_lap_blp 
    531                DO jj = 2, jpjm1 
    532                   DO ji = 2, jpim1 
    533                      iku = mbku(ji,jj)+1 
    534                      ikv = mbkv(ji,jj)+1 
    535                      bhmu(:,:,iku) = 0._wp 
    536                      bhmv(:,:,ikv) = 0._wp 
    537                   ENDDO 
    538                ENDDO 
     503               bhm(:,:,jpk) = 0._wp  
     504               !     Variable bathymetry case: diffusive fluxes masked in dyn_ldf_bgm 
    539505 
    540506               !-------------------------------- 
     
    554520               !CW 
    555521            ELSEIF( ln_dynldf_bgm ) THEN                 !bi-Laplacian GM operator (mask only) 
    556                bhmu(:,:,1:jpkm1) =       bhmu(:,:,1:jpkm1)   * umask(:,:,1:jpkm1) 
    557                bhmv(:,:,1:jpkm1) =       bhmv(:,:,1:jpkm1)   * vmask(:,:,1:jpkm1) 
     522               bhm(:,:,1:jpkm1) =       bhm(:,:,1:jpkm1)   * wmask(:,:,1:jpkm1) 
    558523               ! 
    559524            ENDIF 
Note: See TracChangeset for help on using the changeset viewer.