/[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.7 - (show annotations) (download)
Fri Mar 24 23:38:56 2017 UTC (7 years, 1 month ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, HEAD
Changes since 1.6: +12 -3 lines
use new S/R RW_GET_SUFFIX to get file suffix (according to "rwSuffixType")

1 C $Header: /u/gcmpack/MITgcm/pkg/land/land_output.F,v 1.6 2014/07/11 23:24:58 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 #endif
59
60 #ifdef ALLOW_AIM
61 IF ( land_monFreq.NE.0. ) THEN
62 CALL LAND_MONITOR( aim_landFr, myTime, myIter, myThid )
63 ENDIF
64 #endif
65
66 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
67
68 IF (
69 & DIFFERENT_MULTIPLE( land_diagFreq, myTime, land_deltaT )
70 & .OR. dumpInitAndLast.AND.( myTime.EQ.endTime .OR.
71 & myTime.EQ.startTime )
72 & ) THEN
73
74 C-- Write snap-shot
75 C jmc: previously done from LAND_DO_DIAGS, but much better here.
76
77 IF ( land_snapshot_mdsio ) THEN
78
79 IF ( rwSuffixType.EQ.0 ) THEN
80 WRITE(suff,'(I10.10)') myIter
81 ELSE
82 CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
83 ENDIF
84
85 C-- Write ground Temp and soil moisture :
86 CALL WRITE_FLD_3D_RL( 'land_groundT.', suff, land_nLev,
87 & land_groundT, myIter, myThid )
88 CALL WRITE_FLD_3D_RL( 'land_enthalp.', suff, land_nLev,
89 & land_enthalp, myIter, myThid )
90 CALL WRITE_FLD_3D_RL( 'land_groundW.', suff, land_nLev,
91 & land_groundW, myIter, myThid )
92 C-- other (2-D) state variables:
93 CALL WRITE_FLD_XY_RL(
94 & 'land_skinT.', suff, land_skinT, myIter, myThid )
95 CALL WRITE_FLD_XY_RL(
96 & 'land_hSnow.', suff, land_hSnow, myIter, myThid )
97 CALL WRITE_FLD_XY_RL(
98 & 'land_snAge.', suff, land_snowAge, myIter, myThid )
99
100 IF ( myIter.NE.nIter0 ) THEN
101 C-- fluxes (2-D map):
102 CALL WRITE_FLD_XY_RL(
103 & 'land_RunOff.', suff, land_runOff, myIter, myThid )
104 CALL WRITE_FLD_XY_RL(
105 & 'land_enRnOf.', suff, land_enRnOf, myIter, myThid )
106 CALL WRITE_FLD_XY_RL(
107 & 'land_HeatFx.', suff, land_HeatFlx, myIter, myThid )
108 CALL WRITE_FLD_XY_RL(
109 & 'land_frWaFx.', suff, land_Pr_m_Ev, myIter, myThid )
110 CALL WRITE_FLD_XY_RL(
111 & 'land_EnWaFx.', suff, land_EnWFlux, myIter, myThid )
112 ENDIF
113
114 ENDIF
115
116 #ifdef ALLOW_MNC
117 IF ( land_snapshot_mnc ) THEN
118 _BARRIER
119
120 IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
121 pf(1:1) = 'D'
122 ELSE
123 pf(1:1) = 'R'
124 ENDIF
125 WRITE(fn,'(A)') 'land_snapshot'
126 CALL MNC_CW_SET_UDIM(fn, -1, myThid)
127 CALL MNC_CW_RL_W_S('D',fn,0,0,'T', myTime, myThid)
128 CALL MNC_CW_SET_UDIM(fn, 0, myThid)
129 CALL MNC_CW_I_W_S('I',fn,0,0,'iter', myIter, myThid)
130
131 CALL MNC_CW_RL_W(pf,fn,0,0,
132 & 'land_groundT', land_groundT, myThid)
133 CALL MNC_CW_RL_W(pf,fn,0,0,
134 & 'land_enthalp', land_enthalp, myThid)
135 CALL MNC_CW_RL_W(pf,fn,0,0,
136 & 'land_groundW', land_groundW, myThid)
137
138 CALL MNC_CW_RL_W(pf,fn,0,0,
139 & 'land_skinT', land_skinT, myThid)
140 CALL MNC_CW_RL_W(pf,fn,0,0,
141 & 'land_hSnow', land_hSnow, myThid)
142 CALL MNC_CW_RL_W(pf,fn,0,0,
143 & 'land_snAge', land_snowAge, myThid)
144 CALL MNC_CW_RL_W(pf,fn,0,0,
145 & 'land_RunOff', land_runOff, myThid)
146 CALL MNC_CW_RL_W(pf,fn,0,0,
147 & 'land_enRnOf', land_enRnOf, myThid)
148
149 CALL MNC_CW_RL_W(pf,fn,0,0,
150 & 'land_HeatFx', land_HeatFlx, myThid)
151 CALL MNC_CW_RL_W(pf,fn,0,0,
152 & 'land_frWaFx', land_Pr_m_Ev, myThid)
153 CALL MNC_CW_RL_W(pf,fn,0,0,
154 & 'land_EnWaFx', land_EnWFlux, myThid)
155
156 _BARRIER
157 ENDIF
158 #endif
159
160 ENDIF
161
162 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
163
164 #ifdef ALLOW_LAND_TAVE
165
166 IF (land_taveFreq.LE.0.) RETURN
167
168 IF ( myIter.EQ.nIter0 ) THEN
169 C Initialize time-average arrays to zero
170 DO bj = myByLo(myThid), myByHi(myThid)
171 DO bi = myBxLo(myThid), myBxHi(myThid)
172 CALL TIMEAVE_RESET(land_grTtave,land_nLev, bi, bj, myThid)
173 CALL TIMEAVE_RESET(land_entave, land_nLev, bi, bj, myThid)
174 CALL TIMEAVE_RESET(land_grWtave,land_nLev, bi, bj, myThid)
175 CALL TIMEAVE_RESET(land_sTtave, 1, bi, bj, myThid)
176 CALL TIMEAVE_RESET(land_hStave, 1, bi, bj, myThid)
177 CALL TIMEAVE_RESET(land_sAtave, 1, bi, bj, myThid)
178 CALL TIMEAVE_RESET(land_ROftave, 1, bi, bj, myThid)
179 CALL TIMEAVE_RESET(land_eROtave, 1, bi, bj, myThid)
180 land_timeAve(bi,bj) = 0.
181 ENDDO
182 ENDDO
183
184 C Dump files and restart average computation if needed
185 ELSEIF (
186 & DIFFERENT_MULTIPLE( land_taveFreq, myTime, land_deltaT )
187 & ) THEN
188
189 C Normalize by integrated time
190 DO bj = myByLo(myThid), myByHi(myThid)
191 DO bi = myBxLo(myThid), myBxHi(myThid)
192 CALL TIMEAVE_NORMALIZE( land_grTtave, land_timeAve,
193 & land_nLev, bi, bj, myThid )
194 CALL TIMEAVE_NORMALIZE( land_entave, land_timeAve,
195 & land_nLev, bi, bj, myThid )
196 CALL TIMEAVE_NORMALIZE( land_grWtave, land_timeAve,
197 & land_nLev, bi, bj, myThid )
198 CALL TIMEAVE_NORMALIZE( land_sTtave, land_timeAve,
199 & 1, bi, bj, myThid )
200 CALL TIMEAVE_NORMALIZE( land_hStave, land_timeAve,
201 & 1, bi, bj, myThid )
202 CALL TIMEAVE_NORMALIZE( land_sAtave, land_timeAve,
203 & 1, bi, bj, myThid )
204 CALL TIMEAVE_NORMALIZE( land_ROftave, land_timeAve,
205 & 1, bi, bj, myThid )
206 CALL TIMEAVE_NORMALIZE( land_eROtave, land_timeAve,
207 & 1, bi, bj, myThid )
208 ENDDO
209 ENDDO
210
211 IF ( land_timeave_mdsio ) THEN
212
213 IF ( rwSuffixType.EQ.0 ) THEN
214 WRITE(suff,'(I10.10)') myIter
215 ELSE
216 CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
217 ENDIF
218 WRITE(fn,'(2A)') 'land_tave.', suff
219 CALL WRITE_REC_3D_RL( fn, writeBinaryPrec, land_nLev,
220 & land_grTtave, 1, myIter, myThid )
221 CALL WRITE_REC_3D_RL( fn, writeBinaryPrec, land_nLev,
222 & land_entave, 2, myIter, myThid )
223 CALL WRITE_REC_3D_RL( fn, writeBinaryPrec, land_nLev,
224 & land_grWtave, 3, myIter, myThid )
225 k = 3*land_nLev
226 CALL WRITE_REC_XY_RL( fn, land_sTtave, k+1, myIter, myThid )
227 CALL WRITE_REC_XY_RL( fn, land_hStave, k+2, myIter, myThid )
228 CALL WRITE_REC_XY_RL( fn, land_sAtave, k+3, myIter, myThid )
229 CALL WRITE_REC_XY_RL( fn, land_ROftave, k+4, myIter, myThid )
230 CALL WRITE_REC_XY_RL( fn, land_eROtave, k+5, myIter, myThid )
231
232 ENDIF
233
234 #ifdef ALLOW_MNC
235 IF ( land_timeave_mnc ) THEN
236 _BARRIER
237
238 IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
239 pf(1:1) = 'D'
240 ELSE
241 pf(1:1) = 'R'
242 ENDIF
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