/[MITgcm]/MITgcm_contrib/high_res_cube/code-mods/budget.F
ViewVC logotype

Contents of /MITgcm_contrib/high_res_cube/code-mods/budget.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.2 - (show annotations) (download)
Wed Nov 22 07:21:31 2006 UTC (18 years, 7 months ago) by dimitri
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +1 -1 lines
FILE REMOVED
preparing for cube44

1 C $Header: /u/gcmpack/MITgcm_contrib/high_res_cube/code-mods/budget.F,v 1.1 2006/11/16 05:21:34 dimitri Exp $
2 C $Name: $
3
4 #include "SEAICE_OPTIONS.h"
5
6 CStartOfInterface
7 SUBROUTINE BUDGET(UG, TICE, HICE1, FICE1, KOPEN, bi, bj)
8 C /==========================================================\
9 C | SUBROUTINE budget |
10 C | o Calculate ice growth rate |
11 C | see Hibler, MWR, 108, 1943-1973, 1980 |
12 C |==========================================================|
13 C \==========================================================/
14 IMPLICIT NONE
15
16 C === Global variables ===
17 #include "SIZE.h"
18 #include "EEPARAMS.h"
19 #include "FFIELDS.h"
20 #include "SEAICE_PARAMS.h"
21 #include "SEAICE_FFIELDS.h"
22 #ifdef SEAICE_VARIABLE_FREEZING_POINT
23 #include "DYNVARS.h"
24 #endif /* SEAICE_VARIABLE_FREEZING_POINT */
25
26 C Subset of variables from SEAICE.h
27 _RL AREA (1-OLx:sNx+OLx,1-OLy:sNy+OLy,3,nSx,nSy)
28 _RL HEFF (1-OLx:sNx+OLx,1-OLy:sNy+OLy,3,nSx,nSy)
29 _RL HSNOW (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
30 _RL QNETO (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
31 _RL QNETI (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
32 _RL QSWO (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
33 _RL QSWI (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
34 COMMON/SEAICE_DYNVARS_1/AREA
35 COMMON/SEAICE_TRANS/HEFF,HSNOW
36 COMMON/QFLUX/QNETO,QNETI,QSWO,QSWI
37
38 C === Routine arguments ===
39 _RL UG (1-OLx:sNx+OLx, 1-OLy:sNy+OLy)
40 _RL TICE (1-OLx:sNx+OLx, 1-OLy:sNy+OLy, nSx,nSy)
41 _RL HICE1 (1-OLx:sNx+OLx, 1-OLy:sNy+OLy)
42 _RL FICE1 (1-OLx:sNx+OLx, 1-OLy:sNy+OLy, nSx,nSy)
43 INTEGER KOPEN
44 INTEGER bi, bj
45 CEndOfInterface
46
47 C === Local variables ===
48 C i,j,k,bi,bj - Loop counters
49
50 INTEGER i, j
51 INTEGER ITER
52 _RL QS1, C1, C2, C3, C4, C5, TB, D1, D1W, D1I, D3
53 _RL TMELT, TMELTP, XKI, XKS, HCUT, ASNOW, XIO
54
55 _RL HICE (1-OLx:sNx+OLx, 1-OLy:sNy+OLy)
56 _RL ALB (1-OLx:sNx+OLx, 1-OLy:sNy+OLy)
57 _RL A1 (1-OLx:sNx+OLx, 1-OLy:sNy+OLy)
58 _RL A2 (1-OLx:sNx+OLx, 1-OLy:sNy+OLy)
59 _RL A3 (1-OLx:sNx+OLx, 1-OLy:sNy+OLy)
60 _RL B (1-OLx:sNx+OLx, 1-OLy:sNy+OLy)
61
62 C IF KOPEN LT 0, THEN DO OPEN WATER BUDGET
63 C NOW DEFINE ASSORTED CONSTANTS
64 C SATURATION VAPOR PRESSURE CONSTANT
65 QS1=0.622 _d +00/1013.0 _d +00
66 C MAYKUTS CONSTANTS FOR SAT. VAP. PRESSURE TEMP. POLYNOMIAL
67 C1=2.7798202 _d -06
68 C2=-2.6913393 _d -03
69 C3=0.97920849 _d +00
70 C4=-158.63779 _d +00
71 C5=9653.1925 _d +00
72 C FREEZING TEMPERATURE OF SEAWATER
73 TB=271.2 _d +00
74 C SENSIBLE HEAT CONSTANT
75 D1=SEAICE_sensHeat
76 C WATER LATENT HEAT CONSTANT
77 D1W=SEAICE_latentWater
78 C ICE LATENT HEAT CONSTANT
79 D1I=SEAICE_latentIce
80 C STEFAN BOLTZMAN CONSTANT TIMES 0.97 EMISSIVITY
81 D3=SEAICE_emissivity
82 C MELTING TEMPERATURE OF ICE
83 TMELT=273.16 _d +00
84 TMELTP=273.159 _d +00
85 C ICE CONDUCTIVITY
86 XKI=SEAICE_iceConduct
87 C SNOW CONDUCTIVITY
88 XKS=SEAICE_snowConduct
89 C CUTOFF SNOW THICKNESS
90 HCUT=SEAICE_snowThick
91 C PENETRATION SHORTWAVE RADIATION FACTOR
92 XIO=SEAICE_shortwave
93
94 DO J=1,sNy
95 DO I=1,sNx
96 TICE(I,J,bi,bj)=MIN(273.16 _d 0+MAX_TICE,TICE(I,J,bi,bj))
97 ATEMP(I,J,bi,bj)=MAX(273.16 _d 0+MIN_ATEMP,ATEMP(I,J,bi,bj))
98 LWDOWN(I,J,bi,bj)=MAX(MIN_LWDOWN,LWDOWN(I,J,bi,bj))
99 ENDDO
100 ENDDO
101
102 C NOW DECIDE IF OPEN WATER OR ICE
103 IF(KOPEN.LE.0) THEN
104
105 C NOW DETERMINE OPEN WATER HEAT BUD. ASSUMING TICE=WATER TEMP.
106 C WATER ALBEDO IS ASSUMED TO BE THE CONSTANT SEAICE_waterAlbedo
107 DO J=1,sNy
108 DO I=1,sNx
109 #ifdef SEAICE_EXTERNAL_FLUXES
110 c FICE1(I,J,bi,bj)=QNET(I,J,bi,bj)+Qsw(I,J,bi,bj)
111 FICE1(I,J,bi,bj)=QNET(I,J,bi,bj)
112 QSWO(I,J,bi,bj)=Qsw(I,J,bi,bj)
113 #else /* SEAICE_EXTERNAL_FLUXES undefined */
114 ALB(I,J)=SEAICE_waterAlbedo
115 A1(I,J)=(ONE-ALB(I,J))*SWDOWN(I,J,bi,bj)
116 & +LWDOWN(I,J,bi,bj)*0.97 _d 0
117 & +D1*UG(I,J)*ATEMP(I,J,bi,bj)+D1W*UG(I,J)*AQH(I,J,bi,bj)
118 B(I,J)=QS1*6.11 _d +00*EXP(17.2694 _d +00
119 & *(TICE(I,J,bi,bj)-TMELT)
120 & /(TICE(I,J,bi,bj)-TMELT+237.3 _d +00))
121 A2(I,J)=-D1*UG(I,J)*TICE(I,J,bi,bj)-D1W*UG(I,J)*B(I,J)
122 & -D3*(TICE(I,J,bi,bj)**4)
123 FICE1(I,J,bi,bj)=-A1(I,J)-A2(I,J)
124 QSWO(I,J,bi,bj)=-(ONE-ALB(I,J))*SWDOWN(I,J,bi,bj)
125 #endif /* SEAICE_EXTERNAL_FLUXES */
126 c QNETO(I,J,bi,bj)=FICE1(I,J,bi,bj)-QSWO(I,J,bi,bj)
127 QNETO(I,J,bi,bj)=FICE1(I,J,bi,bj)
128 ENDDO
129 ENDDO
130
131 ELSE
132
133 C COME HERE IF ICE COVER
134 C FIRST PUT MINIMUM ON ICE THICKNESS
135 DO J=1,sNy
136 DO I=1,sNx
137 HICE(I,J)=MAX(HICE1(I,J),0.05 _d +00)
138 HICE(I,J)=MIN(HICE(I,J),9.0 _d +00)
139 ENDDO
140 ENDDO
141 C NOW DECIDE ON ALBEDO
142 DO J=1,sNy
143 DO I=1,sNx
144 ALB(I,J)=SEAICE_dryIceAlb
145 IF(TICE(I,J,bi,bj).GT.TMELTP) ALB(I,J)=SEAICE_wetIceAlb
146 ASNOW=SEAICE_drySnowAlb
147 IF(TICE(I,J,bi,bj).GT.TMELTP) ASNOW=SEAICE_wetSnowAlb
148 cdm For albedo computation, actual rather than effective snow thickness
149 cdm must be used. Mininimum AREA(I,J,3,bi,bj) is A22 from groatb.F
150 cdm IF(HSNOW(I,J,bi,bj).GT.HCUT) THEN
151 IF((HSNOW(I,J,bi,bj)/AREA(I,J,3,bi,bj)).GT.HCUT) THEN
152 ALB(I,J)=ASNOW
153 ELSE
154 cdm ALB(I,J)=ALB(I,J)+(HSNOW(I,J,bi,bj)/HCUT)*(ASNOW-ALB(I,J))
155 ALB(I,J)=ALB(I,J)+(HSNOW(I,J,bi,bj)/AREA(I,J,3,bi,bj)/HCUT)
156 & *(ASNOW-ALB(I,J))
157 IF(ALB(I,J).GT.ASNOW) ALB(I,J)=ASNOW
158 END IF
159 ENDDO
160 ENDDO
161 C NOW DETERMINE FIXED FORCING TERM IN HEAT BUDGET
162 DO J=1,sNy
163 DO I=1,sNx
164 IF(HSNOW(I,J,bi,bj).GT.0.0) THEN
165 C NO SW PENETRATION WITH SNOW
166 A1(I,J)=(ONE-ALB(I,J))*SWDOWN(I,J,bi,bj)
167 & +LWDOWN(I,J,bi,bj)*0.97 _d 0
168 & +D1*UG(I,J)*ATEMP(I,J,bi,bj)+D1I*UG(I,J)*AQH(I,J,bi,bj)
169 ELSE
170 C SW PENETRATION UNDER ICE
171 A1(I,J)=(ONE-ALB(I,J))*SWDOWN(I,J,bi,bj)
172 & *(ONE-XIO*EXP(-1.5 _d 0*HICE(I,J)))
173 & +LWDOWN(I,J,bi,bj)*0.97 _d 0
174 & +D1*UG(I,J)*ATEMP(I,J,bi,bj)+D1I*UG(I,J)*AQH(I,J,bi,bj)
175 ENDIF
176 ENDDO
177 ENDDO
178 C NOW COMPUTE OTHER TERMS IN HEAT BUDGET
179 C COME HERE AT START OF ITERATION
180
181 crg check wether a2 is needed in the list of variables
182 cdm Ralf, the line below causes following error message
183 cdm INTERNAL ERROR: cannot find var clone to ada2
184 cdm c$taf loop = iteration TICE,A2
185 cdm iterative solver for ice growth rate
186 cdm inputs: TICE ice temperature
187 cdm UG forcing
188 cdm HSNOW snow thickness
189 cdm HICE ice thickness
190 cdm outputs: A2 is needed for FICE1, which is ice growth rate
191 cdm TICE
192 DO ITER=1,IMAX_TICE
193
194 DO J=1,sNy
195 DO I=1,sNx
196 B(I,J)=QS1*(C1*TICE(I,J,bi,bj)**4+C2*TICE(I,J,bi,bj)**3
197 & +C3*TICE(I,J,bi,bj)**2+C4*TICE(I,J,bi,bj)+C5)
198 A2(I,J)=-D1*UG(I,J)*TICE(I,J,bi,bj)-D1I*UG(I,J)*B(I,J)
199 & -D3*(TICE(I,J,bi,bj)**4)
200 cdm B(I,J)=XKS/(HSNOW(I,J,bi,bj)/HICE(I,J)+XKS/XKI)/HICE(I,J)
201 B(I,J)=XKS/(HSNOW(I,J,bi,bj)/AREA(I,J,3,bi,bj)/HICE(I,J)
202 & +XKS/XKI)/HICE(I,J)
203 A3(I,J)=4.0 _d +00*D3*(TICE(I,J,bi,bj)**3)+B(I,J)+D1*UG(I,J)
204 #ifdef SEAICE_VARIABLE_FREEZING_POINT
205 TB = -0.0575 _d 0*salt(I,J,1,bi,bj) + 0.0901 _d 0
206 & + 273.15 _d 0
207 #endif /* SEAICE_VARIABLE_FREEZING_POINT */
208 B(I,J)=B(I,J)*(TB-TICE(I,J,bi,bj))
209 cdm
210 cdm if(TICE(I,J,bi,bj).le.206.)
211 cdm & print '(A,3i4,f12.2)','### ITER,I,J,TICE',
212 cdm & ITER,I,J,TICE(I,J,bi,bj)
213 cdm
214 ENDDO
215 ENDDO
216 C NOW DECIDE IF IT IS TIME TO ESTIMATE GROWTH RATES
217 C NOW DETERMINE NEW ICE TEMPERATURE
218 DO J=1,sNy
219 DO I=1,sNx
220 TICE(I,J,bi,bj)=TICE(I,J,bi,bj)
221 & +(A1(I,J)+A2(I,J)+B(I,J))/A3(I,J)
222 TICE(I,J,bi,bj)=MAX(273.16 _d 0+MIN_TICE,TICE(I,J,bi,bj))
223 ENDDO
224 ENDDO
225 C NOW SET ICE TEMP TO MIN OF TMELT/ITERATION RESULT
226 DO J=1,sNy
227 DO I=1,sNx
228 TICE(I,J,bi,bj)=MIN(TICE(I,J,bi,bj),TMELT)
229 ENDDO
230 ENDDO
231
232 C END OF ITERATION
233 ENDDO
234
235 DO J=1,sNy
236 DO I=1,sNx
237 FICE1(I,J,bi,bj)=-A1(I,J)-A2(I,J)
238 IF(HSNOW(I,J,bi,bj).GT.0.0) THEN
239 C NO SW PENETRATION WITH SNOW
240 QSWI(I,J,bi,bj)=ZERO
241 ELSE
242 C SW PENETRATION UNDER ICE
243 QSWI(I,J,bi,bj)=-(ONE-ALB(I,J))*SWDOWN(I,J,bi,bj)
244 & *XIO*EXP(-1.5 _d 0*HICE(I,J))
245 ENDIF
246 ENDDO
247 ENDDO
248
249 END IF
250
251 RETURN
252 END

  ViewVC Help
Powered by ViewVC 1.1.22