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 2528 for trunk/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn_c3d.h90 – NEMO

Ignore:
Timestamp:
2010-12-27T18:33:53+01:00 (13 years ago)
Author:
rblod
Message:

Update NEMOGCM from branch nemo_v3_3_beta

File:
1 edited

Legend:

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

    • Property svn:eol-style deleted
    • Property svn:executable deleted
    r1694 r2528  
    44 
    55   !!---------------------------------------------------------------------- 
    6    !!  OPA 9.0 , LOCEAN-IPSL (2005)  
     6   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    77   !! $Id$  
    8    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
     8   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    99   !!---------------------------------------------------------------------- 
    1010 
     
    2626      !!       ??? explanation of the default is missing 
    2727      !!---------------------------------------------------------------------- 
    28       !! * Modules used 
    2928      USE ldftra_oce, ONLY : aht0 
    30  
    31       !! * Arguments 
     29      !! 
    3230      LOGICAL, INTENT (in) :: ld_print   ! If true, output arrays on numout 
    33  
    34       !! * local variables 
     31      !! 
    3532      INTEGER  ::   ji, jj, jk      ! dummy loop indices 
    3633      REAL(wp) ::   & 
     
    8683 
    8784 
    88          ! Special case for ORCA R2 and R4 configurations (overwrite the value of ahm1 ahm2) 
     85         ! Special case for ORCA R1, R2 and R4 configurations (overwrite the value of ahm1 ahm2) 
    8986         ! ============================================== 
    90          IF( cp_cfg == "orca" .AND. ( jp_cfg == 2 .OR. jp_cfg == 4 ) ) THEN 
     87         IF( cp_cfg == "orca" .AND. ( jp_cfg == 1 .OR. jp_cfg == 2 .OR. jp_cfg == 4 ) ) THEN  
    9188            IF(lwp) WRITE(numout,*) 
    92             IF(lwp) WRITE(numout,*) '              ORCA R2 or R4: overwrite the previous definition of ahm' 
    93             IF(lwp) WRITE(numout,*) '              =============' 
     89            IF(lwp) WRITE(numout,*) '              ORCA R1, R2 or R4: overwrite the previous definition of ahm' 
     90            IF(lwp) WRITE(numout,*) '              =================' 
    9491            CALL ldf_dyn_c3d_orca( ld_print ) 
    9592         ENDIF 
     
    122119         IF(lwp) WRITE(numout,*) '              maximum grid-spacing = ', zd_max, ' maximum value for ahm = ', ahm0 
    123120 
    124          za00 = ahm0 / ( zd_max * zd_max * zd_max ) 
     121         za00 = ahm0_blp / ( zd_max * zd_max * zd_max ) 
    125122         DO jj = 1, jpj 
    126123            DO ji = 1, jpi 
     
    148145            END DO 
    149146         ELSE                            ! partial steps or s-ccordinate 
    150 # if defined key_zco 
    151             zc = gdept_0(jpkm1) 
    152 # else 
    153147            zc = MAXVAL( fsdept(:,:,jpkm1) ) 
    154 # endif 
    155148            IF( lk_mpp )   CALL mpp_max( zc )   ! max over the global domain 
    156149 
     
    196189      !!                  ***  ROUTINE ldf_dyn_c3d  *** 
    197190      !!                    
    198       !! ** Purpose :   ORCA R2 an R4 only 
     191      !! ** Purpose :   ORCA R1, R2 and R4 only 
    199192      !! 
    200193      !! ** Method  :   blah blah blah .... 
    201194      !!---------------------------------------------------------------------- 
    202       !! * Modules used 
    203195      USE ldftra_oce, ONLY : aht0 
    204  
    205       !! * Arguments 
     196      !! 
    206197      LOGICAL, INTENT (in) :: ld_print   ! If true, output arrays on numout 
    207  
    208       !! * local variables 
     198      !! 
    209199      INTEGER ::   ji, jj, jk, jn      ! dummy loop indices 
    210200      INTEGER ::   ii0, ii1, ij0, ij1  ! temporary integers 
     
    228218      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~~' 
    229219      IF(lwp) WRITE(numout,*) 
    230       IF(lwp) WRITE(numout,*) '        orca R2 or R4 ocean model' 
     220      IF(lwp) WRITE(numout,*) '        orca R1, R2 or R4 ocean model' 
    231221      IF(lwp) WRITE(numout,*) '  reduced in the surface Eq. strip ' 
    232222      IF(lwp) WRITE(numout,*) 
     
    318308      ENDIF 
    319309 
     310      IF( jp_cfg == 1 )   THEN 
     311         zahmeq     = aht0  ! reduced to aht0 on equator; set to ahm0 if no tropical reduction is required 
     312         zahmm      = ahm0 
     313         zahm0(:,:) = ahm0 
     314      ENDIF 
     315 
    320316      DO jj = 1, jpj 
    321317         DO ji = 1, jpi 
     
    363359 
    364360      ! other level: re-increase the coef in the deep ocean 
    365        
    366 #if defined key_orca_lev10 
    367       DO jk = 1, 210 
    368          zcoef(jk) = 1. 
    369       END DO 
    370       DO jk= 211, 230 
    371          zcoef(jk) = 1. + 0.1 * FLOAT(jk-210) 
    372       END DO 
    373       DO jk= 231, 260 
    374          zcoef(jk) = 3. + 0.2 * FLOAT(jk-230) 
    375       END DO 
    376       DO jk= 261, 270 
    377          zcoef(jk) = 9. + 0.1 * FLOAT(jk-260) 
    378       END DO 
    379       DO jk= 271, jpk 
    380          zcoef(jk) = 10. 
    381       END DO 
    382       DO jk= 1, jpk 
    383          IF(lwp) WRITE(numout,*) 'k= ',jk, 'cof ', zcoef(jk) 
    384       END DO 
    385 #else 
    386        DO jk = 1, 21 
    387          zcoef(jk) = 1. 
    388       END DO 
    389       zcoef(22) = 2. 
    390       zcoef(23) = 3. 
    391       zcoef(24) = 5. 
    392       zcoef(25) = 7. 
    393       zcoef(26) = 9. 
    394       DO jk = 27, jpk 
    395          zcoef(jk) = 10. 
    396       END DO 
    397 #endif 
     361      !================================================================== 
     362      ! Prior to v3.3, zcoeff was hardwired according to k-index jk. 
     363      ! 
     364      ! From v3.3 onwards this has been generalised to a function of  
     365      ! depth so that it can be used with any number of levels. 
     366      ! 
     367      ! The function has been chosen to match the original values (shown 
     368      ! in the following comments) when using the standard 31 ORCA levels.   
     369      !     DO jk = 1, 21 
     370      !        zcoef(jk) = 1._wp 
     371      !     END DO 
     372      !     zcoef(22) = 2._wp 
     373      !     zcoef(23) = 3._wp 
     374      !     zcoef(24) = 5._wp 
     375      !     zcoef(25) = 7._wp 
     376      !     zcoef(26) = 9._wp 
     377      !     DO jk = 27, jpk 
     378      !        zcoef(jk) = 10._wp 
     379      !     END DO 
     380      !================================================================== 
     381 
     382       IF(lwp) THEN 
     383          WRITE(numout,*) 
     384          WRITE(numout,*) '         1D zcoef array ' 
     385          WRITE(numout,*) '         ~~~~~~~~~~~~~~ ' 
     386          WRITE(numout,*) 
     387          WRITE(numout,*) '    jk        zcoef ' 
     388       ENDIF 
     389 
     390      DO jk=1, jpk 
     391         zcoef(jk) = 1.0_wp + NINT(9.0_wp*(gdept_0(jk)-800.0_wp)/(3000.0_wp-800.0_wp)) 
     392         zcoef(jk) = MIN(10.0_wp, MAX(1.0_wp, zcoef(jk))) 
     393         IF(lwp) WRITE(numout,'(4x,i3,6x,f7.3)') jk,zcoef(jk) 
     394      END DO 
    398395 
    399396      DO jk = 2, jpk 
     
    402399      END DO 
    403400 
    404       IF( jp_cfg == 4 )   THEN 
    405          ! Limit AHM in Gibraltar strait 
     401      IF( jp_cfg == 4 )   THEN         ! Limit AHM in Gibraltar strait 
    406402         ij0 = 50   ;   ij1 = 53 
    407403         ii0 = 69   ;   ii1 = 71 
    408404         DO jk = 1, jpk 
    409             ahm1(mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk) = min( zahmm, ahm1 (mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk) )  
    410             ahm2(mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk) = min( zahmm, ahm2 (mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk) ) 
    411          END DO 
    412       ENDIF 
    413        
    414       ! Lateral boundary conditions on ( ahm1, ahm2 ) 
    415       !                                ============== 
    416       CALL lbc_lnk( ahm1, 'T', 1. )   ! T-point, unchanged sign 
    417       CALL lbc_lnk( ahm2, 'F', 1. )   ! F-point, unchanged sign 
    418  
    419       ! Control print 
    420  
    421       IF(lwp) THEN 
     405            ahm1(mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),jk) = MIN( zahmm, ahm1(mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),jk) )  
     406            ahm2(mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),jk) = MIN( zahmm, ahm2(mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),jk) ) 
     407         END DO 
     408      ENDIF 
     409      CALL lbc_lnk( ahm1, 'T', 1. )   ! Lateral boundary conditions (unchanged sign) 
     410      CALL lbc_lnk( ahm2, 'F', 1. ) 
     411 
     412 
     413      IF(lwp) THEN                    ! Control print 
    422414         WRITE(numout,*) 
    423415         WRITE(numout,*) '         3D ahm1 array (k=1)' 
     
    451443      ahm4 ( :, 1, :) = ahm4 ( :, 2, :) 
    452444       
    453       ! Lateral boundary conditions on ( ahm3, ahm4 ) 
    454       !                                ============== 
    455       CALL lbc_lnk( ahm3, 'U', 1. )   ! U-point, unchanged sign 
    456       CALL lbc_lnk( ahm4, 'V', 1. )   ! V-point, unchanged sign 
     445      CALL lbc_lnk( ahm3, 'U', 1. )    ! Lateral boundary conditions (unchanged sign) 
     446      CALL lbc_lnk( ahm4, 'V', 1. ) 
    457447 
    458448      ! Control print 
Note: See TracChangeset for help on using the changeset viewer.