Changeset 2379


Ignore:
Timestamp:
2010-11-12T15:51:18+01:00 (10 years ago)
Author:
acc
Message:

nemo_v3_3beta. First stage of adding ORCA1 support. See ticket #758. Added optional double tanh function for vertical grid

Location:
branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90

    r2287 r2379  
    160160      REAL(wp) ::   zacr, zdzmin, zhmax    ! par_CONFIG_Rxx.h90 
    161161      REAL(wp) ::   zrefdep                ! depth of the reference level (~10m) 
     162      REAL(wp) ::   za2, zkth2, zacr2      ! Values for optional double tanh function set from parameters  
    162163      !!---------------------------------------------------------------------- 
    163164 
     
    166167       zkth = ppkth       ;   zacr = ppacr 
    167168       zdzmin = ppdzmin   ;   zhmax = pphmax 
     169       zkth2 = ppkth2     ;   zacr2 = ppacr2   ! optional (ldbletanh=T) double tanh parameters 
    168170 
    169171      ! If ppa1 and ppa0 and ppsur are et to pp_to_be_computed 
     
    181183      ELSE 
    182184         za1 = ppa1 ;       za0 = ppa0 ;          zsur = ppsur 
     185         za2 = ppa2                            ! optional (ldbletanh=T) double tanh parameter 
    183186      ENDIF 
    184187 
     
    203206            WRITE(numout,*) '                 zkth = ', zkth 
    204207            WRITE(numout,*) '                 zacr = ', zacr 
     208            IF( ldbletanh ) THEN 
     209               WRITE(numout,*) ' (Double tanh    za2  = ', za2 
     210               WRITE(numout,*) '  parameters)    zkth2= ', zkth2 
     211               WRITE(numout,*) '                 zacr2= ', zacr2 
     212            ENDIF 
    205213         ENDIF 
    206214      ENDIF 
     
    220228         END DO 
    221229      ELSE                                ! Madec & Imbard 1996 function 
    222          DO jk = 1, jpk 
    223             zw = FLOAT( jk ) 
    224             zt = FLOAT( jk ) + 0.5 
    225             gdepw_0(jk) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth) / zacr ) )  ) 
    226             gdept_0(jk) = ( zsur + za0 * zt + za1 * zacr * LOG ( COSH( (zt-zkth) / zacr ) )  ) 
    227             e3w_0  (jk) =          za0      + za1        * TANH(       (zw-zkth) / zacr   ) 
    228             e3t_0  (jk) =          za0      + za1        * TANH(       (zt-zkth) / zacr   ) 
    229          END DO 
     230         IF( .NOT. ldbletanh ) THEN 
     231            DO jk = 1, jpk 
     232               zw = FLOAT( jk ) 
     233               zt = FLOAT( jk ) + 0.5 
     234               gdepw_0(jk) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth) / zacr ) )  ) 
     235               gdept_0(jk) = ( zsur + za0 * zt + za1 * zacr * LOG ( COSH( (zt-zkth) / zacr ) )  ) 
     236               e3w_0  (jk) =          za0      + za1        * TANH(       (zw-zkth) / zacr   ) 
     237               e3t_0  (jk) =          za0      + za1        * TANH(       (zt-zkth) / zacr   ) 
     238            END DO 
     239         ELSE 
     240            DO jk = 1, jpk 
     241               zw = FLOAT( jk ) 
     242               zt = FLOAT( jk ) + 0.5 
     243               ! Double tanh function 
     244               gdepw_0(jk) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth) / zacr ) )    & 
     245     &                                         + za2 * zacr2* LOG ( COSH( (zw-zkth2)/zacr2 ) )  ) 
     246               gdept_0(jk) = ( zsur + za0 * zt + za1 * zacr * LOG ( COSH( (zt-zkth) / zacr ) )    & 
     247     &                                         + za2 * zacr2* LOG ( COSH( (zt-zkth2)/zacr2 ) )  ) 
     248               e3w_0  (jk) =          za0      + za1        * TANH(       (zw-zkth) / zacr   )    & 
     249     &                                         + za2        * TANH(       (zw-zkth2)/zacr2   ) 
     250               e3t_0  (jk) =          za0      + za1        * TANH(       (zt-zkth) / zacr   )    & 
     251     &                                         + za2        * TANH(       (zt-zkth2)/zacr2   ) 
     252            END DO 
     253         ENDIF 
    230254         gdepw_0(1) = 0.e0                     ! force first w-level to be exactly at zero 
    231255      ENDIF 
    232256 
    233257!!gm BUG in s-coordinate this does not work! 
    234       ! deepest/shallowest W level Above/Bellow ~10m 
     258      ! deepest/shallowest W level Above/Below ~10m 
    235259      zrefdep = 10. - ( 0.1*MINVAL(e3w_0) )                          ! ref. depth with tolerance (10% of minimum layer thickness) 
    236       nlb10 = MINLOC( gdepw_0, mask = gdepw_0 > zrefdep, dim = 1 )   ! shallowest W level Bellow ~10m 
    237       nla10 = nlb10 - 1                                              ! deepest    W level Above  ~10m 
     260      nlb10 = MINLOC( gdepw_0, mask = gdepw_0 > zrefdep, dim = 1 )   ! shallowest W level Below ~10m 
     261      nla10 = nlb10 - 1                                              ! deepest    W level Above ~10m 
    238262!!gm end bug 
    239263 
     
    746770      INTEGER  ::   ji, jj, jk       ! dummy loop indices 
    747771      INTEGER  ::   ik, it           ! temporary integers 
     772      INTEGER  ::   nlbelow          ! temporary integer 
    748773      LOGICAL  ::   ll_print         ! Allow  control print for debugging 
    749774      REAL(wp) ::   ze3tp , ze3wp    ! Last ocean level thickness at T- and W-points 
     
    751776      REAL(wp) ::   zmax, zmin       ! Maximum and minimum depth 
    752777      REAL(wp) ::   zdiff            ! temporary scalar 
     778      REAL(wp) ::   zrefdep          ! temporary scalar 
    753779      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zprt   ! 3D workspace 
    754780      !!--------------------------------------------------------------------- 
     
    772798      ! =================== 
    773799      zmax = gdepw_0(jpk) + e3t_0(jpk)     ! maximum depth (i.e. the last ocean level thickness <= 2*e3t_0(jpkm1) ) 
    774       zmin = gdepw_0(4)                    ! minimum depth = 3 levels 
     800 
     801      zrefdep = 25. 
     802      nlbelow = MINLOC( gdepw_0, mask = gdepw_0 > zrefdep, dim = 1 )   ! shallowest W level Below zrefdep 
     803      IF(lwp) write(numout,*) 'Minimum depth level selected: ', nlbelow 
     804      zmin = gdepw_0(nlbelow)              ! minimum depth = nlbelow-1 levels 
    775805 
    776806      mbathy(:,:) = jpkm1                  ! initialize mbathy to the maximum ocean level available 
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/par_EEL_R2.h90

    r2287 r2379  
    9494      &     ppdzmin = pp_not_used           ,  &  !: (meters) vertical thickness of the top layer 
    9595      &     pphmax  = pp_not_used                 !: (meters) Maximum depth of the ocean gdepw(jpk) 
     96   LOGICAL,  PARAMETER ::        & 
     97      &     ldbletanh = .FALSE.                   !: Use/do not use double tanf function for vertical coordinates 
     98   REAL(wp), PARAMETER ::        & 
     99      &     ppa2    = pp_not_used           ,  &  !: Double tanh function parameters 
     100      &     ppkth2  = pp_not_used           ,  &  !: 
     101      &     ppacr2  = pp_not_used                 !: 
    96102   !!--------------------------------------------------------------------- 
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/par_EEL_R5.h90

    r2287 r2379  
    9494      &     ppdzmin = pp_not_used           ,  &  !: (meters) vertical thickness of the top layer 
    9595      &     pphmax  = pp_not_used                 !: (meters) Maximum depth of the ocean gdepw(jpk) 
     96   LOGICAL,  PARAMETER ::        & 
     97      &     ldbletanh = .FALSE.                   !: Use/do not use double tanf function for vertical coordinates 
     98   REAL(wp), PARAMETER ::        & 
     99      &     ppa2    = pp_not_used           ,  &  !: Double tanh function parameters 
     100      &     ppkth2  = pp_not_used           ,  &  !: 
     101      &     ppacr2  = pp_not_used                 !: 
    96102   !!--------------------------------------------------------------------- 
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/par_EEL_R6.h90

    r2287 r2379  
    9494      &     ppdzmin = pp_not_used           ,  &  !: (meters) vertical thickness of the top layer 
    9595      &     pphmax  = pp_not_used                 !: (meters) Maximum depth of the ocean gdepw(jpk) 
     96   LOGICAL,  PARAMETER ::        & 
     97      &     ldbletanh = .FALSE.                   !: Use/do not use double tanf function for vertical coordinates 
     98   REAL(wp), PARAMETER ::        & 
     99      &     ppa2    = pp_not_used           ,  &  !: Double tanh function parameters 
     100      &     ppkth2  = pp_not_used           ,  &  !: 
     101      &     ppacr2  = pp_not_used                 !: 
    96102   !!--------------------------------------------------------------------- 
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/par_GYRE.h90

    r2287 r2379  
    9898      &     pphmax  = pp_not_used         !: (meters): maximum depth of the ocean 
    9999      !                             !            depth of the last "w" level 
     100   LOGICAL,  PARAMETER ::        & 
     101      &     ldbletanh = .FALSE.                   !: Use/do not use double tanf function for vertical coordinates 
     102   REAL(wp), PARAMETER ::        & 
     103      &     ppa2    = pp_not_used           ,  &  !: Double tanh function parameters 
     104      &     ppkth2  = pp_not_used           ,  &  !: 
     105      &     ppacr2  = pp_not_used                 !: 
    100106 
    101107   !!--------------------------------------------------------------------- 
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/par_ORCA_R025.h90

    r2287 r2379  
    2424      jpidta  = 1442,        &  !: first horizontal dimension > or = to jpi 
    2525      jpjdta  = 1021,        &  !: second                     > or = to jpj 
     26#if key_orca_r025==75 
     27      jpkdta  = 75 ,         &  !: number of levels           > or = to jpk 
     28#else 
    2629      jpkdta  = 46 ,         &  !: number of levels           > or = to jpk 
     30#endif 
    2731      ! total domain matrix size 
    2832      jpiglo  = jpidta,      &  !: first  dimension of global domain --> i 
     
    6872   !!  Coefficients associated with the vertical coordinate system 
    6973 
     74#if key_orca_r025==75 
    7075   REAL(wp), PARAMETER  ::       & 
    71       &     ppsur = pp_to_be_computed ,  &  !: Computed in domzgr, set ppdzmin and pphmax below 
    72       &     ppa0  = pp_to_be_computed ,  &  !:    "           " 
    73       &     ppa1  = pp_to_be_computed ,  &  !:    "           " 
    74       ! 
    75       &     ppkth =  23.563_wp        ,  &  !: (non dimensional): gives the approximate 
    76       !                                     !: layer number above which  stretching will 
    77       !                                     !: be maximum. Usually of order jpk/2. 
    78       &     ppacr =    9.00000000000_wp     !: (non dimensional): stretching factor 
    79       !                                     !: for the grid. The highest zacr, the smallest 
    80       !                                     !: the stretching. 
    81  
     76      &     ppsur =  -3958.951371276829_wp  ,  &  !: ORCA r025 coefficients 
     77      &     ppa0  =   103.9530096000000_wp  ,  &  !: (75 levels case) 
     78      &     ppa1  =   2.415951269000000_wp  ,  &  !: 
     79      &     ppkth =   15.35101370000000_wp  ,  &  !: (non dimensional): gives the approximate 
     80      !                                           !: layer number above which  stretching will 
     81      !                                           !: be maximum. Usually of order jpk/2. 
     82      &     ppacr =       7.00000000000_wp        !: (non dimensional): stretching factor 
     83      !                                           !: for the grid. The higher zacr, the smaller 
     84      !                                           !: the stretching. 
    8285   !! 
    83    !!  If both ppa0 ppa1 and ppsur are specified to 0, then 
     86   !!  If both ppa0 ppa1 and ppsur are specified to pp_to_be_computed, then 
    8487   !!  they are computed from ppdzmin, pphmax , ppkth, ppacr in dom_zgr 
    8588   !! 
    86    REAL(wp), PARAMETER ::        & 
    87       &     ppdzmin = 6._wp           ,  &  !: (meters) vertical thickness of the top layer 
    88       &     pphmax  = 5750._wp              !: (meters) Maximum depth of the ocean gdepw(jpk) 
     89   REAL(wp), PARAMETER ::                      & 
     90      &     ppdzmin = pp_not_used           ,  &  !: (meters) vertical thickness of the top layer 
     91      &     pphmax  = pp_not_used                 !: (meters) Maximum depth of the ocean gdepw(jpk) 
     92   !! 
     93   LOGICAL,  PARAMETER ::                      & 
     94      &     ldbletanh = .TRUE.                    !: Use/do not use double tanf function for vertical coordinates 
     95   REAL(wp), PARAMETER ::                      & 
     96      &     ppa2  =   100.7609285000000_wp  ,  &  !: Double tanh function parameters 
     97      &     ppkth2=   48.02989372000000_wp  ,  &  !: 
     98      &     ppacr2=    13.00000000000_wp          !: 
     99      ! 
     100#else 
     101   REAL(wp), PARAMETER  ::       & 
     102      &     ppsur = pp_to_be_computed ,        &  !: Computed in domzgr, set ppdzmin and pphmax below 
     103      &     ppa0  = pp_to_be_computed ,        &  !:    "           " 
     104      &     ppa1  = pp_to_be_computed ,        &  !:    "           " 
     105      ! 
     106      &     ppkth =  23.563_wp        ,        &  !: (non dimensional): gives the approximate 
     107      !                                           !: layer number above which  stretching will 
     108      !                                           !: be maximum. Usually of order jpk/2. 
     109      &     ppacr =   9.00000000000_wp            !: (non dimensional): stretching factor 
     110      !                                           !: for the grid. The highest zacr, the smallest 
     111      !                                           !: the stretching. 
     112   !! 
     113   !!  If both ppa0 ppa1 and ppsur are specified to pp_to_be_computed, then 
     114   !!  they are computed from ppdzmin, pphmax , ppkth, ppacr in dom_zgr 
     115   !! 
     116   REAL(wp), PARAMETER ::                      & 
     117      &     ppdzmin = 6._wp           ,        &  !: (meters) vertical thickness of the top layer 
     118      &     pphmax  = 5750._wp                    !: (meters) Maximum depth of the ocean gdepw(jpk) 
     119   !! 
     120   LOGICAL,  PARAMETER ::                      & 
     121      &     ldbletanh = .FALSE.                   !: Use/do not use double tanf function for vertical coordinates 
     122   REAL(wp), PARAMETER ::                      & 
     123      &     ppa2    = pp_not_used           ,  &  !: Double tanh function parameters 
     124      &     ppkth2  = pp_not_used           ,  &  !: 
     125      &     ppacr2  = pp_not_used                 !: 
     126#endif 
    89127   !!--------------------------------------------------------------------- 
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/par_ORCA_R05.h90

    r2287 r2379  
    131131      &     ppdzmin = pp_not_used           ,  &  !: (meters) vertical thickness of the top layer 
    132132      &     pphmax  = pp_not_used                 !: (meters) Maximum depth of the ocean gdepw(jpk) 
     133   LOGICAL,  PARAMETER ::        & 
     134      &     ldbletanh = .FALSE.                   !: Use/do not use double tanf function for vertical coordinates 
     135   REAL(wp), PARAMETER ::        & 
     136      &     ppa2    = pp_not_used           ,  &  !: Double tanh function parameters 
     137      &     ppkth2  = pp_not_used           ,  &  !: 
     138      &     ppacr2  = pp_not_used                 !: 
    133139   !!--------------------------------------------------------------------- 
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/par_ORCA_R2.h90

    r2287 r2379  
    158158      &     ppdzmin = pp_not_used           ,  &  !: (meters) vertical thickness of the top layer 
    159159      &     pphmax  = pp_not_used                 !: (meters) Maximum depth of the ocean gdepw(jpk) 
     160   LOGICAL,  PARAMETER ::        & 
     161      &     ldbletanh = .FALSE.                   !: Use/do not use double tanf function for vertical coordinates 
     162   REAL(wp), PARAMETER ::        & 
     163      &     ppa2    = pp_not_used           ,  &  !: Double tanh function parameters 
     164      &     ppkth2  = pp_not_used           ,  &  !: 
     165      &     ppacr2  = pp_not_used                 !: 
    160166   !!--------------------------------------------------------------------- 
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/par_ORCA_R4.h90

    r2287 r2379  
    8787      &     ppdzmin = pp_not_used           ,  &  !: (meters) vertical thickness of the top layer 
    8888      &     pphmax  = pp_not_used                 !: (meters) Maximum depth of the ocean gdepw(jpk) 
     89   LOGICAL,  PARAMETER ::        & 
     90      &     ldbletanh = .FALSE.                   !: Use/do not use double tanf function for vertical coordinates 
     91   REAL(wp), PARAMETER ::        & 
     92      &     ppa2    = pp_not_used           ,  &  !: Double tanh function parameters 
     93      &     ppkth2  = pp_not_used           ,  &  !: 
     94      &     ppacr2  = pp_not_used                 !: 
    8995   !!--------------------------------------------------------------------- 
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/par_POMME_R025.h90

    r2287 r2379  
    9797      &     ppdzmin = 6._wp           ,  &  !: (meters) vertical thickness of the top layer 
    9898      &     pphmax  = 5750._wp              !: (meters) Maximum depth of the ocean gdepw(jpk) 
     99   LOGICAL,  PARAMETER ::        & 
     100      &     ldbletanh = .FALSE.             !: Use/do not use double tanf function for vertical coordinates 
     101   REAL(wp), PARAMETER ::        & 
     102      &     ppa2    = pp_not_used     ,  &  !: Double tanh function parameters 
     103      &     ppkth2  = pp_not_used     ,  &  !: 
     104      &     ppacr2  = pp_not_used           !: 
    99105   !!--------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.