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 162 for trunk/NEMO/OPA_SRC/LDF – NEMO

Changeset 162 for trunk/NEMO/OPA_SRC/LDF


Ignore:
Timestamp:
2004-11-03T15:47:11+01:00 (20 years ago)
Author:
opalod
Message:

CT + CL : BUGFIX108 : Add latitudinal variation of viscosity for the ORCA 4� configuration to damp instabilities

File:
1 edited

Legend:

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

    r147 r162  
    190190      !! * local variables 
    191191      INTEGER ::   ji, jj, jk, jn      ! dummy loop indices 
     192      INTEGER ::   ii0, ii1, ij0, ij1  ! temporary integers 
    192193      INTEGER ::   inum = 11           ! temporary logical unit 
    193194      INTEGER ::   iost, iim, ijm 
     
    196197      INTEGER, DIMENSION(jpi   , jpj   ) ::   icof 
    197198 
    198       REAL(wp) ::   zahmeq, zcoff, zcoft, zmsk 
     199      REAL(wp) ::   & 
     200         zahmeq, zcoff, zcoft, zmsk,   & ! ??? 
     201         zemax, zemin, zeref, zahmm 
     202      REAL(wp), DIMENSION(jpi,jpj) ::   zahm0 
    199203      REAL(wp), DIMENSION(jpk) ::   zcoef 
    200204 
     
    288292      ! symmetric in the south hemisphere) 
    289293       
    290       IF( jp_cfg == 4 )   zahmeq = 5.0 * aht0 
    291       IF( jp_cfg == 2 )   zahmeq =       aht0 
     294      IF( jp_cfg == 4 )   THEN 
     295         zahmeq = 5.0 * aht0 
     296         zahmm  = min( 160000.0, ahm0) 
     297         zemax = MAXVAL ( e1t(:,:) * e2t(:,:), tmask(:,:,1) .GE. 0.5 ) 
     298         zemin = MINVAL ( e1t(:,:) * e2t(:,:), tmask(:,:,1) .GE. 0.5 ) 
     299         zeref = MAXVAL ( e1t(:,:) * e2t(:,:),   & 
     300             &   tmask(:,:,1) .GE. 0.5 .AND. ABS(gphit(:,:)) .GT. 50. ) 
     301  
     302         DO jj = 1, jpj 
     303           DO ji = 1, jpi 
     304              zmsk = e1t(ji,jj) * e2t(ji,jj) 
     305              IF( abs(gphit(ji,jj)) .LE. 15 ) THEN  
     306                 zahm0(ji,jj) = ahm0 
     307              ELSE  
     308                 IF( zmsk .GE. zeref ) THEN  
     309                    zahm0(ji,jj) = ahm0 
     310                 ELSE  
     311                    zahm0(ji,jj) = zahmm + (ahm0-zahmm)*(1.0 -   & 
     312                        &          cos((rpi*0.5*(zmsk-zemin)/(zeref-zemin)))) 
     313                 ENDIF  
     314              ENDIF  
     315           END DO  
     316         END DO  
     317      ENDIF 
     318 
     319      IF( jp_cfg == 2 )   THEN 
     320         zahmeq     = aht0 
     321         zahmm      = ahm0 
     322         zahm0(:,:) = ahm0 
     323      ENDIF 
    292324 
    293325      DO jj = 1, jpj 
    294326         DO ji = 1, jpi 
    295327            IF( ABS(gphif(ji,jj)) >= 20.) THEN 
    296                ahm2(ji,jj,1) =  ahm0 
     328               ahm2(ji,jj,1) =  zahm0(ji,jj) 
    297329            ELSEIF( ABS(gphif(ji,jj)) <= 2.5) THEN 
    298330               ahm2(ji,jj,1) =  zahmeq 
    299331            ELSE 
    300                ahm2(ji,jj,1) = zahmeq    & 
    301                              + (ahm0-zahmeq)/2.*(1.-COS( rad*(ABS(gphif(ji,jj))-2.5)*180./17.5 ) ) 
     332               ahm2(ji,jj,1) = zahmeq + (zahm0(ji,jj)-zahmeq)/2.   & 
     333                  &            *(1.-COS( rad*(ABS(gphif(ji,jj))-2.5)*180./17.5 ) ) 
    302334            ENDIF 
    303335            IF( ABS(gphit(ji,jj)) >= 20.) THEN 
    304                ahm1(ji,jj,1) =  ahm0 
     336               ahm1(ji,jj,1) =  zahm0(ji,jj) 
    305337            ELSEIF( ABS(gphit(ji,jj)) <= 2.5) THEN 
    306338               ahm1(ji,jj,1) =  zahmeq 
    307339            ELSE 
    308                ahm1(ji,jj,1) = zahmeq    & 
    309                              + (ahm0-zahmeq)/2.*(1.-COS( rad*(ABS(gphit(ji,jj))-2.5)*180./17.5 ) ) 
     340               ahm1(ji,jj,1) = zahmeq + (zahm0(ji,jj)-zahmeq)/2.   & 
     341                  &            *(1.-COS( rad*(ABS(gphit(ji,jj))-2.5)*180./17.5 ) ) 
    310342            ENDIF 
    311343         END DO 
     
    317349         DO ji = 1, jpim1 
    318350            zcoft = float( icof(ji,jj) ) / 100. 
    319             ahm1(ji,jj,1) = zcoft * ahm0 + (1.-zcoft) * ahm1(ji,jj,1) 
     351            ahm1(ji,jj,1) = zcoft * zahm0(ji,jj) + (1.-zcoft) * ahm1(ji,jj,1) 
    320352         END DO 
    321353      END DO 
     
    331363                     / (zmsk * 100.) 
    332364            ENDIF 
    333             ahm2(ji,jj,1) = zcoff * ahm0 + (1.-zcoff) * ahm2(ji,jj,1) 
     365            ahm2(ji,jj,1) = zcoff * zahm0(ji,jj) + (1.-zcoff) * ahm2(ji,jj,1) 
    334366         END DO 
    335367      END DO 
     
    350382       
    351383      DO jk = 2, jpk 
    352          ahm1(:,:,jk) = MIN( ahm0, zcoef(jk) * ahm1(:,:,1) ) 
    353          ahm2(:,:,jk) = MIN( ahm0, zcoef(jk) * ahm2(:,:,1) ) 
    354       END DO 
     384         ahm1(:,:,jk) = MIN( zahm0(:,:), zcoef(jk) * ahm1(:,:,1) ) 
     385         ahm2(:,:,jk) = MIN( zahm0(:,:), zcoef(jk) * ahm2(:,:,1) ) 
     386      END DO 
     387 
     388      IF( jp_cfg == 4 )   THEN 
     389         ! Limit AHM in Gibraltar strait 
     390         ij0 = 50   ;   ij1 = 53 
     391         ii0 = 69   ;   ii1 = 71 
     392         DO jk = 1, jpk 
     393            ahm1(mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk) = min( zahmm, ahm1 (mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk) )  
     394            ahm2(mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk) = min( zahmm, ahm2 (mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk) ) 
     395         END DO 
     396      ENDIF 
    355397       
    356398      ! Lateral boundary conditions on ( ahm1, ahm2 ) 
Note: See TracChangeset for help on using the changeset viewer.