Changeset 501
- Timestamp:
- 2006-09-12T13:10:14+02:00 (18 years ago)
- Location:
- trunk/NEMO/TOP_SRC/TRP
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/TOP_SRC/TRP/trcadv_cen2.F90
r433 r501 52 52 !! Part I : horizontal advection 53 53 !! * centered flux: 54 !! * s-coordinate (l k_sco=T) or55 !! * z-coordinate with partial steps (l k_zps=T),54 !! * s-coordinate (ln_sco=T) or 55 !! * z-coordinate with partial steps (ln_zps=T), 56 56 !! the vertical scale factors e3. are inside the derivatives: 57 57 !! zcenu = e2u*e3u un mi(tn) … … 61 61 !! zcenv = e1v vn mj(tn) 62 62 !! * horizontal advective trend (divergence of the fluxes) 63 !! * s-coordinate (l k_sco=T) or64 !! * z-coordinate with partial steps (l k_zps=T)63 !! * s-coordinate (ln_sco=T) or 64 !! * z-coordinate with partial steps (ln_zps=T) 65 65 !! ztra = 1/(e1t*e2t*e3t) { di-1[zwx] + dj-1[zwy] } 66 66 !! * z-coordinate (default key), e3t=e3u=e3v: … … 190 190 zcofj = MAX( zind(ji,jj+1,jk), zind(ji,jj,jk) ) 191 191 ! volume fluxes * 1/2 192 #if defined key_s_coord || defined key_partial_steps192 #if ! defined key_zco 193 193 zfui = 0.5 * e2u(ji,jj) * fse3u(ji,jj,jk) * zun(ji,jj,jk) 194 194 zfvj = 0.5 * e1v(ji,jj) * fse3v(ji,jj,jk) * zvn(ji,jj,jk) … … 219 219 DO jj = 2, jpjm1 220 220 DO ji = fs_2, fs_jpim1 ! vector opt. 221 #if defined key_s_coord || defined key_partial_steps221 #if ! defined key_zco 222 222 zbtr = zbtr2(ji,jj) / fse3t(ji,jj,jk) 223 223 #else … … 233 233 #if defined key_trc_diatrd 234 234 ! recompute the trends in i- and j-direction as Uh gradh(T) 235 # if defined key_s_coord || defined key_partial_steps235 #if ! defined key_zco 236 236 zfui = 0.5 * e2u(ji ,jj) * fse3u(ji, jj,jk) * zun(ji, jj,jk) 237 237 zfui1= 0.5 * e2u(ji-1,jj) * fse3u(ji-1,jj,jk) * zun(ji-1,jj,jk) -
trunk/NEMO/TOP_SRC/TRP/trcadv_muscl.F90
r433 r501 166 166 DO ji = fs_2, fs_jpim1 ! vector opt. 167 167 ! volume fluxes 168 #if defined key_s_coord || defined key_partial_steps168 #if ! defined key_zco 169 169 zeu = e2u(ji,jj) * fse3u(ji,jj,jk) * zun(ji,jj,jk) 170 170 zev = e1v(ji,jj) * fse3v(ji,jj,jk) * zvn(ji,jj,jk) … … 200 200 DO jj = 2, jpjm1 201 201 DO ji = fs_2, fs_jpim1 ! vector opt. 202 #if defined key_s_coord || defined key_partial_steps202 #if ! defined key_zco 203 203 zbtr = 1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) ) 204 204 #else … … 212 212 #if defined key_trc_diatrd 213 213 ! recompute the trends in i- and j-direction as Uh gradh(T) 214 # if defined key_s_coord || defined key_partial_steps214 #if ! defined key_zco 215 215 zfui = e2u(ji ,jj) * fse3u(ji, jj,jk) * un(ji, jj,jk) & 216 216 & - e2u(ji-1,jj) * fse3u(ji-1,jj,jk) * un(ji-1,jj,jk) -
trunk/NEMO/TOP_SRC/TRP/trcadv_muscl2.F90
r433 r501 164 164 DO ji = fs_2, fs_jpim1 ! vector opt. 165 165 ! volume fluxes 166 #if defined key_s_coord || defined key_partial_steps166 #if ! defined key_zco 167 167 zeu = e2u(ji,jj) * fse3u(ji,jj,jk) * zun(ji,jj,jk) 168 168 zev = e1v(ji,jj) * fse3v(ji,jj,jk) * zvn(ji,jj,jk) … … 194 194 DO jj = 2, jpjm1 195 195 DO ji = fs_2, fs_jpim1 ! vector opt. 196 #if defined key_s_coord || defined key_partial_steps196 #if ! defined key_zco 197 197 zev = e1v(ji,jj) * fse3v(ji,jj,jk) 198 198 IF( umask(ji,jj,jk) == 0. ) THEN … … 248 248 DO jj = 2, jpjm1 249 249 DO ji = fs_2, fs_jpim1 ! vector opt. 250 #if defined key_s_coord || defined key_partial_steps250 #if ! defined key_zco 251 251 zbtr = 1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) ) 252 252 #else … … 260 260 #if defined key_trc_diatrd 261 261 ! recompute the trends in i- and j-direction as Uh gradh(T) 262 # if defined key_s_coord || defined key_partial_steps262 #if ! defined key_zco 263 263 zfui = e2u(ji ,jj) * fse3u(ji, jj,jk) * un(ji, jj,jk) & 264 264 & - e2u(ji-1,jj) * fse3u(ji-1,jj,jk) * un(ji-1,jj,jk) -
trunk/NEMO/TOP_SRC/TRP/trcbbc.F90
r494 r501 78 78 79 79 !! * Local declarations 80 #if defined key_vectopt_loop && ! defined key_ autotasking80 #if defined key_vectopt_loop && ! defined key_mpp_omp 81 81 INTEGER :: ji, jn ! dummy loop indices 82 82 #else … … 97 97 98 98 DO jn = 1, jptra 99 #if defined key_vectopt_loop && ! defined key_ autotasking99 #if defined key_vectopt_loop && ! defined key_mpp_omp 100 100 DO ji = jpi+2, jpij-jpi-1 ! vector opt. (forced unrolling) 101 101 tra(ji,1,nbotlevt(ji,1),jn) = tra(ji,1,nbotlevt(ji,1),jn) + qgh_trd(ji,1) … … 206 206 CASE ( 1:2 ) ! geothermal heat flux 207 207 208 #if defined key_vectopt_loop && ! defined key_ autotasking208 #if defined key_vectopt_loop && ! defined key_mpp_omp 209 209 DO ji = 1, jpij ! vector opt. (forced unrolling) 210 210 qgh_trd(ji,1) = ro0cpr * qgh_trd(ji,1) / fse3t(ji,1,nbotlevt(ji,1) ) -
trunk/NEMO/TOP_SRC/TRP/trcbbl.F90
r439 r501 18 18 USE oce_trc ! ocean dynamics and active tracers variables 19 19 USE trc ! ocean passive tracers variables 20 USE trctrp_lec ! passive tracers transport 20 21 USE prtctl_trc ! Print control for debbuging 21 22 USE eosbn2 23 USE lbclnk 24 22 25 IMPLICIT NONE 23 26 PRIVATE … … 53 56 mbkt, mbku, mbkv ! ??? 54 57 55 REAL(wp) :: & !!! * trcbbl namelist *56 atrcbbl = 1.e+3 ! lateral coeff. for bottom boundary layer scheme (m2/s)57 58 58 59 !! * Substitutions … … 115 116 INTEGER :: ik 116 117 INTEGER :: ii0, ii1, ij0, ij1 ! temporary integers 117 # if defined key_partial_steps118 118 INTEGER :: iku1, iku2, ikv1,ikv2 ! temporary intergers 119 119 REAL(wp) :: ze3u, ze3v ! temporary scalars 120 # else121 120 INTEGER :: iku, ikv 122 # endif123 121 REAL(wp) :: & 124 122 zsign, zt, zs, zh, zalbet, & ! temporary scalars … … 161 159 ! mbathy= number of w-level, minimum value=1 (cf dommsk.F) 162 160 163 # if defined key_vectopt_loop && ! defined key_ autotasking161 # if defined key_vectopt_loop && ! defined key_mpp_omp 164 162 jj = 1 165 163 DO ji = 1, jpij ! vector opt. (forced unrolling) … … 172 170 zsnb(ji,jj) = sn(ji,jj,ik) * tmask(ji,jj,1) 173 171 zdep(ji,jj) = fsdept(ji,jj,ik) ! depth of the ocean bottom T-level 174 # if ! defined key_vectopt_loop || defined key_ autotasking175 END DO 176 # endif 177 END DO 178 179 # if defined key_partial_steps 180 ! partial steps correction 181 # if defined key_vectopt_loop && ! defined key_ autotasking182 jj = 1183 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling)172 # if ! defined key_vectopt_loop || defined key_mpp_omp 173 END DO 174 # endif 175 END DO 176 177 IF( ln_zps ) THEN ! partial steps correction 178 179 # if defined key_vectopt_loop && ! defined key_mpp_omp 180 jj = 1 181 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling) 184 182 # else 185 DO jj = 1, jpjm1186 DO ji = 1, jpim1183 DO jj = 1, jpjm1 184 DO ji = 1, jpim1 187 185 # endif 188 iku1 = MAX( mbathy(ji+1,jj )-1, 1 )189 iku2 = MAX( mbathy(ji ,jj )-1, 1 )190 ikv1 = MAX( mbathy(ji ,jj+1)-1, 1 )191 ikv2 = MAX( mbathy(ji ,jj )-1, 1 )192 ze3u = MIN( fse3u(ji,jj,iku1), fse3u(ji,jj,iku2) )193 ze3v = MIN( fse3v(ji,jj,ikv1), fse3v(ji,jj,ikv2) )194 zahu(ji,jj) = atrcbbl * e2u(ji,jj) * ze3u / e1u(ji,jj) * umask(ji,jj,1)195 zahv(ji,jj) = atrcbbl * e1v(ji,jj) * ze3v / e2v(ji,jj) * vmask(ji,jj,1)196 # if ! defined key_vectopt_loop || defined key_ autotasking197 END DO186 iku1 = MAX( mbathy(ji+1,jj )-1, 1 ) 187 iku2 = MAX( mbathy(ji ,jj )-1, 1 ) 188 ikv1 = MAX( mbathy(ji ,jj+1)-1, 1 ) 189 ikv2 = MAX( mbathy(ji ,jj )-1, 1 ) 190 ze3u = MIN( fse3u(ji,jj,iku1), fse3u(ji,jj,iku2) ) 191 ze3v = MIN( fse3v(ji,jj,ikv1), fse3v(ji,jj,ikv2) ) 192 zahu(ji,jj) = atrcbbl * e2u(ji,jj) * ze3u / e1u(ji,jj) * umask(ji,jj,1) 193 zahv(ji,jj) = atrcbbl * e1v(ji,jj) * ze3v / e2v(ji,jj) * vmask(ji,jj,1) 194 # if ! defined key_vectopt_loop || defined key_mpp_omp 195 END DO 198 196 # endif 199 END DO200 # else201 # if defined key_vectopt_loop && ! defined key_ autotasking202 jj = 1203 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling)197 END DO 198 ELSE ! z-coordinate - full steps or s-coordinate 199 # if defined key_vectopt_loop && ! defined key_mpp_omp 200 jj = 1 201 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling) 204 202 # else 205 DO jj = 1, jpjm1206 DO ji = 1, jpim1203 DO jj = 1, jpjm1 204 DO ji = 1, jpim1 207 205 # endif 208 iku = mbku(ji,jj)209 ikv = mbkv(ji,jj)210 zahu(ji,jj) = atrcbbl * e2u(ji,jj) * fse3u(ji,jj,iku) / e1u(ji,jj) * umask(ji,jj,1)211 zahv(ji,jj) = atrcbbl * e1v(ji,jj) * fse3v(ji,jj,ikv) / e2v(ji,jj) * vmask(ji,jj,1)212 # if ! defined key_vectopt_loop || defined key_ autotasking213 END DO206 iku = mbku(ji,jj) 207 ikv = mbkv(ji,jj) 208 zahu(ji,jj) = atrcbbl * e2u(ji,jj) * fse3u(ji,jj,iku) / e1u(ji,jj) * umask(ji,jj,1) 209 zahv(ji,jj) = atrcbbl * e1v(ji,jj) * fse3v(ji,jj,ikv) / e2v(ji,jj) * vmask(ji,jj,1) 210 # if ! defined key_vectopt_loop || defined key_mpp_omp 211 END DO 214 212 # endif 215 END DO216 # endif 213 END DO 214 ENDIF 217 215 218 216 !! … … 227 225 ! first derivative (gradient) 228 226 229 # if defined key_vectopt_loop && ! defined key_ autotasking227 # if defined key_vectopt_loop && ! defined key_mpp_omp 230 228 jj = 1 231 229 DO ji = 1, jpij ! vector opt. (forced unrolling) … … 236 234 ik = mbkt(ji,jj) 237 235 ztrb(ji,jj) = trb(ji,jj,ik,jn) * tmask(ji,jj,1) 238 # if ! defined key_vectopt_loop || defined key_ autotasking239 END DO 240 # endif 241 END DO 242 243 # if defined key_vectopt_loop && ! defined key_ autotasking236 # if ! defined key_vectopt_loop || defined key_mpp_omp 237 END DO 238 # endif 239 END DO 240 241 # if defined key_vectopt_loop && ! defined key_mpp_omp 244 242 jj = 1 245 243 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling) … … 250 248 zkx(ji,jj) = bblx(ji,jj) * zahu(ji,jj) * ( ztrb(ji+1,jj) - ztrb(ji,jj) ) 251 249 zky(ji,jj) = bbly(ji,jj) * zahv(ji,jj) * ( ztrb(ji,jj+1) - ztrb(ji,jj) ) 252 # if ! defined key_vectopt_loop || defined key_ autotasking250 # if ! defined key_vectopt_loop || defined key_mpp_omp 253 251 END DO 254 252 # endif … … 266 264 CASE ( 0 ) ! Jackett and McDougall (1994) formulation 267 265 268 # if defined key_vectopt_loop && ! defined key_ autotasking266 # if defined key_vectopt_loop && ! defined key_mpp_omp 269 267 jj = 1 270 268 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling) … … 285 283 zsign = SIGN( 0.5, - zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 286 284 zki(ji,jj) = ( 0.5 - zsign ) * zahu(ji,jj) 287 # if ! defined key_vectopt_loop || defined key_ autotasking288 END DO 289 # endif 290 END DO 291 292 # if defined key_vectopt_loop && ! defined key_ autotasking285 # if ! defined key_vectopt_loop || defined key_mpp_omp 286 END DO 287 # endif 288 END DO 289 290 # if defined key_vectopt_loop && ! defined key_mpp_omp 293 291 jj = 1 294 292 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling) … … 307 305 - ( zsnb(ji,jj+1) - zsnb(ji,jj) ) 308 306 ! sign of local j-gradient of density multiplied by the j-slope 309 zsign = sign( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) )307 zsign = SIGN( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 310 308 zkj(ji,jj) = ( 0.5 - zsign ) * zahv(ji,jj) 311 # if ! defined key_vectopt_loop || defined key_ autotasking309 # if ! defined key_vectopt_loop || defined key_mpp_omp 312 310 END DO 313 311 # endif … … 316 314 CASE ( 1 ) ! Linear formulation function of temperature only 317 315 318 # if defined key_vectopt_loop && ! defined key_ autotasking316 # if defined key_vectopt_loop && ! defined key_mpp_omp 319 317 jj = 1 320 318 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling) … … 328 326 zsign = SIGN( 0.5, - zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 329 327 zki(ji,jj) = ( 0.5 - zsign ) * zahu(ji,jj) 330 # if ! defined key_vectopt_loop || defined key_ autotasking331 END DO 332 # endif 333 END DO 334 335 # if defined key_vectopt_loop && ! defined key_ autotasking328 # if ! defined key_vectopt_loop || defined key_mpp_omp 329 END DO 330 # endif 331 END DO 332 333 # if defined key_vectopt_loop && ! defined key_mpp_omp 336 334 jj = 1 337 335 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling) … … 343 341 zgdrho = ( ztnb(ji,jj+1) - ztnb(ji,jj) ) 344 342 ! sign of local j-gradient of density multiplied by the j-slope 345 zsign = sign( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) )343 zsign = SIGN( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 346 344 zkj(ji,jj) = ( 0.5 - zsign ) * zahv(ji,jj) 347 345 348 # if ! defined key_vectopt_loop || defined key_ autotasking346 # if ! defined key_vectopt_loop || defined key_mpp_omp 349 347 END DO 350 348 # endif … … 378 376 CASE DEFAULT 379 377 380 IF(lwp) WRITE(numout,cform_err) 381 IF(lwp) WRITE(numout,*) ' bad flag value for neos = ', neos 382 nstop = nstop + 1 378 WRITE(ctmp1,*) ' bad flag value for neos = ', neos 379 CALL ctl_stop( ctmp1 ) 383 380 384 381 END SELECT … … 390 387 ! first derivative (gradient) 391 388 392 # if defined key_vectopt_loop && ! defined key_ autotasking389 # if defined key_vectopt_loop && ! defined key_mpp_omp 393 390 jj = 1 394 391 DO ji = 1, jpij ! vector opt. (forced unrolling) … … 399 396 ik = mbkt(ji,jj) 400 397 ztrb(ji,jj) = trb(ji,jj,ik,jn) * tmask(ji,jj,1) 401 # if ! defined key_vectopt_loop || defined key_ autotasking402 END DO 403 # endif 404 END DO 405 # if defined key_vectopt_loop && ! defined key_ autotasking398 # if ! defined key_vectopt_loop || defined key_mpp_omp 399 END DO 400 # endif 401 END DO 402 # if defined key_vectopt_loop && ! defined key_mpp_omp 406 403 jj = 1 407 404 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling) … … 412 409 zkx(ji,jj) = zki(ji,jj) * ( ztrb(ji+1,jj) - ztrb(ji,jj) ) 413 410 zky(ji,jj) = zkj(ji,jj) * ( ztrb(ji,jj+1) - ztrb(ji,jj) ) 414 # if ! defined key_vectopt_loop || defined key_ autotasking411 # if ! defined key_vectopt_loop || defined key_mpp_omp 415 412 END DO 416 413 # endif … … 450 447 451 448 ! second derivative (divergence) and add to the general tracer trend 452 # if defined key_vectopt_loop && ! defined key_ autotasking449 # if defined key_vectopt_loop && ! defined key_mpp_omp 453 450 jj = 1 454 451 DO ji = jpi+2, jpij-jpi-1 ! vector opt. (forced unrolling) … … 462 459 & + zky(ji,jj) - zky(ji ,jj-1) ) * zbtr 463 460 tra(ji,jj,ik,jn) = tra(ji,jj,ik,jn) + ztra 464 # if ! defined key_vectopt_loop || defined key_ autotasking461 # if ! defined key_vectopt_loop || defined key_mpp_omp 465 462 END DO 466 463 # endif … … 498 495 !! ** Purpose : Initialization for the bottom boundary layer scheme. 499 496 !! 500 !! ** Method : Read the namtrcbbl namelist and check the parameters501 !! called by tra_bbl at the first timestep (nittrc000)502 497 !! 503 498 !! History : … … 506 501 !! * Local declarations 507 502 INTEGER :: ji, jj ! dummy loop indices 508 INTEGER :: numnat=80 509 NAMELIST/namtrcbbl/ atrcbbl 510 511 !!---------------------------------------------------------------------- 512 ! Read Namelist namtrcbbl : bottom boundary layer scheme 513 ! -------------------- 514 515 OPEN(numnat,FILE='namelist.trp.cfc') 516 REWIND ( numnat ) 517 READ ( numnat, namtrcbbl ) 518 CLOSE(numnat) 519 520 521 ! Parameter control and print 522 ! --------------------------- 523 IF(lwp) THEN 524 WRITE(numout,*) 525 WRITE(numout,*) 'trc_bbl_init : * Diffusive Bottom Boundary Layer' 526 WRITE(numout,*) '~~~~~~~~~~~~' 527 WRITE(numout,*) ' bottom boundary layer coef. atrcbbl = ', atrcbbl 528 # if defined key_trcbbl_adv 529 WRITE(numout,*) ' * Advective Bottom Boundary Layer' 530 # endif 531 WRITE(numout,*) 532 ENDIF 533 503 504 REAL(wp), DIMENSION(jpi,jpj) :: zmbk 505 506 !!---------------------------------------------------------------------- 507 534 508 DO jj = 1, jpj 535 509 DO ji = 1, jpi … … 537 511 END DO 538 512 END DO 513 539 514 DO jj = 1, jpjm1 540 515 DO ji = 1, jpim1 … … 543 518 END DO 544 519 END DO 545 !!bug ??? 546 !!bug Caution : define the vakue of mbku & mbkv everywhere!!! but lbc mpp lnk : pb when closed (0) 520 521 zmbk(:,:) = FLOAT( mbku (:,:) ) 522 CALL lbc_lnk(zmbk,'U',1.) 523 mbku (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 524 525 zmbk(:,:) = FLOAT( mbkv (:,:) ) 526 CALL lbc_lnk(zmbk,'V',1.) 527 mbkv (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 547 528 548 529 # if defined key_trcbbl_adv -
trunk/NEMO/TOP_SRC/TRP/trcbbl_adv.h90
r403 r501 52 52 !! 9.0 ! 04-03 (C. Ethe) Adaptation for Passive tracers 53 53 !!---------------------------------------------------------------------- 54 !! * Modules used 55 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 56 USE eosbn2 57 54 !gh 55 58 56 !! * Arguments 59 57 INTEGER, INTENT( in ) :: kt ! ocean time-step … … 66 64 zsign, zt, zs, zh, zalbet, & ! temporary scalars 67 65 zgdrho, zbtr, ztra ! " " 68 REAL(wp), DIMENSION(jpi,jpj) :: & 69 zki, zkj, zkw, zkx, zky, zkz, & ! temporary workspace arrays 70 ztnb, zsnb, zdep, ztrb, & ! " " 71 zahu, zahv ! " " 66 REAL(wp), DIMENSION(jpi,jpj) :: & 67 ztnb, zsnb, zdep, ztrb ! temporary workspace arrays 72 68 REAL(wp), DIMENSION(jpi,jpj) :: & ! temporary workspace arrays 73 69 zalphax, zwu, zunb, & ! " " 74 70 zalphay, zwv, zvnb, & ! " " 75 zwx, zwy ! " " 71 zwx, zwy, zww, zwz, & ! " " 72 zti, zsi ,ztmin,ztmax, zsmin,zsmax! " " 73 ! " " 76 74 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 77 75 zhdivn ! temporary workspace arrays 78 76 REAL(wp) :: & 79 zfui, zfvj, zbt, zsigna ! temporary scalars 77 zfui, zfvj, zbt, zsigna, & ! temporary scalars 78 iku1,iku2,ikv1,ikv2, & ! temporary scalars 79 ze3u,ze3v, & ! temporary scalars 80 z2,z2dtt ! temporary scalars 80 81 REAL(wp) :: & 81 82 fsalbt, pft, pfs, pfh ! statement function … … 103 104 !!---------------------------------------------------------------------- 104 105 105 IF( kt == nittrc000 ) CALL trc_bbl_init ! initialization at first time-step106 106 IF( kt == nit000 ) CALL trc_bbl_init ! initialization at first time-step 107 107 108 ! 1. 2D fields of bottom temperature and salinity, and bottom slope 108 109 ! ----------------------------------------------------------------- 109 110 ! mbathy= number of w-level, minimum value=1 (cf dommsk.F) 110 111 111 #if defined key_vectopt_loop && ! defined key_ autotasking112 #if defined key_vectopt_loop && ! defined key_mpp_omp 112 113 jj = 1 113 114 DO ji = 1, jpij ! vector opt. (forced unrolling) … … 116 117 DO ji = 1, jpi 117 118 #endif 118 ik = mbkt(ji,jj) 119 ztnb(ji,jj) = tn(ji,jj,ik) * tmask(ji,jj,1)! masked now T at the ocean bottom120 zsnb(ji,jj) = sn(ji,jj,ik) * tmask(ji,jj,1)! masked now S at the ocean bottom119 ik = mbkt(ji,jj) ! index of the bottom ocean T-level 120 ztnb(ji,jj) = tn(ji,jj,ik) ! masked now T at the ocean bottom 121 zsnb(ji,jj) = sn(ji,jj,ik) ! masked now S at the ocean bottom 121 122 zdep(ji,jj) = fsdept(ji,jj,ik) ! depth of the ocean bottom T-level 122 #if ! defined key_vectopt_loop || defined key_autotasking 123 !gh 124 zunb(ji,jj) = un(ji,jj,mbku(ji,jj)) 125 zvnb(ji,jj) = vn(ji,jj,mbkv(ji,jj)) 126 #if ! defined key_vectopt_loop || defined key_mpp_omp 123 127 END DO 124 128 #endif 125 129 END DO 126 #if defined key_vectopt_loop && ! defined key_autotasking127 jj = 1128 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling)129 zunb(ji,jj) = un(ji,jj,mbku(ji,jj)) * umask(ji,jj,1)130 zvnb(ji,jj) = vn(ji,jj,mbkv(ji,jj)) * vmask(ji,jj,1) ! retirer le mask en u, v et t !131 END DO132 #else133 DO jj = 1, jpjm1134 DO ji = 1, jpim1135 zunb(ji,jj) = un(ji,jj,mbku(ji,jj)) * umask(ji,jj,1)136 zvnb(ji,jj) = vn(ji,jj,mbkv(ji,jj)) * vmask(ji,jj,1)137 END DO138 END DO139 #endif140 141 ! boundary conditions on zunb and zvnb (changed sign)142 CALL lbc_lnk( zunb, 'U', -1. ) ; CALL lbc_lnk( zvnb, 'V', -1. )143 144 145 130 146 131 ! 2. Criteria of additional bottom diffusivity: grad(rho).grad(h)<0 … … 166 151 zgdrho = zgdrho * umask(ji,jj,1) 167 152 ! ... sign of local i-gradient of density multiplied by the i-slope 168 zsign = sign( 0.5, -zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 169 zki(ji,jj) = ( 0.5 - zsign ) * zahu(ji,jj) 170 171 zsigna= sign(0.5, zunb(ji,jj)*( zdep(ji+1,jj) - zdep(ji,jj) )) 172 zalphax(ji,jj)=(0.5+zsigna)*(0.5-zsign)*umask(ji,jj,1) 153 zsign = SIGN( 0.5, -zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 154 zsigna= SIGN( 0.5, zunb(ji,jj) * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 155 zalphax(ji,jj) = ( 0.5 + zsigna ) * ( 0.5-zsign ) * umask(ji,jj,1) 173 156 END DO 174 157 END DO … … 185 168 zgdrho = zalbet*( ztnb(ji,jj+1) - ztnb(ji,jj) ) & 186 169 - ( zsnb(ji,jj+1) - zsnb(ji,jj) ) 187 zgdrho = zgdrho *vmask(ji,jj,1)170 zgdrho = zgdrho * vmask(ji,jj,1) 188 171 ! ... sign of local j-gradient of density multiplied by the j-slope 189 zsign = sign( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 190 zkj(ji,jj) = ( 0.5 - zsign ) * zahv(ji,jj) 191 192 zsigna= sign(0.5, zvnb(ji,jj)*(zdep(ji,jj+1) - zdep(ji,jj) ) ) 193 zalphay(ji,jj)=(0.5+zsigna)*(0.5-zsign)*vmask(ji,jj,1) 172 zsign = SIGN( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 173 zsigna= SIGN( 0.5, zvnb(ji,jj) * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 174 zalphay(ji,jj) = ( 0.5 + zsigna ) * ( 0.5 - zsign ) * vmask(ji,jj,1) 194 175 END DO 195 176 END DO … … 198 179 CASE ( 1 ) ! Linear formulation function of temperature only 199 180 200 201 # if defined key_vectopt_loop && ! defined key_autotasking202 jj = 1203 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling)204 # else205 181 DO jj = 1, jpjm1 206 DO ji = 1, jpim1 207 # endif 182 DO ji = 1, fs_jpim1 ! vector opt. 208 183 ! temperature, salinity anomalie and depth 209 184 zt = 0.5 * ( ztnb(ji,jj) + ztnb(ji+1,jj) ) 210 185 zs = 0.5 * ( zsnb(ji,jj) + zsnb(ji+1,jj) ) - 35.0 211 186 zh = 0.5 * ( zdep(ji,jj) + zdep(ji+1,jj) ) 212 ! masked ratio alpha/beta187 !gh ! masked ratio alpha/beta 213 188 ! local density gradient along i-bathymetric slope 214 zgdrho = ( ztnb(ji+1,jj) - ztnb(ji,jj) ) 189 zgdrho = ( ztnb(ji+1,jj) - ztnb(ji,jj) ) 215 190 ! sign of local i-gradient of density multiplied by the i-slope 216 zsign = SIGN( 0.5, - zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 217 zki(ji,jj) = ( 0.5 - zsign ) * zahu(ji,jj) 218 219 zsigna= sign(0.5, zunb(ji,jj)*( zdep(ji+1,jj) - zdep(ji,jj) )) 220 zalphax(ji,jj)=(0.5-zsigna)*(0.5-zsign)*umask(ji,jj,1) 221 # if ! defined key_vectopt_loop || defined key_autotasking 191 zsign = SIGN( 0.5, - zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 192 zsigna= SIGN( 0.5, zunb(ji,jj) * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 193 zalphax(ji,jj) = ( 0.5 - zsigna ) * ( 0.5 - zsign ) * umask(ji,jj,1) 222 194 END DO 223 # endif 224 END DO 225 226 # if defined key_vectopt_loop && ! defined key_autotasking 227 jj = 1 228 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling) 229 # else 195 END DO 196 230 197 DO jj = 1, jpjm1 231 DO ji = 1, jpim1 232 # endif 198 DO ji = 1, fs_jpim1 ! vector opt. 233 199 ! temperature, salinity anomalie and depth 234 200 zt = 0.5 * ( ztnb(ji,jj+1) + ztnb(ji,jj) ) 235 201 zs = 0.5 * ( zsnb(ji,jj+1) + zsnb(ji,jj) ) - 35.0 236 202 zh = 0.5 * ( zdep(ji,jj+1) + zdep(ji,jj) ) 237 ! masked ratio alpha/beta203 !gh ! masked ratio alpha/beta 238 204 ! local density gradient along j-bathymetric slope 239 zgdrho = ( ztnb(ji,jj+1) - ztnb(ji,jj) ) 205 zgdrho = ( ztnb(ji,jj+1) - ztnb(ji,jj) ) 240 206 ! sign of local j-gradient of density multiplied by the j-slope 241 zsign = sign( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 242 zkj(ji,jj) = ( 0.5 - zsign ) * zahv(ji,jj) 243 244 zsigna= sign(0.5, zvnb(ji,jj)*(zdep(ji,jj+1) - zdep(ji,jj) ) ) 245 zalphay(ji,jj)=(0.5-zsigna)*(0.5-zsign)*vmask(ji,jj,1) 246 # if ! defined key_vectopt_loop || defined key_autotasking 207 zsign = SIGN( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 208 zsigna= SIGN( 0.5, zvnb(ji,jj) * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 209 zalphay(ji,jj) = ( 0.5 - zsigna ) * ( 0.5 - zsign ) * vmask(ji,jj,1) 247 210 END DO 248 # endif 249 END DO 250 211 END DO 212 251 213 CASE ( 2 ) ! Linear formulation function of temperature and salinity 252 253 DO jj = 1, jpjm1 254 DO ji = 1, fs_jpim1 ! vector opt. 255 ! local density gradient along i-bathymetric slope 214 DO jj = 1, jpjm1 215 DO ji = 1, fs_jpim1 ! vector opt. 216 ! local density gradient along i-bathymetric slope 256 217 zgdrho = - ( rbeta*( zsnb(ji+1,jj) - zsnb(ji,jj) ) & 257 218 - ralpha*( ztnb(ji+1,jj) - ztnb(ji,jj) ) ) 258 219 ! sign of local i-gradient of density multiplied by the i-slope 259 220 zsign = SIGN( 0.5, - zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 260 261 zsigna= sign(0.5, zunb(ji,jj)*( zdep(ji+1,jj) - zdep(ji,jj) )) 221 zsigna= SIGN( 0.5, zunb(ji,jj)*( zdep(ji+1,jj) - zdep(ji,jj) )) 262 222 zalphax(ji,jj)=(0.5-zsigna)*(0.5-zsign)*umask(ji,jj,1) 223 END DO 224 END DO 225 226 DO jj = 1, jpjm1 227 DO ji = 1, fs_jpim1 ! vector opt. 228 ! local density gradient along j-bathymetric slope 229 zgdrho = - ( rbeta*( zsnb(ji,jj+1) - zsnb(ji,jj) ) & 230 - ralpha*( ztnb(ji,jj+1) - ztnb(ji,jj) ) ) 231 ! sign of local j-gradient of density multiplied by the j-slope 232 zsign = SIGN( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 233 zsigna= SIGN( 0.5, zvnb(ji,jj) * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 234 zalphay(ji,jj) = ( 0.5 - zsigna ) * ( 0.5 - zsign ) * vmask(ji,jj,1) 263 235 END DO 264 236 END DO 265 237 266 DO jj = 1, jpjm1 267 DO ji = 1, fs_jpim1 ! vector opt. 268 ! local density gradient along j-bathymetric slope 269 zgdrho = - ( rbeta*( zsnb(ji,jj+1) - zsnb(ji,jj) ) & 270 - ralpha*( ztnb(ji,jj+1) - ztnb(ji,jj) ) ) 271 ! sign of local j-gradient of density multiplied by the j-slope 272 zsign = sign( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 273 274 zsigna= sign(0.5, zvnb(ji,jj)*(zdep(ji,jj+1) - zdep(ji,jj) ) ) 275 zalphay(ji,jj)=(0.5-zsigna)*(0.5-zsign)*vmask(ji,jj,1) 276 END DO 277 END DO 278 279 238 280 239 CASE DEFAULT 281 240 … … 295 254 u_trc_bbl(:,:,:) = 0.e0 296 255 v_trc_bbl(:,:,:) = 0.e0 297 # if defined key_vectopt_loop && ! defined key_autotasking 256 257 258 !gh 259 IF( ln_zps ) THEN 260 ! partial steps correction 261 262 #if defined key_vectopt_loop && ! defined key_mpp_omp 298 263 jj = 1 299 264 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling) 300 # 265 #else 301 266 DO jj = 1, jpjm1 302 267 DO ji = 1, jpim1 303 # endif 304 iku = mbku(ji,jj) 305 ikv = mbkv(ji,jj) 268 #endif 269 iku = mbku(ji ,jj ) 270 ikv = mbkv(ji ,jj ) 271 iku1 = mbkt(ji+1,jj ) 272 iku2 = mbkt(ji ,jj ) 273 ikv1 = mbkt(ji ,jj+1) 274 ikv2 = mbkt(ji ,jj ) 275 ze3u = MIN( fse3u(ji,jj,iku1), fse3u(ji,jj,iku2) ) 276 ze3v = MIN( fse3v(ji,jj,ikv1), fse3v(ji,jj,ikv2) ) 277 306 278 IF( MAX(iku,ikv) > 1 ) THEN 307 u_trc_bbl(ji,jj,iku) = zalphax(ji,jj) * un(ji,jj,iku) * umask(ji,jj,1)308 v_trc_bbl(ji,jj,ikv) = zalphay(ji,jj) * vn(ji,jj,ikv) * vmask(ji,jj,1)279 u_trc_bbl(ji,jj,iku) = zalphax(ji,jj) * un(ji,jj,iku) * ze3u / fse3u(ji,jj,iku) 280 v_trc_bbl(ji,jj,ikv) = zalphay(ji,jj) * vn(ji,jj,ikv) * ze3v / fse3v(ji,jj,ikv) 309 281 ENDIF 310 # if ! defined key_vectopt_loop || defined key_autotasking311 END DO 312 # 282 #if ! defined key_vectopt_loop || defined key_mpp_omp 283 END DO 284 #endif 313 285 END DO 314 286 315 287 ! lateral boundary conditions on u_trc_bbl and v_trc_bbl (changed sign) 316 288 CALL lbc_lnk( u_trc_bbl, 'U', -1. ) ; CALL lbc_lnk( v_trc_bbl, 'V', -1. ) 317 318 289 290 ELSE ! z-coordinate - full steps or s-coordinate 291 ! if not partial step loop over the whole domain no lbc call 292 293 #if defined key_vectopt_loop && ! defined key_mpp_omp 294 jj = 1 295 DO ji = 1, jpij ! vector opt. (forced unrolling) 296 #else 297 DO jj = 1, jpj 298 DO ji = 1, jpi 299 #endif 300 iku = mbku(ji,jj) 301 ikv = mbkv(ji,jj) 302 IF( MAX(iku,ikv) > 1 ) THEN 303 u_trc_bbl(ji,jj,iku) = zalphax(ji,jj) * un(ji,jj,iku) 304 v_trc_bbl(ji,jj,ikv) = zalphay(ji,jj) * vn(ji,jj,ikv) 305 ENDIF 306 #if ! defined key_vectopt_loop || defined key_mpp_omp 307 END DO 308 #endif 309 END DO 310 311 ENDIF 319 312 320 313 DO jn = 1, jptra 321 314 322 #if defined key_vectopt_loop && ! defined key_ autotasking315 #if defined key_vectopt_loop && ! defined key_mpp_omp 323 316 jj = 1 324 317 DO ji = 1, jpij ! vector opt. (forced unrolling) … … 329 322 ik = mbkt(ji,jj) ! index of the bottom ocean T-level 330 323 ztrb(ji,jj) = trb(ji,jj,ik,jn) * tmask(ji,jj,1) ! masked now T at the ocean bottom 331 #if ! defined key_vectopt_loop || defined key_autotasking 332 END DO 333 #endif 334 END DO 324 #if ! defined key_vectopt_loop || defined key_mpp_omp 325 END DO 326 #endif 327 END DO 328 335 329 336 330 … … 339 333 ! ... Second order centered tracer flux at u and v-points 340 334 341 # if defined key_vectopt_loop && ! defined key_ autotasking335 # if defined key_vectopt_loop && ! defined key_mpp_omp 342 336 jj = 1 343 337 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling) … … 348 342 iku = mbku(ji,jj) 349 343 ikv = mbkv(ji,jj) 350 zfui = zalphax(ji,jj) *e2u(ji,jj) * fse3u(ji,jj,iku) * zunb(ji,jj)351 zfvj = zalphay(ji,jj) *e1v(ji,jj) * fse3v(ji,jj,ikv) * zvnb(ji,jj)344 zfui = e2u(ji,jj) * fse3u(ji,jj,iku) * u_trc_bbl(ji,jj,iku) 345 zfvj = e1v(ji,jj) * fse3v(ji,jj,ikv) * v_trc_bbl(ji,jj,ikv) 352 346 ! upstream scheme 353 347 zwx(ji,jj) = ( ( zfui + ABS( zfui ) ) * ztrb(ji ,jj ) & … … 355 349 zwy(ji,jj) = ( ( zfvj + ABS( zfvj ) ) * ztrb(ji ,jj ) & 356 350 & +( zfvj - ABS( zfvj ) ) * ztrb(ji ,jj+1) ) * 0.5 357 #if ! defined key_vectopt_loop || defined key_autotasking 358 END DO 359 #endif 360 END DO 361 # if defined key_vectopt_loop && ! defined key_autotasking 351 #if ! defined key_vectopt_loop || defined key_mpp_omp 352 END DO 353 #endif 354 END DO 355 356 # if defined key_vectopt_loop && ! defined key_mpp_omp 362 357 jj = 1 363 358 DO ji = jpi+2, jpij-jpi-1 ! vector opt. (forced unrolling) … … 371 366 ztra = - zbtr * ( zwx(ji,jj) - zwx(ji-1,jj ) & 372 367 & + zwy(ji,jj) - zwy(ji ,jj-1) ) 373 368 374 369 ! add it to the general tracer trends 375 370 tra(ji,jj,ik,jn) = tra(ji,jj,ik,jn) + ztra 376 #if ! defined key_vectopt_loop || defined key_ autotasking377 END DO 378 #endif 379 END DO 380 381 END DO382 383 IF(ln_ctl) THEN ! print mean trends (used for debugging)371 #if ! defined key_vectopt_loop || defined key_mpp_omp 372 END DO 373 #endif 374 END DO 375 376 END DO 377 378 IF(ln_ctl) THEN ! print mean trends (used for debugging) 384 379 WRITE(charout, FMT="('bbl - adv')") 385 380 CALL prt_ctl_trc_info(charout) 386 381 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd') 387 382 ENDIF 383 388 384 ! 6. Vertical advection velocities 389 385 ! -------------------------------- … … 393 389 DO jj=1, jpjm1 394 390 DO ji = 1, fs_jpim1 ! vertor opt. 395 zwu(ji,jj) = -e2u(ji,jj) * u_trc_bbl(ji,jj,jk) 396 zwv(ji,jj) = -e1v(ji,jj) * v_trc_bbl(ji,jj,jk) 391 zwu(ji,jj) = -e2u(ji,jj) * u_trc_bbl(ji,jj,jk) * fse3u(ji,jj,jk) 392 zwv(ji,jj) = -e1v(ji,jj) * v_trc_bbl(ji,jj,jk) * fse3v(ji,jj,jk) 397 393 END DO 398 394 END DO … … 401 397 DO jj = 2, jpjm1 402 398 DO ji = fs_2, fs_jpim1 ! vector opt. 403 zbt = e1t(ji,jj) * e2t(ji,jj) 399 zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 404 400 zhdivn(ji,jj,jk) = ( zwu(ji,jj) - zwu(ji-1,jj ) & 405 401 & + zwv(ji,jj) - zwv(ji ,jj-1) ) / zbt … … 410 406 411 407 ! ... horizontal bottom divergence 412 # if defined key_vectopt_loop && ! defined key_autotasking 413 jj = 1 414 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling) 408 !gh 409 IF( ln_zps ) THEN 410 411 # if defined key_vectopt_loop && ! defined key_mpp_omp 412 jj = 1 413 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling) 415 414 # else 416 DO jj = 1, jpjm1 417 DO ji = 1, jpim1 418 # endif 419 iku = mbku(ji,jj) 420 ikv = mbkv(ji,jj) 421 zwu(ji,jj) = zalphax(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,iku) 422 zwv(ji,jj) = zalphay(ji,jj) * e1v(ji,jj) * fse3v(ji,jj,ikv) 423 #if ! defined key_vectopt_loop || defined key_autotasking 424 END DO 425 #endif 426 END DO 427 428 # if defined key_vectopt_loop && ! defined key_autotasking 415 DO jj = 1, jpjm1 416 DO ji = 1, jpim1 417 # endif 418 iku = mbku(ji ,jj ) 419 ikv = mbkv(ji ,jj ) 420 iku1 = mbkt(ji+1,jj ) 421 iku2 = mbkt(ji ,jj ) 422 ikv1 = mbkt(ji ,jj+1) 423 ikv2 = mbkt(ji ,jj ) 424 ze3u = MIN( fse3u(ji,jj,iku1), fse3u(ji,jj,iku2) ) 425 ze3v = MIN( fse3v(ji,jj,ikv1), fse3v(ji,jj,ikv2) ) 426 427 zwu(ji,jj) = zalphax(ji,jj) * e2u(ji,jj) * ze3u 428 zwv(ji,jj) = zalphay(ji,jj) * e1v(ji,jj) * ze3v 429 #if ! defined key_vectopt_loop || defined key_mpp_omp 430 END DO 431 #endif 432 END DO 433 434 ELSE 435 436 # if defined key_vectopt_loop && ! defined key_mpp_omp 437 jj = 1 438 DO ji = 1, jpij-jpi ! vector opt. (forced unrolling) 439 # else 440 DO jj = 1, jpjm1 441 DO ji = 1, jpim1 442 # endif 443 iku = mbku(ji,jj) 444 ikv = mbkv(ji,jj) 445 zwu(ji,jj) = zalphax(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,iku) 446 zwv(ji,jj) = zalphay(ji,jj) * e1v(ji,jj) * fse3v(ji,jj,ikv) 447 #if ! defined key_vectopt_loop || defined key_mpp_omp 448 END DO 449 #endif 450 END DO 451 ENDIF 452 453 # if defined key_vectopt_loop && ! defined key_mpp_omp 429 454 jj = 1 430 455 DO ji = jpi+2, jpij-jpi-1 ! vector opt. (forced unrolling) … … 436 461 zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,ik) 437 462 zhdivn(ji,jj,ik) = & 438 & ( zwu(ji ,jj ) * ( zunb(ji ,jj ) - un(ji ,jj ,ik) *umask(ji ,jj ,1)) &439 & - zwu(ji-1,jj ) * ( zunb(ji-1,jj ) - un(ji-1,jj ,ik) *umask(ji-1,jj ,1)) &440 & + zwv(ji ,jj ) * ( zvnb(ji ,jj ) - vn(ji ,jj ,ik) *vmask(ji ,jj ,1)) &441 & - zwv(ji ,jj-1) * ( zvnb(ji ,jj-1) - vn(ji ,jj-1,ik) *vmask(ji ,jj-1,1)) &463 & ( zwu(ji ,jj ) * ( zunb(ji ,jj ) - un(ji ,jj ,ik) ) & 464 & - zwu(ji-1,jj ) * ( zunb(ji-1,jj ) - un(ji-1,jj ,ik) ) & 465 & + zwv(ji ,jj ) * ( zvnb(ji ,jj ) - vn(ji ,jj ,ik) ) & 466 & - zwv(ji ,jj-1) * ( zvnb(ji ,jj-1) - vn(ji ,jj-1,ik) ) & 442 467 & ) / zbt 443 468 444 # if ! defined key_vectopt_loop || defined key_ autotasking469 # if ! defined key_vectopt_loop || defined key_mpp_omp 445 470 END DO 446 471 # endif -
trunk/NEMO/TOP_SRC/TRP/trcldf_bilap.F90
r433 r501 41 41 !! evaluated using before fields (forward time scheme). The hor. 42 42 !! diffusive trends of passive tracer is given by: 43 !! * s-coordinate ('key_s_coord' defined), the vertical scale43 !! * s-coordinate, the vertical scale 44 44 !! factors e3. are inside the derivatives: 45 45 !! Laplacian of trb: … … 87 87 !! * Local declarations 88 88 INTEGER :: ji, jj, jk, jn ! dummy loop indices 89 #if defined key_partial_steps90 89 INTEGER :: iku, ikv ! temporary integers 91 #endif 90 92 91 REAL(wp) :: ztra ! temporary scalars 93 92 … … 116 115 DO jj = 1, jpjm1 117 116 DO ji = 1, fs_jpim1 ! vector opt. 118 #if defined key_s_coord || defined key_partial_steps117 #if ! defined key_zco 119 118 ! s-coordinates, vertical scale factor are used 120 119 zbtr(ji,jj) = 1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) ) … … 141 140 END DO 142 141 END DO 143 #if defined key_partial_steps 144 145 DO jj = 1, jpj-1146 DO ji = 1, jpi-1147 ! last level148 iku = MIN ( mbathy(ji,jj), mbathy(ji+1,jj ) ) - 1149 ikv = MIN ( mbathy(ji,jj), mbathy(ji ,jj+1) ) - 1150 IF( iku == jk ) THEN151 ztu(ji,jj,jk) = zeeu(ji,jj) * gtu(ji,jj)152 ENDIF153 IF( ikv == jk ) THEN154 ztv(ji,jj,jk) = zeev(ji,jj) * gtv(ji,jj)155 ENDIF156 END DO157 END DO158 #endif 142 143 IF( ln_zps ) THEN 144 DO jj = 1, jpj-1 145 DO ji = 1, jpi-1 146 ! last level 147 iku = MIN ( mbathy(ji,jj), mbathy(ji+1,jj ) ) - 1 148 ikv = MIN ( mbathy(ji,jj), mbathy(ji ,jj+1) ) - 1 149 IF( iku == jk ) THEN 150 ztu(ji,jj,jk) = zeeu(ji,jj) * gtu(ji,jj) 151 ENDIF 152 IF( ikv == jk ) THEN 153 ztv(ji,jj,jk) = zeev(ji,jj) * gtv(ji,jj) 154 ENDIF 155 END DO 156 END DO 157 ENDIF 159 158 160 159 ! Second derivative (divergence) -
trunk/NEMO/TOP_SRC/TRP/trcldf_iso_zps.F90
r433 r501 4 4 !! Ocean passive tracers: horizontal component of the lateral tracer mixing trend 5 5 !!============================================================================== 6 #if key_passivetrc && ( defined key_ldfslp && defined key_partial_steps )6 #if key_passivetrc && defined key_ldfslp 7 7 !!---------------------------------------------------------------------- 8 8 !! 'key_ldfslp' slope of the lateral diffusive direction -
trunk/NEMO/TOP_SRC/TRP/trcldf_lap.F90
r433 r501 40 40 !! fields (forward time scheme). The horizontal diffusive trends of 41 41 !! the passive tracer is given by: 42 !! * s-coordinate ('key_s_coord' defined), the vertical scale42 !! * s-coordinate, the vertical scale 43 43 !! factors e3. are inside the derivatives: 44 44 !! difft = 1/(e1t*e2t*e3t) { di-1[ aht e2u*e3u/e1u di(trb) ] … … 101 101 DO jj = 1, jpjm1 102 102 DO ji = 1, fs_jpim1 ! vector opt. 103 #if defined key_s_coord 104 zabe1 = fsahtru(ji,jj,jk) * umask(ji,jj,jk) * ze1ur(ji,jj) * fse3u(ji,jj,jk)105 zabe2 = fsahtrv(ji,jj,jk) * vmask(ji,jj,jk) * ze2vr(ji,jj) * fse3v(ji,jj,jk)106 #else 107 zabe1 = fsahtru(ji,jj,jk) * umask(ji,jj,jk) * ze1ur(ji,jj)108 zabe2 = fsahtrv(ji,jj,jk) * vmask(ji,jj,jk) * ze2vr(ji,jj)109 #endif 103 IF ( ln_sco ) THEN 104 zabe1 = fsahtru(ji,jj,jk) * umask(ji,jj,jk) * ze1ur(ji,jj) * fse3u(ji,jj,jk) 105 zabe2 = fsahtrv(ji,jj,jk) * vmask(ji,jj,jk) * ze2vr(ji,jj) * fse3v(ji,jj,jk) 106 ELSE 107 zabe1 = fsahtru(ji,jj,jk) * umask(ji,jj,jk) * ze1ur(ji,jj) 108 zabe2 = fsahtrv(ji,jj,jk) * vmask(ji,jj,jk) * ze2vr(ji,jj) 109 ENDIF 110 110 ztu(ji,jj,jk) = zabe1 * ( trb(ji+1,jj ,jk,jn) - trb(ji,jj,jk,jn) ) 111 111 ztv(ji,jj,jk) = zabe2 * ( trb(ji ,jj+1,jk,jn) - trb(ji,jj,jk,jn) ) … … 118 118 DO jj = 2, jpjm1 119 119 DO ji = fs_2, fs_jpim1 ! vector opt. 120 #if defined key_s_coord 121 zbtr = zbtr2(ji,jj) / fse3t(ji,jj,jk)122 #else 123 zbtr = zbtr2(ji,jj)124 #endif 120 IF ( ln_sco ) THEN 121 zbtr = zbtr2(ji,jj) / fse3t(ji,jj,jk) 122 ELSE 123 zbtr = zbtr2(ji,jj) 124 ENDIF 125 125 ! horizontal diffusive trends 126 126 ztrax = zbtr * ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) ) -
trunk/NEMO/TOP_SRC/TRP/trcnxt.F90
r349 r501 97 97 98 98 #if defined key_obc 99 IF(lwp) WRITE(numout,cform_err) 100 IF(lwp) WRITE(numout,*) ' Passive tracers and Open Boundary condition can not be used together ' 101 IF(lwp) WRITE(numout,*) ' Check in trc_nxt routine' 102 nstop = nstop + 1 99 CALL ctl_stop( ' Passive tracers and Open Boundary condition can not be used together ' & 100 & ' Check in trc_nxt routine' ) 103 101 #endif 104 102 -
trunk/NEMO/TOP_SRC/TRP/trcsbc.F90
r349 r501 73 73 ! 0. initialization 74 74 zsrau = 1. / rauw 75 #if ! defined key_s_coord 76 zse3t = 1. / fse3t(1,1,1) 77 #endif 75 IF( .NOT. ln_sco ) zse3t = 1. / fse3t(1,1,1) 78 76 79 77 DO jn = 1, jptra … … 81 79 DO jj = 2, jpj 82 80 DO ji = fs_2, fs_jpim1 ! vector opt. 83 #if defined key_s_coord 84 zse3t = 1. / fse3t(ji,jj,1) 85 #endif 81 IF( ln_sco ) zse3t = 1. / fse3t(ji,jj,1) 86 82 ! concent./dilut. effect 87 83 ztra = emps(ji,jj) * zsrau * trn(ji,jj,1,jn) * zse3t * tmask(ji,jj,1) -
trunk/NEMO/TOP_SRC/TRP/trctrp.F90
r439 r501 82 82 CALL trc_sbc( kt ) ! surface boundary condition 83 83 # if defined key_trcbbc 84 IF(lwp) WRITE(numout,cform_err) 85 IF(lwp) WRITE(numout,*) ' Bottom heat flux not yet implemented' 86 IF(lwp) WRITE(numout,*) ' With passive tracers. ' 87 IF(lwp) WRITE(numout,*) ' Check trc_trp routine' 88 nstop = nstop + 1 84 CALL ctl_stop( ' Bottom heat flux not yet implemented with passive tracer ' & 85 & ' Check in trc_trp routine ' ) 89 86 # endif 90 87 ! ! bottom boundary condition … … 102 99 103 100 104 IF( n_cla == 1 ) THEN 105 IF(lwp) WRITE(numout,cform_err) 106 IF(lwp) WRITE(numout,*) ' Cross Land Advection not yet implemented' 107 IF(lwp) WRITE(numout,*) ' With Passive tracers. n_cla = ', n_cla 108 IF(lwp) WRITE(numout,*) ' Check trc_trp routine' 109 nstop = nstop + 1 101 IF( n_cla == 1 ) THEN 102 WRITE(ctmp1,*) ' Cross Land Advection not yet implemented with passive tracer n_cla = ',n_cla 103 CALL ctl_stop(ctmp1) 110 104 ENDIF 111 105 … … 128 122 ! 129 123 130 IF( l k_zps .AND. .NOT. lk_trccfg_1d ) &124 IF( ln_zps .AND. .NOT. lk_trccfg_1d ) & 131 125 & CALL zps_hde_trc( kt, trb, gtru, gtrv ) ! Partial steps: now horizontal gradient 132 126 ! ! of passive tracers at the bottom ocean level -
trunk/NEMO/TOP_SRC/TRP/trctrp_lec.F90
r349 r501 27 27 ln_trcadv_muscl2 = .FALSE. , & !: MUSCL2 scheme flag 28 28 ln_trcadv_smolar = .TRUE. !: Smolarkiewicz scheme flag 29 30 !! Bottom boundary layer 31 REAL(wp), PUBLIC :: & 32 atrcbbl = 1.e+3 ! lateral coeff. for bottom boundary layer scheme (m2/s) 29 33 30 34 !! Lateral diffusion … … 91 95 & ln_trcadv_muscl, ln_trcadv_muscl2, ln_trcadv_smolar 92 96 97 #if defined key_trcbbl_dif || defined key_trcbbl_adv 98 NAMELIST/namtrcbbl/ atrcbbl 99 #endif 100 93 101 NAMELIST/namtrcldf/ ln_trcldf_diff , ln_trcldf_lap , ln_trcldf_bilap, & 94 102 & ln_trcldf_level, ln_trcldf_hor, ln_trcldf_iso, & … … 122 130 WRITE(numout,*) ' SMOLARKIEWICZ advection scheme ln_trcadv_smolar = ', ln_trcadv_smolar 123 131 ENDIF 132 133 #if defined key_trcbbl_dif 134 ! Read Namelist namtrcbbl : Bottom boundary layer coef 135 ! -------------------------------------------------- 136 REWIND ( numnat ) 137 READ ( numnat, namtrcbbl ) 138 139 ! Parameter control and print 140 ! --------------------------- 141 IF(lwp) THEN 142 WRITE(numout,*) ' Diffusive Bottom Boundary Layer' 143 WRITE(numout,*) '~~~~~~~~' 144 WRITE(numout,*) ' bottom boundary layer coef. atrcbbl = ', atrcbbl 145 # if defined key_trcbbl_adv 146 WRITE(numout,*) ' * Advective Bottom Boundary Layer' 147 # endif 148 WRITE(numout,*) 149 ENDIF 150 #endif 124 151 125 152 ! Define the lateral tracer physics parameters -
trunk/NEMO/TOP_SRC/TRP/zpshde_trc.F90
r349 r501 4 4 !! Ocean passive tracers: 5 5 !!============================================================================== 6 #if defined key_passivetrc && ( defined key_partial_steps || defined key_esopa )6 #if defined key_passivetrc 7 7 !!---------------------------------------------------------------------- 8 !! 'key_partial_steps' :z-coordinate with partial steps8 !! z-coordinate with partial steps 9 9 !!---------------------------------------------------------------------- 10 10 !! zps_hde_trc : Horizontal DErivative of passive tracers at the last … … 123 123 DO jn = 1, jptra 124 124 ! Interpolation of passive tracers at the last ocean level 125 # if defined key_vectopt_loop && ! defined key_ autotasking125 # if defined key_vectopt_loop && ! defined key_mpp_omp 126 126 jj = 1 127 127 DO ji = 1, jpij-jpi ! vector opt. (forced unrolled) … … 168 168 pgtrv(ji,jj,jn) = vmask(ji,jj,1) * ( ptra(ji,jj+1,ikv,jn) - ztraj(ji,jj,jn) ) 169 169 ENDIF 170 # if ! defined key_vectopt_loop || defined key_ autotasking170 # if ! defined key_vectopt_loop || defined key_mpp_omp 171 171 END DO 172 172 # endif
Note: See TracChangeset
for help on using the changeset viewer.