- Timestamp:
- 2010-11-12T15:51:18+01:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90
r2287 r2379 160 160 REAL(wp) :: zacr, zdzmin, zhmax ! par_CONFIG_Rxx.h90 161 161 REAL(wp) :: zrefdep ! depth of the reference level (~10m) 162 REAL(wp) :: za2, zkth2, zacr2 ! Values for optional double tanh function set from parameters 162 163 !!---------------------------------------------------------------------- 163 164 … … 166 167 zkth = ppkth ; zacr = ppacr 167 168 zdzmin = ppdzmin ; zhmax = pphmax 169 zkth2 = ppkth2 ; zacr2 = ppacr2 ! optional (ldbletanh=T) double tanh parameters 168 170 169 171 ! If ppa1 and ppa0 and ppsur are et to pp_to_be_computed … … 181 183 ELSE 182 184 za1 = ppa1 ; za0 = ppa0 ; zsur = ppsur 185 za2 = ppa2 ! optional (ldbletanh=T) double tanh parameter 183 186 ENDIF 184 187 … … 203 206 WRITE(numout,*) ' zkth = ', zkth 204 207 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 205 213 ENDIF 206 214 ENDIF … … 220 228 END DO 221 229 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 230 254 gdepw_0(1) = 0.e0 ! force first w-level to be exactly at zero 231 255 ENDIF 232 256 233 257 !!gm BUG in s-coordinate this does not work! 234 ! deepest/shallowest W level Above/Bel low ~10m258 ! deepest/shallowest W level Above/Below ~10m 235 259 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 Bel low ~10m237 nla10 = nlb10 - 1 ! deepest W level Above 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 238 262 !!gm end bug 239 263 … … 746 770 INTEGER :: ji, jj, jk ! dummy loop indices 747 771 INTEGER :: ik, it ! temporary integers 772 INTEGER :: nlbelow ! temporary integer 748 773 LOGICAL :: ll_print ! Allow control print for debugging 749 774 REAL(wp) :: ze3tp , ze3wp ! Last ocean level thickness at T- and W-points … … 751 776 REAL(wp) :: zmax, zmin ! Maximum and minimum depth 752 777 REAL(wp) :: zdiff ! temporary scalar 778 REAL(wp) :: zrefdep ! temporary scalar 753 779 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprt ! 3D workspace 754 780 !!--------------------------------------------------------------------- … … 772 798 ! =================== 773 799 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 775 805 776 806 mbathy(:,:) = jpkm1 ! initialize mbathy to the maximum ocean level available
Note: See TracChangeset
for help on using the changeset viewer.