10 |
SUBROUTINE KPP_FORCING_SURF( |
SUBROUTINE KPP_FORCING_SURF( |
11 |
I rhoSurf, surfForcU, surfForcV, |
I rhoSurf, surfForcU, surfForcV, |
12 |
I surfForcT, surfForcS, surfForcTice, |
I surfForcT, surfForcS, surfForcTice, |
13 |
I Qsw, ttalpha, ssbeta, |
I Qsw, |
14 |
O ustar, bo, bosol, dVsq, |
#ifdef ALLOW_SALT_PLUME |
15 |
|
I saltPlumeFlux, |
16 |
|
#endif /* ALLOW_SALT_PLUME */ |
17 |
|
I ttalpha, ssbeta, |
18 |
|
O ustar, bo, bosol, |
19 |
|
#ifdef ALLOW_SALT_PLUME |
20 |
|
O boplume, |
21 |
|
#endif /* ALLOW_SALT_PLUME */ |
22 |
|
O dVsq, |
23 |
I ikppkey, iMin, iMax, jMin, jMax, bi, bj, myTime, myThid ) |
I ikppkey, iMin, iMax, jMin, jMax, bi, bj, myTime, myThid ) |
24 |
|
|
25 |
C !DESCRIPTION: \bv |
C !DESCRIPTION: \bv |
28 |
C | o Compute all surface related KPP fields: | |
C | o Compute all surface related KPP fields: | |
29 |
C | - friction velocity ustar | |
C | - friction velocity ustar | |
30 |
C | - turbulent and radiative surface buoyancy forcing, | |
C | - turbulent and radiative surface buoyancy forcing, | |
31 |
C | bo and bosol | |
C | bo and bosol, and surface haline buoyancy forcing | |
32 |
|
C | boplume | |
33 |
C | - velocity shear relative to surface squared (this is | |
C | - velocity shear relative to surface squared (this is | |
34 |
C | not really a surface affected quantity unless it is | |
C | not really a surface affected quantity unless it is | |
35 |
C | computed with respect to some resolution independent | |
C | computed with respect to some resolution independent | |
40 |
|
|
41 |
c taux / rho = surfForcU (N/m^2) |
c taux / rho = surfForcU (N/m^2) |
42 |
c tauy / rho = surfForcV (N/m^2) |
c tauy / rho = surfForcV (N/m^2) |
43 |
c ustar = sqrt( sqrt( taux^2 + tauy^2 ) / rho ) (m/s) |
c ustar = sqrt( sqrt( taux^2 + tauy^2 ) / rho ) (m/s) |
44 |
c bo = - g * ( alpha*surfForcT + |
c bo = - g * ( alpha*surfForcT + |
45 |
c beta *surfForcS ) / rho (m^2/s^3) |
c beta *surfForcS ) / rho (m^2/s^3) |
46 |
c bosol = - g * alpha * Qsw * drF(1) / rho (m^2/s^3) |
c bosol = - g * alpha * Qsw * drF(1) / rho (m^2/s^3) |
47 |
|
c boplume = g * ( beta *saltPlumeFlux/rhoConst )/rho (m^2/s^3) |
48 |
c------------------------------------------------------------------------ |
c------------------------------------------------------------------------ |
49 |
|
|
50 |
c \ev |
c \ev |
86 |
C Units are r_unit.K/s (=Kelvin.m/s if r=z) (>0 for ocean warming). |
C Units are r_unit.K/s (=Kelvin.m/s if r=z) (>0 for ocean warming). |
87 |
C |
C |
88 |
C Qsw - surface shortwave radiation (upwards positive) |
C Qsw - surface shortwave radiation (upwards positive) |
89 |
|
C saltPlumeFlux - salt rejected during freezing (downward = positive) |
90 |
C ttalpha - thermal expansion coefficient without 1/rho factor |
C ttalpha - thermal expansion coefficient without 1/rho factor |
91 |
C d(rho{k,k})/d(T(k)) (kg/m^3/C) |
C d(rho{k,k})/d(T(k)) (kg/m^3/C) |
92 |
C ssbeta - salt expansion coefficient without 1/rho factor |
C ssbeta - salt expansion coefficient without 1/rho factor |
93 |
C d(rho{k,k})/d(S(k)) (kg/m^3/PSU) |
C d(rho{k,k})/d(S(k)) (kg/m^3/PSU) |
94 |
|
C !OUTPUT PARAMETERS: |
95 |
C ustar (nx,ny) - surface friction velocity (m/s) |
C ustar (nx,ny) - surface friction velocity (m/s) |
96 |
C bo (nx,ny) - surface turbulent buoyancy forcing (m^2/s^3) |
C bo (nx,ny) - surface turbulent buoyancy forcing (m^2/s^3) |
97 |
C bosol (nx,ny) - surface radiative buoyancy forcing (m^2/s^3) |
C bosol (nx,ny) - surface radiative buoyancy forcing (m^2/s^3) |
98 |
|
C boplume(nx,ny) - surface haline buoyancy forcing (m^2/s^3) |
99 |
C dVsq (nx,ny,Nr) - velocity shear re surface squared |
C dVsq (nx,ny,Nr) - velocity shear re surface squared |
100 |
C at grid levels for bldepth (m^2/s^2) |
C at grid levels for bldepth (m^2/s^2) |
101 |
|
|
118 |
_RL ustar ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy ) |
_RL ustar ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy ) |
119 |
_RL bo ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy ) |
_RL bo ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy ) |
120 |
_RL bosol ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy ) |
_RL bosol ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy ) |
121 |
|
#ifdef ALLOW_SALT_PLUME |
122 |
|
_RL saltPlumeFlux (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
123 |
|
_RL boplume(1-OLx:sNx+OLx, 1-OLy:sNy+OLy ) |
124 |
|
#endif /* ALLOW_SALT_PLUME */ |
125 |
_RL dVsq ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy, Nr ) |
_RL dVsq ( 1-OLx:sNx+OLx, 1-OLy:sNy+OLy, Nr ) |
126 |
|
|
127 |
C !LOCAL VARIABLES: ==================================================== |
C !LOCAL VARIABLES: ==================================================== |
148 |
c ------------------------------------------------------------------- |
c ------------------------------------------------------------------- |
149 |
c taux / rho = surfForcU (N/m^2) |
c taux / rho = surfForcU (N/m^2) |
150 |
c tauy / rho = surfForcV (N/m^2) |
c tauy / rho = surfForcV (N/m^2) |
151 |
c ustar = sqrt( sqrt( taux^2 + tauy^2 ) / rho ) (m/s) |
c ustar = sqrt( sqrt( taux^2 + tauy^2 ) / rho ) (m/s) |
152 |
c bo = - g * ( alpha*surfForcT + |
c bo = - g * ( alpha*surfForcT + |
153 |
c beta *surfForcS ) / rho (m^2/s^3) |
c beta *surfForcS ) / rho (m^2/s^3) |
154 |
c bosol = - g * alpha * Qsw * drF(1) / rho (m^2/s^3) |
c bosol = - g * alpha * Qsw * drF(1) / rho (m^2/s^3) |
155 |
|
c boplume = g * ( beta *saltPlumeFlux/rhoConst )/rho (m^2/s^3) |
156 |
c------------------------------------------------------------------------ |
c------------------------------------------------------------------------ |
157 |
|
|
158 |
c initialize arrays to zero |
c initialize arrays to zero |
161 |
ustar(i,j) = p0 |
ustar(i,j) = p0 |
162 |
bo (I,J) = p0 |
bo (I,J) = p0 |
163 |
bosol(I,J) = p0 |
bosol(I,J) = p0 |
164 |
|
#ifdef ALLOW_SALT_PLUME |
165 |
|
boplume(I,J) = p0 |
166 |
|
#endif /* ALLOW_SALT_PLUME */ |
167 |
END DO |
END DO |
168 |
END DO |
END DO |
169 |
|
|
210 |
bosol(I,J) = gravity * TTALPHA(I,J,1) * Qsw(i,j,bi,bj) * |
bosol(I,J) = gravity * TTALPHA(I,J,1) * Qsw(i,j,bi,bj) * |
211 |
& recip_Cp*recip_rhoConst |
& recip_Cp*recip_rhoConst |
212 |
& / rhoSurf(I,J) |
& / rhoSurf(I,J) |
213 |
|
#ifdef ALLOW_SALT_PLUME |
214 |
|
boplume(I,J) = - gravity * SSBETA(I,J,1) |
215 |
|
& * saltPlumeFlux(i,j,bi,bj) |
216 |
|
& * recip_rhoConst / rhoSurf(I,J) |
217 |
|
#endif /* ALLOW_SALT_PLUME */ |
218 |
END DO |
END DO |
219 |
END DO |
END DO |
220 |
cph( |
cph( |