Changeset 409
- Timestamp:
- 2006-03-20T17:46:01+01:00 (18 years ago)
- Location:
- trunk/NEMO/OPA_SRC/TRA
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/TRA/trabbl.F90
r258 r409 16 16 !!---------------------------------------------------------------------- 17 17 !! * Modules used 18 USE oce ! ocean dynamics and active tracers 19 USE dom_oce ! ocean space and time domain 20 USE trdmod_oce ! ocean variables trends 21 USE in_out_manager ! I/O manager 22 USE prtctl ! Print control 18 USE oce ! ocean dynamics and active tracers 19 USE dom_oce ! ocean space and time domain 20 USE trdmod_oce ! ocean variables trends 21 USE eosbn2 , ONLY : neos ! type of equation of state 22 USE in_out_manager ! I/O manager 23 USE prtctl ! Print control 23 24 24 25 IMPLICIT NONE … … 30 31 31 32 !! * Shared module variables 33 REAL(wp), PUBLIC :: & !!: * bbl namelist * 34 atrbbl = 1.e+3 !: lateral coeff. for BBL scheme (m2/s) 35 #if defined key_trabbl_dif 32 36 LOGICAL, PUBLIC, PARAMETER :: & !: 33 37 lk_trabbl_dif = .TRUE. !: diffusive bottom boundary layer flag 34 REAL(wp), PUBLIC :: & !!: * bbl namelist * 35 atrbbl = 1.e+3 !: lateral coeff. for bottom boundary 36 ! ! layer scheme (m2/s) 38 #else 39 LOGICAL, PUBLIC, PARAMETER :: & !: 40 lk_trabbl_dif = .FALSE. !: diffusive bottom boundary layer flag 41 #endif 42 37 43 # if defined key_trabbl_adv 38 44 LOGICAL, PUBLIC, PARAMETER :: & !: … … 228 234 ! multiplied by the slope of the ocean bottom 229 235 236 SELECT CASE ( neos ) 237 238 CASE ( 0 ) ! 0 :Jackett and McDougall (1994) formulation 239 230 240 # if defined key_vectopt_loop && ! defined key_autotasking 231 241 jj = 1 … … 276 286 END DO 277 287 288 CASE ( 1 ) ! Linear formulation function of temperature only 289 ! 290 # if defined key_vectopt_loop && ! defined key_autotasking 291 jj = 1 292 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling) 293 # else 294 DO jj = 1, jpjm1 295 DO ji = 1, jpim1 296 # endif 297 ! local 'density/temperature' gradient along i-bathymetric slope 298 zgdrho = ztnb(ji+1,jj) - ztnb(ji,jj) 299 ! sign of local i-gradient of density multiplied by the i-slope 300 zsign = SIGN( 0.5, - zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 301 zki(ji,jj) = ( 0.5 - zsign ) * zahu(ji,jj) 302 # if ! defined key_vectopt_loop || defined key_autotasking 303 END DO 304 # endif 305 END DO 306 307 # if defined key_vectopt_loop && ! defined key_autotasking 308 jj = 1 309 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling) 310 # else 311 DO jj = 1, jpjm1 312 DO ji = 1, jpim1 313 # endif 314 ! local density gradient along j-bathymetric slope 315 zgdrho = ztnb(ji,jj+1) - ztnb(ji,jj) 316 ! sign of local j-gradient of density multiplied by the j-slope 317 zsign = sign( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 318 zkj(ji,jj) = ( 0.5 - zsign ) * zahv(ji,jj) 319 # if ! defined key_vectopt_loop || defined key_autotasking 320 END DO 321 # endif 322 END DO 323 324 CASE ( 2 ) ! Linear formulation function of temperature and salinity 325 326 IF(lwp) WRITE(numout,cform_err) 327 IF(lwp) WRITE(numout,*) ' use of linear eos rho(T,S) = rau0 * ( rbeta * S - ralpha * T )' 328 IF(lwp) WRITE(numout,*) ' bbl not implented: easy to do it ' 329 nstop = nstop + 1 330 331 CASE DEFAULT 332 333 IF(lwp) WRITE(numout,cform_err) 334 IF(lwp) WRITE(numout,*) ' bad flag value for neos = ', neos 335 nstop = nstop + 1 336 337 END SELECT 278 338 279 339 ! 2. Additional second order diffusive trends … … 420 480 IF(lwp) THEN 421 481 WRITE(numout,*) 422 WRITE(numout,*) 'tra_bbl_init : * Diffusive Bottom Boundary Layer'482 WRITE(numout,*) 'tra_bbl_init : ' 423 483 WRITE(numout,*) '~~~~~~~~~~~~' 484 IF (lk_trabbl_dif ) THEN 485 WRITE(numout,*) ' * Diffusive Bottom Boundary Layer' 486 ENDIF 424 487 IF( lk_trabbl_adv ) THEN 425 488 WRITE(numout,*) ' * Advective Bottom Boundary Layer' -
trunk/NEMO/OPA_SRC/TRA/trabbl_adv.h90
r258 r409 73 73 zgdrho, zbtr, zta, zsa ! " " 74 74 REAL(wp), DIMENSION(jpi,jpj) :: & 75 zki, zkj, zkw, zkx, zky, zkz, & ! temporary workspace arrays 76 ztnb, zsnb, zdep, ztbb, zsbb, & ! " " 75 ztnb, zsnb, zdep, ztbb, zsbb, & ! temporary workspace arrays 77 76 zahu, zahv ! " " 78 77 REAL(wp), DIMENSION(jpi,jpj) :: & ! temporary workspace arrays … … 160 159 CALL lbc_lnk( zsnb, 'T', 1. ) ; CALL lbc_lnk( zsbb, 'T', 1. ) 161 160 162 ! Conditional diffusion along the slope in the bottom boundary layer163 164 #if defined key_trabbl_dif165 # if defined key_vectopt_loop && ! defined key_autotasking166 jj = 1167 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling)168 # else169 DO jj = 1, jpjm1170 DO ji = 1, jpim1171 # endif172 iku = mbku(ji,jj)173 ikv = mbkv(ji,jj)174 zahu(ji,jj) = atrbbl*e2u(ji,jj)*fse3u(ji,jj,iku)/e1u(ji,jj) * umask(ji,jj,1)175 zahv(ji,jj) = atrbbl*e1v(ji,jj)*fse3v(ji,jj,ikv)/e2v(ji,jj) * vmask(ji,jj,1)176 # if ! defined key_vectopt_loop || defined key_autotasking177 END DO178 # endif179 END DO180 #endif181 182 183 161 ! 2. Criteria of additional bottom diffusivity: grad(rho).grad(h)<0 184 162 ! -------------------------------------------- … … 204 182 ! ... sign of local i-gradient of density multiplied by the i-slope 205 183 zsign = sign( 0.5, -zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 206 zki(ji,jj) = ( 0.5 - zsign ) * zahu(ji,jj)207 184 208 185 zsigna= sign(0.5, zunb(ji,jj)*( zdep(ji+1,jj) - zdep(ji,jj) )) … … 225 202 ! ... sign of local j-gradient of density multiplied by the j-slope 226 203 zsign = sign( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 227 zkj(ji,jj) = ( 0.5 - zsign ) * zahv(ji,jj)228 204 229 205 zsigna= sign(0.5, zvnb(ji,jj)*(zdep(ji,jj+1) - zdep(ji,jj) ) ) … … 234 210 235 211 CASE ( 1 ) ! Linear formulation function of temperature only 236 237 IF(lwp) WRITE(numout,cform_err) 238 IF(lwp) WRITE(numout,*) ' use of linear eos rho(T,S) = rau0 * ( rbeta * S - ralpha * T )' 239 IF(lwp) WRITE(numout,*) ' bbl not implented: easy to do it ' 240 nstop = nstop + 1 212 ! 213 DO jj = 1, jpjm1 214 DO ji = 1, jpim1 215 ! local 'density/temperature' gradient along i-bathymetric slope 216 zgdrho = ztnb(ji+1,jj) - ztnb(ji,jj) 217 ! sign of local i-gradient of density multiplied by the i-slope 218 zsign = SIGN( 0.5, - zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 219 220 zsigna= sign(0.5, zunb(ji,jj)*( zdep(ji+1,jj) - zdep(ji,jj) )) 221 zalphax(ji,jj)=(0.5+zsigna)*(0.5-zsign)*umask(ji,jj,1) 222 END DO 223 END DO 224 225 DO jj = 1, jpjm1 226 DO ji = 1, jpim1 227 ! local density gradient along j-bathymetric slope 228 zgdrho = ztnb(ji,jj+1) - ztnb(ji,jj) 229 ! sign of local j-gradient of density multiplied by the j-slope 230 zsign = sign( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 231 232 zsigna= sign(0.5, zvnb(ji,jj)*(zdep(ji,jj+1) - zdep(ji,jj) ) ) 233 zalphay(ji,jj)=(0.5+zsigna)*(0.5-zsign)*vmask(ji,jj,1) 234 END DO 235 END DO 241 236 242 237 CASE ( 2 ) ! Linear formulation function of temperature and salinity … … 285 280 ! lateral boundary conditions on u_bbl and v_bbl (changed sign) 286 281 CALL lbc_lnk( u_bbl, 'U', -1. ) ; CALL lbc_lnk( v_bbl, 'V', -1. ) 287 288 289 290 #if defined key_trabbl_dif291 ! 4. Additional second order diffusive trends292 ! -------------------------------------------293 294 ! ... first derivative (gradient)295 DO jj = 1, jpjm1296 DO ji = 1, fs_jpim1 ! vertor opt.297 zkx(ji,jj) = zki(ji,jj)*( ztbb(ji+1,jj) - ztbb(ji,jj) )298 zkz(ji,jj) = zki(ji,jj)*( zsbb(ji+1,jj) - zsbb(ji,jj) )299 300 zky(ji,jj) = zkj(ji,jj)*( ztbb(ji,jj+1) - ztbb(ji,jj) )301 zkw(ji,jj) = zkj(ji,jj)*( zsbb(ji,jj+1) - zsbb(ji,jj) )302 END DO303 END DO304 305 IF( cp_cfg == "orca" ) THEN306 SELECT CASE ( jp_cfg )307 ! ! =======================308 CASE ( 2 ) ! ORCA_R2 configuration309 ! ! =======================310 ! Gibraltar enhancement of BBL311 zkx( mi0(139):mi1(140) , mj0(102):mj1(102) ) = 4.e0 * zkx( mi0(139):mi1(140) , mj0(102):mj1(102) )312 zky( mi0(139):mi1(140) , mj0(102):mj1(102) ) = 4.e0 * zky( mi0(139):mi1(140) , mj0(102):mj1(102) )313 314 ! Red Sea enhancement of BBL315 zkx( mi0(161):mi1(162) , mj0(88):mj1(88) ) = 10.e0 * zkx( mi0(161):mi1(162) , mj0(88):mj1(88) )316 zky( mi0(161):mi1(162) , mj0(88):mj1(88) ) = 10.e0 * zky( mi0(161):mi1(162) , mj0(88):mj1(88) )317 318 ! ! =======================319 CASE ( 4 ) ! ORCA_R4 configuration320 ! ! =======================321 ! Gibraltar enhancement of BBL322 zkx( mi0(70):mi1(71) , mj0(52):mj1(52) ) = 4.e0 * zkx( mi0(70):mi1(71) , mj0(52):mj1(52) )323 zky( mi0(70):mi1(71) , mj0(52):mj1(52) ) = 4.e0 * zky( mi0(70):mi1(71) , mj0(52):mj1(52) )324 325 END SELECT326 327 ENDIF328 329 ! ... second derivative (divergence) and add to the general tracer trend330 331 # if defined key_vectopt_loop && ! defined key_autotasking332 jj = 1333 DO ji = jpi+2, jpij-jpi-1 ! vector opt. (forced unrolling)334 # else335 DO jj = 2, jpjm1336 DO ji = 2, jpim1337 # endif338 ik = mbkt(ji,jj)339 zbtr = 1. / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,ik) )340 zta = ( zkx(ji,jj) - zkx(ji-1,jj ) &341 & + zky(ji,jj) - zky(ji ,jj-1) ) * zbtr342 zsa = ( zkz(ji,jj) - zkz(ji-1,jj ) &343 & + zkw(ji,jj) - zkw(ji ,jj-1) ) * zbtr344 ta(ji,jj,ik) = ta(ji,jj,ik) + zta345 sa(ji,jj,ik) = sa(ji,jj,ik) + zsa346 #if ! defined key_vectopt_loop || defined key_autotasking347 END DO348 #endif349 END DO350 351 ! save the trends for diagnostic352 ! BBL lateral diffusion tracers trends353 IF( l_trdtra ) THEN354 # if defined key_vectopt_loop && ! defined key_autotasking355 jj = 1356 DO ji = jpi+2, jpij-jpi-1 ! vector opt. (forced unrolling)357 # else358 DO jj = 2, jpjm1359 DO ji = 2, jpim1360 # endif361 ik = mbkt(ji,jj)362 tldfbbl(ji,jj) = ta(ji,jj,ik) - ztdta(ji,jj,ik)363 sldfbbl(ji,jj) = sa(ji,jj,ik) - ztdsa(ji,jj,ik)364 # if ! defined key_vectopt_loop || defined key_autotasking365 END DO366 # endif367 END DO368 369 ! save the new ta & sa trends370 ztdta(:,:,:) = ta(:,:,:)371 ztdsa(:,:,:) = sa(:,:,:)372 373 ENDIF374 375 #endif376 282 377 283 ! 5. Along sigma advective trend … … 398 304 zwx(ji,jj) = ( ( zfui + ABS( zfui ) ) * ztbb(ji ,jj ) & 399 305 & +( zfui - ABS( zfui ) ) * ztbb(ji+1,jj ) ) * 0.5 400 zwy(ji,jj) = ( ( zf ui+ ABS( zfvj ) ) * ztbb(ji ,jj ) &401 & +( zf ui- ABS( zfvj ) ) * ztbb(ji ,jj+1) ) * 0.5306 zwy(ji,jj) = ( ( zfvj + ABS( zfvj ) ) * ztbb(ji ,jj ) & 307 & +( zfvj - ABS( zfvj ) ) * ztbb(ji ,jj+1) ) * 0.5 402 308 zww(ji,jj) = ( ( zfui + ABS( zfui ) ) * zsbb(ji ,jj ) & 403 309 & +( zfui - ABS( zfui ) ) * zsbb(ji+1,jj ) ) * 0.5 404 zwz(ji,jj) = ( ( zf ui+ ABS( zfvj ) ) * zsbb(ji ,jj ) &405 & +( zf ui- ABS( zfvj ) ) * zsbb(ji ,jj+1) ) * 0.5310 zwz(ji,jj) = ( ( zfvj + ABS( zfvj ) ) * zsbb(ji ,jj ) & 311 & +( zfvj - ABS( zfvj ) ) * zsbb(ji ,jj+1) ) * 0.5 406 312 #if ! defined key_vectopt_loop || defined key_autotasking 407 313 END DO … … 462 368 DO jk= 1, jpkm1 463 369 DO jj=1, jpjm1 464 DO ji = 1, fs_jpim1 ! ve rtor opt.465 zwu(ji,jj) = -e2u(ji,jj) * u_bbl(ji,jj,jk) 466 zwv(ji,jj) = -e1v(ji,jj) * v_bbl(ji,jj,jk) 370 DO ji = 1, fs_jpim1 ! vector opt. 371 zwu(ji,jj) = -e2u(ji,jj) * u_bbl(ji,jj,jk) * fse3u(ji,jj,jk) 372 zwv(ji,jj) = -e1v(ji,jj) * v_bbl(ji,jj,jk) * fse3v(ji,jj,jk) 467 373 END DO 468 374 END DO … … 471 377 DO jj = 2, jpjm1 472 378 DO ji = fs_2, fs_jpim1 ! vector opt. 473 zbt = e1t(ji,jj) * e2t(ji,jj) 379 zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 474 380 zhdivn(ji,jj,jk) = ( zwu(ji,jj) - zwu(ji-1,jj ) & 475 381 + zwv(ji,jj) - zwv(ji ,jj-1) ) / zbt
Note: See TracChangeset
for help on using the changeset viewer.