2 |
C $Name$ |
C $Name$ |
3 |
|
|
4 |
#include "KPP_OPTIONS.h" |
#include "KPP_OPTIONS.h" |
5 |
|
#ifdef ALLOW_SALT_PLUME |
6 |
|
#include "SALT_PLUME_OPTIONS.h" |
7 |
|
#endif |
8 |
|
|
9 |
C-- File kpp_routines.F: subroutines needed to implement |
C-- File kpp_routines.F: subroutines needed to implement |
10 |
C-- KPP vertical mixing scheme |
C-- KPP vertical mixing scheme |
26 |
I kmtj, shsq, dvsq, ustar, msk |
I kmtj, shsq, dvsq, ustar, msk |
27 |
I , bo, bosol |
I , bo, bosol |
28 |
#ifdef ALLOW_SALT_PLUME |
#ifdef ALLOW_SALT_PLUME |
|
#ifndef SALT_PLUME_VOLUME |
|
29 |
I , boplume,SPDepth |
I , boplume,SPDepth |
|
#endif /* ndef SALT_PLUME_VOLUME */ |
|
30 |
#endif /* ALLOW_SALT_PLUME */ |
#endif /* ALLOW_SALT_PLUME */ |
31 |
I , dbloc, Ritop, coriol |
I , dbloc, Ritop, coriol |
32 |
I , diffusKzS, diffusKzT |
I , diffusKzS, diffusKzT |
95 |
_RL bo (imt ) |
_RL bo (imt ) |
96 |
_RL bosol (imt ) |
_RL bosol (imt ) |
97 |
#ifdef ALLOW_SALT_PLUME |
#ifdef ALLOW_SALT_PLUME |
|
#ifndef SALT_PLUME_VOLUME |
|
98 |
_RL boplume (imt ) |
_RL boplume (imt ) |
99 |
_RL SPDepth (imt ) |
_RL SPDepth (imt ) |
|
#endif /* ndef SALT_PLUME_VOLUME */ |
|
100 |
#endif /* ALLOW_SALT_PLUME */ |
#endif /* ALLOW_SALT_PLUME */ |
101 |
_RL dbloc (imt,Nr) |
_RL dbloc (imt,Nr) |
102 |
_RL Ritop (imt,Nr) |
_RL Ritop (imt,Nr) |
191 |
I kmtj |
I kmtj |
192 |
I , dvsq, dbloc, Ritop, ustar, bo, bosol |
I , dvsq, dbloc, Ritop, ustar, bo, bosol |
193 |
#ifdef ALLOW_SALT_PLUME |
#ifdef ALLOW_SALT_PLUME |
|
#ifndef SALT_PLUME_VOLUME |
|
194 |
I , boplume,SPDepth |
I , boplume,SPDepth |
|
#endif /* ndef SALT_PLUME_VOLUME */ |
|
195 |
#endif /* ALLOW_SALT_PLUME */ |
#endif /* ALLOW_SALT_PLUME */ |
196 |
I , coriol |
I , coriol |
197 |
I , ikppkey |
I , ikppkey |
270 |
I kmtj |
I kmtj |
271 |
I , dvsq, dbloc, Ritop, ustar, bo, bosol |
I , dvsq, dbloc, Ritop, ustar, bo, bosol |
272 |
#ifdef ALLOW_SALT_PLUME |
#ifdef ALLOW_SALT_PLUME |
|
#ifndef SALT_PLUME_VOLUME |
|
273 |
I , boplume,SPDepth |
I , boplume,SPDepth |
|
#endif /* ndef SALT_PLUME_VOLUME */ |
|
274 |
#endif /* ALLOW_SALT_PLUME */ |
#endif /* ALLOW_SALT_PLUME */ |
275 |
I , coriol |
I , coriol |
276 |
I , ikppkey |
I , ikppkey |
339 |
_RL coriol (imt) |
_RL coriol (imt) |
340 |
integer ikppkey |
integer ikppkey |
341 |
#ifdef ALLOW_SALT_PLUME |
#ifdef ALLOW_SALT_PLUME |
|
#ifndef SALT_PLUME_VOLUME |
|
342 |
_RL boplume (imt) |
_RL boplume (imt) |
343 |
_RL SPDepth (imt) |
_RL SPDepth (imt) |
|
#endif /* ndef SALT_PLUME_VOLUME */ |
|
344 |
#endif /* ALLOW_SALT_PLUME */ |
#endif /* ALLOW_SALT_PLUME */ |
345 |
|
|
346 |
c output |
c output |
440 |
|
|
441 |
end do |
end do |
442 |
#ifdef ALLOW_SALT_PLUME |
#ifdef ALLOW_SALT_PLUME |
|
#ifndef SALT_PLUME_VOLUME |
|
443 |
c compute bfsfc = plume fraction at hbf * zgrid |
c compute bfsfc = plume fraction at hbf * zgrid |
444 |
IF ( useSALT_PLUME ) THEN |
IF ( useSALT_PLUME ) THEN |
445 |
do i = 1, imt |
do i = 1, imt |
446 |
worka(i) = zgrid(kl) |
worka(i) = zgrid(kl) |
447 |
enddo |
enddo |
448 |
|
#ifndef SALT_PLUME_VOLUME |
449 |
|
catn: in original way: accumulate all fractions of boplume above hbl |
450 |
call SALT_PLUME_FRAC( |
call SALT_PLUME_FRAC( |
451 |
I imt, hbf,SPDepth, |
I imt, hbf,SPDepth, |
452 |
U worka, |
U worka, |
454 |
do i = 1, imt |
do i = 1, imt |
455 |
bfsfc(i) = bfsfc(i) + boplume(i)*(worka(i)) |
bfsfc(i) = bfsfc(i) + boplume(i)*(worka(i)) |
456 |
enddo |
enddo |
457 |
ENDIF |
#else /* def SALT_PLUME_VOLUME */ |
458 |
|
catn: in vol way: need to integrate down to hbl, so first locate |
459 |
|
c k level associated with this hbl, then sum up all SPforc[T,S] |
460 |
|
DO i = 1, imt |
461 |
|
DO k = 1, Nr |
462 |
|
IF (hbl.GE.abs(rF(k)) THEN |
463 |
|
bfsfc(i) = bfsfc(i) + boplume(i,k) |
464 |
|
ENDIF |
465 |
|
ENDDO |
466 |
|
ENDDO |
467 |
#endif /* ndef SALT_PLUME_VOLUME */ |
#endif /* ndef SALT_PLUME_VOLUME */ |
468 |
|
ENDIF |
469 |
#endif /* ALLOW_SALT_PLUME */ |
#endif /* ALLOW_SALT_PLUME */ |
470 |
|
|
471 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
588 |
end do |
end do |
589 |
|
|
590 |
#ifdef ALLOW_SALT_PLUME |
#ifdef ALLOW_SALT_PLUME |
|
#ifndef SALT_PLUME_VOLUME |
|
591 |
IF ( useSALT_PLUME ) THEN |
IF ( useSALT_PLUME ) THEN |
592 |
|
#ifndef SALT_PLUME_VOLUME |
593 |
do i = 1, imt |
do i = 1, imt |
594 |
worka(i) = hbl(i) |
worka(i) = hbl(i) |
595 |
enddo |
enddo |
600 |
do i = 1, imt |
do i = 1, imt |
601 |
bfsfc(i) = bfsfc(i) + boplume(i) * (worka(i)) |
bfsfc(i) = bfsfc(i) + boplume(i) * (worka(i)) |
602 |
enddo |
enddo |
603 |
ENDIF |
#else /* def SALT_PLUME_VOLUME */ |
604 |
|
DO i = 1, imt |
605 |
|
DO k = 1, Nr |
606 |
|
IF (hbl.GE.abs(rF(k)) THEN |
607 |
|
bfsfc(i) = bfsfc(i) + boplume(i,k) |
608 |
|
ENDIF |
609 |
|
ENDDO |
610 |
|
ENDDO |
611 |
#endif /* ndef SALT_PLUME_VOLUME */ |
#endif /* ndef SALT_PLUME_VOLUME */ |
612 |
|
ENDIF |
613 |
#endif /* ALLOW_SALT_PLUME */ |
#endif /* ALLOW_SALT_PLUME */ |
614 |
CADJ store bfsfc = comlev1_kpp |
CADJ store bfsfc = comlev1_kpp |
615 |
CADJ & , key=ikppkey, kind=isbyte, |
CADJ & , key=ikppkey, kind=isbyte, |
694 |
end do |
end do |
695 |
|
|
696 |
#ifdef ALLOW_SALT_PLUME |
#ifdef ALLOW_SALT_PLUME |
|
#ifndef SALT_PLUME_VOLUME |
|
697 |
IF ( useSALT_PLUME ) THEN |
IF ( useSALT_PLUME ) THEN |
698 |
|
#ifndef SALT_PLUME_VOLUME |
699 |
do i = 1, imt |
do i = 1, imt |
700 |
worka(i) = hbl(i) |
worka(i) = hbl(i) |
701 |
enddo |
enddo |
706 |
do i = 1, imt |
do i = 1, imt |
707 |
bfsfc(i) = bfsfc(i) + boplume(i) * (worka(i)) |
bfsfc(i) = bfsfc(i) + boplume(i) * (worka(i)) |
708 |
enddo |
enddo |
709 |
ENDIF |
#else /* def SALT_PLUME_VOLUME */ |
710 |
|
DO i = 1, imt |
711 |
|
DO k = 1, Nr |
712 |
|
IF (hbl.GE.abs(rF(k)) THEN |
713 |
|
bfsfc(i) = bfsfc(i) + boplume(i,k) |
714 |
|
ENDIF |
715 |
|
ENDDO |
716 |
|
ENDDO |
717 |
#endif /* ndef SALT_PLUME_VOLUME */ |
#endif /* ndef SALT_PLUME_VOLUME */ |
718 |
|
ENDIF |
719 |
#endif /* ALLOW_SALT_PLUME */ |
#endif /* ALLOW_SALT_PLUME */ |
720 |
CADJ store bfsfc = comlev1_kpp |
CADJ store bfsfc = comlev1_kpp |
721 |
CADJ & , key=ikppkey, kind=isbyte, |
CADJ & , key=ikppkey, kind=isbyte, |