Changeset 5640


Ignore:
Timestamp:
2015-07-28T16:05:38+02:00 (5 years ago)
Author:
jchanut
Message:

Update vertical grid definition, ticket #1583

Location:
branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/TOOLS/NESTING
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/TOOLS/NESTING/agulhas

    r2455 r5640  
    1717    removeclosedseas = true 
    1818    type_bathy_interp = 0  
     19    rn_hmin = -3  
    1920/    
    2021 
     
    3940    pa1  = 245.58132232490 
    4041    N  = 31 
     42    ldbletanh   = .FALSE. 
     43    ppa2        = 0.0 
     44    ppkth2      = 0.0 
     45    ppacr2      = 0.0 
    4146/     
    4247     
     
    4550    parent_bathy_meter = 'bathy_meter.nc' 
    4651    parent_batmet_name = 'Bathymetry' 
    47     e3zps_min = 25. 
    48     e3zps_rat = 0.2 
     52    e3zps_min = 20. 
     53    e3zps_rat = 0.1 
    4954/ 
    5055 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/TOOLS/NESTING/src/agrif_connect_topo.f90

    r2143 r5640  
    105105    IMPLICIT NONE 
    106106    ! 
    107     REAL*8 :: za1,za0,zsur,zacr,zkth,zmin,zmax 
     107    REAL*8 :: za2,za1,za0,zsur,zacr,zkth,zacr2,zkth2,zmin,zmax 
    108108    TYPE(Coordinates) :: Grid 
    109109    INTEGER :: i,j 
     
    134134       za0  = pa0 
    135135       za1  = pa1 
     136       za2  = pa2 
    136137       ! 
    137138    ELSE 
     
    147148 
    148149    zacr = ppacr 
    149     zkth = ppkth  
    150  
     150    zkth = ppkth 
     151    zacr2 = ppacr2 
     152    zkth2 = ppkth2    
    151153    ! 
    152154    ALLOCATE(gdepw(N),gdept(N),e3w(N),e3t(N)) 
    153155    ! 
    154     DO i = 1,N 
    155        gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
    156        gdept(i) = (zsur+za0*(i+0.5)+za1*zacr*LOG(COSH(((i+0.5)-zkth)/zacr))) 
    157        e3w(i)   = (za0 + za1 * TANH((i-zkth)/zacr)) 
    158        e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
    159     END DO 
     156    IF( ppkth == 0. ) THEN            !  uniform vertical grid  
     157       za1 = pphmax / FLOAT(N-1)  
     158       DO i = 1, N 
     159          gdepw(i) = ( i - 1   ) * za1 
     160          gdept(i) = ( i - 0.5 ) * za1 
     161          e3w  (i) =  za1 
     162          e3t  (i) =  za1 
     163       END DO 
     164    ELSE                            ! Madec & Imbard 1996 function 
     165       IF( .NOT. ldbletanh ) THEN 
     166          DO i = 1,N 
     167             !  
     168             gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
     169             gdept(i) = (zsur+za0*(i+0.5)+za1*zacr*LOG(COSH(((i+0.5)-zkth)/zacr))) 
     170             e3w(i)   = (za0 + za1 * TANH((i-zkth)/zacr)) 
     171             e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
     172             ! 
     173          END DO 
     174       ELSE 
     175          DO i = 1,N 
     176             ! Double tanh function 
     177             gdepw(i) = ( zsur + za0*i  + za1 * zacr * LOG ( COSH( (i-zkth ) / zacr  ) )               & 
     178                &                       + za2 * zacr2* LOG ( COSH( (i-zkth2) / zacr2 ) )  ) 
     179             gdept(i) = ( zsur + za0*(i+0.5) + za1 * zacr * LOG ( COSH( ((i+0.5)-zkth ) / zacr  ) )    & 
     180                &                            + za2 * zacr2* LOG ( COSH( ((i+0.5)-zkth2) / zacr2 ) )  ) 
     181             e3w  (i) =          za0         + za1        * TANH(       (i-zkth ) / zacr  )            & 
     182                &                            + za2        * TANH(       (i-zkth2) / zacr2 ) 
     183             e3t  (i) =          za0         + za1        * TANH(       ((i+0.5)-zkth ) / zacr  )      & 
     184                &                            + za2        * TANH(       ((i+0.5)-zkth2) / zacr2 ) 
     185            END DO 
     186       ENDIF 
     187    ENDIF 
    160188    ! 
    161189    gdepw(1) = 0.0 
    162190    zmax = gdepw(N) + e3t(N) 
    163     zmin = gdepw(4) 
     191    IF( rn_hmin < 0. ) THEN  ;   i = - INT( rn_hmin )                                  ! from a nb of level 
     192    ELSE                     ;   i = MINLOC( gdepw, mask = gdepw > rn_hmin, dim = 1 )  ! from a depth 
     193    ENDIF 
     194    zmin = gdepw(i+1) 
    164195    ! 
    165196    IF ( .NOT. ASSOCIATED(Grid%bathy_level)) & 
     
    227258    IMPLICIT NONE 
    228259    ! 
    229     REAL*8 :: za1,za0,zsur,zacr,zkth,zmin,zmax 
     260    REAL*8 :: za2,za1,za0,zsur,zacr,zkth,zacr2,zkth2,zmin,zmax 
    230261    TYPE(Coordinates) :: Grid 
    231262    INTEGER :: i,j 
     
    257288       za0  = pa0 
    258289       za1  = pa1 
     290       za2  = pa2 
    259291       ! 
    260292    ELSE 
     
    264296       WRITE(*,*) 'please check values of variables' 
    265297       WRITE(*,*) 'in namelist vertical_grid section' 
    266        WRITE(*,*) ' ' 
    267        STOP       
     298       WRITE(*,*) ' '  
     299       STOP      
    268300       !        
    269301    ENDIF 
    270     ! 
     302 
    271303    zacr = ppacr 
    272     zkth = ppkth  
    273  
     304    zkth = ppkth 
     305    zacr2 = ppacr2 
     306    zkth2 = ppkth2    
    274307    ! 
    275308    ALLOCATE(gdepw(N),gdept(N),e3w(N),e3t(N)) 
    276309    ! 
    277     DO i = 1,N 
    278        !  
    279        gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
    280        gdept(i) = (zsur+za0*(i+0.5)+za1*zacr*LOG(COSH(((i+0.5)-zkth)/zacr))) 
    281        e3w(i)   = (za0 + za1 * TANH((i-zkth)/zacr)) 
    282        e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
    283     END DO 
     310    IF( ppkth == 0. ) THEN            !  uniform vertical grid  
     311       za1 = pphmax / FLOAT(N-1)  
     312       DO i = 1, N 
     313          gdepw(i) = ( i - 1   ) * za1 
     314          gdept(i) = ( i - 0.5 ) * za1 
     315          e3w  (i) =  za1 
     316          e3t  (i) =  za1 
     317       END DO 
     318    ELSE                            ! Madec & Imbard 1996 function 
     319       IF( .NOT. ldbletanh ) THEN 
     320          DO i = 1,N 
     321             !  
     322             gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
     323             gdept(i) = (zsur+za0*(i+0.5)+za1*zacr*LOG(COSH(((i+0.5)-zkth)/zacr))) 
     324             e3w(i)   = (za0 + za1 * TANH((i-zkth)/zacr)) 
     325             e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
     326             ! 
     327          END DO 
     328       ELSE 
     329          DO i = 1,N 
     330             ! Double tanh function 
     331             gdepw(i) = ( zsur + za0*i  + za1 * zacr * LOG ( COSH( (i-zkth ) / zacr  ) )               & 
     332                &                       + za2 * zacr2* LOG ( COSH( (i-zkth2) / zacr2 ) )  ) 
     333             gdept(i) = ( zsur + za0*(i+0.5) + za1 * zacr * LOG ( COSH( ((i+0.5)-zkth ) / zacr  ) )    & 
     334                &                            + za2 * zacr2* LOG ( COSH( ((i+0.5)-zkth2) / zacr2 ) )  ) 
     335             e3w  (i) =          za0         + za1        * TANH(       (i-zkth ) / zacr  )            & 
     336                &                            + za2        * TANH(       (i-zkth2) / zacr2 ) 
     337             e3t  (i) =          za0         + za1        * TANH(       ((i+0.5)-zkth ) / zacr  )      & 
     338                &                            + za2        * TANH(       ((i+0.5)-zkth2) / zacr2 ) 
     339         END DO 
     340       ENDIF 
     341    ENDIF 
    284342    ! 
    285343    gdepw(1) = 0.0   
     
    684742  ! for consistency with fine grid bathymetry         * 
    685743  !                        * 
    686   ! if a given coarse grid point is masked and one of the      * 
    687   ! child grid points contained in this coarse cell is not masked * 
    688   ! the corresponding coarse grid point is unmasked with gdepw(4) * 
    689   ! value                        * 
     744  ! if a given coarse grid point is masked and one of the     * 
     745  ! child grid points contained in this coarse cell is not masked * 
     746  ! the corresponding coarse grid point is unmasked with rn_hmin * 
     747  ! value                            * 
    690748  !                        * 
    691749  ! - input :                    * 
     
    704762    ! 
    705763    INTEGER :: ideb,jdeb,ifin,jfin 
    706     REAL*8 :: za1,za0,zsur,zacr,zkth,zmin 
     764    REAL*8 :: za2,za1,za0,zsur,zacr,zkth,zacr2,zkth2,zmin 
    707765    INTEGER :: i,j 
    708766    INTEGER :: k1 
     
    727785       za0  = pa0 
    728786       za1  = pa1 
     787       za2  = pa2 
    729788       ! 
    730789    ELSE 
     
    740799 
    741800    zacr = ppacr 
    742     zkth = ppkth  
    743  
     801    zkth = ppkth 
     802    zacr2 = ppacr2 
     803    zkth2 = ppkth2    
    744804    ! 
    745805    ALLOCATE(gdepw(N),gdept(N),e3w(N),e3t(N)) 
    746806    ! 
    747     DO i = 1,N 
    748        !  
    749        gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
    750        gdept(i) = (zsur+za0*(i+0.5)+za1*zacr*LOG(COSH(((i+0.5)-zkth)/zacr))) 
    751        e3w(i)   = (za0 + za1 * TANH((i-zkth)/zacr)) 
    752        e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
    753     END DO 
    754     ! 
    755     zmin = gdepw(4) 
     807    IF( ppkth == 0. ) THEN            !  uniform vertical grid  
     808       za1 = pphmax / FLOAT(N-1)  
     809       DO i = 1, N 
     810          gdepw(i) = ( i - 1   ) * za1 
     811          gdept(i) = ( i - 0.5 ) * za1 
     812          e3w  (i) =  za1 
     813          e3t  (i) =  za1 
     814       END DO 
     815    ELSE                            ! Madec & Imbard 1996 function 
     816       IF( .NOT. ldbletanh ) THEN 
     817          DO i = 1,N 
     818             !  
     819             gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
     820             gdept(i) = (zsur+za0*(i+0.5)+za1*zacr*LOG(COSH(((i+0.5)-zkth)/zacr))) 
     821             e3w(i)   = (za0 + za1 * TANH((i-zkth)/zacr)) 
     822             e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
     823             ! 
     824          END DO 
     825       ELSE 
     826          DO i = 1,N 
     827             ! Double tanh function 
     828             gdepw(i) = ( zsur + za0*i  + za1 * zacr * LOG ( COSH( (i-zkth ) / zacr  ) )               & 
     829                &                       + za2 * zacr2* LOG ( COSH( (i-zkth2) / zacr2 ) )  ) 
     830             gdept(i) = ( zsur + za0*(i+0.5) + za1 * zacr * LOG ( COSH( ((i+0.5)-zkth ) / zacr  ) )    & 
     831                &                            + za2 * zacr2* LOG ( COSH( ((i+0.5)-zkth2) / zacr2 ) )  ) 
     832             e3w  (i) =          za0         + za1        * TANH(       (i-zkth ) / zacr  )            & 
     833                &                            + za2        * TANH(       (i-zkth2) / zacr2 ) 
     834             e3t  (i) =          za0         + za1        * TANH(       ((i+0.5)-zkth ) / zacr  )      & 
     835                &                            + za2        * TANH(       ((i+0.5)-zkth2) / zacr2 ) 
     836          END DO 
     837       ENDIF 
     838    ENDIF 
     839    ! 
     840    IF( rn_hmin < 0. ) THEN  ;   i = - INT( rn_hmin )                                  ! from a nb of level 
     841    ELSE                     ;   i = MINLOC( gdepw, mask = gdepw > rn_hmin, dim = 1 )  ! from a depth 
     842    ENDIF 
     843    zmin = gdepw(i+1) 
    756844    !       
    757845    diff = 0 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/TOOLS/NESTING/src/agrif_partial_steps.f90

    r2143 r5640  
    3636    !        
    3737    TYPE(Coordinates) :: Grid                      
    38     REAL*8 :: za1,za0,zsur,zacr,zkth,zdepth,zdepwp,zmin,zmax,zdiff,ze3tp,ze3wp 
     38    REAL*8 :: za2,za1,za0,zsur,zacr,zkth,zacr2,zkth2,zdepth,zdepwp,zmin,zmax,zdiff,ze3tp,ze3wp 
    3939    INTEGER :: i,j,jk,jj,ji,jpj,jpi,ik,ii,ipt,jpt 
    4040    INTEGER, DIMENSION(1) :: k 
     
    7676       za0  = pa0 
    7777       za1  = pa1 
     78       za2  = pa2 
    7879       ! 
    7980    ELSE 
     
    8889    ENDIF 
    8990 
    90     zacr = ppacr 
    91     zkth = ppkth        
    92     ! 
    93     DO i = 1,N 
    94        !  
    95        gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
    96        gdept(i) = (zsur+za0*(i+0.5)+za1*zacr*LOG(COSH(((i+0.5)-zkth)/zacr))) 
    97        e3w(i)   = (za0 + za1 * TANH((i-zkth)/zacr)) 
    98        e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
    99        ! 
    100     END DO 
    101     ! 
    102  
     91    zacr  = ppacr 
     92    zkth  = ppkth      
     93    zacr2 = ppacr2 
     94    zkth2 = ppkth2   
     95    ! 
     96    IF( ppkth == 0. ) THEN            !  uniform vertical grid  
     97         za1 = pphmax / FLOAT(N-1)  
     98         DO i = 1, N 
     99            gdepw(i) = ( i - 1   ) * za1 
     100            gdept(i) = ( i - 0.5 ) * za1 
     101            e3w  (i) =  za1 
     102            e3t  (i) =  za1 
     103         END DO 
     104    ELSE                            ! Madec & Imbard 1996 function 
     105       IF( .NOT. ldbletanh ) THEN 
     106          DO i = 1,N 
     107             !  
     108             gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
     109             gdept(i) = (zsur+za0*(i+0.5)+za1*zacr*LOG(COSH(((i+0.5)-zkth)/zacr))) 
     110             e3w(i)   = (za0 + za1 * TANH((i-zkth)/zacr)) 
     111             e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
     112             ! 
     113          END DO 
     114       ELSE 
     115            DO i = 1,N 
     116               ! Double tanh function 
     117               gdepw(i) = ( zsur + za0*i  + za1 * zacr * LOG ( COSH( (i-zkth ) / zacr  ) )               & 
     118                  &                       + za2 * zacr2* LOG ( COSH( (i-zkth2) / zacr2 ) )  ) 
     119               gdept(i) = ( zsur + za0*(i+0.5) + za1 * zacr * LOG ( COSH( ((i+0.5)-zkth ) / zacr  ) )    & 
     120                  &                            + za2 * zacr2* LOG ( COSH( ((i+0.5)-zkth2) / zacr2 ) )  ) 
     121               e3w  (i) =          za0         + za1        * TANH(       (i-zkth ) / zacr  )            & 
     122                  &                            + za2        * TANH(       (i-zkth2) / zacr2 ) 
     123               e3t  (i) =          za0         + za1        * TANH(       ((i+0.5)-zkth ) / zacr  )      & 
     124                  &                            + za2        * TANH(       ((i+0.5)-zkth2) / zacr2 ) 
     125            END DO 
     126       ENDIF 
     127    ENDIF 
    103128    gdepw(1) = 0.0   
    104129    ! 
     
    106131    ! 
    107132    zmax = gdepw(N) + e3t(N) 
    108     zmin = gdepw(4) 
     133    IF( rn_hmin < 0. ) THEN  ;   i = - INT( rn_hmin )                                  ! from a nb of level 
     134    ELSE                     ;   i = MINLOC( gdepw, mask = gdepw > rn_hmin, dim = 1 )  ! from a depth 
     135    ENDIF 
     136    zmin = gdepw(i+1) 
    109137    ! 
    110138    ! Initialize bathy_level to the maximum ocean level available 
     
    235263    INTEGER :: i,j,ji,ij,ii,jj,jpt,ipt 
    236264    REAL,DIMENSION(N) :: gdepw,e3t 
    237     REAL :: za0,za1,zsur,zacr,zkth,zmin,zmax,zdepth 
     265    REAL :: za0,za1,za2,zsur,zacr,zacr2,zkth,zkth2,zmin,zmax,zdepth 
    238266    INTEGER :: kbathy,jk,diff 
    239267    INTEGER :: bornex,borney,bornex2,borney2 
    240     !        
     268    ! 
    241269    IF ( ( pa0 == 0 .OR. pa1 == 0 .OR. psur == 0 ) & 
    242270         .AND. ppdzmin.NE.0 .AND. pphmax.NE.0 ) THEN  
    243271       !     
     272       WRITE(*,*) 'psur,pa0,pa1 computed' 
    244273       za1=( ppdzmin - pphmax / (N-1) )          & 
    245274            / ( TANH((1-ppkth)/ppacr) - ppacr/(N-1) & 
     
    253282         pa0.NE.0 .AND. pa1.NE.0 ) THEN 
    254283       !        
     284       WRITE(*,*) 'psur,pa0,pa1 given by namelist' 
    255285       zsur = psur 
    256286       za0  = pa0 
    257287       za1  = pa1 
     288       za2  = pa2 
    258289       ! 
    259290    ELSE 
     
    263294       WRITE(*,*) 'please check values of variables' 
    264295       WRITE(*,*) 'in namelist vertical_grid section' 
    265        WRITE(*,*) ' '       
    266        !        
    267     ENDIF 
    268     !        
    269     zacr = ppacr 
    270     zkth = ppkth        
    271     ! 
    272     DO i = 1,N 
    273        !  
    274        gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr))) 
    275        e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr))        
    276     END DO 
    277     ! 
     296       WRITE(*,*) ' '   
     297       STOP     
     298       !        
     299    ENDIF 
     300 
     301    zacr  = ppacr 
     302    zkth  = ppkth      
     303    zacr2 = ppacr2 
     304    zkth2 = ppkth2   
     305    ! 
     306    IF( ppkth == 0. ) THEN            !  uniform vertical grid  
     307         za1 = pphmax / FLOAT(N-1)  
     308         DO i = 1, N 
     309            gdepw(i) = ( i - 1   ) * za1 
     310            e3t  (i) =  za1 
     311         END DO 
     312    ELSE                            ! Madec & Imbard 1996 function 
     313       IF( .NOT. ldbletanh ) THEN 
     314          DO i = 1,N 
     315             !  
     316             gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
     317             e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
     318             ! 
     319          END DO 
     320       ELSE 
     321            DO i = 1,N 
     322               ! Double tanh function 
     323               gdepw(i) = ( zsur + za0*i  + za1 * zacr * LOG ( COSH( (i-zkth ) / zacr  ) )               & 
     324                  &                       + za2 * zacr2* LOG ( COSH( (i-zkth2) / zacr2 ) )  ) 
     325               e3t  (i) =          za0         + za1        * TANH(       ((i+0.5)-zkth ) / zacr  )      & 
     326                  &                            + za2        * TANH(       ((i+0.5)-zkth2) / zacr2 ) 
     327            END DO 
     328       ENDIF 
     329    ENDIF 
    278330    gdepw(1) = 0.0 
    279     ! 
    280331    ! 
    281332    diff = 0       
     
    344395    ! 
    345396    zmax = gdepw(N) + e3t(N) 
    346     zmin = gdepw(4)  
     397    IF( rn_hmin < 0. ) THEN  ;   i = - INT( rn_hmin )                                  ! from a nb of level 
     398    ELSE                     ;   i = MINLOC( gdepw, mask = gdepw > rn_hmin, dim = 1 )  ! from a depth 
     399    ENDIF 
    347400    ! 
    348401    ! check that interpolated value stays at the same level          
     
    646699    REAL*8, DIMENSION(:,:,:) :: fse3u,fse3t,fse3v 
    647700    !                                   
    648     REAL*8 :: za1,za0,zsur,zacr,zkth,zdepth,zdepwp,zmin,zmax,zdiff,ze3tp,ze3wp 
     701    REAL*8 :: za2,za1,za0,zsur,zacr,zkth,zacr2,zkth2,zdepth,zdepwp,zmin,zmax,zdiff,ze3tp,ze3wp 
    649702    INTEGER :: i,j,jk,jj,ji,jpj,jpi,ik,ii,ipt,jpt,jpk 
    650703    INTEGER, DIMENSION(1) :: k 
     
    660713    ALLOCATE(gdepw(jpk),e3t(jpk)) 
    661714    ALLOCATE(gdepw_ps(jpi,jpj,jpk))                   
    662     !        
     715    !   
    663716    IF ( ( pa0 == 0 .OR. pa1 == 0 .OR. psur == 0 ) & 
    664717         .AND. ppdzmin.NE.0 .AND. pphmax.NE.0 ) THEN  
     
    668721            / ( TANH((1-ppkth)/ppacr) - ppacr/(jpk-1) & 
    669722            *  (  LOG( COSH( (jpk - ppkth) / ppacr) )      & 
    670             - LOG( COSH( ( 1  - ppkth) / ppacr) )  )  )  
    671        ! 
     723            - LOG( COSH( ( 1  - ppkth) / ppacr) )  )  ) 
     724 
    672725       za0  = ppdzmin - za1 * TANH( (1-ppkth) / ppacr ) 
    673726       zsur = - za0 - za1 * ppacr * LOG( COSH( (1-ppkth) / ppacr )  ) 
     
    676729         pa0.NE.0 .AND. pa1.NE.0 ) THEN 
    677730       !        
     731       WRITE(*,*) 'psur,pa0,pa1 given by namelist' 
    678732       zsur = psur 
    679733       za0  = pa0 
    680        za1  = pa1    
    681        !        
    682     ENDIF 
    683  
    684     zacr = ppacr 
    685     zkth = ppkth        
     734       za1  = pa1 
     735       za2  = pa2 
     736       ! 
     737    ELSE 
     738       !        
     739       WRITE(*,*) 'ERROR ***** bad vertical grid parameters ...'  
     740       WRITE(*,*) ' ' 
     741       WRITE(*,*) 'please check values of variables' 
     742       WRITE(*,*) 'in namelist vertical_grid section' 
     743       WRITE(*,*) ' '   
     744       STOP     
     745       !        
     746    ENDIF 
     747 
     748    zacr  = ppacr 
     749    zkth  = ppkth      
     750    zacr2 = ppacr2 
     751    zkth2 = ppkth2   
     752    ! 
     753    IF( ppkth == 0. ) THEN            !  uniform vertical grid  
     754         za1 = pphmax / FLOAT(jpk-1)  
     755         DO i = 1, jpk 
     756            gdepw(i) = ( i - 1   ) * za1 
     757            e3t  (i) =  za1 
     758         END DO 
     759    ELSE                            ! Madec & Imbard 1996 function 
     760       IF( .NOT. ldbletanh ) THEN 
     761          DO i = 1,jpk 
     762             !  
     763             gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
     764             e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
     765             ! 
     766          END DO 
     767       ELSE 
     768            DO i = 1,jpk 
     769               ! Double tanh function 
     770               gdepw(i) = ( zsur + za0*i  + za1 * zacr * LOG ( COSH( (i-zkth ) / zacr  ) )               & 
     771                  &                       + za2 * zacr2* LOG ( COSH( (i-zkth2) / zacr2 ) )  ) 
     772               e3t  (i) =          za0         + za1        * TANH(       ((i+0.5)-zkth ) / zacr  )      & 
     773                  &                            + za2        * TANH(       ((i+0.5)-zkth2) / zacr2 ) 
     774            END DO 
     775       ENDIF 
     776    ENDIF          
    686777    !          
    687778    !                 
    688779    DO i = 1,jpk 
    689        !  
    690        gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
    691        e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
    692780       !        
    693781       fse3t(:,:,i) = e3t(i) 
     
    700788    ! 
    701789    zmax = gdepw(jpk) + e3t(jpk) 
    702     zmin = gdepw(4) 
     790    IF( rn_hmin < 0. ) THEN  ;   i = - INT( rn_hmin )                                  ! from a nb of level 
     791    ELSE                     ;   i = MINLOC( gdepw, mask = gdepw > rn_hmin, dim = 1 )  ! from a depth 
     792    ENDIF 
    703793    ! 
    704794    DO jj = 1, jpj 
  • branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/TOOLS/NESTING/src/agrif_types.f90

    r2455 r5640  
    5151  INTEGER jpizoom,jpjzoom,nb_connection_pts 
    5252  !       
    53   REAL*8 ppacr,ppdzmin,pphmax,ppkth,smoothing_factor,e3zps_min,e3zps_rat 
    54   REAL*8 psur,pa0,pa1,adatrj 
     53  REAL*8 rn_hmin 
     54  REAL*8 ppkth2, ppacr2, ppkth,ppacr,ppdzmin,pphmax,smoothing_factor,e3zps_min,e3zps_rat 
     55  REAL*8 psur,pa0,pa1,pa2,adatrj 
    5556  !        
     57  LOGICAL ldbletanh 
    5658  LOGICAL partial_steps,smoothing,bathy_update 
    5759  LOGICAL new_topo,removeclosedseas,dimg,iom_activated 
     
    7072  !       
    7173  NAMELIST /bathymetry/new_topo,elevation_database,elevation_name,smoothing,smoothing_factor, & 
    72        nb_connection_pts,removeclosedseas,type_bathy_interp       
     74       nb_connection_pts,removeclosedseas,type_bathy_interp,rn_hmin       
    7375  !       
    7476  NAMELIST /nesting/imin,imax,jmin,jmax,rho,rhot,bathy_update,updated_parent_file       
    7577  ! 
    76   NAMELIST /vertical_grid/ppkth,ppacr,ppdzmin,pphmax,psur,pa0,pa1,N 
     78  NAMELIST /vertical_grid/ppkth,ppacr,ppdzmin,pphmax,psur,pa0,pa1,N,ldbletanh,ppa2,ppkth2,ppacr2 
    7779  !  
    7880  NAMELIST /partial_cells/partial_steps,parent_bathy_meter,parent_batmet_name,e3zps_min,e3zps_rat       
Note: See TracChangeset for help on using the changeset viewer.