1 |
C $Header: /u/gcmpack/MITgcm/pkg/aim_v23/phy_suflux_land.F,v 1.3 2004/06/24 23:43:11 jmc Exp $ |
2 |
C $Name: $ |
3 |
|
4 |
#include "AIM_OPTIONS.h" |
5 |
|
6 |
CBOP |
7 |
C !ROUTINE: SUFLUX_LAND |
8 |
C !INTERFACE: |
9 |
SUBROUTINE SUFLUX_LAND( |
10 |
I PSA, FMASK, EMISloc, |
11 |
I Tsurf, dTskin, SWAV, SSR, SLRD, |
12 |
I T1, T0, Q0, DENVV, |
13 |
O SHF, EVAP, SLRU, |
14 |
O Shf0, dShf, Evp0, dEvp, Slr0, dSlr, sFlx, |
15 |
O TSFC, TSKIN, |
16 |
I bi,bj,myThid) |
17 |
|
18 |
C !DESCRIPTION: \bv |
19 |
C *==========================================================* |
20 |
C | S/R SUFLUX_LAND |
21 |
C | o compute surface flux over land |
22 |
C *==========================================================* |
23 |
C | o contains part of original S/R SUFLUX (Speedy code) |
24 |
C *==========================================================* |
25 |
C \ev |
26 |
|
27 |
C !USES: |
28 |
IMPLICIT NONE |
29 |
|
30 |
C Resolution parameters |
31 |
|
32 |
C-- size for MITgcm & Physics package : |
33 |
#include "AIM_SIZE.h" |
34 |
#include "EEPARAMS.h" |
35 |
|
36 |
C-- Physics package |
37 |
#include "AIM_PARAMS.h" |
38 |
|
39 |
C Physical constants + functions of sigma and latitude |
40 |
#include "com_physcon.h" |
41 |
|
42 |
C Surface flux constants |
43 |
#include "com_sflcon.h" |
44 |
|
45 |
C !INPUT/OUTPUT PARAMETERS: |
46 |
C == Routine Arguments == |
47 |
C-- Input: |
48 |
C PSA :: norm. surface pressure [p/p0] (2-dim) |
49 |
C FMASK :: fractional land-sea mask (2-dim) |
50 |
C EMISloc:: longwave surface emissivity |
51 |
C Tsurf :: surface temperature (2-dim) |
52 |
C dTskin :: temp. correction for daily-cycle heating [K] |
53 |
C SWAV :: soil wetness availability [0-1] (2-dim) |
54 |
C SSR :: sfc sw radiation (net flux) (2-dim) |
55 |
C SLRD :: sfc lw radiation (downward flux)(2-dim) |
56 |
C T1 :: near-surface air temperature (from Pot.temp) |
57 |
C T0 :: near-surface air temperature (2-dim) |
58 |
C Q0 :: near-surface sp. humidity [g/kg](2-dim) |
59 |
C DENVV :: surface flux (sens,lat.) coeff. (=Rho*|V|) [kg/m2/s] |
60 |
C-- Output: |
61 |
C SHF :: sensible heat flux (2-dim) |
62 |
C EVAP :: evaporation [g/(m^2 s)] (2-dim) |
63 |
C SLRU :: sfc lw radiation (upward flux) (2-dim) |
64 |
C Shf0 :: sensible heat flux over freezing surf. |
65 |
C dShf :: sensible heat flux derivative relative to surf. temp |
66 |
C Evp0 :: evaporation computed over freezing surface (Ts=0.oC) |
67 |
C dEvp :: evaporation derivative relative to surf. temp |
68 |
C Slr0 :: upward long wave radiation over freezing surf. |
69 |
C dSlr :: upward long wave rad. derivative relative to surf. temp |
70 |
C sFlx :: net surface flux (+=down) function of surf. temp Ts: |
71 |
C 0: Flux(Ts=0.oC) ; 1: Flux(Ts^n) ; 2: d.Flux/d.Ts(Ts^n) |
72 |
C TSFC :: surface temperature (clim.) (2-dim) |
73 |
C TSKIN :: skin surface temperature (2-dim) |
74 |
C-- Input: |
75 |
C bi,bj :: tile index |
76 |
C myThid :: Thread number for this instance of the routine |
77 |
C-- |
78 |
_RL PSA(NGP), FMASK(NGP), EMISloc |
79 |
_RL Tsurf(NGP), dTskin(NGP), SWAV(NGP) |
80 |
_RL SSR(NGP), SLRD(NGP) |
81 |
_RL T1(NGP), T0(NGP), Q0(NGP), DENVV(NGP) |
82 |
|
83 |
_RL SHF(NGP), EVAP(NGP), SLRU(NGP) |
84 |
_RL Shf0(NGP), dShf(NGP), Evp0(NGP), dEvp(NGP) |
85 |
_RL Slr0(NGP), dSlr(NGP), sFlx(NGP,0:2) |
86 |
_RL TSFC(NGP), TSKIN(NGP) |
87 |
|
88 |
INTEGER bi,bj,myThid |
89 |
CEOP |
90 |
|
91 |
#ifdef ALLOW_AIM |
92 |
|
93 |
C-- Local variables: |
94 |
C CDENVV :: surf. heat flux (sens.,lat.) coeff including stability effect |
95 |
_RL CDENVV(NGP), RDTH, FSLAND |
96 |
_RL Fstb0, dTstb, dFstb |
97 |
_RL QSAT0(NGP,2) |
98 |
_RL QDUMMY(1), RDUMMY(1), TS2 |
99 |
INTEGER J |
100 |
|
101 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
102 |
|
103 |
C 1.5 Define effective skin temperature to compensate for |
104 |
C non-linearity of heat/moisture fluxes during the daily cycle |
105 |
|
106 |
DO J=1,NGP |
107 |
TSKIN(J) = Tsurf(J) + dTskin(J) |
108 |
TSFC(J)=273.16 _d 0 + dTskin(J) |
109 |
ENDDO |
110 |
|
111 |
|
112 |
C-- 2. Computation of fluxes over land and sea |
113 |
|
114 |
C 2.1 Stability correction |
115 |
|
116 |
RDTH = FSTAB/DTHETA |
117 |
|
118 |
DO J=1,NGP |
119 |
FSLAND=1.+MIN(DTHETA,MAX(-DTHETA,TSKIN(J)-T1(J)))*RDTH |
120 |
CDENVV(J)=CHL*DENVV(J)*FSLAND |
121 |
ENDDO |
122 |
|
123 |
IF ( dTstab.GT.0. _d 0 ) THEN |
124 |
C- account for stability function derivative relative to Tsurf: |
125 |
C note: to avoid discontinuity in the derivative (because of min,max), compute |
126 |
C the derivative using the discrete form: F(Ts+dTstab)-F(Ts-dTstab)/2.dTstab |
127 |
DO J=1,NGP |
128 |
Fstb0 = 1.+MIN(DTHETA,MAX(-DTHETA,TSFC(J) -T1(J)))*RDTH |
129 |
Shf0(J) = CHL*DENVV(J)*Fstb0 |
130 |
dTstb = ( DTHETA+dTstab-ABS(TSKIN(J)-T1(J)) )/dTstab |
131 |
dFstb = RDTH*MIN(1. _d 0, MAX(0. _d 0, dTstb*0.5 _d 0)) |
132 |
dShf(J) = CHL*DENVV(J)*dFstb |
133 |
ENDDO |
134 |
ENDIF |
135 |
|
136 |
C 2.2 Evaporation |
137 |
|
138 |
CALL SHTORH (2, NGP, TSKIN, PSA, 1. _d 0, QDUMMY, dEvp, |
139 |
& QSAT0(1,1), myThid) |
140 |
CALL SHTORH (0, NGP, TSFC, PSA, 1. _d 0, QDUMMY, RDUMMY, |
141 |
& QSAT0(1,2), myThid) |
142 |
|
143 |
#ifdef ALLOW_DEW_ON_LAND |
144 |
C-- allow negative evaporation (dew): |
145 |
IF ( dTstab.GT.0. _d 0 ) THEN |
146 |
C- account for stability function derivative relative to Tsurf: |
147 |
DO J=1,NGP |
148 |
EVAP(J) = CDENVV(J)*SWAV(J)*(QSAT0(J,1)-Q0(J)) |
149 |
Evp0(J) = Shf0(J)*SWAV(J)*(QSAT0(J,2)-Q0(J)) |
150 |
dEvp(J) = CDENVV(J)*SWAV(J)*dEvp(J) |
151 |
& + dShf(J)*SWAV(J)*(QSAT0(J,1)-Q0(J)) |
152 |
ENDDO |
153 |
ELSE |
154 |
DO J=1,NGP |
155 |
EVAP(J) = CDENVV(J)*SWAV(J)*(QSAT0(J,1)-Q0(J)) |
156 |
Evp0(J) = CDENVV(J)*SWAV(J)*(QSAT0(J,2)-Q0(J)) |
157 |
dEvp(J) = CDENVV(J)*SWAV(J)*dEvp(J) |
158 |
ENDDO |
159 |
ENDIF |
160 |
#else /* ALLOW_DEW_ON_LAND */ |
161 |
C-- allow only positive evaporation (no dew): |
162 |
IF ( dTstab.GT.0. _d 0 ) THEN |
163 |
C- account for stability function derivative relative to Tsurf: |
164 |
DO J=1,NGP |
165 |
EVAP(J) = CDENVV(J)*SWAV(J)*MAX(0. _d 0,QSAT0(J,1)-Q0(J)) |
166 |
Evp0(J) = Shf0(J)*SWAV(J)*MAX(0. _d 0,QSAT0(J,2)-Q0(J)) |
167 |
dEvp(J) = CDENVV(J)*SWAV(J)*dEvp(J) |
168 |
& + dShf(J)*SWAV(J)*MAX(0. _d 0,QSAT0(J,1)-Q0(J)) |
169 |
ENDDO |
170 |
ELSE |
171 |
DO J=1,NGP |
172 |
C EVAP(J,1) = CDENVV(J,1)*SWAV(J)*MAX(0. _d 0,QSAT0(J,1)-Q0(J)) |
173 |
c EVAP(J,1) = CDENVV(J,1)*MAX(0. _d 0,SWAV(J)*QSAT0(J,1)-Q0(J)) |
174 |
Cjmc: try the other formulation (= described in F.M paper): |
175 |
EVAP(J) = CDENVV(J)*SWAV(J)*MAX(0. _d 0,QSAT0(J,1)-Q0(J)) |
176 |
Evp0(J) = CDENVV(J)*SWAV(J)*MAX(0. _d 0,QSAT0(J,2)-Q0(J)) |
177 |
dEvp(J) = CDENVV(J)*SWAV(J)*dEvp(J) |
178 |
ENDDO |
179 |
ENDIF |
180 |
#endif /* ALLOW_DEW_ON_LAND */ |
181 |
|
182 |
C 2.3 Sensible heat flux |
183 |
|
184 |
IF ( dTstab.GT.0. _d 0 ) THEN |
185 |
C- account for stability function derivative relative to Tsurf: |
186 |
DO J=1,NGP |
187 |
SHF(J) = CDENVV(J)*CP*(TSKIN(J)-T0(J)) |
188 |
Shf0(J) = Shf0(J)*CP*(TSFC(J) -T0(J)) |
189 |
dShf(J) = CDENVV(J)*CP |
190 |
& + dShf(J)*CP*(TSKIN(J)-T0(J)) |
191 |
dShf(J) = MAX( dShf(J), 0. _d 0 ) |
192 |
C-- do not allow negative derivative vs Ts of Sensible+Latent H.flux: |
193 |
C a) quiet unrealistic ; |
194 |
C b) garantee positive deriv. of total H.flux (needed for implicit solver) |
195 |
dEvp(J) = MAX( dEvp(J), -dShf(J)/ALHC ) |
196 |
ENDDO |
197 |
ELSE |
198 |
DO J=1,NGP |
199 |
SHF(J) = CDENVV(J)*CP*(TSKIN(J)-T0(J)) |
200 |
Shf0(J) = CDENVV(J)*CP*(TSFC(J) -T0(J)) |
201 |
dShf(J) = CDENVV(J)*CP |
202 |
ENDDO |
203 |
ENDIF |
204 |
|
205 |
C 2.4 Emission of lw radiation from the surface |
206 |
|
207 |
DO J=1,NGP |
208 |
TS2 = TSFC(J)*TSFC(J) |
209 |
Slr0(J) = SBC*TS2*TS2 |
210 |
TS2 = TSKIN(J)*TSKIN(J) |
211 |
SLRU(J) = SBC*TS2*TS2 |
212 |
dSlr(J) = 4. _d 0 *SBC*TS2*TSKIN(J) |
213 |
ENDDO |
214 |
|
215 |
C-- Compute net surface heat flux (+=down) and its derivative ./. surf. temp. |
216 |
DO J=1,NGP |
217 |
sFlx(J,0)= ( SSR(J) + SLRD(J) - EMISloc*Slr0(J) ) |
218 |
& - ( Shf0(J) + ALHC*Evp0(J) ) |
219 |
sFlx(J,1)= ( SSR(J) + SLRD(J) - EMISloc*SLRU(J) ) |
220 |
& - ( SHF(J)+ ALHC*EVAP(J) ) |
221 |
sFlx(J,2)= - EMISloc*dSlr(J) |
222 |
& - ( dShf(J) + ALHC*dEvp(J) ) |
223 |
ENDDO |
224 |
|
225 |
C-- 3. Adjustment of skin temperature and fluxes over land |
226 |
C-- based on energy balance (to be implemented) |
227 |
C <= done separately for each surface type (land,sea,sea-ice) |
228 |
|
229 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
230 |
#endif /* ALLOW_AIM */ |
231 |
|
232 |
RETURN |
233 |
END |