1 |
C $Header$ |
C $Header$ |
2 |
C $Name$ |
C $Name$ |
3 |
|
|
4 |
SUBROUTINE SUFLUX (PSA,UA,VA,TA,QA,RH,QSAT,PHI, |
SUBROUTINE SUFLUX (PSA,UA,VA,TA,QA,RH,QSAT,Vsurfsq,PHI, |
5 |
* PHI0,FMASK,TLAND,TSEA,SWAV,SSR,SLR, |
* PHI0,FMASK,TLAND,TSEA,SWAV,SSR,SLR, |
6 |
* USTR,VSTR,SHF,EVAP,T0,Q0,QSAT0,SPEED0) |
* DRAG,USTR,VSTR,SHF,EVAP,T0,Q0,QSAT0,SPEED0, |
7 |
|
& myThid) |
8 |
C-- |
C-- |
9 |
C-- SUBROUTINE SUFLUX (PSA,UA,VA,TA,QA,RH,PHI, |
C-- SUBROUTINE SUFLUX (PSA,UA,VA,TA,QA,RH,PHI, |
10 |
C-- * PHI0,FMASK,TLAND,TSEA,SWAV, |
C-- * PHI0,FMASK,TLAND,TSEA,SWAV, |
27 |
C-- VSTR = v stress (2-dim) |
C-- VSTR = v stress (2-dim) |
28 |
C-- SHF = sensible heat flux (2-dim) |
C-- SHF = sensible heat flux (2-dim) |
29 |
C-- EVAP = evaporation [g/(m^2 s)] (2-dim) |
C-- EVAP = evaporation [g/(m^2 s)] (2-dim) |
30 |
|
C - added (jmc) : |
31 |
|
C-- Vsurfsq = square of surface wind speed (2-dim,input) |
32 |
|
C-- ==> UA,VA are no longer used |
33 |
|
C-- DRAG = surface Drag term (= Cd*|V|) (2-dim,output) |
34 |
|
C-- ==> USTR,VSTR are no longer used |
35 |
|
C-- myThid = Instance number of this instance of the |
36 |
|
C-- the routine. |
37 |
C-- |
C-- |
38 |
|
|
39 |
|
|
41 |
|
|
42 |
|
|
43 |
C Resolution parameters |
C Resolution parameters |
44 |
|
#include "EEPARAMS.h" |
45 |
#include "atparam.h" |
#include "atparam.h" |
46 |
#include "atparam1.h" |
#include "atparam1.h" |
47 |
#include "Lev_def.h" |
#include "Lev_def.h" |
55 |
C Surface flux constants |
C Surface flux constants |
56 |
|
|
57 |
#include "com_sflcon.h" |
#include "com_sflcon.h" |
58 |
|
|
59 |
C |
C |
60 |
REAL PSA(NGP), UA(NGP,NLEV), VA(NGP,NLEV), TA(NGP,NLEV), |
REAL PSA(NGP), UA(NGP,NLEV), VA(NGP,NLEV), TA(NGP,NLEV), |
61 |
* QA(NGP,NLEV), RH(NGP,NLEV), QSAT(NGP,NLEV), PHI(NGP,NLEV), |
* QA(NGP,NLEV), RH(NGP,NLEV), QSAT(NGP,NLEV), PHI(NGP,NLEV), |
62 |
* PHI0(NGP), FMASK(NGP), TLAND(NGP), TSEA(NGP), SWAV(NGP), |
* PHI0(NGP), FMASK(NGP), TLAND(NGP), TSEA(NGP), SWAV(NGP), |
63 |
* SSR(NGP), SLR(NGP) |
* SSR(NGP), SLR(NGP) |
64 |
|
REAL Vsurfsq(NGP), DRAG(NGP) |
65 |
|
INTEGER myThid |
66 |
C |
C |
67 |
REAL USTR(NGP,3), VSTR(NGP,3), SHF(NGP,3), EVAP(NGP,3) |
REAL USTR(NGP,3), VSTR(NGP,3), SHF(NGP,3), EVAP(NGP,3) |
68 |
C |
C |
91 |
SAVE denmoy1, denmoy2 |
SAVE denmoy1, denmoy2 |
92 |
REAL Q0moy(NGP) |
REAL Q0moy(NGP) |
93 |
SAVE Q0moy |
SAVE Q0moy |
94 |
|
REAL factwind2 |
95 |
C |
C |
96 |
C-- 1. Extrapolation of wind, temp, hum. and density to the surface |
C-- 1. Extrapolation of wind, temp, hum. and density to the surface |
97 |
C |
C |
98 |
C 1.1 Wind components |
C 1.1 Wind components |
99 |
C |
C |
100 |
DO J=1,NGP |
DO J=1,NGP |
101 |
IF ( NLEVxyU(J) .GT. 0 ) THEN |
c_jmc IF ( NLEVxyU(J) .GT. 0 ) THEN |
102 |
U0(J) = FWIND0*UA(J,NLEVxyU(J)) |
c_jmc U0(J) = FWIND0*UA(J,NLEVxyU(J)) |
103 |
ENDIF |
c_jmc ENDIF |
104 |
IF ( NLEVxyV(J) .GT. 0 ) THEN |
c_jmc IF ( NLEVxyV(J) .GT. 0 ) THEN |
105 |
V0(J) = FWIND0*VA(J,NLEVxyV(J)) |
c_jmc V0(J) = FWIND0*VA(J,NLEVxyV(J)) |
106 |
|
c_jmc ENDIF |
107 |
|
c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
108 |
|
C-- Note(jmc): If we interpolate U,V from C_grid to A_grid (center of the mesh) |
109 |
|
C the above distinction between NLEVxy_Upt,Vpt is no longer valid ! |
110 |
|
C same thing (again) few lines below. |
111 |
|
c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
112 |
|
IF ( NLEVxy(J,myThid) .GT. 0 ) THEN |
113 |
|
U0(J) = FWIND0*UA(J,NLEVxy(J,myThid)) |
114 |
|
V0(J) = FWIND0*VA(J,NLEVxy(J,myThid)) |
115 |
|
ELSE |
116 |
|
U0(J) = 0.0 |
117 |
|
V0(J) = 0.0 |
118 |
ENDIF |
ENDIF |
119 |
C U0(J) = UA(J,5) |
C U0(J) = UA(J,5) |
120 |
C V0(J) = VA(J,5) |
C V0(J) = VA(J,5) |
125 |
GTEMP0 = 1.D0-FTEMP0 |
GTEMP0 = 1.D0-FTEMP0 |
126 |
RCP = 1.D0/CP |
RCP = 1.D0/CP |
127 |
DO J=1,NGP |
DO J=1,NGP |
128 |
NL1(J)=NLEVxy(J)-1 |
NL1(J)=NLEVxy(J,myThid)-1 |
129 |
ENDDO |
ENDDO |
130 |
C |
C |
131 |
DO J=1,NGP |
DO J=1,NGP |
132 |
IF ( NLEVxy(J) .GT. 0 ) THEN |
IF ( NLEVxy(J,myThid) .GT. 0 ) THEN |
133 |
T0(J,1) = TA(J,NLEVxy(J))+WVI(NLEVxy(J),2)* |
T0(J,1) = TA(J,NLEVxy(J,myThid))+WVI(NLEVxy(J,myThid),2)* |
134 |
& (TA(J,NLEVxy(J))-TA(J,NL1(J))) |
& (TA(J,NLEVxy(J,myThid))-TA(J,NL1(J))) |
135 |
ccccc T0(J,2) = TA(J,NLEVxy(J))+RCP*(PHI(J,NLEVxy(J))-PHI0(J)) |
ccccc T0(J,2) = TA(J,NLEVxy(J))+RCP*(PHI(J,NLEVxy(J))-PHI0(J)) |
136 |
T0(J,2) = TA(J,NLEVxy(J))* |
T0(J,2) = TA(J,NLEVxy(J,myThid))* |
137 |
& ((Psurfw(NLEVxy(J))/Psurfs(Nlevxy(J)))**(RD/CP)) |
& ((Psurfw(NLEVxy(J,myThid))/ |
138 |
|
& Psurfs(Nlevxy(J,myThid)))**(RD/CP)) |
139 |
ELSE |
ELSE |
140 |
T0(J,1) = 273.16 _d 0 |
T0(J,1) = 273.16 _d 0 |
141 |
T0(J,2) = 273.16 _d 0 |
T0(J,2) = 273.16 _d 0 |
151 |
GHUM0 = 1. _d 0-FHUM0 |
GHUM0 = 1. _d 0-FHUM0 |
152 |
C |
C |
153 |
DO J=1,NGP |
DO J=1,NGP |
154 |
IF ( NLEVxy(J) .GT. 0 ) THEN |
IF ( NLEVxy(J,myThid) .GT. 0 ) THEN |
155 |
WORK(J)=RH(J,Nlevxy(J)) |
WORK(J)=RH(J,Nlevxy(J,myThid)) |
156 |
cchdbg |
cchdbg |
157 |
c WORK(J) = RH(J,NLEVxy(J))+WVI(NLEVxy(J),2)* |
c WORK(J) = RH(J,NLEVxy(J))+WVI(NLEVxy(J),2)* |
158 |
c & (RH(J,NLEVxy(J))-RH(J,NL1(J))) |
c & (RH(J,NLEVxy(J))-RH(J,NL1(J))) |
160 |
ENDIF |
ENDIF |
161 |
ENDDO |
ENDDO |
162 |
C |
C |
163 |
CALL SHTORH (-1,NGP,T0,PSA,1. _d 0,Q0,WORK,QSAT0) |
CALL SHTORH (-1,NGP,T0,PSA,1. _d 0,Q0,WORK,QSAT0,myThid) |
164 |
C |
C |
165 |
DO J=1,NGP |
DO J=1,NGP |
166 |
IF ( NLEVxy(J) .GT. 0 ) THEN |
IF ( NLEVxy(J,myThid) .GT. 0 ) THEN |
167 |
Q0(J)=FHUM0*Q0(J)+GHUM0*QA(J,NLEVxy(J)) |
Q0(J)=FHUM0*Q0(J)+GHUM0*QA(J,NLEVxy(J,myThid)) |
168 |
ENDIF |
ENDIF |
169 |
ENDDO |
ENDDO |
170 |
|
|
172 |
|
|
173 |
PRD = P0/RD |
PRD = P0/RD |
174 |
VG2 = VGUST*VGUST |
VG2 = VGUST*VGUST |
175 |
|
factwind2 = FWIND0*FWIND0 |
176 |
C |
C |
177 |
DO J=1,NGP |
DO J=1,NGP |
178 |
DENVV(J,3)=(PRD*PSA(J)/T0(J,1))* |
c_jmc SPEED0(J)=SQRT(U0(J)*U0(J)+V0(J)*V0(J)+VG2) |
179 |
* SQRT(U0(J)*U0(J)+V0(J)*V0(J)+VG2) |
SPEED0(J)=SQRT(factwind2*Vsurfsq(J)+VG2) |
180 |
|
DENVV(J,3)=(PRD*PSA(J)/T0(J,1))*SPEED0(J) |
181 |
|
c_jmc DENVV(J,3)=(PRD*PSA(J)/T0(J,1))* |
182 |
|
c_jmc* SQRT(U0(J)*U0(J)+V0(J)*V0(J)+VG2) |
183 |
cchdbg DENVV(J,3)=0.7*(PRD*PSA(J)/T0(J,1))* |
cchdbg DENVV(J,3)=0.7*(PRD*PSA(J)/T0(J,1))* |
184 |
cchdbg * SQRT(U0(J)*U0(J)+V0(J)*V0(J)+VG2) |
cchdbg * SQRT(U0(J)*U0(J)+V0(J)*V0(J)+VG2) |
|
SPEED0(J)=SQRT(U0(J)*U0(J)+V0(J)*V0(J)+VG2) |
|
185 |
ENDDO |
ENDDO |
186 |
C |
C |
187 |
C 1.5 Stability correction for heat/moisture fluxes |
C 1.5 Stability correction for heat/moisture fluxes |
205 |
C 2.1 Wind stress |
C 2.1 Wind stress |
206 |
C |
C |
207 |
DO J=1,NGP |
DO J=1,NGP |
208 |
IF ( NLEVxyu(J) .GT. 0 ) THEN |
c_jmc IF ( NLEVxyu(J) .GT. 0 ) THEN |
209 |
USTR(J,1) = -CDL*DENVV(J,3)*UA(J,NLEVxyu(J)) |
c_jmc USTR(J,1) = -CDL*DENVV(J,3)*UA(J,NLEVxyu(J)) |
210 |
USTR(J,2) = -CDS*DENVV(J,3)*UA(J,NLEVxyu(J)) |
c_jmc USTR(J,2) = -CDS*DENVV(J,3)*UA(J,NLEVxyu(J)) |
211 |
|
c_jmc ENDIF |
212 |
|
c_jmc IF ( NLEVxyv(J) .GT. 0 ) THEN |
213 |
|
c_jmc VSTR(J,1) = -CDL*DENVV(J,3)*VA(J,NLEVxyv(J)) |
214 |
|
c_jmc VSTR(J,2) = -CDS*DENVV(J,3)*VA(J,NLEVxyv(j)) |
215 |
|
c_jmc ENDIF |
216 |
|
C-- cf Note(jmc) above. |
217 |
|
IF ( NLEVxy(J,myThid) .GT. 0 ) THEN |
218 |
|
USTR(J,1) = -CDL*DENVV(J,3)*UA(J,NLEVxy(J,myThid)) |
219 |
|
USTR(J,2) = -CDS*DENVV(J,3)*UA(J,NLEVxy(J,myThid)) |
220 |
|
VSTR(J,1) = -CDL*DENVV(J,3)*VA(J,NLEVxy(J,myThid)) |
221 |
|
VSTR(J,2) = -CDS*DENVV(J,3)*VA(J,NLEVxy(J,myThid)) |
222 |
|
ELSE |
223 |
|
USTR(J,1) = 0. |
224 |
|
USTR(J,2) = 0. |
225 |
|
VSTR(J,1) = 0. |
226 |
|
VSTR(J,2) = 0. |
227 |
ENDIF |
ENDIF |
228 |
IF ( NLEVxyv(J) .GT. 0 ) THEN |
ENDDO |
229 |
VSTR(J,1) = -CDL*DENVV(J,3)*VA(J,NLEVxyv(J)) |
c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
230 |
VSTR(J,2) = -CDS*DENVV(J,3)*VA(J,NLEVxyv(j)) |
c Compute surface drag term (= C_drag*|V| ) to allow direct computation |
231 |
|
c of surface stress on C-grid. |
232 |
|
c add Land + Sea contributions ; Convert to surface pressure level |
233 |
|
DO J=1,NGP |
234 |
|
IF ( NLEVxy(J,myThid) .GT. 0 ) THEN |
235 |
|
DRAG(J) = ( CDS+FMASK(J)*(CDL-CDS) ) |
236 |
|
& * DENVV(J,3) * GRDSIG(NLEVxy(J,myThid)) |
237 |
|
ELSE |
238 |
|
DRAG(J) = 0. |
239 |
ENDIF |
ENDIF |
240 |
ENDDO |
ENDDO |
241 |
|
c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
242 |
C |
C |
243 |
C 2.2 Sensible heat flux (from clim. TS over land) |
C 2.2 Sensible heat flux (from clim. TS over land) |
244 |
C |
C |
310 |
C |
C |
311 |
C 2.3 Evaporation |
C 2.3 Evaporation |
312 |
C |
C |
313 |
CALL SHTORH (0,NGP,TLAND,PSA,1. _d 0,QDUMMY,RDUMMY,QSAT0(1,1)) |
CALL SHTORH (0,NGP,TLAND,PSA,1. _d 0,QDUMMY,RDUMMY,QSAT0(1,1),myThid) |
314 |
CALL SHTORH (0,NGP,TSEA ,PSA,1. _d 0,QDUMMY,RDUMMY,QSAT0(1,2)) |
CALL SHTORH (0,NGP,TSEA ,PSA,1. _d 0,QDUMMY,RDUMMY,QSAT0(1,2),myThid) |
315 |
|
|
316 |
DO J=1,NGP |
DO J=1,NGP |
317 |
Cdj EVAP(J,1) = CHL*DENVV(J,1)*MAX(0. _d 0,SWAV(J)*QSAT0(J,1)-Q0(J)) |
Cdj EVAP(J,1) = CHL*DENVV(J,1)*MAX(0. _d 0,SWAV(J)*QSAT0(J,1)-Q0(J)) |
318 |
EVAP(J,1)=CHL*DENVV(J,1)*MIN(1. _d 0,SWAV(J))*(QSAT0(J,1)-Q0(J)) |
c_jmc: EVAP(J,1)=CHL*DENVV(J,1)*MIN(1. _d 0,SWAV(J))*(QSAT0(J,1)-Q0(J)) |
319 |
|
EVAP(J,1)=CHL*DENVV(J,1)*MAX(0. _d 0,SWAV(J)*(QSAT0(J,1)-Q0(J))) |
320 |
cdj try new scheme : assume that the net heat flux on land is zero |
cdj try new scheme : assume that the net heat flux on land is zero |
321 |
cdj at all time and at all points (this is equivalent |
cdj at all time and at all points (this is equivalent |
322 |
cdj to say that the land has a zero heat capacity) |
cdj to say that the land has a zero heat capacity) |
323 |
cdj EVAP(J,1) = SSR(J)-SLR(J)-SHF(J,1) |
cdj EVAP(J,1) = SSR(J)-SLR(J)-SHF(J,1) |
324 |
EVAP(J,2) = CHS*DENVV(J,2)*(QSAT0(J,2)-Q0(J)) |
c_jmc: EVAP(J,2) = CHS*DENVV(J,2)*(QSAT0(J,2)-Q0(J)) |
325 |
|
EVAP(J,2) = CHS*DENVV(J,2)*MAX(0. _d 0,QSAT0(J,2)-Q0(J)) |
326 |
ENDDO |
ENDDO |
327 |
|
|
328 |
|
|