1 |
C $Header: /u/gcmpack/MITgcm/pkg/bulk_force/bulkf_formula_aim.F,v 1.1 2006/01/22 15:50:37 jmc Exp $ |
2 |
C $Name: $ |
3 |
|
4 |
#include "BULK_FORCE_OPTIONS.h" |
5 |
|
6 |
CBOP |
7 |
C !ROUTINE: BULKF_FORMULA_AIM |
8 |
C !INTERFACE: |
9 |
SUBROUTINE BULKF_FORMULA_AIM( |
10 |
I Tsurf, SLRD, |
11 |
I T1, T0, Q0, Vsurf, |
12 |
O SHF, EVAP, SLRU, |
13 |
O dEvp, sFlx, |
14 |
I iceornot, myThid ) |
15 |
|
16 |
C !DESCRIPTION: \bv |
17 |
C *==========================================================* |
18 |
C | S/R BULKF_FORMULA_AIM |
19 |
C | o compute surface flux over ocean and sea-ice, |
20 |
C | using AIM surface flux formulation |
21 |
C *==========================================================* |
22 |
C *==========================================================* |
23 |
C \ev |
24 |
|
25 |
C !USES: |
26 |
IMPLICIT NONE |
27 |
|
28 |
C Resolution parameters |
29 |
|
30 |
#include "EEPARAMS.h" |
31 |
#include "SIZE.h" |
32 |
#include "PARAMS.h" |
33 |
#include "BULKF_PARAMS.h" |
34 |
|
35 |
C !INPUT/OUTPUT PARAMETERS: |
36 |
C == Routine Arguments == |
37 |
C-- Input: |
38 |
C FMASK :: fractional land-sea mask (2-dim) |
39 |
C Tsurf :: surface temperature (2-dim) |
40 |
C SSR :: sfc sw radiation (net flux) (2-dim) |
41 |
C SLRD :: sfc lw radiation (downward flux)(2-dim) |
42 |
C T1 :: near-surface air temperature (from Pot.temp) |
43 |
C T0 :: near-surface air temperature (2-dim) |
44 |
C Q0 :: near-surface sp. humidity [g/kg](2-dim) |
45 |
C Vsurf :: surface wind speed [m/s] (2-dim,input) |
46 |
C-- Output: |
47 |
C SHF :: sensible heat flux (2-dim) |
48 |
C EVAP :: evaporation [g/(m^2 s)] (2-dim) |
49 |
C SLRU :: sfc lw radiation (upward flux) (2-dim) |
50 |
C Shf0 :: sensible heat flux over freezing surf. |
51 |
C dShf :: sensible heat flux derivative relative to surf. temp |
52 |
C Evp0 :: evaporation computed over freezing surface (Ts=0.oC) |
53 |
C dEvp :: evaporation derivative relative to surf. temp |
54 |
C Slr0 :: upward long wave radiation over freezing surf. |
55 |
C dSlr :: upward long wave rad. derivative relative to surf. temp |
56 |
C sFlx :: net heat flux (+=down) except SW, function of surf. temp Ts: |
57 |
C 0: Flux(Ts=0.oC) ; 1: Flux(Ts^n) ; 2: d.Flux/d.Ts(Ts^n) |
58 |
C TSFC :: surface temperature (clim.) (2-dim) |
59 |
C TSKIN :: skin surface temperature (2-dim) |
60 |
C-- Input: |
61 |
C iceornot :: 0=open water, 1=ice cover |
62 |
C myThid :: Thread number for this instance of the routine |
63 |
C-- |
64 |
INTEGER NGP |
65 |
PARAMETER ( NGP = 1 ) |
66 |
c _RL PSA(NGP), FMASK(NGP), EMISloc |
67 |
_RL Tsurf(NGP) |
68 |
c _RL SSR(NGP) |
69 |
_RL SLRD(NGP) |
70 |
_RL T1(NGP), T0(NGP), Q0(NGP), Vsurf(NGP) |
71 |
|
72 |
_RL SHF(NGP), EVAP(NGP), SLRU(NGP) |
73 |
_RL dEvp(NGP), sFlx(NGP,0:2) |
74 |
c _RL Shf0(NGP), dShf(NGP), Evp0(NGP), dEvp(NGP) |
75 |
c _RL Slr0(NGP), dSlr(NGP), sFlx(NGP,0:2) |
76 |
c _RL TSFC(NGP), TSKIN(NGP) |
77 |
|
78 |
INTEGER iceornot |
79 |
INTEGER myThid |
80 |
CEOP |
81 |
|
82 |
#ifdef ALLOW_FORMULA_AIM |
83 |
|
84 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
85 |
C FWIND0 = ratio of near-sfc wind to lowest-level wind |
86 |
C CHS = heat exchange coefficient over sea |
87 |
C VGUST = wind speed for sub-grid-scale gusts |
88 |
C DTHETA = Potential temp. gradient for stability correction |
89 |
C dTstab = potential temp. increment for stability function derivative |
90 |
C FSTAB = Amplitude of stability correction (fraction) |
91 |
C P0 = reference pressure [Pa=N/m2] |
92 |
C GG = gravity accel. [m/s2] |
93 |
C RD = gas constant for dry air [J/kg/K] |
94 |
C CP = specific heat at constant pressure [J/kg/K] |
95 |
C ALHC = latent heat of condensation [J/g] |
96 |
C ALHF = latent heat of freezing [J/g] |
97 |
C SBC = Stefan-Boltzmann constant |
98 |
C EMISloc :: longwave surface emissivity |
99 |
c _RL FWIND0, CHS, VGUST, DTHETA, dTstab, FSTAB |
100 |
_RL P0, ALHC, ALHF, RD, CP, SBC, EMISloc |
101 |
EQUIVALENCE ( ocean_emissivity , EMISloc ) |
102 |
EQUIVALENCE ( Lvap , ALHC ) |
103 |
EQUIVALENCE ( Lfresh , ALHF ) |
104 |
EQUIVALENCE ( Rgas , RD ) |
105 |
EQUIVALENCE ( cpair , CP ) |
106 |
EQUIVALENCE ( stefan , SBC ) |
107 |
|
108 |
C-- Local variables: |
109 |
C PSA :: norm. surface pressure [p/p0] (2-dim) |
110 |
C DENVV :: surface flux (sens,lat.) coeff. (=Rho*|V|) [kg/m2/s] |
111 |
C CDENVV :: surf. heat flux (sens.,lat.) coeff including stability effect |
112 |
C ALHevp :: Latent Heat of evaporation |
113 |
_RL PSA(NGP) |
114 |
_RL DENVV(NGP), PRD |
115 |
_RL Shf0(NGP), dShf(NGP), Evp0(NGP) |
116 |
_RL Slr0(NGP), dSlr(NGP) |
117 |
_RL TSFC(NGP), TSKIN(NGP) |
118 |
_RL CDENVV(NGP), RDTH, FSSICE |
119 |
_RL ALHevp, Fstb0, dTstb, dFstb |
120 |
_RL QSAT0(NGP,2) |
121 |
_RL QDUMMY(1), RDUMMY(1), TS2 |
122 |
INTEGER J |
123 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
124 |
|
125 |
PSA(1) = 1. _d 0 |
126 |
P0 = 1. _d +5 |
127 |
C--- |
128 |
|
129 |
ALHevp = ALHC |
130 |
C Evap of snow/ice: account for Latent Heat of freezing : |
131 |
c IF ( aim_energPrecip .OR. useThSIce ) ALHevp = ALHC + ALHF |
132 |
IF ( iceornot.GE.1 ) ALHevp = ALHC + ALHF |
133 |
|
134 |
C 1.4 Density * wind speed (including gustiness factor) |
135 |
|
136 |
PRD = P0/RD |
137 |
c VG2 = VGUST*VGUST |
138 |
c factWind2 = FWIND0*FWIND0 |
139 |
|
140 |
DO J=1,NGP |
141 |
c SPEED0(J)=SQRT(factWind2*Vsurf2(J)+VG2) |
142 |
c DENVV(J)=(PRD*PSA(J)/T0(J))*SPEED0(J) |
143 |
C-- assuming input file "WspeedFile" contains the time-average "SPEED0" |
144 |
C from AIM output (aimPhytave: fields # 15 ; aimDiag: WINDS ) : |
145 |
DENVV(J)=(PRD*PSA(J)/T0(J))*Vsurf(J) |
146 |
ENDDO |
147 |
|
148 |
C 1.5 Define effective skin temperature to compensate for |
149 |
C non-linearity of heat/moisture fluxes during the daily cycle |
150 |
|
151 |
DO J=1,NGP |
152 |
TSKIN(J) = Tsurf(J) + celsius2K |
153 |
TSFC(J)=273.16 _d 0 |
154 |
ENDDO |
155 |
|
156 |
C-- 2. Computation of fluxes over land and sea |
157 |
|
158 |
C 2.1 Stability correction |
159 |
|
160 |
RDTH = FSTAB/DTHETA |
161 |
|
162 |
DO J=1,NGP |
163 |
FSSICE=1.+MIN(DTHETA,MAX(-DTHETA,TSKIN(J)-T1(J)))*RDTH |
164 |
CDENVV(J)=CHS*DENVV(J)*FSSICE |
165 |
ENDDO |
166 |
|
167 |
IF ( dTstab.GT.0. _d 0 ) THEN |
168 |
C- account for stability function derivative relative to Tsurf: |
169 |
C note: to avoid discontinuity in the derivative (because of min,max), compute |
170 |
C the derivative using the discrete form: F(Ts+dTstab)-F(Ts-dTstab)/2.dTstab |
171 |
DO J=1,NGP |
172 |
Fstb0 = 1.+MIN(DTHETA,MAX(-DTHETA,TSFC(J) -T1(J)))*RDTH |
173 |
Shf0(J) = CHS*DENVV(J)*Fstb0 |
174 |
dTstb = ( DTHETA+dTstab-ABS(TSKIN(J)-T1(J)) )/dTstab |
175 |
dFstb = RDTH*MIN(1. _d 0, MAX(0. _d 0, dTstb*0.5 _d 0)) |
176 |
dShf(J) = CHS*DENVV(J)*dFstb |
177 |
ENDDO |
178 |
ENDIF |
179 |
|
180 |
C 2.2 Evaporation |
181 |
|
182 |
CALL BULKF_SH2RH_AIM( 2, NGP, TSKIN, PSA, 1. _d 0, |
183 |
& QDUMMY, dEvp, QSAT0(1,1), myThid ) |
184 |
CALL BULKF_SH2RH_AIM( 0, NGP, TSFC, PSA, 1. _d 0, |
185 |
& QDUMMY, RDUMMY,QSAT0(1,2), myThid ) |
186 |
|
187 |
IF ( dTstab.GT.0. _d 0 ) THEN |
188 |
C- account for stability function derivative relative to Tsurf: |
189 |
DO J=1,NGP |
190 |
EVAP(J) = CDENVV(J)*(QSAT0(J,1)-Q0(J)) |
191 |
Evp0(J) = Shf0(J)*(QSAT0(J,2)-Q0(J)) |
192 |
dEvp(J) = CDENVV(J)*dEvp(J) |
193 |
& + dShf(J)*(QSAT0(J,1)-Q0(J)) |
194 |
ENDDO |
195 |
ELSE |
196 |
DO J=1,NGP |
197 |
EVAP(J) = CDENVV(J)*(QSAT0(J,1)-Q0(J)) |
198 |
Evp0(J) = CDENVV(J)*(QSAT0(J,2)-Q0(J)) |
199 |
dEvp(J) = CDENVV(J)*dEvp(J) |
200 |
ENDDO |
201 |
ENDIF |
202 |
|
203 |
C 2.3 Sensible heat flux |
204 |
|
205 |
IF ( dTstab.GT.0. _d 0 ) THEN |
206 |
C- account for stability function derivative relative to Tsurf: |
207 |
DO J=1,NGP |
208 |
SHF(J) = CDENVV(J)*CP*(TSKIN(J)-T0(J)) |
209 |
Shf0(J) = Shf0(J)*CP*(TSFC(J) -T0(J)) |
210 |
dShf(J) = CDENVV(J)*CP |
211 |
& + dShf(J)*CP*(TSKIN(J)-T0(J)) |
212 |
dShf(J) = MAX( dShf(J), 0. _d 0 ) |
213 |
C-- do not allow negative derivative vs Ts of Sensible+Latent H.flux: |
214 |
C a) quiet unrealistic ; |
215 |
C b) garantee positive deriv. of total H.flux (needed for implicit solver) |
216 |
dEvp(J) = MAX( dEvp(J), -dShf(J)/ALHevp ) |
217 |
ENDDO |
218 |
ELSE |
219 |
DO J=1,NGP |
220 |
SHF(J) = CDENVV(J)*CP*(TSKIN(J)-T0(J)) |
221 |
Shf0(J) = CDENVV(J)*CP*(TSFC(J) -T0(J)) |
222 |
dShf(J) = CDENVV(J)*CP |
223 |
ENDDO |
224 |
ENDIF |
225 |
|
226 |
C 2.4 Emission of lw radiation from the surface |
227 |
|
228 |
DO J=1,NGP |
229 |
TS2 = TSFC(J)*TSFC(J) |
230 |
Slr0(J) = SBC*TS2*TS2 |
231 |
TS2 = TSKIN(J)*TSKIN(J) |
232 |
SLRU(J) = SBC*TS2*TS2 |
233 |
dSlr(J) = 4. _d 0 *SBC*TS2*TSKIN(J) |
234 |
ENDDO |
235 |
|
236 |
C-- Compute net surface heat flux and its derivative ./. surf. temp. |
237 |
DO J=1,NGP |
238 |
sFlx(J,0)= ( SLRD(J) - EMISloc*Slr0(J) ) |
239 |
& - ( Shf0(J) + ALHevp*Evp0(J) ) |
240 |
sFlx(J,1)= ( SLRD(J) - EMISloc*SLRU(J) ) |
241 |
& - ( SHF(J) + ALHevp*EVAP(J) ) |
242 |
sFlx(J,2)= -EMISloc*dSlr(J) |
243 |
& - ( dShf(J) + ALHevp*dEvp(J) ) |
244 |
ENDDO |
245 |
|
246 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
247 |
#endif /* ALLOW_FORMULA_AIM */ |
248 |
|
249 |
RETURN |
250 |
END |