/[MITgcm]/MITgcm/pkg/seaice/budget.F
ViewVC logotype

Annotation of /MITgcm/pkg/seaice/budget.F

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


Revision 1.8 - (hide annotations) (download)
Wed Apr 30 16:46:15 2003 UTC (21 years, 2 months ago) by dimitri
Branch: MAIN
CVS Tags: checkpoint50e_post, checkpoint50c_post, checkpoint50d_pre, checkpoint50d_post, checkpoint50f_post, checkpoint50f_pre, checkpoint50e_pre
Changes since 1.7: +12 -8 lines
Modified Files:	pkg/seaice/budget.F, dynsolver.F, and seaice_readparms.F

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

  ViewVC Help
Powered by ViewVC 1.1.22