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 901 for trunk/NEMO/OPA_SRC/LDF/ldfdyn_c2d.h90 – NEMO

Ignore:
Timestamp:
2008-04-22T21:16:18+02:00 (16 years ago)
Author:
rblod
Message:

Change ldf computation to take into account the grid anisotropy, see ticket #115

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/LDF/ldfdyn_c2d.h90

    r719 r901  
    3636 
    3737      !! * Local variables 
    38       REAL(wp) ::   za00, zdx_max 
     38      INTEGER :: ji, jj 
     39      REAL(wp) ::   za00, zd_max, zetmax, zeumax, zefmax, zevmax 
    3940      !!---------------------------------------------------------------------- 
    4041 
     
    5051         ! (USER: modify ahm1 and ahm2 following your desiderata) 
    5152 
    52          zdx_max = MAXVAL( e1t(:,:) ) 
    53          IF( lk_mpp )   CALL mpp_max( zdx_max )   ! max over the global domain 
     53         zd_max = MAX( MAXVAL( e1t(:,:) ), MAXVAL( e2t(:,:) ) ) 
     54         IF( lk_mpp )   CALL mpp_max( zd_max )   ! max over the global domain 
    5455 
    5556         IF(lwp) WRITE(numout,*) '              laplacian operator: ahm proportional to e1' 
    56          IF(lwp) WRITE(numout,*) '              Caution, here we assume your mesh is isotropic ...' 
    57          IF(lwp) WRITE(numout,*) '              maximum grid-spacing = ', zdx_max, ' maximum value for ahm = ', ahm0 
    58  
    59          za00 = ahm0 / zdx_max 
    60          ahm1(:,:) = za00 * e1t(:,:) 
    61          ahm2(:,:) = za00 * e1f(:,:) 
     57         IF(lwp) WRITE(numout,*) '              maximum grid-spacing = ', zd_max, ' maximum value for ahm = ', ahm0 
     58 
     59         za00 = ahm0 / zd_max 
     60         DO jj = 1, jpj 
     61            DO ji = 1, jpi 
     62               zetmax = MAX( e1t(ji,jj), e2t(ji,jj) ) 
     63               zefmax = MAX( e1f(ji,jj), e2f(ji,jj) ) 
     64               ahm1(ji,jj) = za00 * zetmax 
     65               ahm2(ji,jj) = za00 * zefmax 
     66            END DO 
     67         END DO 
    6268 
    6369         IF( ln_dynldf_iso ) THEN 
     
    9096         !       in the to horizontal direction 
    9197 
    92          zdx_max = MAXVAL( e1u(:,:) ) 
    93          IF( lk_mpp )   CALL mpp_max( zdx_max )   ! max over the global domain 
     98         zd_max = MAX( MAXVAL( e1u(:,:) ), MAXVAL( e2u(:,:) ) ) 
     99         IF( lk_mpp )   CALL mpp_max( zd_max )   ! max over the global domain 
    94100 
    95101         IF(lwp) WRITE(numout,*) '              bi-laplacian operator: ahm proportional to e1**3 ' 
    96          IF(lwp) WRITE(numout,*) '              Caution, here we assume your mesh is isotropic ...' 
    97          IF(lwp) WRITE(numout,*) '              maximum grid-spacing = ', zdx_max, ' maximum value for ahm = ', ahm0 
    98  
    99          za00 = ahm0 / ( zdx_max * zdx_max * zdx_max ) 
    100          ahm3(:,:) = za00 * e1u(:,:) * e1u(:,:) * e1u(:,:) 
    101          ahm4(:,:) = za00 * e1v(:,:) * e1v(:,:) * e1v(:,:) 
     102         IF(lwp) WRITE(numout,*) '              maximum grid-spacing = ', zd_max, ' maximum value for ahm = ', ahm0 
     103 
     104         za00 = ahm0 / ( zd_max * zd_max * zd_max ) 
     105         DO jj = 1, jpj 
     106            DO ji = 1, jpi 
     107               zeumax = MAX( e1u(ji,jj), e2u(ji,jj) ) 
     108               zevmax = MAX( e1v(ji,jj), e2v(ji,jj) ) 
     109               ahm3(ji,jj) = za00 * zeumax * zeumax * zeumax 
     110               ahm4(ji,jj) = za00 * zevmax * zevmax * zevmax 
     111            END DO 
     112         END DO 
    102113 
    103114         ! Control print 
Note: See TracChangeset for help on using the changeset viewer.