1 |
|
2 |
#include "ctrparam.h" |
3 |
|
4 |
! ========================================================== |
5 |
! |
6 |
! GROUND.F: THIS SUBROUTINE USES THE SURFACE FLUXES TO |
7 |
! PREDICT IN TIME THE GROUND TEMPERATURE, GROUND |
8 |
! WATER AND ICE, AND SNOW MELTING. |
9 |
! |
10 |
! ---------------------------------------------------------- |
11 |
! |
12 |
! Revision History: |
13 |
! |
14 |
! When Who What |
15 |
! ---- ---------- ------- |
16 |
! 073100 Chien Wang add cpp & dmax dmin -> max, min |
17 |
! |
18 |
! ========================================================== |
19 |
|
20 |
SUBROUTINE GROCEAN(mndriver) 7001. |
21 |
C**** 7001.5 |
22 |
C**** THIS SUBROUTINE USES THE SURFACE FLUXES TO PREDICT IN TIME THE 7002. |
23 |
C**** GROUND TEMPERATURE, GROUND WATER AND ICE, AND SNOW MELTING. 7002.5 |
24 |
C**** 7003. |
25 |
|
26 |
#include "BD2G04.COM" 7003.5 |
27 |
|
28 |
COMMON U,V,T,P,Q 7004. |
29 |
COMMON/WORK1/CONV(IM0,JM0,LM0),PK(IM0,JM0,LM0),PREC(IM0,JM0), |
30 |
& TPREC(IM0,JM0) 4005.5 |
31 |
COMMON/WORK3/E0(IO0,JM0,4),E1(IO0,JM0,4),EVAPOR(IO0,JM0,4) 7004.5 |
32 |
COMMON/OT/OTA(IO0,JM0),OTB(IO0,JM0),OTC(IO0,JM0) 7005. |
33 |
COMMON/SPEC2/KM,KINC,COEK,C3LAND(IO0,JM0),C3OICE(IO0,JM0) 7005.1 |
34 |
* ,C3LICE(IO0,JM0),WMGE(IO0,JM0),TSSFC(1,JM0,4) 7005.2 |
35 |
common/qfl/QFLUX(JM0,0:13),ZOAV(JM0),QFLUXT(JM0) |
36 |
COMMON/OLDZO/Z1OOLD(IO0,JM0) |
37 |
DIMENSION FWATER(JM0),TOBS(JM0),TF68(JM0),DELR(JM0) 7005.3 |
38 |
DATA SHV/0./,SHW/4185./,SHI/2060./,RHOW/1000./,RHOI/916.6/, 7005.9 |
39 |
* ALAMI/2.1762/,TFO/-1.56/,Z1I/.1/,Z2LI/2.9/,Z1E/.1/,Z2E/4./ 7006. |
40 |
INTEGER JDOFM(13) 7006.1 |
41 |
DATA JDOFM/0,31,59,90,120,151,181,212,243,273,304,334,365/ 7006.2 |
42 |
DATA Z2OIM/0.9/,Z2OIX/4.9/ 7006.5 |
43 |
DATA TTRUNC/0./ 7007. |
44 |
DATA IFIRST/1/ 7007.5 |
45 |
C**** 7008. |
46 |
C**** FDATA 2 LAND COVERAGE (1) 7008.5 |
47 |
C**** 3 RATIO OF LAND ICE COVERAGE TO LAND COVERAGE (1) 7009. |
48 |
C**** 7009.5 |
49 |
C**** ODATA 1 OCEAN TEMPERATURE (C) 7010. |
50 |
C**** 2 RATIO OF OCEAN ICE COVERAGE TO WATER COVERAGE (1) 7010.5 |
51 |
C**** 3 OCEAN ICE AMOUNT OF SECOND LAYER (KG/M**2) 7011. |
52 |
C**** 7011.5 |
53 |
C**** GDATA 1 OCEAN ICE SNOW AMOUNT (KG/M**2) 7012. |
54 |
C**** 2 EARTH SNOW AMOUNT (KG/M**2) 7012.5 |
55 |
C**** 3 OCEAN ICE TEMPERATURE OF FIRST LAYER (C) 7013. |
56 |
C**** 4 EARTH TEMPERATURE OF FIRST LAYER (C) 7013.5 |
57 |
C**** 5 EARTH WATER OF FIRST LAYER (KG/M**2) 7014. |
58 |
C**** 6 EARTH ICE OF FIRST LAYER (KG/M**2) 7014.5 |
59 |
C**** 7 OCEAN ICE TEMPERATURE OF SECOND LAYER (C) 7015. |
60 |
C**** 8 EARTH TEMPERATURE OF SECOND LAYER (C) 7015.5 |
61 |
C**** 9 EARTH WATER OF SECOND LAYER (KG/M**2) 7016. |
62 |
C**** 10 EARTH ICE OF SECOND LAYER (KG/M**2) 7016.5 |
63 |
C**** 12 LAND ICE SNOW AMOUNT (KG/M**2) 7017. |
64 |
C**** 13 LAND ICE TEMPERATURE OF FIRST LAYER (C) 7017.5 |
65 |
C**** 14 LAND ICE TEMPERATURE OF SECOND LAYER (C) 7018. |
66 |
C**** 7018.5 |
67 |
C**** VDATA 9 WATER FIELD CAPACITY OF FIRST LAYER (KG/M**2) 7019. |
68 |
C**** 10 WATER FIELD CAPACITY OF SECOND LAYER (KG/M**2) 7019.5 |
69 |
C**** 7020. |
70 |
IF(IFIRST.NE.1) GO TO 50 7020.5 |
71 |
IFIRST=0 7021. |
72 |
FIO=IO 7021.1 |
73 |
JDAYPR=0 |
74 |
IF(KOCEAN.NE.1) GO TO 10 7021.5 |
75 |
DO 30 ii=1,12 |
76 |
DO 30 J=1,JM 7022.88 |
77 |
SUMJ=SUMJ+QFLUX(J,ii)*DXYP(J)/12. |
78 |
30 continue |
79 |
SUMJ=SUMJ/AREAG 7022.9 |
80 |
WRITE(6,31) SUMJ 7022.91 |
81 |
31 FORMAT(1X,'GLOBAL ANNUAL MEAN QFLUX ',E15.4) |
82 |
10 DTSRCE=NDYN*DT 7023. |
83 |
ACE1I=Z1I*RHOI 7023.5 |
84 |
AC2OIM=Z2OIM*RHOI 7024. |
85 |
ATRUNC=2.**(-13) 7024.5 |
86 |
BYZICX=1./(Z1I+Z2OIX) 7024.6 |
87 |
HC1I=ACE1I*SHI 7025. |
88 |
HC2LI=Z2LI*RHOI*SHI 7025.5 |
89 |
HC1DE=Z1E*1129950. 7026. |
90 |
HC2DE=Z2E*1129950.+3.5*.125*RHOW*3100. 7026.5 |
91 |
DIFFUS=DTSRCE/SDAY 7027. |
92 |
C OTCOR=-.927E18 7027.1 |
93 |
print *,'From GROCEAN PREC over ocean' |
94 |
print *,'E0(1,j,1)' |
95 |
print *,(E0(1,j,1),j=1,JM0) |
96 |
50 ANGLE=TWOPI*JDAY/365. 7027.5 |
97 |
DO 55 MONTH=1,12 7027.6 |
98 |
IF(JDAY.LE.JDOFM(MONTH+1)) GO TO 56 7027.7 |
99 |
55 CONTINUE 7027.8 |
100 |
56 CONTINUE 7027.9 |
101 |
SINANG=SIN(ANGLE) 7028. |
102 |
COSANG=COS(ANGLE) 7028.5 |
103 |
C**** 7029. |
104 |
C**** OUTSIDE LOOP OVER J AND I, EXECUTED ONCE FOR EACH GRID POINT 7029.5 |
105 |
C**** 7030. |
106 |
JRPR=0 |
107 |
DO 980 J=1,JM 7030.5 |
108 |
if(J.eq.-3.and.TAU.ge. 17520.00)then |
109 |
print *,'ODATA(1,J,1)=',ODATA(1,J,1) |
110 |
print *,'ODATA(1,J,2)=',ODATA(1,J,2) |
111 |
print *,'ODATA(1,J,3)=',ODATA(1,J,3) |
112 |
endif |
113 |
IMAX=IM 7031. |
114 |
IF((J.EQ.1).OR.(J.EQ.JM)) IMAX=1 7031.5 |
115 |
BF1DT=0. 7032. |
116 |
CF1DT=0. 7032.5 |
117 |
AOTDT=0. 7033. |
118 |
COTDT=0. 7033.5 |
119 |
AEFO=0. 7034. |
120 |
CEFI=0. 7034.5 |
121 |
BEDIFS=0. 7035. |
122 |
CEDIFS=0. 7035.5 |
123 |
BERUN0=0. 7036. |
124 |
CF2DT=0. 7036.5 |
125 |
BERUN2=0. 7037. |
126 |
CERUN2=0. 7037.5 |
127 |
AERUN4=0. 7038. |
128 |
CERUN4=0. 7038.5 |
129 |
ATG1=0. 7039. |
130 |
BTG1=0. 7039.5 |
131 |
CTG1=0. 7040. |
132 |
ATG2=0. 7040.5 |
133 |
BTG2=0. 7041. |
134 |
CTG2=0. 7041.5 |
135 |
ATG3=0. 7042. |
136 |
AEVAP=0. 7042.5 |
137 |
BEVAP=0. 7043. |
138 |
CEVAP=0. 7043.5 |
139 |
BDIFS=0. 7044. |
140 |
CDIFS=0. 7044.5 |
141 |
AIFO=0. 7045. |
142 |
CIFI=0. 7045.5 |
143 |
BRUN0=0. 7046. |
144 |
CRUN0=0. 7046.5 |
145 |
BRUN2=0. 7047. |
146 |
CRUN2=0. 7047.5 |
147 |
ARUN4=0. 7048. |
148 |
CRUN4=0. 7048.5 |
149 |
BWTR1=0. 7049. |
150 |
BACE1=0. 7049.5 |
151 |
BWTR2=0. 7050. |
152 |
BACE2=0. 7050.5 |
153 |
CACE2=0. 7051. |
154 |
BSNOW=0. 7051.5 |
155 |
CSNOW=0. 7052. |
156 |
CICOV=0. 7052.5 |
157 |
DO 960 I=1,IMAX 7053. |
158 |
C**** 7053.5 |
159 |
C**** DETERMINE SURFACE CONDITIONS 7054. |
160 |
C**** 7054.5 |
161 |
PLAND=FDATA(I,J,2) 7055. |
162 |
PWATER=1.-PLAND 7055.5 |
163 |
PLICE=FDATA(I,J,3)*PLAND 7056. |
164 |
PEARTH=PLAND-PLICE 7056.5 |
165 |
ROICE=ODATA(I,J,2) 7057. |
166 |
POICE=ROICE*PWATER 7057.5 |
167 |
POCEAN=PWATER-POICE 7058. |
168 |
if(POCEAN.LE.1.E-5)then |
169 |
POCEAN=0. |
170 |
POICE=PWATER |
171 |
endif |
172 |
JR=J |
173 |
DXYPJ=DXYP(J) 7059. |
174 |
SNOWS=0. 7059.5 |
175 |
WTR1S=0. 7060. |
176 |
ACE1S=0. 7060.5 |
177 |
WTR2S=0. 7061. |
178 |
ACE2S=0. 7061.5 |
179 |
TG1S=0. 7062. |
180 |
TG2S=0. 7062.5 |
181 |
EVAPS=0. 7063. |
182 |
RUN0S=0. 7063.5 |
183 |
DIFSS=0. 7064. |
184 |
C**** CALCULATE PRECIPITATION HEAT FLUX (FALLS AT 0 DEGREES CENTIGRADE) 4044.5 |
185 |
PRCP=PREC(I,J) 4045. |
186 |
if (fland.lt.1.0)then |
187 |
PRCP=PRCP*(1.-fland*prlnd2total(j,mndriver)) |
188 |
& /(1.-fland) |
189 |
endif |
190 |
TPRCP=TPREC(I,J) 4045.5 |
191 |
IF(TPRCP.LT.0.) GO TO 530 4046. |
192 |
C EPRCP=PRCP*TPRCP*SHW 4046.5 |
193 |
EPRCP=0. 4047. |
194 |
ENRGP=EPRCP 4047.5 |
195 |
GO TO 550 4048. |
196 |
C EPRCP=PRCP*TPRCP*SHI 4048.5 |
197 |
530 EPRCP=0. 4049. |
198 |
ENRGP=EPRCP-PRCP*LHM 4049.5 |
199 |
AIJ(I,J,70)=AIJ(I,J,70)+PRCP 4050. |
200 |
550 CONTINUE |
201 |
c if(TAU.ge.17520.0.and.TAU.lt.17524.0)then |
202 |
c print *,'GROCEAN TAU=',TAU |
203 |
c print *,'PRCP=',PRCP,' TPRCP=',TPRCP |
204 |
c print *,'ENRGP=',ENRGP |
205 |
c endif |
206 |
C**** |
207 |
C**** 7064.5 |
208 |
IF(PWATER.LE.0.0) GO TO 400 7065. |
209 |
C**** 7065.5 |
210 |
C**** OCEAN 7066. |
211 |
C**** 7066.5 |
212 |
EVAP=EVAPOR(I,J,1) 7067. |
213 |
ATG1=ATG1+ODATA(I,J,1)*POCEAN 7067.5 |
214 |
TG1S=TG1S+ODATA(I,J,1)*POCEAN 7068. |
215 |
AEVAP=AEVAP+EVAP*POCEAN 7068.5 |
216 |
EVAPS=EVAPS+EVAP*POCEAN 7069. |
217 |
AIJ(I,J,61)=AIJ(I,J,61)+EVAP*POCEAN 7069.5 |
218 |
IF(KOCEAN.EQ.1) GO TO 60 7070. |
219 |
ATG2=ATG2+ODATA(I,J,1)*POCEAN 7070.5 |
220 |
TG2S=TG2S+ODATA(I,J,1)*POCEAN 7071. |
221 |
IF(POICE.GT.0.) GO TO 110 7071.5 |
222 |
GO TO 400 7072. |
223 |
60 TGW=ODATA(I,J,1) 7072.5 |
224 |
OTDT=DTSRCE*QFLUXT(J) |
225 |
AIJ(I,J,57)=AIJ(I,J,57)+TGW 7073. |
226 |
WTRO=Z1O(I,J)*RHOW 7073.5 |
227 |
ENRGO0=WTRO*TGW*SHW 7074. |
228 |
EOFRZ=WTRO*TFO*SHW 7074.5 |
229 |
ENRGFO=0. |
230 |
ENRGO=0. |
231 |
ACEFO=0. |
232 |
if(POCEAN.LE.0.0)go to 100 |
233 |
F0DT=E0(I,J,1) 7075. |
234 |
AIJ(I,J,65)=AIJ(I,J,65)+F0DT*POCEAN 7075.5 |
235 |
ATG2=ATG2+ODATA(I,J,4)*POCEAN 7076.5 |
236 |
TG2S=TG2S+ODATA(I,J,4)*POCEAN 7077. |
237 |
ATG3=ATG3+ODATA(I,J,5)*POCEAN 7077.5 |
238 |
AOTDT=AOTDT+OTDT*POCEAN 7078. |
239 |
CPRE RUN4=-EVAP 7078.5 |
240 |
RUN4=PRCP-EVAP 7078.5 |
241 |
if(J.eq.-3.and.TAU.ge. 17520.00)then |
242 |
print *,'EVAP=',EVAP,' PRCP=',PRCP |
243 |
endif |
244 |
ERUN4=RUN4*TGW*SHW 7079. |
245 |
AERUN4=AERUN4+ERUN4*POCEAN 7079.5 |
246 |
ARUN4=ARUN4+RUN4*POCEAN 7080. |
247 |
CPRE ENRGO=F0DT+OTDT-ERUN4 7080.5 |
248 |
ENRGO=F0DT+OTDT+ENRGP-ERUN4 7080.5 |
249 |
IF(ENRGO0+ENRGO.LT.EOFRZ) GO TO 80 7081. |
250 |
C**** FLUXES RECOMPUTE TGO WHICH IS ABOVE FREEZING POINT FOR OCEAN 7081.5 |
251 |
ENRGFO=0. 7082. |
252 |
ACEFO=0. 7082.5 |
253 |
IF(ROICE.GT.0.) GO TO 100 7083. |
254 |
ODATA(I,J,1)=TGW+(ENRGO/(WTRO*SHW)+TTRUNC) 7083.5 |
255 |
if(J.eq.-3.and.TAU.ge. 17520.00)then |
256 |
print *,'1 ODATA(i,j,1)=',ODATA(i,j,1) |
257 |
print *,'TGW=',TGW,' WTRO=',WTRO |
258 |
print *,'RHOW=',RHOW,' Z1O(i,j)=',Z1O(i,j) |
259 |
print *,'SHW=',SHW |
260 |
endif |
261 |
GO TO 400 7084. |
262 |
C**** FLUXES COOL TGO TO FREEZING POINT FOR OCEAN AND FORM SOME ICE 7084.5 |
263 |
80 ACEFO=(ENRGO0+ENRGO-EOFRZ)/(TFO*(SHI-SHW)-LHM) 7085. |
264 |
ENRGFO=ACEFO*(TFO*SHI-LHM) 7085.5 |
265 |
AEFO=AEFO-ENRGFO*POCEAN 7086. |
266 |
AIFO=AIFO-ACEFO*POCEAN 7086.5 |
267 |
IF(ROICE.GT.0.) GO TO 100 7087. |
268 |
ROICE=ACEFO/(ACE1I+AC2OIM) 7087.5 |
269 |
ODATA(I,J,1)=TFO 7088. |
270 |
c if(J.eq.8.and.TAU.ge. 17520.00)then |
271 |
c print *,'2 ODATA(i,j,1)=',ODATA(i,j,1) |
272 |
c endif |
273 |
if(J.eq.-3.and.TAU.ge. 17520.00)then |
274 |
print *,'ROICE==',ROICE |
275 |
endif |
276 |
ODATA(I,J,2)=ROICE 7088.5 |
277 |
GDATA(I,J,1)=0. 7089. |
278 |
GDATA(I,J,3)=TFO 7089.5 |
279 |
GDATA(I,J,7)=TFO 7090. |
280 |
ODATA(I,J,3)=AC2OIM 7090.5 |
281 |
GO TO 400 7091. |
282 |
C**** 7091.5 |
283 |
100 ACE2F=0. 7092. |
284 |
ACE2M=0. 7092.5 |
285 |
C**** 7093. |
286 |
C**** OCEAN ICE 7093.5 |
287 |
C**** 7094. |
288 |
110 SNOW=GDATA(I,J,1) 7094.5 |
289 |
TG1=GDATA(I,J,3) 7095. |
290 |
TG2=GDATA(I,J,7) 7095.5 |
291 |
ACE2=ODATA(I,J,3) 7096. |
292 |
C AIJ(I,J,1)=AIJ(I,J,1)+POICE 7096.5 |
293 |
AIJ(I,J,58)=AIJ(I,J,58)+ACE2*POICE 7097. |
294 |
F0DT=E0(I,J,2) 7097.5 |
295 |
AIJ(I,J,66)=AIJ(I,J,66)+F0DT*POICE 7098. |
296 |
F1DT=E1(I,J,2) 7098.5 |
297 |
EVAP=EVAPOR(I,J,2) 7099. |
298 |
AIJ(I,J,62)=AIJ(I,J,62)+EVAP*POICE 7099.5 |
299 |
Z2=ACE2/RHOI 7100. |
300 |
IF(KOCEAN.NE.1) GO TO 120 7100.5 |
301 |
WTRI0=WTRO-(SNOW+ACE1I+ACE2) 7101. |
302 |
EIW0=WTRI0*TGW*SHW 7101.5 |
303 |
WTRW0=WTRO-ROICE*(SNOW+ACE1I+ACE2) 7102. |
304 |
ENRGW0=WTRW0*TGW*SHW 7102.5 |
305 |
RUN0=0. 7103. |
306 |
DIFSI=0. 7103.5 |
307 |
EDIFSI=0. 7104. |
308 |
RUN4=-EVAP 7104.5 |
309 |
ERUN4=TGW*RUN4*SHW 7105. |
310 |
CERUN4=CERUN4+ERUN4*POICE 7105.5 |
311 |
CRUN4=CRUN4+RUN4*POICE 7106. |
312 |
C**** 7106.5 |
313 |
C**** OCEAN ICE, CALCULATE TG1 7107. |
314 |
C**** 7107.5 |
315 |
120 SNANDI=SNOW+ACE1I-EVAP 7108. |
316 |
if(TPRCP.lt.0.0)then |
317 |
SNANDI=SNANDI+PRCP |
318 |
endif |
319 |
HC1=SNANDI*SHI 7108.5 |
320 |
ENRG1=F0DT+EVAP*(TG1*SHI-LHM)-F1DT 7109. |
321 |
C PRE |
322 |
ENRG1=ENRG1+ENRGP |
323 |
if(J.eq.-3.and.TAU.ge. 17520.00)then |
324 |
print *,'ENRG1=',ENRG1,' ENRGP=',ENRGP |
325 |
print *,'ENRGEV=',EVAP*(TG1*SHI-LHM) |
326 |
print *,'F0DT=',F0DT,' F1DT=',F1DT |
327 |
endif |
328 |
C PRE |
329 |
IF(ENRG1.LE.-TG1*HC1) GO TO 130 7109.5 |
330 |
C**** FLUXES HEAT UP TG1 TO FREEZING POINT AND MELT SOME SNOW AND ICE 7110. |
331 |
RUN0=(ENRG1+TG1*HC1)/LHM 7110.5 |
332 |
TG1=0. 7111. |
333 |
SNANDI=SNANDI-RUN0 7111.5 |
334 |
CRUN0=CRUN0+RUN0*POICE 7112. |
335 |
RUN0S=RUN0S+RUN0*POICE 7112.5 |
336 |
GO TO 140 7113. |
337 |
C**** FLUXES RECOMPUTE TG1 WHICH IS BELOW FREEZING POINT 7113.5 |
338 |
130 TG1=TG1+ENRG1/HC1 7114. |
339 |
140 IF(SNANDI.GE.ACE1I) GO TO 160 7114.5 |
340 |
C**** SOME ICE HAS MELTED OR EVAPORATED, TAKE IT FROM G2 7115. |
341 |
SNOW=0. 7115.5 |
342 |
DIFS=SNANDI-ACE1I 7116. |
343 |
TG1=(TG1*SNANDI-TG2*DIFS)/ACE1I 7116.5 |
344 |
EDIFS=DIFS*(TG2*SHI-LHM) 7117. |
345 |
IF(KOCEAN.EQ.1) GO TO 150 7117.5 |
346 |
CEDIFS=CEDIFS+EDIFS*POICE 7118. |
347 |
CDIFS=CDIFS+DIFS*POICE 7118.5 |
348 |
CERUN2=CERUN2+EDIFS*POICE 7119. |
349 |
CRUN2=CRUN2+DIFS*POICE 7119.5 |
350 |
DIFSS=DIFSS+DIFS*POICE 7120. |
351 |
GO TO 200 7120.5 |
352 |
150 ACE2=ACE2+(DIFS+ATRUNC) 7121. |
353 |
DIFSI=ROICE*DIFS 7121.5 |
354 |
EDIFSI=ROICE*EDIFS 7122. |
355 |
GO TO 210 7122.5 |
356 |
160 SNOW=SNANDI-ACE1I 7123. |
357 |
C FROM PREC |
358 |
if(SNOW.GT.ACE1I)then |
359 |
C**** SNOW IS COMPACTED INTO ICE, ICE FROM LAYER 1 GOES DOWN TO LAYER 2 |
360 |
DIFS=SNOW-.9*ACE1I 4095.5 |
361 |
SNOW=.9*ACE1I 4096. |
362 |
EDIFS=DIFS*(TG1*SHI-LHM) 4096.5 |
363 |
IF(KOCEAN.EQ.0) THEN |
364 |
ERUN2=DIFS*(TG2*SHI-LHM) 4097.5 |
365 |
CEDIFS=CEDIFS+EDIFS*POICE 4098.5 |
366 |
CDIFS=CDIFS+DIFS*POICE 4099. |
367 |
DIFSS=DIFSS+DIFS*POICE 4099.5 |
368 |
CERUN2=CERUN2+ERUN2*POICE 4100. |
369 |
CRUN2=CRUN2+DIFS*POICE 4100.5 |
370 |
ENDIF |
371 |
C**** DIFFUSION CHANGES ICE AMOUNT AND TEMPERATURE OF SECOND LAYER 4101.5 |
372 |
TG2=TG2+(TG1-TG2)*DIFS/(ACE2+DIFS) |
373 |
endif |
374 |
C FROM PREC |
375 |
IF(KOCEAN.EQ.1) GO TO 210 7123.5 |
376 |
C**** 7124. |
377 |
C**** OCEAN ICE, CALCULATE TG2 7124.5 |
378 |
C**** 7125. |
379 |
200 F2DT=DTSRCE*(TG2-TFO)*ALAMI*2./Z2 |
380 |
TG2=TG2+(F1DT-F2DT)/(ACE2*SHI) 7126. |
381 |
GO TO 370 7126.5 |
382 |
210 F2DT=DTSRCE*(TG2-TGW)*ALAMI*2./Z2 |
383 |
ENRG2=F1DT-F2DT 7127.5 |
384 |
ENRGIW=F2DT+OTDT-ERUN4 7128. |
385 |
ENRGFI=0. 7128.5 |
386 |
HC2=ACE2*SHI 7129. |
387 |
IF(ENRG2.LE.-TG2*HC2) GO TO 220 7129.5 |
388 |
C**** FLUXES HEAT UP TG2 TO FREEZING POINT AND MELT SOME ICE 7130. |
389 |
ACE2M=(ENRG2+TG2*HC2)/LHM 7130.5 |
390 |
TG2=0. 7131. |
391 |
ACE2=ACE2+(-ACE2M+ATRUNC) 7131.5 |
392 |
AIFI=AIFI+ACE2M*POICE 7132. |
393 |
GO TO 300 7132.5 |
394 |
C**** CALCULATE THE ENERGY OF THE WATER BELOW THE ICE AT THE FREEZING 7133. |
395 |
C**** POINT AND TEST WHETHER NEW ICE MUST BE FORMED 7133.5 |
396 |
220 WTRI1=WTRO-(SNOW+ACE1I+ACE2) 7134. |
397 |
EFIW=WTRI1*TFO*SHW 7134.5 |
398 |
IF(EIW0+ENRGIW.LT.EFIW) GO TO 240 7135. |
399 |
C**** FLUXES RECOMPUTE TG2, THE WATER BELOW THE ICE IS ABOVE FREEZING 7135.5 |
400 |
TG2=TG2+ENRG2/HC2 7136. |
401 |
GO TO 300 7136.5 |
402 |
C**** FLUXES WOULD COOL TGIW TO BELOW FREEZING, FREEZE SOME MORE ICE 7137. |
403 |
240 ACE2F=(EIW0+ENRGIW-EFIW)/(TFO*(SHI-SHW)-LHM) 7137.5 |
404 |
ENRGFI=ACE2F*(TFO*SHI-LHM) 7138. |
405 |
CEFI=CEFI-ENRGFI*POICE 7138.5 |
406 |
CIFI=CIFI-ACE2F*POICE 7139. |
407 |
ACE2=ACE2+(ACE2F+ATRUNC) 7139.5 |
408 |
TG2=TG2+(ENRG2+ACE2F*(TFO-TG2)*SHI)/(ACE2*SHI) 7140. |
409 |
C**** 7140.5 |
410 |
C**** CALCULATE COMPOSITE TEMPERATURES AND REDISTRIBUTION OF ICE 7141. |
411 |
C**** 7141.5 |
412 |
300 WTRW=WTRW0-(1.-ROICE)*ACEFO+ROICE*(RUN0-RUN4+ACE2M-ACE2F) 7142. |
413 |
ENRGW=ENRGW0+(1.-ROICE)*(ENRGO-ENRGFO)+ROICE*(ENRGIW-ENRGFI) 7142.5 |
414 |
TGW=ENRGW/(WTRW*SHW)+TTRUNC 7143. |
415 |
if(J.eq.-3.and.TAU.ge. 17520.00)then |
416 |
print *,' ENRGW=',ENRGW |
417 |
print *,' ENRGW0=',ENRGW0 |
418 |
print *,' ENRGO=',ENRGO |
419 |
print *,' ENRGFO=',ENRGFO |
420 |
print *,' ENRGIW=',ENRGIW |
421 |
print *,' ENRGFI=',ENRGFI |
422 |
print *,' ROICE=',ROICE |
423 |
endif |
424 |
IF(ACEFO.LE.0.) GO TO 310 7143.5 |
425 |
C**** NEW ICE FORMED ON THE OCEAN SURFACE 7144. |
426 |
DRO=(1.-ROICE)*ACEFO/(ACE1I+AC2OIM) 7144.5 |
427 |
TG1=TG1+(TFO-TG1)*DRO*ACE1I/(ROICE*(SNOW+ACE1I)+DRO*ACE1I) 7145. |
428 |
TG2=TG2+(TFO-TG2)*DRO*AC2OIM/(ROICE*ACE2+DRO*AC2OIM) 7145.5 |
429 |
SNOW=SNOW*ROICE/(ROICE+DRO) 7146. |
430 |
ROICE=ROICE+DRO 7146.5 |
431 |
ACE2=ACE2+(DRO*(AC2OIM-ACE2)/ROICE+ATRUNC) 7147. |
432 |
310 IF(ACE2.GE.AC2OIM) GO TO 320 7147.5 |
433 |
C**** ICE IS TO THIN, COMPRESS IT HORIZONTALLY 7148. |
434 |
ROICEN=ROICE*(ACE1I+ACE2)/(ACE1I+AC2OIM) 7148.5 |
435 |
GO TO 340 7149. |
436 |
320 OPNOCN=.06*(RHOI/(ACE1I+ACE2)-BYZICX) 7149.5 |
437 |
IF(1.-ROICE.GT.OPNOCN) GO TO 360 7149.6 |
438 |
C**** TOO LITTLE OPEN OCEAN, COMPRESS THE ICE HORIZONTALLY 7150. |
439 |
ROICEN=1.-OPNOCN 7150.5 |
440 |
340 DRI=ROICE-ROICEN 7151. |
441 |
DIFS=DRI*ACE1I/ROICE 7151.5 |
442 |
SNOW=SNOW*(ROICE/ROICEN) 7152. |
443 |
TG2=TG2+(TG1-TG2)*DIFS/(ACE2+DIFS) 7152.5 |
444 |
ACE2=ACE2+(DRI*(ACE1I+ACE2)/ROICEN+ATRUNC) 7153. |
445 |
EDIFSI=EDIFSI+ROICE*DIFS*(TG1*SHI-LHM) 7153.5 |
446 |
DIFSI=DIFSI+ROICE*DIFS 7154. |
447 |
ROICE=ROICEN 7154.5 |
448 |
C**** RESAVE PROGNOSTIC QUANTITIES 7155. |
449 |
360 ODATA(I,J,1)=TGW 7155.5 |
450 |
if(J.eq.-3.and.TAU.ge. 17520.00)then |
451 |
print *,'3 ODATA(i,j,1)=',ODATA(i,j,1) |
452 |
endif |
453 |
if(ROICE.lt.0.0.or.ACE2.lt.AC2OIM)then |
454 |
print *,'From ground' |
455 |
print *,'J=',' ROICE=',ROICE,' ACE2=',ACE2 |
456 |
stop |
457 |
endif |
458 |
if(J.eq.-3.and.TAU.ge. 17520.00)then |
459 |
print *,'after 360 ROICE==',ROICE |
460 |
print *,' TG1=',TG1,' TG2=',TG2 |
461 |
endif |
462 |
ODATA(I,J,2)=ROICE 7156. |
463 |
ODATA(I,J,3)=ACE2 7156.5 |
464 |
COTDT=COTDT+OTDT*POICE 7157. |
465 |
CEDIFS=CEDIFS+EDIFSI*PWATER 7157.5 |
466 |
CDIFS=CDIFS+DIFSI*PWATER 7158. |
467 |
DIFSS=DIFSS+DIFSI*PWATER 7158.5 |
468 |
370 GDATA(I,J,1)=SNOW 7159. |
469 |
GDATA(I,J,3)=TG1 7159.5 |
470 |
GDATA(I,J,7)=TG2 7160. |
471 |
CSNOW=CSNOW+SNOW*POICE 7160.5 |
472 |
CTG1=CTG1+TG1*POICE 7161. |
473 |
CTG2=CTG2+TG2*POICE 7161.5 |
474 |
CACE2=CACE2+ACE2*POICE 7162. |
475 |
CF1DT=CF1DT+F1DT*POICE 7162.5 |
476 |
CF2DT=CF2DT+F2DT*POICE 7163. |
477 |
CEVAP=CEVAP+EVAP*POICE 7163.5 |
478 |
CICOV=CICOV+POICE 7164. |
479 |
SNOWS=SNOWS+SNOW*POICE 7164.5 |
480 |
TG1S=TG1S+TG1*POICE 7165. |
481 |
ACE1S=ACE1S+ACE1I*POICE 7165.5 |
482 |
ACE2S=ACE2S+ACE2*POICE 7166. |
483 |
TG2S=TG2S+TG2*POICE 7166.5 |
484 |
EVAPS=EVAPS+EVAP*POICE 7167. |
485 |
C**** 7167.5 |
486 |
400 continue |
487 |
AIJ(I,J,7)=AIJ(I,J,7)+(WTR1+ACE1)/WFC1 7305.5 |
488 |
AIJ(I,J,50)=AIJ(I,J,50)+(WTR1+ACE1+WTR2+ACE2) 7306. |
489 |
C**** 7306.5 |
490 |
C**** ACCUMULATE DIAGNOSTICS 7307. |
491 |
C**** 7307.5 |
492 |
C**** QUANTITIES ACCUMULATED FOR LATITUDE-LONGITUDE MAPS IN DIAGIJ 7314. |
493 |
950 AIJ(I,J,6)=AIJ(I,J,6)+EVAPS 7314.5 |
494 |
AIJ(I,J,28)=AIJ(I,J,28)+TG1S 7315. |
495 |
960 CONTINUE 7315.5 |
496 |
C**** LONGITUDINALLY INTEGRATED QUANTITIES FOR DIAGJ 7316. |
497 |
CJ(J,15)=CJ(J,15)+CF2DT 7316.5 |
498 |
AJ(J,17)=AJ(J,17)+ATG2 7317. |
499 |
CJ(J,17)=CJ(J,17)+CTG2 7318. |
500 |
AJ(J,18)=AJ(J,18)+ATG1 7318.5 |
501 |
CJ(J,18)=CJ(J,18)+CTG1 7319.5 |
502 |
AJ(J,19)=AJ(J,19)+AEVAP 7320. |
503 |
CJ(J,19)=CJ(J,19)+CEVAP 7321. |
504 |
CJ(J,30)=CJ(J,30)+CICOV 7321.5 |
505 |
CCC AJ(J,33)=AJ(J,33)+AOTDT 7322. |
506 |
CCC CJ(J,33)=CJ(J,33)+COTDT 7322.5 |
507 |
AJ(J,34)=AJ(J,34)+ATG3 7323. |
508 |
CJ(J,41)=CJ(J,41)+CEDIFS 7324.5 |
509 |
CJ(J,42)=CJ(J,42)+CF1DT 7325.5 |
510 |
AJ(J,43)=AJ(J,43)+AEFO 7326. |
511 |
CJ(J,43)=CJ(J,43)+(CERUN2+CEFI) 7327. |
512 |
CJ(J,45)=CJ(J,45)+CDIFS 7328. |
513 |
AJ(J,46)=AJ(J,46)+AIFO 7328.5 |
514 |
CJ(J,46)=CJ(J,46)+(CRUN2+CIFI) 7329.5 |
515 |
AJ(J,47)=AJ(J,47)+ARUN4 7330. |
516 |
CJ(J,47)=CJ(J,47)+CRUN4 7330.5 |
517 |
AJ(J,48)=AJ(J,48)+AERUN4 7331. |
518 |
CJ(J,48)=CJ(J,48)+CERUN4 7331.5 |
519 |
CJ(J,52)=CJ(J,52)+CACE2 7334. |
520 |
CJ(J,53)=CJ(J,53)+CSNOW 7335. |
521 |
CJ(J,54)=CJ(J,54)+CRUN0 7336. |
522 |
c if(J.eq.8.and.TAU.ge. 17520.00)then |
523 |
c print *,'4 ODATA(1,j,1)=',ODATA(1,j,1) |
524 |
c endif |
525 |
980 CONTINUE 7336.5 |
526 |
RETURN 7337. |
527 |
END 7337.5 |