- Timestamp:
- 10/26/12 03:00:39 (11 years ago)
- Location:
- trunk/NEMOGCM/TOOLS/NESTING
- Files:
-
- 1 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/TOOLS/NESTING/agulhas
r1 r60 38 38 pa0 = 255.58049070440 39 39 pa1 = 245.58132232490 40 ldbletanh = .FALSE. 41 pa2 = 100.7609285000000 42 ppkth2= 48.02989372000000 43 ppacr2= 13.00000000000 40 44 N = 31 41 45 / -
trunk/NEMOGCM/TOOLS/NESTING/src/agrif_connect_topo.f90
r1 r60 105 105 IMPLICIT NONE 106 106 ! 107 REAL*8 :: za 1,za0,zsur,zacr,zkth,zmin,zmax107 REAL*8 :: za2,za1,za0,zsur,zacr,zacr2,zkth,zkth2,zmin,zmax,zw,zt 108 108 TYPE(Coordinates) :: Grid 109 109 INTEGER :: i,j … … 134 134 za0 = pa0 135 135 za1 = pa1 136 za2 = pa2 136 137 ! 137 138 ELSE … … 148 149 zacr = ppacr 149 150 zkth = ppkth 151 zacr2 = ppacr2 152 zkth2 = ppkth2 150 153 151 154 ! 152 155 ALLOCATE(gdepw(N),gdept(N),e3w(N),e3t(N)) 153 156 ! 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 160 183 ! 161 184 gdepw(1) = 0.0 … … 227 250 IMPLICIT NONE 228 251 ! 229 REAL*8 :: za 1,za0,zsur,zacr,zkth,zmin,zmax252 REAL*8 :: za2,za1,za0,zsur,zacr,zacr2,zkth,zkth2,zmin,zt,zw 230 253 TYPE(Coordinates) :: Grid 231 254 INTEGER :: i,j … … 257 280 za0 = pa0 258 281 za1 = pa1 282 za2 = pa2 259 283 ! 260 284 ELSE … … 271 295 zacr = ppacr 272 296 zkth = ppkth 273 297 zacr2 = ppacr2 298 zkth2 = ppkth2 274 299 ! 275 300 ALLOCATE(gdepw(N),gdept(N),e3w(N),e3t(N)) 276 301 ! 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 284 328 ! 285 329 gdepw(1) = 0.0 … … 704 748 ! 705 749 INTEGER :: ideb,jdeb,ifin,jfin 706 REAL*8 :: za 1,za0,zsur,zacr,zkth,zmin750 REAL*8 :: za2,za1,za0,zsur,zacr,zacr2,zkth,zkth2,zmin,zt,zw 707 751 INTEGER :: i,j 708 752 INTEGER :: k1 … … 727 771 za0 = pa0 728 772 za1 = pa1 773 za2 = pa2 729 774 ! 730 775 ELSE … … 741 786 zacr = ppacr 742 787 zkth = ppkth 788 zacr2 = ppacr2 789 zkth2 = ppkth2 743 790 744 791 ! 745 792 ALLOCATE(gdepw(N),gdept(N),e3w(N),e3t(N)) 746 793 ! 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 754 820 ! 755 821 zmin = gdepw(4) -
trunk/NEMOGCM/TOOLS/NESTING/src/agrif_partial_steps.f90
r1 r60 36 36 ! 37 37 TYPE(Coordinates) :: Grid 38 REAL*8 :: za 1,za0,zsur,zacr,zkth,zdepth,zdepwp,zmin,zmax,zdiff,ze3tp,ze3wp38 REAL*8 :: za2,za1,za0,zsur,zacr,zacr2,zkth,zkth2,zdepth,zdepwp,zmin,zmax,zdiff,ze3tp,ze3wp,zw,zt 39 39 INTEGER :: i,j,jk,jj,ji,jpj,jpi,ik,ii,ipt,jpt 40 40 INTEGER, DIMENSION(1) :: k … … 43 43 REAL*8, POINTER, DIMENSION(:,:) :: hdepw,e3tp,e3wp 44 44 REAL*8, POINTER, DIMENSION(:,:,:) :: gdept_ps,gdepw_ps 45 REAL*8 e3t_ps46 45 47 46 ! … … 76 75 za0 = pa0 77 76 za1 = pa1 77 za2 = pa2 78 78 ! 79 79 ELSE … … 90 90 zacr = ppacr 91 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 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 101 121 ! 102 122 … … 235 255 INTEGER :: i,j,ji,ij,ii,jj,jpt,ipt 236 256 REAL,DIMENSION(N) :: gdepw,e3t 237 REAL :: za0,za1,z sur,zacr,zkth,zmin,zmax,zdepth257 REAL :: za0,za1,za2,zsur,zacr,zacr2,zkth,zkth2,zmin,zmax,zdepth,zw,zt 238 258 INTEGER :: kbathy,jk,diff 239 259 INTEGER :: bornex,borney,bornex2,borney2 … … 256 276 za0 = pa0 257 277 za1 = pa1 278 za2 = pa2 258 279 ! 259 280 ELSE … … 269 290 zacr = ppacr 270 291 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 277 315 ! 278 316 gdepw(1) = 0.0 … … 646 684 REAL*8, DIMENSION(:,:,:) :: fse3u,fse3t,fse3v 647 685 ! 648 REAL*8 :: za 1,za0,zsur,zacr,zkth,zdepth,zdepwp,zmin,zmax,zdiff,ze3tp,ze3wp686 REAL*8 :: za2,za1,za0,zsur,zacr2,zacr,zkth2,zkth,zdepth,zdepwp,zmin,zmax,zdiff,ze3tp,ze3wp,zw,zt 649 687 INTEGER :: i,j,jk,jj,ji,jpj,jpi,ik,ii,ipt,jpt,jpk 650 688 INTEGER, DIMENSION(1) :: k … … 679 717 za0 = pa0 680 718 za1 = pa1 719 za2 = pa2 681 720 ! 682 721 ENDIF … … 684 723 zacr = ppacr 685 724 zkth = ppkth 725 zacr2 = ppacr2 726 zkth2 = ppkth2 686 727 ! 687 728 ! 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 697 753 ! 698 754 gdepw(1) = 0.0 -
trunk/NEMOGCM/TOOLS/NESTING/src/agrif_readwrite.f90
r1 r60 387 387 status = nf90_close(ncid) 388 388 ! 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) 390 392 CoarseGrid%Bathy_meter = 0.0 391 393 END WHERE 392 ! 393 CoarseGrid%Bathy_meter(:,:) = -1.0 * CoarseGrid%Bathy_meter(:,:) 394 ! 394 395 395 Read_Bathy_meter = 1 396 396 RETURN -
trunk/NEMOGCM/TOOLS/NESTING/src/agrif_types.f90
r1 r60 51 51 INTEGER jpizoom,jpjzoom,nb_connection_pts 52 52 ! 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 55 56 ! 56 57 LOGICAL partial_steps,smoothing,bathy_update … … 74 75 NAMELIST /nesting/imin,imax,jmin,jmax,rho,rhot,bathy_update,updated_parent_file 75 76 ! 76 NAMELIST /vertical_grid/ppkth,pp acr,ppdzmin,pphmax,psur,pa0,pa1,N77 NAMELIST /vertical_grid/ppkth,ppkth2,ppacr,ppacr2,ppdzmin,pphmax,psur,pa0,pa1,pa2,N,ldbletanh 77 78 ! 78 79 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.