Changeset 60 for trunk


Ignore:
Timestamp:
10/26/12 03:00:39 (11 years ago)
Author:
smasson
Message:

update nesting tools

Location:
trunk/NEMOGCM/TOOLS/NESTING
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/TOOLS/NESTING/agulhas

    r1 r60  
    3838    pa0  = 255.58049070440 
    3939    pa1  = 245.58132232490 
     40    ldbletanh = .FALSE. 
     41    pa2  =   100.7609285000000 
     42    ppkth2=   48.02989372000000 
     43    ppacr2=    13.00000000000 
    4044    N  = 31 
    4145/     
  • trunk/NEMOGCM/TOOLS/NESTING/src/agrif_connect_topo.f90

    r1 r60  
    105105    IMPLICIT NONE 
    106106    ! 
    107     REAL*8 :: za1,za0,zsur,zacr,zkth,zmin,zmax 
     107    REAL*8 :: za2,za1,za0,zsur,zacr,zacr2,zkth,zkth2,zmin,zmax,zw,zt 
    108108    TYPE(Coordinates) :: Grid 
    109109    INTEGER :: i,j 
     
    134134       za0  = pa0 
    135135       za1  = pa1 
     136       za2  = pa2 
    136137       ! 
    137138    ELSE 
     
    148149    zacr = ppacr 
    149150    zkth = ppkth  
     151    zacr2 = ppacr2 
     152    zkth2 = ppkth2 
    150153 
    151154    ! 
    152155    ALLOCATE(gdepw(N),gdept(N),e3w(N),e3t(N)) 
    153156    ! 
    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 
     157    IF( .NOT. ldbletanh ) THEN 
     158       DO i = 1,N 
     159          !  
     160          zw = REAL( i , 8 ) 
     161          zt = REAL( i , 8 ) + 0.5 
     162          gdepw(i) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth) / zacr ) )  ) 
     163          gdept(i) = ( zsur + za0 * zt + za1 * zacr * LOG ( COSH( (zt-zkth) / zacr ) )  ) 
     164          e3w  (i) =          za0      + za1        * TANH(       (zw-zkth) / zacr   ) 
     165          e3t  (i) =          za0      + za1        * TANH(       (zt-zkth) / zacr   ) 
     166          ! 
     167       END DO 
     168    ELSE 
     169       DO i = 1,N 
     170          zw = REAL( i , 8 ) 
     171          zt = REAL( i , 8 ) + 0.5 
     172          ! Double tanh function 
     173          gdepw(i) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth ) / zacr  ) )    & 
     174             &                         + za2 * zacr2* LOG ( COSH( (zw-zkth2) / zacr2 ) )  ) 
     175          gdept(i) = ( zsur + za0 * zt + za1 * zacr * LOG ( COSH( (zt-zkth ) / zacr  ) )    & 
     176             &                         + za2 * zacr2* LOG ( COSH( (zt-zkth2) / zacr2 ) )  ) 
     177          e3w  (i) =          za0      + za1        * TANH(       (zw-zkth ) / zacr  )    & 
     178             &                         + za2        * TANH(       (zw-zkth2) / zacr2 ) 
     179          e3t  (i) =          za0      + za1        * TANH(       (zt-zkth ) / zacr  )    & 
     180             &                         + za2        * TANH(       (zt-zkth2) / zacr2 ) 
     181       END DO 
     182    ENDIF 
    160183    ! 
    161184    gdepw(1) = 0.0 
     
    227250    IMPLICIT NONE 
    228251    ! 
    229     REAL*8 :: za1,za0,zsur,zacr,zkth,zmin,zmax 
     252    REAL*8 :: za2,za1,za0,zsur,zacr,zacr2,zkth,zkth2,zmin,zt,zw 
    230253    TYPE(Coordinates) :: Grid 
    231254    INTEGER :: i,j 
     
    257280       za0  = pa0 
    258281       za1  = pa1 
     282       za2  = pa2 
    259283       ! 
    260284    ELSE 
     
    271295    zacr = ppacr 
    272296    zkth = ppkth  
    273  
     297    zacr2 = ppacr2 
     298    zkth2 = ppkth2 
    274299    ! 
    275300    ALLOCATE(gdepw(N),gdept(N),e3w(N),e3t(N)) 
    276301    ! 
    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 
     302    IF( .NOT. ldbletanh ) THEN 
     303       DO i = 1,N 
     304          !  
     305          zw = REAL( i , 8 ) 
     306          zt = REAL( i , 8 ) + 0.5 
     307          gdepw(i) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth) / zacr ) )  ) 
     308          gdept(i) = ( zsur + za0 * zt + za1 * zacr * LOG ( COSH( (zt-zkth) / zacr ) )  ) 
     309          e3w  (i) =          za0      + za1        * TANH(       (zw-zkth) / zacr   ) 
     310          e3t  (i) =          za0      + za1        * TANH(       (zt-zkth) / zacr   ) 
     311          ! 
     312       END DO 
     313    ELSE 
     314       DO i = 1,N 
     315          zw = REAL( i , 8 ) 
     316          zt = REAL( i , 8 ) + 0.5 
     317          ! Double tanh function 
     318          gdepw(i) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth ) / zacr  ) )    & 
     319             &                         + za2 * zacr2* LOG ( COSH( (zw-zkth2) / zacr2 ) )  ) 
     320          gdept(i) = ( zsur + za0 * zt + za1 * zacr * LOG ( COSH( (zt-zkth ) / zacr  ) )    & 
     321             &                         + za2 * zacr2* LOG ( COSH( (zt-zkth2) / zacr2 ) )  ) 
     322          e3w  (i) =          za0      + za1        * TANH(       (zw-zkth ) / zacr  )    & 
     323             &                         + za2        * TANH(       (zw-zkth2) / zacr2 ) 
     324          e3t  (i) =          za0      + za1        * TANH(       (zt-zkth ) / zacr  )    & 
     325             &                         + za2        * TANH(       (zt-zkth2) / zacr2 ) 
     326       END DO 
     327    ENDIF 
    284328    ! 
    285329    gdepw(1) = 0.0   
     
    704748    ! 
    705749    INTEGER :: ideb,jdeb,ifin,jfin 
    706     REAL*8 :: za1,za0,zsur,zacr,zkth,zmin 
     750    REAL*8 :: za2,za1,za0,zsur,zacr,zacr2,zkth,zkth2,zmin,zt,zw 
    707751    INTEGER :: i,j 
    708752    INTEGER :: k1 
     
    727771       za0  = pa0 
    728772       za1  = pa1 
     773       za2  = pa2 
    729774       ! 
    730775    ELSE 
     
    741786    zacr = ppacr 
    742787    zkth = ppkth  
     788    zacr2 = ppacr2 
     789    zkth2 = ppkth2 
    743790 
    744791    ! 
    745792    ALLOCATE(gdepw(N),gdept(N),e3w(N),e3t(N)) 
    746793    ! 
    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 
     794    IF( .NOT. ldbletanh ) THEN 
     795       DO i = 1,N 
     796          !  
     797          zw = REAL( i , 8 ) 
     798          zt = REAL( i , 8 ) + 0.5 
     799          gdepw(i) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth) / zacr ) )  ) 
     800          gdept(i) = ( zsur + za0 * zt + za1 * zacr * LOG ( COSH( (zt-zkth) / zacr ) )  ) 
     801          e3w  (i) =          za0      + za1        * TANH(       (zw-zkth) / zacr   ) 
     802          e3t  (i) =          za0      + za1        * TANH(       (zt-zkth) / zacr   ) 
     803          ! 
     804       END DO 
     805    ELSE 
     806       DO i = 1,N 
     807          zw = REAL( i , 8 ) 
     808          zt = REAL( i , 8 ) + 0.5 
     809          ! Double tanh function 
     810          gdepw(i) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth ) / zacr  ) )    & 
     811             &                         + za2 * zacr2* LOG ( COSH( (zw-zkth2) / zacr2 ) )  ) 
     812          gdept(i) = ( zsur + za0 * zt + za1 * zacr * LOG ( COSH( (zt-zkth ) / zacr  ) )    & 
     813             &                         + za2 * zacr2* LOG ( COSH( (zt-zkth2) / zacr2 ) )  ) 
     814          e3w  (i) =          za0      + za1        * TANH(       (zw-zkth ) / zacr  )    & 
     815             &                         + za2        * TANH(       (zw-zkth2) / zacr2 ) 
     816          e3t  (i) =          za0      + za1        * TANH(       (zt-zkth ) / zacr  )    & 
     817             &                         + za2        * TANH(       (zt-zkth2) / zacr2 ) 
     818       END DO 
     819    ENDIF 
    754820    ! 
    755821    zmin = gdepw(4) 
  • trunk/NEMOGCM/TOOLS/NESTING/src/agrif_partial_steps.f90

    r1 r60  
    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,zacr2,zkth,zkth2,zdepth,zdepwp,zmin,zmax,zdiff,ze3tp,ze3wp,zw,zt 
    3939    INTEGER :: i,j,jk,jj,ji,jpj,jpi,ik,ii,ipt,jpt 
    4040    INTEGER, DIMENSION(1) :: k 
     
    4343    REAL*8, POINTER, DIMENSION(:,:)   :: hdepw,e3tp,e3wp 
    4444    REAL*8, POINTER, DIMENSION(:,:,:) :: gdept_ps,gdepw_ps 
    45     REAL*8 e3t_ps 
    4645 
    4746    ! 
     
    7675       za0  = pa0 
    7776       za1  = pa1 
     77       za2  = pa2 
    7878       ! 
    7979    ELSE 
     
    9090    zacr = ppacr 
    9191    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 
     92    zacr2 = ppacr2 
     93    zkth2 = ppkth2        
     94    ! 
     95    IF( .NOT. ldbletanh ) THEN 
     96       DO i = 1,N 
     97          !  
     98          zw = REAL( i , 8 ) 
     99          zt = REAL( i , 8 ) + 0.5 
     100          gdepw(i) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth) / zacr ) )  ) 
     101          gdept(i) = ( zsur + za0 * zt + za1 * zacr * LOG ( COSH( (zt-zkth) / zacr ) )  ) 
     102          e3w  (i) =          za0      + za1        * TANH(       (zw-zkth) / zacr   ) 
     103          e3t  (i) =          za0      + za1        * TANH(       (zt-zkth) / zacr   ) 
     104          ! 
     105       END DO 
     106    ELSE 
     107       DO i = 1,N 
     108          zw = REAL( i , 8 ) 
     109          zt = REAL( i , 8 ) + 0.5 
     110          ! Double tanh function 
     111          gdepw(i) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth ) / zacr  ) )    & 
     112             &                         + za2 * zacr2* LOG ( COSH( (zw-zkth2) / zacr2 ) )  ) 
     113          gdept(i) = ( zsur + za0 * zt + za1 * zacr * LOG ( COSH( (zt-zkth ) / zacr  ) )    & 
     114             &                         + za2 * zacr2* LOG ( COSH( (zt-zkth2) / zacr2 ) )  ) 
     115          e3w  (i) =          za0      + za1        * TANH(       (zw-zkth ) / zacr  )    & 
     116             &                         + za2        * TANH(       (zw-zkth2) / zacr2 ) 
     117          e3t  (i) =          za0      + za1        * TANH(       (zt-zkth ) / zacr  )    & 
     118             &                         + za2        * TANH(       (zt-zkth2) / zacr2 ) 
     119       END DO 
     120    ENDIF 
    101121    ! 
    102122 
     
    235255    INTEGER :: i,j,ji,ij,ii,jj,jpt,ipt 
    236256    REAL,DIMENSION(N) :: gdepw,e3t 
    237     REAL :: za0,za1,zsur,zacr,zkth,zmin,zmax,zdepth 
     257    REAL :: za0,za1,za2,zsur,zacr,zacr2,zkth,zkth2,zmin,zmax,zdepth,zw,zt 
    238258    INTEGER :: kbathy,jk,diff 
    239259    INTEGER :: bornex,borney,bornex2,borney2 
     
    256276       za0  = pa0 
    257277       za1  = pa1 
     278       za2  = pa2 
    258279       ! 
    259280    ELSE 
     
    269290    zacr = ppacr 
    270291    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 
     292    zacr2 = ppacr2 
     293    zkth2 = ppkth2 
     294    ! 
     295    IF( .NOT. ldbletanh ) THEN 
     296       DO i = 1,N 
     297          !  
     298          zw = REAL( i , 8 ) 
     299          zt = REAL( i , 8 ) + 0.5 
     300          gdepw(i) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth) / zacr ) )  ) 
     301          e3t  (i) =          za0      + za1        * TANH(       (zt-zkth) / zacr   ) 
     302          ! 
     303       END DO 
     304    ELSE 
     305       DO i = 1,N 
     306          zw = REAL( i , 8 ) 
     307          zt = REAL( i , 8 ) + 0.5 
     308          ! Double tanh function 
     309          gdepw(i) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth ) / zacr  ) )    & 
     310             &                         + za2 * zacr2* LOG ( COSH( (zw-zkth2) / zacr2 ) )  ) 
     311          e3t  (i) =          za0      + za1        * TANH(       (zt-zkth ) / zacr  )    & 
     312             &                         + za2        * TANH(       (zt-zkth2) / zacr2 ) 
     313       END DO 
     314    ENDIF 
    277315    ! 
    278316    gdepw(1) = 0.0 
     
    646684    REAL*8, DIMENSION(:,:,:) :: fse3u,fse3t,fse3v 
    647685    !                                   
    648     REAL*8 :: za1,za0,zsur,zacr,zkth,zdepth,zdepwp,zmin,zmax,zdiff,ze3tp,ze3wp 
     686    REAL*8 :: za2,za1,za0,zsur,zacr2,zacr,zkth2,zkth,zdepth,zdepwp,zmin,zmax,zdiff,ze3tp,ze3wp,zw,zt 
    649687    INTEGER :: i,j,jk,jj,ji,jpj,jpi,ik,ii,ipt,jpt,jpk 
    650688    INTEGER, DIMENSION(1) :: k 
     
    679717       za0  = pa0 
    680718       za1  = pa1    
     719       za2  = pa2 
    681720       !        
    682721    ENDIF 
     
    684723    zacr = ppacr 
    685724    zkth = ppkth        
     725    zacr2 = ppacr2 
     726    zkth2 = ppkth2 
    686727    !          
    687728    !                 
    688     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)) 
    692        !        
    693        fse3t(:,:,i) = e3t(i) 
    694        gdepw_ps(:,:,i) = gdepw(i) 
    695        ! 
    696     END DO 
     729    IF( .NOT. ldbletanh ) THEN 
     730       DO i = 1,jpk 
     731          !  
     732          zw = REAL( i , 8 ) 
     733          zt = REAL( i , 8 ) + 0.5 
     734          gdepw(i) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth) / zacr ) )  ) 
     735          e3t  (i) =          za0      + za1        * TANH(       (zt-zkth) / zacr   ) 
     736          fse3t(:,:,i) = e3t(i) 
     737          gdepw_ps(:,:,i) = gdepw(i) 
     738          ! 
     739       END DO 
     740    ELSE 
     741       DO i = 1,jpk 
     742          zw = REAL( i , 8 ) 
     743          zt = REAL( i , 8 ) + 0.5 
     744          ! Double tanh function 
     745          gdepw(i) = ( zsur + za0 * zw + za1 * zacr * LOG ( COSH( (zw-zkth ) / zacr  ) )    & 
     746             &                         + za2 * zacr2* LOG ( COSH( (zw-zkth2) / zacr2 ) )  ) 
     747          e3t  (i) =          za0      + za1        * TANH(       (zt-zkth ) / zacr  )    & 
     748             &                         + za2        * TANH(       (zt-zkth2) / zacr2 ) 
     749          fse3t(:,:,i) = e3t(i) 
     750          gdepw_ps(:,:,i) = gdepw(i) 
     751       END DO 
     752    ENDIF 
    697753    !                                  
    698754    gdepw(1) = 0.0  
  • trunk/NEMOGCM/TOOLS/NESTING/src/agrif_readwrite.f90

    r1 r60  
    387387    status = nf90_close(ncid)      
    388388    ! 
    389     WHERE(CoarseGrid%Bathy_meter.GE.0) 
     389    IF(MINVAL(CoarseGrid%Bathy_meter) < 0) CoarseGrid%Bathy_meter(:,:) = -1.0 * CoarseGrid%Bathy_meter(:,:) 
     390 
     391    WHERE(CoarseGrid%Bathy_meter.LT.0) 
    390392       CoarseGrid%Bathy_meter = 0.0 
    391393    END WHERE 
    392     !       
    393     CoarseGrid%Bathy_meter(:,:) = -1.0 * CoarseGrid%Bathy_meter(:,:) 
    394     !       
     394 
    395395    Read_Bathy_meter = 1 
    396396    RETURN 
  • trunk/NEMOGCM/TOOLS/NESTING/src/agrif_types.f90

    r1 r60  
    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 ppacr,ppacr2,ppdzmin,pphmax,ppkth,ppkth2,smoothing_factor,e3zps_min,e3zps_rat 
     54  LOGICAL ldbletanh 
     55  REAL*8 psur,pa0,pa1,pa2,adatrj 
    5556  !        
    5657  LOGICAL partial_steps,smoothing,bathy_update 
     
    7475  NAMELIST /nesting/imin,imax,jmin,jmax,rho,rhot,bathy_update,updated_parent_file       
    7576  ! 
    76   NAMELIST /vertical_grid/ppkth,ppacr,ppdzmin,pphmax,psur,pa0,pa1,N 
     77  NAMELIST /vertical_grid/ppkth,ppkth2,ppacr,ppacr2,ppdzmin,pphmax,psur,pa0,pa1,pa2,N,ldbletanh 
    7778  !  
    7879  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.