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

Contents of /MITgcm/pkg/land/land_output.F

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


Revision 1.5 - (show annotations) (download)
Sun Jan 3 21:08:22 2010 UTC (14 years, 5 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, checkpoint63, 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
Changes since 1.4: +5 -4 lines
move "_BARRIER" around.

1 C $Header: /u/gcmpack/MITgcm/pkg/land/land_output.F,v 1.4 2009/12/29 23:05:52 jmc Exp $
2 C $Name: $
3
4 #include "LAND_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: LAND_OUTPUT
8 C !INTERFACE:
9 SUBROUTINE LAND_OUTPUT( myTime, myIter, myThid )
10 C !DESCRIPTION: \bv
11 C *==========================================================*
12 C | S/R LAND_OUTPUT
13 C | o general routine for Land output
14 C *==========================================================*
15 C | - write snap-shot & time-average output
16 C | - call monitor to write global quantities
17 C *==========================================================*
18 C \ev
19
20 C !USES:
21 IMPLICIT NONE
22
23 C === Global variables ===
24 #include "LAND_SIZE.h"
25 #include "EEPARAMS.h"
26 #include "PARAMS.h"
27 #include "LAND_PARAMS.h"
28 #include "LAND_VARS.h"
29 #include "LAND_TAVE.h"
30 #ifdef ALLOW_AIM
31 #include "AIM_FFIELDS.h"
32 #endif
33
34 C !INPUT/OUTPUT PARAMETERS:
35 C == Routine arguments ==
36 C myTime - Current time of simulation ( s )
37 C myIter - Iteration number
38 C myThid - Number of this instance of the routine
39 _RL myTime
40 INTEGER myIter
41 INTEGER myThid
42 CEOP
43
44 #ifdef ALLOW_LAND
45
46 C !FUNCTIONS:
47 LOGICAL DIFFERENT_MULTIPLE
48 EXTERNAL DIFFERENT_MULTIPLE
49
50 C !LOCAL VARIABLES:
51 C == Local variables ==
52 INTEGER bi, bj, k
53 CHARACTER*(MAX_LEN_MBUF) msgBuf
54 CHARACTER*(MAX_LEN_FNAM) fn
55 CHARACTER*(10) suff
56 #ifdef ALLOW_MNC
57 CHARACTER*(1) pf
58 CHARACTER*(80) fmnc
59 #endif
60
61 #ifdef ALLOW_AIM
62 IF ( land_monFreq.NE.0. ) THEN
63 CALL LAND_MONITOR( aim_landFr, myTime, myIter, myThid )
64 ENDIF
65 #endif
66
67 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
68
69 IF (
70 & DIFFERENT_MULTIPLE( land_diagFreq, myTime, land_deltaT )
71 & .OR. dumpInitAndLast.AND.( myTime.EQ.endTime .OR.
72 & myTime.EQ.startTime )
73 & ) THEN
74
75 C-- Write snap-shot
76 C jmc: previously done from LAND_DO_DIAGS, but much better here.
77
78 IF ( land_snapshot_mdsio ) THEN
79
80 WRITE(suff,'(I10.10)') myIter
81
82 C-- Write ground Temp and soil moisture :
83 CALL WRITE_FLD_3D_RL( 'land_groundT.', suff, land_nLev,
84 & land_groundT, myIter, myThid )
85 CALL WRITE_FLD_3D_RL( 'land_enthalp.', suff, land_nLev,
86 & land_enthalp, myIter, myThid )
87 CALL WRITE_FLD_3D_RL( 'land_groundW.', suff, land_nLev,
88 & land_groundW, myIter, myThid )
89 C-- other (2-D) state variables:
90 CALL WRITE_FLD_XY_RL(
91 & 'land_skinT.', suff, land_skinT, myIter, myThid )
92 CALL WRITE_FLD_XY_RL(
93 & 'land_hSnow.', suff, land_hSnow, myIter, myThid )
94 CALL WRITE_FLD_XY_RL(
95 & 'land_snAge.', suff, land_snowAge, myIter, myThid )
96
97 IF ( myIter.NE.nIter0 ) THEN
98 C-- fluxes (2-D map):
99 CALL WRITE_FLD_XY_RL(
100 & 'land_RunOff.', suff, land_runOff, myIter, myThid )
101 CALL WRITE_FLD_XY_RL(
102 & 'land_enRnOf.', suff, land_enRnOf, myIter, myThid )
103 CALL WRITE_FLD_XY_RL(
104 & 'land_HeatFx.', suff, land_HeatFlx, myIter, myThid )
105 CALL WRITE_FLD_XY_RL(
106 & 'land_frWaFx.', suff, land_Pr_m_Ev, myIter, myThid )
107 CALL WRITE_FLD_XY_RL(
108 & 'land_EnWaFx.', suff, land_EnWFlux, myIter, myThid )
109 ENDIF
110
111 ENDIF
112
113 #ifdef ALLOW_MNC
114 IF ( land_snapshot_mnc ) THEN
115 _BARRIER
116
117 IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
118 pf(1:1) = 'D'
119 ELSE
120 pf(1:1) = 'R'
121 ENDIF
122 DO k = 1,MAX_LEN_MBUF
123 fmnc(k:k) = ' '
124 ENDDO
125 fmnc(1:13) = 'land_snapshot'
126
127 CALL MNC_CW_SET_UDIM(fmnc, -1, myThid)
128 CALL MNC_CW_RL_W_S('D',fmnc,0,0,'T', myTime, myThid)
129 CALL MNC_CW_SET_UDIM(fmnc, 0, myThid)
130 CALL MNC_CW_I_W_S('I',fmnc,0,0,'iter', myIter, myThid)
131
132 CALL MNC_CW_RL_W(pf,fmnc,0,0,
133 & 'land_groundT', land_groundT, myThid)
134 CALL MNC_CW_RL_W(pf,fmnc,0,0,
135 & 'land_enthalp', land_enthalp, myThid)
136 CALL MNC_CW_RL_W(pf,fmnc,0,0,
137 & 'land_groundW', land_groundW, myThid)
138
139 CALL MNC_CW_RL_W(pf,fmnc,0,0,
140 & 'land_skinT', land_skinT, myThid)
141 CALL MNC_CW_RL_W(pf,fmnc,0,0,
142 & 'land_hSnow', land_hSnow, myThid)
143 CALL MNC_CW_RL_W(pf,fmnc,0,0,
144 & 'land_snAge', land_snowAge, myThid)
145 CALL MNC_CW_RL_W(pf,fmnc,0,0,
146 & 'land_RunOff', land_runOff, myThid)
147 CALL MNC_CW_RL_W(pf,fmnc,0,0,
148 & 'land_enRnOf', land_enRnOf, myThid)
149
150 CALL MNC_CW_RL_W(pf,fmnc,0,0,
151 & 'land_HeatFx', land_HeatFlx, myThid)
152 CALL MNC_CW_RL_W(pf,fmnc,0,0,
153 & 'land_frWaFx', land_Pr_m_Ev, myThid)
154 CALL MNC_CW_RL_W(pf,fmnc,0,0,
155 & 'land_EnWaFx', land_EnWFlux, myThid)
156
157 _BARRIER
158 ENDIF
159 #endif
160
161 ENDIF
162
163 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
164
165 #ifdef ALLOW_LAND_TAVE
166
167 IF (land_taveFreq.LE.0.) RETURN
168
169 IF ( myIter.EQ.nIter0 ) THEN
170 C Initialize time-average arrays to zero
171 DO bj = myByLo(myThid), myByHi(myThid)
172 DO bi = myBxLo(myThid), myBxHi(myThid)
173 CALL TIMEAVE_RESET(land_grTtave,land_nLev, bi, bj, myThid)
174 CALL TIMEAVE_RESET(land_entave, land_nLev, bi, bj, myThid)
175 CALL TIMEAVE_RESET(land_grWtave,land_nLev, bi, bj, myThid)
176 CALL TIMEAVE_RESET(land_sTtave, 1, bi, bj, myThid)
177 CALL TIMEAVE_RESET(land_hStave, 1, bi, bj, myThid)
178 CALL TIMEAVE_RESET(land_sAtave, 1, bi, bj, myThid)
179 CALL TIMEAVE_RESET(land_ROftave, 1, bi, bj, myThid)
180 CALL TIMEAVE_RESET(land_eROtave, 1, bi, bj, myThid)
181 land_timeAve(bi,bj) = 0.
182 ENDDO
183 ENDDO
184
185 C Dump files and restart average computation if needed
186 ELSEIF (
187 & DIFFERENT_MULTIPLE( land_taveFreq, myTime, land_deltaT )
188 & ) THEN
189
190 C Normalize by integrated time
191 DO bj = myByLo(myThid), myByHi(myThid)
192 DO bi = myBxLo(myThid), myBxHi(myThid)
193 CALL TIMEAVE_NORMALIZE( land_grTtave, land_timeAve,
194 & land_nLev, bi, bj, myThid )
195 CALL TIMEAVE_NORMALIZE( land_entave, land_timeAve,
196 & land_nLev, bi, bj, myThid )
197 CALL TIMEAVE_NORMALIZE( land_grWtave, land_timeAve,
198 & land_nLev, bi, bj, myThid )
199 CALL TIMEAVE_NORMALIZE( land_sTtave, land_timeAve,
200 & 1, bi, bj, myThid )
201 CALL TIMEAVE_NORMALIZE( land_hStave, land_timeAve,
202 & 1, bi, bj, myThid )
203 CALL TIMEAVE_NORMALIZE( land_sAtave, land_timeAve,
204 & 1, bi, bj, myThid )
205 CALL TIMEAVE_NORMALIZE( land_ROftave, land_timeAve,
206 & 1, bi, bj, myThid )
207 CALL TIMEAVE_NORMALIZE( land_eROtave, land_timeAve,
208 & 1, bi, bj, myThid )
209 ENDDO
210 ENDDO
211
212 IF ( land_timeave_mdsio ) THEN
213
214 WRITE(fn,'(A,I10.10)') 'land_tave.', myIter
215 CALL WRITE_REC_3D_RL( fn, writeBinaryPrec, land_nLev,
216 & land_grTtave, 1, myIter, myThid )
217 CALL WRITE_REC_3D_RL( fn, writeBinaryPrec, land_nLev,
218 & land_entave, 2, myIter, myThid )
219 CALL WRITE_REC_3D_RL( fn, writeBinaryPrec, land_nLev,
220 & land_grWtave, 3, myIter, myThid )
221 k = 3*land_nLev
222 CALL WRITE_REC_XY_RL( fn, land_sTtave, k+1, myIter, myThid )
223 CALL WRITE_REC_XY_RL( fn, land_hStave, k+2, myIter, myThid )
224 CALL WRITE_REC_XY_RL( fn, land_sAtave, k+3, myIter, myThid )
225 CALL WRITE_REC_XY_RL( fn, land_ROftave, k+4, myIter, myThid )
226 CALL WRITE_REC_XY_RL( fn, land_eROtave, k+5, myIter, myThid )
227
228 ENDIF
229
230 #ifdef ALLOW_MNC
231 IF ( land_timeave_mnc ) THEN
232 _BARRIER
233
234 IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
235 pf(1:1) = 'D'
236 ELSE
237 pf(1:1) = 'R'
238 ENDIF
239
240 DO k = 1,MAX_LEN_FNAM
241 fn(k:k) = ' '
242 ENDDO
243 WRITE(fn,'(a)') 'land_tave'
244 CALL MNC_CW_SET_UDIM(fn, -1, myThid)
245 CALL MNC_CW_I_W_S('I',fn,0,0,'iter', myIter, myThid)
246 CALL MNC_CW_SET_UDIM(fn, 0, myThid)
247 CALL MNC_CW_RL_W_S('D',fn,0,0,'T', myTime, myThid)
248 CALL MNC_CW_RL_W(pf,fn,0,0,
249 & 'land_groundT', land_grTtave, myThid)
250 CALL MNC_CW_RL_W(pf,fn,0,0,
251 & 'land_enthalp', land_entave, myThid)
252 CALL MNC_CW_RL_W(pf,fn,0,0,
253 & 'land_groundW', land_grWtave, myThid)
254
255 CALL MNC_CW_RL_W(pf,fn,0,0,
256 & 'land_skinT', land_sTtave, myThid)
257 CALL MNC_CW_RL_W(pf,fn,0,0,
258 & 'land_hSnow', land_hStave, myThid)
259 CALL MNC_CW_RL_W(pf,fn,0,0,
260 & 'land_snAge', land_sAtave, myThid)
261 CALL MNC_CW_RL_W(pf,fn,0,0,
262 & 'land_RunOff', land_ROftave, myThid)
263 CALL MNC_CW_RL_W(pf,fn,0,0,
264 & 'land_enRnOf', land_eROtave, myThid)
265
266 _BARRIER
267 ENDIF
268 #endif
269
270 WRITE(msgBuf,'(A,I10)')
271 & '// Land Time-average written, t-step', myIter
272 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
273 & SQUEEZE_RIGHT, myThid )
274 WRITE(msgBuf,'(A)') ' '
275 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
276 & SQUEEZE_RIGHT, myThid )
277
278 C Reset averages to zero
279 DO bj = myByLo(myThid), myByHi(myThid)
280 DO bi = myBxLo(myThid), myBxHi(myThid)
281 CALL TIMEAVE_RESET(land_grTtave,land_nLev, bi, bj, myThid)
282 CALL TIMEAVE_RESET(land_entave, land_nLev, bi, bj, myThid)
283 CALL TIMEAVE_RESET(land_grWtave,land_nLev, bi, bj, myThid)
284 CALL TIMEAVE_RESET(land_sTtave, 1, bi, bj, myThid)
285 CALL TIMEAVE_RESET(land_hStave, 1, bi, bj, myThid)
286 CALL TIMEAVE_RESET(land_sAtave, 1, bi, bj, myThid)
287 CALL TIMEAVE_RESET(land_ROftave, 1, bi, bj, myThid)
288 CALL TIMEAVE_RESET(land_eROtave, 1, bi, bj, myThid)
289 land_timeAve(bi,bj) = 0.
290 ENDDO
291 ENDDO
292
293 ENDIF
294
295 #endif /* ALLOW_LAND_TAVE */
296
297 #endif /* ALLOW_LAND */
298
299 RETURN
300 END

  ViewVC Help
Powered by ViewVC 1.1.22