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 13005 for NEMO/branches/2020/dev_r12527_Gurvan_ShallowWater/src/SWE/ldfdyn.F90 – NEMO

Ignore:
Timestamp:
2020-06-02T17:46:26+02:00 (4 years ago)
Author:
gm
Message:

ADE and more options to AM98 config

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r12527_Gurvan_ShallowWater/src/SWE/ldfdyn.F90

    r12822 r13005  
    2525   USE lib_mpp         ! distribued memory computing library 
    2626   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    27  
     27   ! 
     28   USE usrdef_nam , ONLY : ln_dynldf_lap_PM 
     29   ! 
    2830   IMPLICIT NONE 
    2931   PRIVATE 
     
    6062   INTEGER           , PUBLIC ::   nldf_dyn         !: type of lateral diffusion used defined from ln_dynldf_... (namlist logicals) 
    6163   LOGICAL           , PUBLIC ::   l_ldfdyn_time    !: flag for time variation of the lateral eddy viscosity coef. 
    62  
     64!!an 
     65   !LOGICAL           , PUBLIC ::   ll_dynldf_lap_PM !: flag for P.Marchand modification on viscosity 
     66!!an 
    6367   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ahmt, ahmf   !: eddy viscosity coef. at T- and F-points [m2/s or m4/s] 
    6468   REAL(wp),         ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   dtensq       !: horizontal tension squared         (Smagorinsky only) 
     
    323327         IF( .NOT.l_ldfdyn_time ) THEN             !* No time variation  
    324328            IF(     ln_dynldf_lap ) THEN                 !   laplacian operator (mask only) 
    325                ahmt(:,:,1:jpkm1) =       ahmt(:,:,1:jpkm1)   * tmask(:,:,1:jpkm1) 
    326                WRITE(numout,*) ' ahmt tmask ' 
     329!!an          ! 
     330            WRITE(numout,*) '   ln_dynldf_lap_PM = ',ln_dynldf_lap_PM  
     331               IF(     ln_dynldf_lap_PM ) THEN                 !   laplacian operator (mask only) 
    327332!! mask tension at the coast (equivalent of ghostpoints at T) 
    328 !              DO jk = 1, jpk 
    329 !                 DO jj = 1, jpjm1 
    330 !                    DO ji = 1, jpim1      ! NO vector opt. 
    331 !                       ! si sum(fmask)==3 = mouillé (on touche pas) 
    332 !                       ! si sum = 2 alors on met a 0 zsum = fmask + fmask + fmask,.. et si zsum < 2 -> 0 sinon = 1 
    333 !                       zsum =   fmask(ji,jj  ,jk) + fmask(ji+1,jj  ,jk)   & 
    334 !                          &   + fmask(ji,jj+1,jk) + fmask(ji+1,jj+1,jk) 
    335 !                       IF ( zsum < 2._wp )   ahmt(ji,jj,jk) = 0 
    336 !                       ! 
    337 !                       !ahmt(ji,jj,jk) = ahmt(ji,jj,jk) * fmask(ji,jj  ,jk) * fmask(ji+1,jj  ,jk)   & 
    338 !                       !   &                            * fmask(ji,jj+1,jk) * fmask(ji+1,jj+1,jk) 
    339 !                    END DO 
    340 !                 END DO 
    341 !              END DO 
    342 !              ahmt(jpi,:,1:jpkm1) =  0._wp 
    343 !              ahmt(:,jpj,1:jpkm1) =  0._wp 
    344 !              WRITE(numout,*) '   an45 ahmt x0' 
    345  
    346                ahmf(:,:,1:jpkm1) =       ahmf(:,:,1:jpkm1)   * fmask(:,:,1:jpkm1) 
    347                WRITE(numout,*) ' ahmf fmask ' 
    348 !!an apply no slip at the coast (ssfmask = 1 within the domain and at the coast contrary to fmask in free slip) 
    349 !               DO jk = 1, jpkm1 
    350 !                  ahmf(:,:,jk) =    ahmf(:,:,jk) * ( 2._wp * ssfmask(:,:) - fmask(:,:,jk) ) 
    351 !               END DO 
    352 !               WRITE(numout,*) '   an45 ahmf x2' 
    353  
     333                  DO jk = 1, jpk 
     334                     DO jj = 1, jpjm1 
     335                        DO ji = 1, jpim1      ! NO vector opt. 
     336                           ! si sum(fmask)==3 = mouillé (on touche pas) 
     337                           ! si sum = 2 alors on met a 0 zsum = fmask + fmask + fmask,.. et si zsum < 2 -> 0 sinon = 1 
     338                           zsum =   fmask(ji,jj  ,jk) + fmask(ji+1,jj  ,jk)   & 
     339                              &   + fmask(ji,jj+1,jk) + fmask(ji+1,jj+1,jk) 
     340                           IF ( zsum < 2._wp )   ahmt(ji,jj,jk) = 0 
     341                           ! 
     342                           !ahmt(ji,jj,jk) = ahmt(ji,jj,jk) * fmask(ji,jj  ,jk) * fmask(ji+1,jj  ,jk)   & 
     343                           !   &                            * fmask(ji,jj+1,jk) * fmask(ji+1,jj+1,jk) 
     344                        END DO 
     345                     END DO 
     346                  END DO 
     347                  ahmt(jpi,:,1:jpkm1) =  0._wp 
     348                  ahmt(:,jpj,1:jpkm1) =  0._wp 
     349                  WRITE(numout,*) '  ahmt x0' 
     350!! apply no slip at the coast (ssfmask = 1 within the domain and at the coast contrary to fmask in free slip) 
     351                   DO jk = 1, jpkm1 
     352                      ahmf(:,:,jk) =    ahmf(:,:,jk) * ( 2._wp * ssfmask(:,:) - fmask(:,:,jk) ) 
     353                   END DO 
     354                   WRITE(numout,*) '  ahmf x2' 
     355               ELSE 
     356               ! classic boundary condition on the viscosity coefficient 
     357                  ahmt(:,:,1:jpkm1) =       ahmt(:,:,1:jpkm1)   * tmask(:,:,1:jpkm1) 
     358                  WRITE(numout,*) ' ahmt tmasked ' 
     359                  ahmf(:,:,1:jpkm1) =       ahmf(:,:,1:jpkm1)   * fmask(:,:,1:jpkm1) 
     360                  WRITE(numout,*) ' ahmf fmasked ' 
     361               ENDIF 
     362!!an         !                  
    354363            ELSEIF( ln_dynldf_blp ) THEN                 ! bilaplacian operator (square root + mask) 
    355364               ahmt(:,:,1:jpkm1) = SQRT( ahmt(:,:,1:jpkm1) ) * tmask(:,:,1:jpkm1) 
Note: See TracChangeset for help on using the changeset viewer.