/[MITgcm]/MITgcm/pkg/land/land_stepfwd.F
ViewVC logotype

Annotation of /MITgcm/pkg/land/land_stepfwd.F

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


Revision 1.7 - (hide annotations) (download)
Mon Oct 1 13:31:15 2007 UTC (16 years, 7 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint64, checkpoint65, checkpoint60, checkpoint61, checkpoint62, checkpoint63, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, checkpoint59q, checkpoint59p, checkpoint59r, checkpoint59m, checkpoint59l, checkpoint59o, checkpoint59n, checkpoint59i, checkpoint59k, checkpoint59j, checkpoint62c, checkpoint62b, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x, checkpoint61f, checkpoint61g, checkpoint61d, checkpoint61e, checkpoint61b, checkpoint61c, checkpoint61a, checkpoint61n, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61q, checkpoint61z, checkpoint61x, checkpoint61y, HEAD
Changes since 1.6: +20 -20 lines
change land_runOff units: from m/s to kg/m2/s

1 jmc 1.7 C $Header: /u/gcmpack/MITgcm/pkg/land/land_stepfwd.F,v 1.6 2004/06/03 16:43:14 jmc Exp $
2 jmc 1.1 C $Name: $
3    
4     #include "LAND_OPTIONS.h"
5    
6     CBOP
7     C !ROUTINE: LAND_STEPFWD
8     C !INTERFACE:
9     SUBROUTINE LAND_STEPFWD(
10     I land_frc, bi, bj, myTime, myIter, myThid)
11    
12     C !DESCRIPTION: \bv
13     C *==========================================================*
14     C | S/R LAND_STEPFWD
15     C | o Land model main S/R: step forward land variables
16     C *==========================================================*
17     C \ev
18    
19     C !USES:
20     IMPLICIT NONE
21    
22     C == Global variables ===
23     C-- size for MITgcm & Land package :
24 jmc 1.7 #include "LAND_SIZE.h"
25 jmc 1.1
26     #include "EEPARAMS.h"
27     #include "LAND_PARAMS.h"
28     #include "LAND_VARS.h"
29    
30     C !INPUT/OUTPUT PARAMETERS:
31     C == Routine arguments ==
32     C land_frc :: land fraction [0-1]
33     C bi,bj :: Tile index
34     C myTime :: Current time of simulation ( s )
35     C myIter :: Current iteration number in simulation
36     C myThid :: Number of this instance of the routine
37     _RS land_frc(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
38     INTEGER bi, bj, myIter, myThid
39     _RL myTime
40     CEOP
41    
42     #ifdef ALLOW_LAND
43     C == Local variables ==
44     C i,j,k :: loop counters
45     C kp1 :: k+1
46 jmc 1.2 C grd_HeatCp :: Heat capacity of the ground [J/m3/K]
47 jmc 1.3 C enthalpGrdW :: enthalpy of ground water [J/m3]
48 jmc 1.1 C fieldCapac :: field capacity (of water) [m]
49 jmc 1.2 C mWater :: water content of the ground [kg/m3]
50 jmc 1.3 C groundWnp1 :: hold temporary future soil moisture []
51     C grdWexcess :: ground water in excess [m/s]
52 jmc 1.1 C fractRunOff :: fraction of water in excess which leaves as runoff
53 jmc 1.2 C flxkup :: downward flux of water, upper interface (k-1,k)
54     C flxdwn :: downward flux of water, lower interface (k,k+1)
55 jmc 1.3 C flxEngU :: downward energy flux associated with water flux (W/m2)
56     C upper interface (k-1,k)
57     C flxEngL :: downward energy flux associated with water flux (W/m2)
58     C lower interface (k,k+1)
59 jmc 1.2 C temp_af :: ground temperature if above freezing
60     C temp_bf :: ground temperature if below freezing
61     C mPmE :: hold temporary (liquid) Precip minus Evap [kg/m2/s]
62     C enWfx :: hold temporary energy flux of Precip [W/m2]
63     C enGr1 :: ground enthalpy of level 1 [J/m2]
64     C mSnow :: mass of snow [kg/m2]
65     C dMsn :: mass of melting snow [kg/m2]
66     C snowPrec :: snow precipitation [kg/m2/s]
67     C hNewSnow :: fresh snow accumulation [m]
68 jmc 1.3 C dhSnowMx :: potential snow increase [m]
69     C dhSnow :: effective snow increase [m]
70     C mIceDt :: ground-ice growth rate (<- excess of snow) [kg/m2/s]
71 jmc 1.2 C ageFac :: snow aging factor [1]
72 jmc 1.7 _RL grd_HeatCp, enthalpGrdW
73 jmc 1.3 _RL fieldCapac, mWater
74     _RL groundWnp1, grdWexcess, fractRunOff
75 jmc 1.1 _RL flxkup(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
76     _RL flxkdw(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
77 jmc 1.3 _RL flxEngU(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
78     _RL flxEngL, temp_af, temp_bf, mPmE, enWfx, enGr1
79 jmc 1.7 _RL mSnow, dMsn, snowPrec
80 jmc 1.3 _RL hNewSnow, dhSnowMx, dhSnow, mIceDt, ageFac
81 jmc 1.1 INTEGER i,j,k,kp1
82    
83 jmc 1.6 #ifdef LAND_DEBUG
84     LOGICAL dBug
85     INTEGER iprt,jprt,lprt
86     DATA iprt, jprt , lprt / 19 , 20 , 6 /
87     1010 FORMAT(A,I3,1P4E11.3)
88     #endif
89    
90 jmc 1.2 IF (land_calc_grT .AND. .NOT.land_impl_grT ) THEN
91 jmc 1.1 C-- Step forward ground temperature:
92    
93     DO k=1,land_nLev
94     kp1 = MIN(k+1,land_nLev)
95    
96     IF (k.EQ.1) THEN
97     DO j=1,sNy
98     DO i=1,sNx
99     flxkup(i,j) = land_HeatFlx(i,j,bi,bj)
100     ENDDO
101     ENDDO
102     ELSE
103     DO j=1,sNy
104     DO i=1,sNx
105     flxkup(i,j) = flxkdw(i,j)
106     ENDDO
107     ENDDO
108     ENDIF
109    
110     DO j=1,sNy
111     DO i=1,sNx
112     IF ( land_frc(i,j,bi,bj).GT.0. ) THEN
113     C- Thermal conductivity flux, lower interface (k,k+1):
114     flxkdw(i,j) = land_grdLambda*
115     & ( land_groundT(i,j,k,bi,bj)
116     & -land_groundT(i,j,kp1,bi,bj) )
117 jmc 1.7 & *land_rec_dzC(kp1)
118    
119 jmc 1.2 C- Step forward ground enthalpy, level k :
120     land_enthalp(i,j,k,bi,bj) = land_enthalp(i,j,k,bi,bj)
121     & + land_deltaT * (flxkup(i,j)-flxkdw(i,j))/land_dzF(k)
122 jmc 1.1
123     ENDIF
124     ENDDO
125     ENDDO
126    
127     ENDDO
128     C-- step forward ground temperature: end
129     ENDIF
130    
131 jmc 1.2 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
132    
133 jmc 1.4 IF ( land_calc_grW .OR. land_calc_snow ) THEN
134 jmc 1.3 C-- Initialize run-off arrays.
135     DO j=1,sNy
136     DO i=1,sNx
137     land_runOff(i,j,bi,bj) = 0. _d 0
138     land_enRnOf(i,j,bi,bj) = 0. _d 0
139     ENDDO
140     ENDDO
141 jmc 1.4 ENDIF
142    
143     #ifdef LAND_OLD_VERSION
144     IF ( .TRUE. ) THEN
145     #else
146     IF ( land_calc_grW ) THEN
147     #endif
148 jmc 1.2 C-- need (later on) ground temp. to be consistent with updated enthalpy:
149     DO k=1,land_nLev
150     DO j=1,sNy
151     DO i=1,sNx
152     IF ( land_frc(i,j,bi,bj).GT.0. ) THEN
153     mWater = land_rhoLiqW*land_waterCap
154     & *land_groundW(i,j,k,bi,bj)
155 jmc 1.6 mWater = MAX( mWater, 0. _d 0 )
156 jmc 1.2 grd_HeatCp = land_heatCs + land_CpWater*mWater
157     temp_bf = (land_enthalp(i,j,k,bi,bj)+land_Lfreez*mWater)
158     & / grd_HeatCp
159     temp_af = land_enthalp(i,j,k,bi,bj) / grd_HeatCp
160 jmc 1.7 land_groundT(i,j,k,bi,bj) =
161 jmc 1.2 & MIN( temp_bf, MAX(temp_af, 0. _d 0) )
162 jmc 1.6 #ifdef LAND_DEBUG
163     dBug = bi.eq.lprt .AND. i.EQ.iprt .AND. j.EQ.jprt
164     IF (dBug) write(6,1010)
165     & 'LAND_STEPFWD: k,temp,af,bf=',
166     & k,land_groundT(i,j,k,bi,bj),temp_af,temp_bf
167     #endif
168 jmc 1.2 ENDIF
169     ENDDO
170     ENDDO
171     ENDDO
172     ENDIF
173    
174     IF ( land_calc_snow ) THEN
175     C-- Step forward Snow thickness (also account for rain temperature)
176     ageFac = 1. _d 0 - land_deltaT/timeSnowAge
177     DO j=1,sNy
178     DO i=1,sNx
179     IF ( land_frc(i,j,bi,bj).GT.0. ) THEN
180     mPmE = land_Pr_m_Ev(i,j,bi,bj)
181     enWfx = land_EnWFlux(i,j,bi,bj)
182     enGr1 = land_enthalp(i,j,1,bi,bj)*land_dzF(1)
183 jmc 1.6 #ifdef LAND_DEBUG
184     dBug = bi.eq.lprt .AND. i.EQ.iprt .AND. j.EQ.jprt
185     IF (dBug) write(6,1010)
186     & 'LAND_STEPFWD:mPmE,enWfx,enGr1/dt,hSnow=',0,
187     & mPmE,enWfx,enGr1/land_deltaT,land_hSnow(i,j,bi,bj)
188     #endif
189 jmc 1.2 C- snow aging:
190 jmc 1.7 land_snowAge(i,j,bi,bj) =
191 jmc 1.2 & ( land_deltaT + land_snowAge(i,j,bi,bj)*ageFac )
192     IF ( enWfx.LT.0. ) THEN
193 jmc 1.5 C- snow precip in excess ( > Evap of snow) or snow prec & Evap of Liq.Water:
194 jmc 1.7 C => start to melt (until ground at freezing point) and then accumulate
195 jmc 1.2 snowPrec = -enWfx -MAX( enGr1/land_deltaT, 0. _d 0 )
196 jmc 1.5 C- snow accumulation cannot be larger that net precip
197     snowPrec = MAX( 0. _d 0 ,
198     & MIN( snowPrec*recip_Lfreez, mPmE ) )
199 jmc 1.2 mPmE = mPmE - snowPrec
200 jmc 1.3 flxEngU(i,j) = enWfx + land_Lfreez*snowPrec
201 jmc 1.2 hNewSnow = land_deltaT * snowPrec / land_rhoSnow
202     C- refresh snow age:
203     land_snowAge(i,j,bi,bj) = land_snowAge(i,j,bi,bj)
204     & *EXP( -hNewSnow/hNewSnowAge )
205 jmc 1.3 C- update snow thickness:
206     c land_hSnow(i,j,bi,bj) = land_hSnow(i,j,bi,bj) + hNewSnow
207     C glacier & ice-sheet missing: excess of snow put directly into run-off
208 jmc 1.7 dhSnowMx = MAX( 0. _d 0,
209 jmc 1.3 & land_hMaxSnow - land_hSnow(i,j,bi,bj) )
210     dhSnow = MIN( hNewSnow, dhSnowMx )
211     land_hSnow(i,j,bi,bj) = land_hSnow(i,j,bi,bj) + dhSnow
212     mIceDt = land_rhoSnow * (hNewSnow-dhSnow) / land_deltaT
213 jmc 1.7 land_runOff(i,j,bi,bj) = mIceDt
214 jmc 1.3 land_enRnOf(i,j,bi,bj) = -mIceDt*land_Lfreez
215 jmc 1.6 #ifdef LAND_DEBUG
216     IF (dBug) write(6,1010)
217     & 'LAND_STEPFWD: 3,snP,mPmE,hNsnw,hSnw=',
218     & 3,snowPrec,mPmE,hNewSnow,land_hSnow(i,j,bi,bj)
219     #endif
220 jmc 1.2 ELSE
221 jmc 1.5 C- rain precip (whatever Evap is) or Evap of snow exceeds snow precip:
222 jmc 1.2 C => snow melts or sublimates
223     c snowMelt = MIN( enWfx*recip_Lfreez ,
224     c & land_hSnow(i,j,bi,bj)*land_rhoSnow/land_deltaT )
225     mSnow = land_hSnow(i,j,bi,bj)*land_rhoSnow
226     dMsn = enWfx*recip_Lfreez*land_deltaT
227     IF ( dMsn .GE. mSnow ) THEN
228     dMsn = mSnow
229     land_hSnow(i,j,bi,bj) = 0. _d 0
230 jmc 1.3 flxEngU(i,j) = enWfx - land_Lfreez*mSnow/land_deltaT
231 jmc 1.2 ELSE
232 jmc 1.3 flxEngU(i,j) = 0. _d 0
233 jmc 1.2 land_hSnow(i,j,bi,bj) = land_hSnow(i,j,bi,bj)
234 jmc 1.7 & - dMsn / land_rhoSnow
235 jmc 1.2 ENDIF
236     c IF (mPmE.GT.0.) land_snowAge(i,j,bi,bj) = timeSnowAge
237     mPmE = mPmE + dMsn/land_deltaT
238 jmc 1.6 #ifdef LAND_DEBUG
239     IF (dBug) write(6,1010)
240     & 'LAND_STEPFWD: 4,dMsn,mPmE,hSnw,enWfx=',
241     & 4,dMsn,mPmE,land_hSnow(i,j,bi,bj),flxEngU(i,j)
242     #endif
243 jmc 1.2 ENDIF
244     flxkup(i,j) = mPmE/land_rhoLiqW
245     c land_Pr_m_Ev(i,j,bi,bj) = mPmE
246     IF ( land_hSnow(i,j,bi,bj).LE. 0. _d 0 )
247     & land_snowAge(i,j,bi,bj) = 0. _d 0
248 jmc 1.7 C- avoid negative (but very small, < 1.e-34) hSnow that occurs because
249 jmc 1.2 C of truncation error. Might need to rewrite this part.
250     c IF ( land_hSnow(i,j,bi,bj).LE. 0. _d 0 ) THEN
251     c land_hSnow(i,j,bi,bj) = 0. _d 0
252     c land_snowAge(i,j,bi,bj) = 0. _d 0
253     c ENDIF
254     ENDIF
255     ENDDO
256     ENDDO
257     ELSE
258     DO j=1,sNy
259     DO i=1,sNx
260     flxkup(i,j) = land_Pr_m_Ev(i,j,bi,bj)/land_rhoLiqW
261 jmc 1.3 flxEngU(i,j) = 0. _d 0
262 jmc 1.2 ENDDO
263     ENDDO
264     ENDIF
265    
266     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
267    
268 jmc 1.1 IF (land_calc_grW) THEN
269     C-- Step forward ground Water:
270    
271     DO k=1,land_nLev
272     IF (k.EQ.land_nLev) THEN
273     kp1 = k
274     fractRunOff = 1. _d 0
275     ELSE
276     kp1 = k+1
277     fractRunOff = land_fractRunOff
278     ENDIF
279     fieldCapac = land_waterCap*land_dzF(k)
280    
281     DO j=1,sNy
282     DO i=1,sNx
283     IF ( land_frc(i,j,bi,bj).GT.0. ) THEN
284 jmc 1.6 #ifdef LAND_DEBUG
285     dBug = bi.eq.lprt .AND. i.EQ.iprt .AND. j.EQ.jprt
286     #endif
287 jmc 1.3
288     #ifdef LAND_OLD_VERSION
289     IF ( .TRUE. ) THEN
290     IF ( k.EQ.land_nLev ) THEN
291     #else
292     IF ( land_groundT(i,j,k,bi,bj).LT.0. _d 0 ) THEN
293     C- Frozen level: only account for upper level fluxes
294     IF ( flxkup(i,j) .LT. 0. _d 0 ) THEN
295     C- Step forward soil moisture (& enthapy), level k :
296     land_groundW(i,j,k,bi,bj) = land_groundW(i,j,k,bi,bj)
297     & + land_deltaT * flxkup(i,j) / fieldCapac
298     IF ( land_calc_snow )
299     & land_enthalp(i,j,k,bi,bj) = land_enthalp(i,j,k,bi,bj)
300     & + land_deltaT * flxEngU(i,j) / land_dzF(k)
301     ELSE
302     C- Frozen level: incoming water flux goes directly into run-off
303     land_runOff(i,j,bi,bj) = land_runOff(i,j,bi,bj)
304 jmc 1.7 & + flxkup(i,j)*land_rhoLiqW
305 jmc 1.3 land_enRnOf(i,j,bi,bj) = land_enRnOf(i,j,bi,bj)
306     & + flxEngU(i,j)
307     ENDIF
308     C- prepare fluxes for next level:
309     flxkup(i,j) = 0. _d 0
310     flxEngU(i,j) = 0. _d 0
311    
312     ELSE
313    
314     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
315 jmc 1.2 C- Diffusion flux of water, lower interface (k,k+1):
316 jmc 1.3 IF ( k.EQ.land_nLev .OR.
317     & land_groundT(i,j,kp1,bi,bj).LT.0. _d 0 ) THEN
318     #endif /* LAND_OLD_VERSION */
319     C- no Diffusion of water if one level is frozen :
320     flxkdw(i,j) = 0. _d 0
321     flxEngL = 0. _d 0
322     ELSE
323     flxkdw(i,j) = fieldCapac*
324     & ( land_groundW(i,j,k,bi,bj)
325     & -land_groundW(i,j,kp1,bi,bj) )
326     & / land_wTauDiff
327     C- energy flux associated with water flux: take upwind Temp
328     IF ( flxkdw(i,j).GE.0. ) THEN
329     flxEngL = flxkdw(i,j)*land_rhoLiqW*land_CpWater
330     & *land_groundT(i,j,k,bi,bj)
331     ELSE
332     flxEngL = flxkdw(i,j)*land_rhoLiqW*land_CpWater
333     & *land_groundT(i,j,kp1,bi,bj)
334     ENDIF
335     ENDIF
336 jmc 1.7
337 jmc 1.1 C- Step forward soil moisture, level k :
338 jmc 1.3 groundWnp1 = land_groundW(i,j,k,bi,bj)
339 jmc 1.2 & + land_deltaT * (flxkup(i,j)-flxkdw(i,j)) / fieldCapac
340 jmc 1.3
341 jmc 1.6 #ifdef LAND_DEBUG
342     IF(dBug)write(6,1010)'LAND_STEPFWD: grdW-1,fx_ku,kd,grdW-1='
343     & ,5,land_groundW(i,j,k,bi,bj)-1.,
344     & flxkup(i,j),flxkdw(i,j),groundWnp1-1.
345     #endif
346    
347 jmc 1.3 C- Water in excess will leave as run-off or go to level below
348     land_groundW(i,j,k,bi,bj) = MIN(1. _d 0, groundWnp1)
349     grdWexcess = ( groundWnp1 - MIN(1. _d 0, groundWnp1) )
350     & *fieldCapac/land_deltaT
351 jmc 1.1
352     C- Run off: fraction 1-fractRunOff enters level below
353 jmc 1.3 land_runOff(i,j,bi,bj) = land_runOff(i,j,bi,bj)
354 jmc 1.7 & + fractRunOff*grdWexcess*land_rhoLiqW
355 jmc 1.3 C- prepare fluxes for next level:
356     flxkup(i,j) = flxkdw(i,j)
357     & + (1. _d 0-fractRunOff)*grdWexcess
358    
359     IF ( land_calc_snow ) THEN
360     enthalpGrdW = land_rhoLiqW*land_CpWater
361     & *land_groundT(i,j,k,bi,bj)
362     C-- Account for water fluxes in energy budget: update ground Enthalpy
363     land_enthalp(i,j,k,bi,bj) = land_enthalp(i,j,k,bi,bj)
364 jmc 1.7 & + ( flxEngU(i,j) - flxEngL - grdWexcess*enthalpGrdW
365 jmc 1.3 & )*land_deltaT/land_dzF(k)
366    
367     land_enRnOf(i,j,bi,bj) = land_enRnOf(i,j,bi,bj)
368     & + fractRunOff*grdWexcess*enthalpGrdW
369     C- prepare fluxes for next level:
370     flxEngU(i,j) = flxEngL
371     & + (1. _d 0-fractRunOff)*grdWexcess*enthalpGrdW
372     ENDIF
373 jmc 1.6 #ifdef LAND_DEBUG
374     IF (dBug) write(6,1010) 'LAND_STEPFWD: Temp,FlxE,FlxW=',
375     & 7, land_groundT(i,j,k,bi,bj), flxEngU(i,j), flxkup(i,j)
376     #endif
377 jmc 1.2 ENDIF
378 jmc 1.3 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
379 jmc 1.6 #ifdef LAND_DEBUG
380     IF (dBug) write(6,1010) 'LAND_STEPFWD: RO,enRO=',
381     & 8, land_runOff(i,j,bi,bj),land_enRnOf(i,j,bi,bj)
382     #endif
383 jmc 1.2
384 jmc 1.1 ENDIF
385     ENDDO
386     ENDDO
387    
388     ENDDO
389     C-- step forward ground Water: end
390 jmc 1.2 ENDIF
391    
392     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
393    
394 jmc 1.3 IF ( land_calc_grT ) THEN
395     C-- Compute ground temperature from enthalpy (if not already done):
396 jmc 1.2
397     DO k=1,land_nLev
398     DO j=1,sNy
399     DO i=1,sNx
400     C- Ground Heat capacity, layer k:
401     mWater = land_rhoLiqW*land_waterCap
402     & *land_groundW(i,j,k,bi,bj)
403 jmc 1.6 mWater = MAX( mWater, 0. _d 0 )
404 jmc 1.2 grd_HeatCp = land_heatCs + land_CpWater*mWater
405     C temperature below freezing:
406     temp_bf = (land_enthalp(i,j,k,bi,bj)+land_Lfreez*mWater)
407     & / grd_HeatCp
408     C temperature above freezing:
409     temp_af = land_enthalp(i,j,k,bi,bj) / grd_HeatCp
410     #ifdef LAND_OLD_VERSION
411 jmc 1.7 land_enthalp(i,j,k,bi,bj) =
412 jmc 1.2 & grd_HeatCp*land_groundT(i,j,k,bi,bj)
413     #else
414 jmc 1.7 land_groundT(i,j,k,bi,bj) =
415 jmc 1.2 & MIN( temp_bf, MAX(temp_af, 0. _d 0) )
416     #endif
417     ENDDO
418     ENDDO
419     ENDDO
420    
421     IF ( land_impl_grT ) THEN
422     DO j=1,sNy
423     DO i=1,sNx
424     IF ( land_hSnow(i,j,bi,bj).GT.0. _d 0 ) THEN
425     land_skinT(i,j,bi,bj) = MIN(land_skinT(i,j,bi,bj), 0. _d 0)
426     ELSE
427     land_skinT(i,j,bi,bj) = land_groundT(i,j,1,bi,bj)
428     ENDIF
429     ENDDO
430     ENDDO
431 jmc 1.7 ELSE
432 jmc 1.2 DO j=1,sNy
433     DO i=1,sNx
434     land_skinT(i,j,bi,bj) = land_groundT(i,j,1,bi,bj)
435     ENDDO
436     ENDDO
437     ENDIF
438    
439     C-- Compute ground temperature: end
440 jmc 1.1 ENDIF
441    
442     #endif /* ALLOW_LAND */
443    
444     RETURN
445     END

  ViewVC Help
Powered by ViewVC 1.1.22