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

Annotation 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 - (hide 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 dimitri 1.2 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 dimitri 1.1 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