290 |
IMPLICIT NONE |
IMPLICIT NONE |
291 |
|
|
292 |
#include "SIZE.h" |
#include "SIZE.h" |
293 |
|
#include "EEPARAMS.h" |
294 |
|
#include "PARAMS.h" |
295 |
#include "KPP_PARAMS.h" |
#include "KPP_PARAMS.h" |
296 |
|
|
297 |
c input |
c input |
359 |
_RL minusone |
_RL minusone |
360 |
parameter ( minusone=-1.0 ) |
parameter ( minusone=-1.0 ) |
361 |
|
|
362 |
|
#ifdef ALLOW_DIAGNOSTICS |
363 |
|
c KPPBFSFC - Bo+radiation absorbed to d=hbf*hbl + plume (m^2/s^3) |
364 |
|
_RL KPPBFSFC(imt,Nr) |
365 |
|
#endif /* ALLOW_DIAGNOSTICS */ |
366 |
|
|
367 |
c find bulk Richardson number at every grid level until > Ricr |
c find bulk Richardson number at every grid level until > Ricr |
368 |
c |
c |
369 |
c note: the reference depth is -epsilon/2.*zgrid(k), but the reference |
c note: the reference depth is -epsilon/2.*zgrid(k), but the reference |
381 |
hbl(i) = -zgrid(kbl(i)) |
hbl(i) = -zgrid(kbl(i)) |
382 |
end do |
end do |
383 |
|
|
384 |
|
#ifdef ALLOW_DIAGNOSTICS |
385 |
|
do kl = 1, Nr |
386 |
|
do i = 1, imt |
387 |
|
KPPBFSFC(i,kl) = 0.0 |
388 |
|
enddo |
389 |
|
enddo |
390 |
|
#endif /* ALLOW_DIAGNOSTICS */ |
391 |
|
|
392 |
do kl = 2, Nr |
do kl = 2, Nr |
393 |
|
|
394 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
420 |
end do |
end do |
421 |
#ifdef ALLOW_SALT_PLUME |
#ifdef ALLOW_SALT_PLUME |
422 |
c compute bfsfc = plume fraction at hbf * zgrid |
c compute bfsfc = plume fraction at hbf * zgrid |
423 |
|
IF ( useSALT_PLUME ) THEN |
424 |
|
do i = 1, imt |
425 |
|
worka(i) = zgrid(kl) |
426 |
|
enddo |
427 |
|
call SALT_PLUME_FRAC( |
428 |
|
I imt, hbf,SPDepth, |
429 |
|
U worka, |
430 |
|
I myTime, myIter, myThid) |
431 |
|
do i = 1, imt |
432 |
|
bfsfc(i) = bfsfc(i) + boplume(i)*(1. - worka(i)) |
433 |
|
enddo |
434 |
|
ENDIF |
435 |
|
#endif /* ALLOW_SALT_PLUME */ |
436 |
|
|
437 |
|
#ifdef ALLOW_DIAGNOSTICS |
438 |
do i = 1, imt |
do i = 1, imt |
439 |
worka(i) = zgrid(kl) |
KPPBFSFC(i,kl) = bfsfc(i) |
|
enddo |
|
|
call SALT_PLUME_FRAC( |
|
|
I imt, hbf,SPDepth, |
|
|
U worka, |
|
|
I myTime, myIter, myThid) |
|
|
do i = 1, imt |
|
|
bfsfc(i) = bfsfc(i) + boplume(i)*(1. - worka(i)) |
|
440 |
enddo |
enddo |
441 |
#endif /* ALLOW_SALT_PLUME */ |
#endif /* ALLOW_DIAGNOSTICS */ |
442 |
|
|
443 |
do i = 1, imt |
do i = 1, imt |
444 |
stable(i) = p5 + sign(p5,bfsfc(i)) |
stable(i) = p5 + sign(p5,bfsfc(i)) |
489 |
end do |
end do |
490 |
end do |
end do |
491 |
|
|
492 |
|
#ifdef ALLOW_DIAGNOSTICS |
493 |
|
CALL DIAGNOSTICS_FILL(KPPBFSFC,'KPPbfsfc',0,Nr,0,1,1,myThid) |
494 |
|
#endif /* ALLOW_DIAGNOSTICS */ |
495 |
|
|
496 |
cph( |
cph( |
497 |
cph without this store, there is a recomputation error for |
cph without this store, there is a recomputation error for |
498 |
cph rib in adbldepth (probably partial recomputation problem) |
cph rib in adbldepth (probably partial recomputation problem) |
543 |
end do |
end do |
544 |
|
|
545 |
#ifdef ALLOW_SALT_PLUME |
#ifdef ALLOW_SALT_PLUME |
546 |
do i = 1, imt |
IF ( useSALT_PLUME ) THEN |
547 |
worka(i) = hbl(i) |
do i = 1, imt |
548 |
enddo |
worka(i) = hbl(i) |
549 |
call SALT_PLUME_FRAC( |
enddo |
550 |
I imt,minusone,SPDepth, |
call SALT_PLUME_FRAC( |
551 |
U worka, |
I imt,minusone,SPDepth, |
552 |
I myTime, myIter, myThid ) |
U worka, |
553 |
do i = 1, imt |
I myTime, myIter, myThid ) |
554 |
bfsfc(i) = bfsfc(i) + boplume(i) * (1. - worka(i)) |
do i = 1, imt |
555 |
enddo |
bfsfc(i) = bfsfc(i) + boplume(i) * (1. - worka(i)) |
556 |
|
enddo |
557 |
|
ENDIF |
558 |
#endif /* ALLOW_SALT_PLUME */ |
#endif /* ALLOW_SALT_PLUME */ |
559 |
CADJ store bfsfc = comlev1_kpp |
CADJ store bfsfc = comlev1_kpp |
560 |
CADJ & , key = ikppkey, shape = (/ (sNx+2*OLx)*(sNy+2*OLy) /) |
CADJ & , key = ikppkey, shape = (/ (sNx+2*OLx)*(sNy+2*OLy) /) |
630 |
end do |
end do |
631 |
|
|
632 |
#ifdef ALLOW_SALT_PLUME |
#ifdef ALLOW_SALT_PLUME |
633 |
do i = 1, imt |
IF ( useSALT_PLUME ) THEN |
634 |
worka(i) = hbl(i) |
do i = 1, imt |
635 |
enddo |
worka(i) = hbl(i) |
636 |
call SALT_PLUME_FRAC( |
enddo |
637 |
I imt,minusone,SPDepth, |
call SALT_PLUME_FRAC( |
638 |
U worka, |
I imt,minusone,SPDepth, |
639 |
I myTime, myIter, myThid ) |
U worka, |
640 |
do i = 1, imt |
I myTime, myIter, myThid ) |
641 |
bfsfc(i) = bfsfc(i) + boplume(i) * (1. - worka(i)) |
do i = 1, imt |
642 |
enddo |
bfsfc(i) = bfsfc(i) + boplume(i) * (1. - worka(i)) |
643 |
|
enddo |
644 |
|
ENDIF |
645 |
#endif /* ALLOW_SALT_PLUME */ |
#endif /* ALLOW_SALT_PLUME */ |
646 |
CADJ store bfsfc = comlev1_kpp |
CADJ store bfsfc = comlev1_kpp |
647 |
CADJ & , key = ikppkey, shape = (/ (sNx+2*OLx)*(sNy+2*OLy) /) |
CADJ & , key = ikppkey, shape = (/ (sNx+2*OLx)*(sNy+2*OLy) /) |
1645 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
1646 |
IF ( useDiagnostics ) THEN |
IF ( useDiagnostics ) THEN |
1647 |
CALL DIAGNOSTICS_FILL(KPPmld,'KPPmld ',0,1,3,bi,bj,myThid) |
CALL DIAGNOSTICS_FILL(KPPmld,'KPPmld ',0,1,3,bi,bj,myThid) |
1648 |
|
CALL DIAGNOSTICS_FILL(DBSFC ,'KPPdbsfc',0,Nr,0,1,1,myThid) |
1649 |
|
CALL DIAGNOSTICS_FILL(DBLOC ,'KPPdbloc',0,Nr,0,1,1,myThid) |
1650 |
ENDIF |
ENDIF |
1651 |
#endif /* ALLOW_DIAGNOSTICS */ |
#endif /* ALLOW_DIAGNOSTICS */ |
1652 |
|
|