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 2380 for branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn_c2d.h90 – NEMO

Ignore:
Timestamp:
2010-11-12T20:31:16+01:00 (13 years ago)
Author:
acc
Message:

nemo_v3_3beta. ORCA_R1 settings (step 2, see ticket #758). Introduces key_orca_r1 (46 level default, 75 level if key_orca_r1=75)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn_c2d.h90

    r2287 r2380  
    7474         ENDIF 
    7575 
    76          ! Special case for ORCA R2 and R4 configurations (overwrite the value of ahm1 ahm2) 
     76         ! Special case for ORCA R1, R2 and R4 configurations (overwrite the value of ahm1 ahm2) 
    7777         ! ============================================== 
    7878         IF( cp_cfg == "orca" .AND. ( jp_cfg == 2 .OR. jp_cfg == 4 ) )   CALL ldf_dyn_c2d_orca( ld_print ) 
     79         IF( cp_cfg == "orca" .AND.   jp_cfg == 1)                       CALL ldf_dyn_c2d_orca_R1( ld_print ) 
    7980 
    8081         ! Control print 
     
    288289 
    289290   END SUBROUTINE ldf_dyn_c2d_orca 
     291 
     292   SUBROUTINE ldf_dyn_c2d_orca_R1( ld_print ) 
     293      !!---------------------------------------------------------------------- 
     294      !!                 ***  ROUTINE ldf_dyn_c2d  *** 
     295      !! 
     296      !!                   **** W A R N I N G **** 
     297      !! 
     298      !!                ORCA R1 configuration 
     299      !!                   
     300      !!                   **** W A R N I N G **** 
     301      !!                   
     302      !! ** Purpose :   initializations of the lateral viscosity for orca R1 
     303      !! 
     304      !! ** Method  :   blah blah blah... 
     305      !! 
     306      !!---------------------------------------------------------------------- 
     307      !! * Modules used 
     308      USE ldftra_oce, ONLY : aht0 
     309 
     310      !! * Arguments 
     311      LOGICAL, INTENT (in) ::   ld_print   ! If true, output arrays on numout 
     312 
     313      !! * Local variables 
     314      INTEGER ::   ji, jj, jn      ! dummy loop indices 
     315      INTEGER ::   inum            ! temporary logical unit 
     316      INTEGER ::   iim, ijm 
     317      INTEGER ::   ifreq, il1, il2, ij, ii 
     318      INTEGER, DIMENSION(jpidta,jpidta) ::   idata 
     319      INTEGER, DIMENSION(jpi   ,jpj   ) ::   icof 
     320 
     321      REAL(wp) ::   zahmeq, zcoft, zcoff, zmsk, zam20s 
     322 
     323      CHARACTER (len=15) ::   clexp 
     324      !!---------------------------------------------------------------------- 
     325 
     326      IF(lwp) WRITE(numout,*) 
     327      IF(lwp) WRITE(numout,*) 'inildf: 2d eddy viscosity coefficient' 
     328      IF(lwp) WRITE(numout,*) '~~~~~~  --' 
     329      IF(lwp) WRITE(numout,*) 
     330      IF(lwp) WRITE(numout,*) '        orca_r1 ocean model' 
     331      IF(lwp) WRITE(numout,*) 
     332 
     333#if defined key_antarctic 
     334#     include "ldfdyn_antarctic.h90" 
     335#elif defined key_arctic 
     336#     include "ldfdyn_arctic.h90" 
     337#else 
     338      ! Read 2d integer array to specify western boundary increase in the 
     339      ! ===================== equatorial strip (20N-20S) defined at t-points 
     340 
     341      CALL ctl_opn( inum, 'ahmcoef', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL',   & 
     342         &           1, numout, lwp ) 
     343      REWIND inum 
     344      READ(inum,9101) clexp, iim, ijm 
     345      READ(inum,'(/)') 
     346      ifreq = 40 
     347      il1 = 1 
     348      DO jn = 1, jpidta/ifreq+1 
     349         READ(inum,'(/)') 
     350         il2 = MIN( jpidta, il1+ifreq-1 ) 
     351         READ(inum,9201) ( ii, ji = il1, il2, 5 ) 
     352         READ(inum,'(/)') 
     353         DO jj = jpjdta, 1, -1 
     354            READ(inum,9202) ij, ( idata(ji,jj), ji = il1, il2 ) 
     355         END DO 
     356         il1 = il1 + ifreq 
     357      END DO 
     358       
     359      DO jj = 1, nlcj 
     360         DO ji = 1, nlci 
     361            icof(ji,jj) = idata( mig(ji), mjg(jj) ) 
     362         END DO 
     363      END DO 
     364      DO jj = nlcj+1, jpj 
     365         DO ji = 1, nlci 
     366            icof(ji,jj) = icof(ji,nlcj) 
     367         END DO 
     368      END DO 
     369      DO jj = 1, jpj 
     370         DO ji = nlci+1, jpi 
     371            icof(ji,jj) = icof(nlci,jj) 
     372         END DO 
     373      END DO 
     374 
     375 9101 FORMAT(1x,a15,2i8) 
     376 9201 FORMAT(3x,13(i3,12x)) 
     377 9202 FORMAT(i3,41i3) 
     378 
     379 
     380      ! Set ahm1 and ahm2  ( T- and F- points) (used for laplacian operator) 
     381      ! ================= 
     382      ! define ahm1 and ahm2 at the right grid point position 
     383      ! (USER: modify ahm1 and ahm2 following your desiderata) 
     384       
     385       
     386      ! Decrease ahm to zahmeq m2/s in the tropics 
     387      ! (from 90   to 20   degrees: ahm = scaled by local metrics 
     388      !  from 20   to  2.5 degrees: ahm = decrease in (1-cos)/2 
     389      !  from  2.5 to  0   degrees: ahm = constant 
     390      ! symmetric in the south hemisphere) 
     391 
     392      zahmeq = aht0 
     393      zam20s = ahm0*COS( rad * 20. ) 
     394       
     395      DO jj = 1, jpj 
     396         DO ji = 1, jpi 
     397            IF( ABS( gphif(ji,jj) ) >= 20. ) THEN 
     398!              leave as set in ldf_dyn_c2d 
     399            ELSEIF( ABS( gphif(ji,jj) ) <= 2.5 ) THEN 
     400               ahm2(ji,jj) =  zahmeq 
     401            ELSE 
     402               ahm2(ji,jj) =  zahmeq + (zam20s-zahmeq)/2.   & 
     403                  * ( 1. - COS( rad * ( ABS(gphif(ji,jj))-2.5 ) * 180. / 17.5 ) ) 
     404            ENDIF 
     405            IF( ABS( gphit(ji,jj) ) >= 20. ) THEN 
     406!             leave as set in ldf_dyn_c2d 
     407            ELSEIF( ABS( gphit(ji,jj) ) <= 2.5 ) THEN 
     408               ahm1(ji,jj) =  zahmeq 
     409            ELSE 
     410               ahm1(ji,jj) =  zahmeq + (zam20s-zahmeq)/2.   & 
     411                  * ( 1. - COS( rad * ( ABS(gphit(ji,jj))-2.5 ) * 180. / 17.5 ) ) 
     412            ENDIF 
     413         END DO 
     414      END DO 
     415 
     416      ! increase along western boundaries of equatorial strip 
     417      ! t-point 
     418      DO jj = 1, jpjm1 
     419         DO ji = 1, jpim1 
     420          IF( ABS( gphit(ji,jj) ) < 20. ) THEN 
     421            zcoft = FLOAT( icof(ji,jj) ) / 100. 
     422            ahm1(ji,jj) = zcoft * ahm0 + (1.-zcoft) * ahm1(ji,jj)  
     423          ENDIF 
     424         END DO 
     425      END DO 
     426      ! f-point 
     427      icof(:,:) = icof(:,:) * tmask(:,:,1) 
     428      DO jj = 1, jpjm1 
     429         DO ji = 1, jpim1 
     430          IF( ABS( gphif(ji,jj) ) < 20. ) THEN 
     431            zmsk = tmask(ji,jj+1,1) + tmask(ji+1,jj+1,1) + tmask(ji,jj,1) + tmask(ji,jj+1,1) 
     432            IF( zmsk == 0. ) THEN 
     433               zcoff = 1. 
     434            ELSE 
     435               zcoff = FLOAT( icof(ji,jj+1) + icof(ji+1,jj+1) + icof(ji,jj) + icof(ji,jj+1) )   & 
     436                     / (zmsk * 100.) 
     437            ENDIF 
     438            ahm2(ji,jj) = zcoff * ahm0 + (1.-zcoff) * ahm2(ji,jj) 
     439          ENDIF 
     440         END DO 
     441      END DO 
     442#endif 
     443       
     444      ! Lateral boundary conditions on ( ahm1, ahm2 ) 
     445      !                                ============== 
     446      CALL lbc_lnk( ahm1, 'T', 1. )   ! T-point, unchanged sign 
     447      CALL lbc_lnk( ahm2, 'F', 1. )   ! F-point, unchanged sign 
     448 
     449      ! Control print 
     450      IF( lwp .AND. ld_print ) THEN 
     451         WRITE(numout,*) 
     452         WRITE(numout,*) 'inildf: 2D ahm1 array' 
     453         CALL prihre(ahm1,jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
     454         WRITE(numout,*) 
     455         WRITE(numout,*) 'inildf: 2D ahm2 array' 
     456         CALL prihre(ahm2,jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
     457      ENDIF 
     458 
     459   END SUBROUTINE ldf_dyn_c2d_orca_R1 
Note: See TracChangeset for help on using the changeset viewer.