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 |
72 |
c ustar (imt) - surface friction velocity (m/s) |
c ustar (imt) - surface friction velocity (m/s) |
73 |
c bo (imt) - surface turbulent buoy. forcing (m^2/s^3) |
c bo (imt) - surface turbulent buoy. forcing (m^2/s^3) |
74 |
c bosol (imt) - radiative buoyancy forcing (m^2/s^3) |
c bosol (imt) - radiative buoyancy forcing (m^2/s^3) |
75 |
c boplume(imt) - haline buoyancy forcing (m^2/s^3) |
c boplume(imt,Nrp1)- haline buoyancy forcing (m^2/s^3) |
76 |
c dbloc (imt,Nr) - local delta buoyancy across interfaces (m/s^2) |
c dbloc (imt,Nr) - local delta buoyancy across interfaces (m/s^2) |
77 |
c dblocSm(imt,Nr) - horizontally smoothed dbloc (m/s^2) |
c dblocSm(imt,Nr) - horizontally smoothed dbloc (m/s^2) |
78 |
c stored in ghat to save space |
c stored in ghat to save space |
95 |
_RL bo (imt ) |
_RL bo (imt ) |
96 |
_RL bosol (imt ) |
_RL bosol (imt ) |
97 |
#ifdef ALLOW_SALT_PLUME |
#ifdef ALLOW_SALT_PLUME |
98 |
#ifndef SALT_PLUME_VOLUME |
_RL boplume (imt,0:Nr) |
|
_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 |
342 |
#ifndef SALT_PLUME_VOLUME |
_RL boplume (imt,0:Nr) |
|
_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 |
368 |
_RL wm(imt), ws(imt) |
_RL wm(imt), ws(imt) |
369 |
_RL worka(imt) |
_RL worka(imt) |
370 |
_RL bvsq, vtsq, hekman, hmonob, hlimit, tempVar1, tempVar2 |
_RL bvsq, vtsq, hekman, hmonob, hlimit, tempVar1, tempVar2 |
371 |
integer i, kl |
integer i, k, kl |
372 |
|
|
373 |
_RL p5 , eins |
_RL p5 , eins |
374 |
parameter ( p5=0.5, eins=1.0 ) |
parameter ( p5=0.5, eins=1.0 ) |
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 zgrid(kl) |
450 |
call SALT_PLUME_FRAC( |
call SALT_PLUME_FRAC( |
451 |
I imt, hbf,SPDepth, |
I imt, hbf,SPDepth, |
452 |
U worka, |
U worka, |
453 |
I myTime, myIter, myThid) |
I myTime, myIter, myThid) |
454 |
do i = 1, imt |
do i = 1, imt |
455 |
bfsfc(i) = bfsfc(i) + boplume(i)*(worka(i)) |
bfsfc(i) = bfsfc(i) + boplume(i,1)*(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 |
|
c DO k = 1, kl |
462 |
|
c IF (abs(worka(i)).GE.(abs(zgrid(k))-hwide(k)/2.0) THEN |
463 |
|
c bfsfc(i) = bfsfc(i) + boplume(i,k) |
464 |
|
c ENDIF |
465 |
|
c ENDDO |
466 |
|
bfsfc(i) = bfsfc(i) + boplume(i,kbl(i)) |
467 |
|
ENDDO |
468 |
#endif /* ndef SALT_PLUME_VOLUME */ |
#endif /* ndef SALT_PLUME_VOLUME */ |
469 |
|
ENDIF |
470 |
#endif /* ALLOW_SALT_PLUME */ |
#endif /* ALLOW_SALT_PLUME */ |
471 |
|
|
472 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
589 |
end do |
end do |
590 |
|
|
591 |
#ifdef ALLOW_SALT_PLUME |
#ifdef ALLOW_SALT_PLUME |
|
#ifndef SALT_PLUME_VOLUME |
|
592 |
IF ( useSALT_PLUME ) THEN |
IF ( useSALT_PLUME ) THEN |
593 |
|
#ifndef SALT_PLUME_VOLUME |
594 |
do i = 1, imt |
do i = 1, imt |
595 |
worka(i) = hbl(i) |
worka(i) = hbl(i) |
596 |
enddo |
enddo |
601 |
do i = 1, imt |
do i = 1, imt |
602 |
bfsfc(i) = bfsfc(i) + boplume(i) * (worka(i)) |
bfsfc(i) = bfsfc(i) + boplume(i) * (worka(i)) |
603 |
enddo |
enddo |
604 |
ENDIF |
#else /* def SALT_PLUME_VOLUME */ |
605 |
|
DO i = 1, imt |
606 |
|
c DO k = 1, Nr |
607 |
|
c IF (hbl(i).GE.(abs(zgrid(k))-hwide(k)/2.0) THEN |
608 |
|
c bfsfc(i) = bfsfc(i) + boplume(i,k) |
609 |
|
c ENDIF |
610 |
|
c ENDDO |
611 |
|
bfsfc(i) = bfsfc(i) + boplume(i,kbl(i)) |
612 |
|
ENDDO |
613 |
#endif /* ndef SALT_PLUME_VOLUME */ |
#endif /* ndef SALT_PLUME_VOLUME */ |
614 |
|
ENDIF |
615 |
#endif /* ALLOW_SALT_PLUME */ |
#endif /* ALLOW_SALT_PLUME */ |
616 |
CADJ store bfsfc = comlev1_kpp |
CADJ store bfsfc = comlev1_kpp |
617 |
CADJ & , key=ikppkey, kind=isbyte, |
CADJ & , key=ikppkey, kind=isbyte, |
696 |
end do |
end do |
697 |
|
|
698 |
#ifdef ALLOW_SALT_PLUME |
#ifdef ALLOW_SALT_PLUME |
|
#ifndef SALT_PLUME_VOLUME |
|
699 |
IF ( useSALT_PLUME ) THEN |
IF ( useSALT_PLUME ) THEN |
700 |
|
#ifndef SALT_PLUME_VOLUME |
701 |
do i = 1, imt |
do i = 1, imt |
702 |
worka(i) = hbl(i) |
worka(i) = hbl(i) |
703 |
enddo |
enddo |
708 |
do i = 1, imt |
do i = 1, imt |
709 |
bfsfc(i) = bfsfc(i) + boplume(i) * (worka(i)) |
bfsfc(i) = bfsfc(i) + boplume(i) * (worka(i)) |
710 |
enddo |
enddo |
711 |
ENDIF |
#else /* def SALT_PLUME_VOLUME */ |
712 |
|
DO i = 1, imt |
713 |
|
C DO k = 1, Nr |
714 |
|
C IF (hbl(i).GE.(abs(zgrid(k))-hwide(k)/2.0) THEN |
715 |
|
C bfsfc(i) = bfsfc(i) + boplume(i,k) |
716 |
|
C ENDIF |
717 |
|
C ENDDO |
718 |
|
bfsfc(i) = bfsfc(i) + boplume(i,kbl(i)) |
719 |
|
ENDDO |
720 |
#endif /* ndef SALT_PLUME_VOLUME */ |
#endif /* ndef SALT_PLUME_VOLUME */ |
721 |
|
ENDIF |
722 |
#endif /* ALLOW_SALT_PLUME */ |
#endif /* ALLOW_SALT_PLUME */ |
723 |
CADJ store bfsfc = comlev1_kpp |
CADJ store bfsfc = comlev1_kpp |
724 |
CADJ & , key=ikppkey, kind=isbyte, |
CADJ & , key=ikppkey, kind=isbyte, |