/[MITgcm]/MITgcm/pkg/layers/layers_output.F
ViewVC logotype

Contents of /MITgcm/pkg/layers/layers_output.F

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


Revision 1.7 - (show annotations) (download)
Tue Sep 18 21:30:36 2012 UTC (11 years, 8 months ago) by gforget
Branch: MAIN
Changes since 1.6: +6 -1 lines
- add diagnostics to pkg/layers

1 C $Header: /u/gcmpack/MITgcm/pkg/layers/layers_output.F,v 1.6 2012/09/13 17:57:36 dfer Exp $
2 C $Name: $
3
4 #include "LAYERS_OPTIONS.h"
5
6 CBOP 0
7 C !ROUTINE: LAYERS_OUTPUT
8
9 C !INTERFACE:
10 SUBROUTINE LAYERS_OUTPUT( myTime, myIter, myThid )
11
12 C !DESCRIPTION: \bv
13 C *==========================================================*
14 C | SUBROUTINE LAYERS_OUTPUT
15 C | o general routine for LAYERS output
16 C *==========================================================*
17 C | write time-average & snap-shot output
18 C *==========================================================*
19 C \ev
20
21 C !USES:
22 IMPLICIT NONE
23
24 C === Global variables ===
25 #include "SIZE.h"
26 #include "EEPARAMS.h"
27 #include "PARAMS.h"
28 #include "LAYERS_SIZE.h"
29 #include "LAYERS.h"
30
31 C !INPUT PARAMETERS:
32 C == Routine arguments ==
33 C myTime :: Current time of simulation ( s )
34 C myIter :: Iteration number
35 C myThid :: my Thread Id number
36 _RL myTime
37 INTEGER myIter
38 INTEGER myThid
39 CEOP
40
41 #ifdef ALLOW_LAYERS
42
43 C !LOCAL VARIABLES:
44 C == Local variables ==
45 LOGICAL DIFFERENT_MULTIPLE
46 EXTERNAL DIFFERENT_MULTIPLE
47 CHARACTER*(MAX_LEN_MBUF) suff
48 #ifdef ALLOW_TIMEAVE
49 INTEGER bi, bj
50 #endif
51 #ifdef ALLOW_MNC
52 CHARACTER*(1) pf
53 #endif
54
55 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
56
57 #ifdef ALLOW_DIAGNOSTICS
58 IF ( useDiagnostics )
59 & CALL LAYERS_DIAGNOSTICS_FILL( myThid )
60 #endif
61
62 #ifdef ALLOW_MNC
63 IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
64 pf(1:1) = 'D'
65 ELSE
66 pf(1:1) = 'R'
67 ENDIF
68 #endif /* ALLOW_MNC */
69
70 IF ( DIFFERENT_MULTIPLE(layers_diagFreq,myTime,deltaTClock)
71 & .AND. myIter .GT. 0 ) THEN
72
73 IF ( layers_MDSIO ) THEN
74 WRITE(suff,'(I10.10)') myIter
75 #ifdef LAYERS_UFLUX
76 CALL WRITE_FLD_3D_RL( 'layers_UFlux.', suff, Nlayers,
77 & layers_UFlux, myIter, myThid )
78 #ifdef LAYERS_THICKNESS
79 CALL WRITE_FLD_3D_RL( 'layers_HU.', suff, Nlayers,
80 & layers_HU, myIter, myThid )
81 #endif /* LAYERS_THICKNESS */
82 #endif /* LAYERS_UFLUX */
83 #ifdef LAYERS_VFLUX
84 CALL WRITE_FLD_3D_RL( 'layers_VFlux.', suff, Nlayers,
85 & layers_VFlux, myIter, myThid )
86 #ifdef LAYERS_THICKNESS
87 CALL WRITE_FLD_3D_RL( 'layers_HV.', suff, Nlayers,
88 & layers_HV, myIter, myThid )
89 #endif /* LAYERS_THICKNESS */
90 #endif /* LAYERS_VFLUX */
91 #ifdef LAYERS_PRHO_REF
92 IF (LAYER_nb .EQ. 3) THEN
93 CALL WRITE_FLD_3D_RL( 'layers_prho.', suff, Nr,
94 & prho, myIter, myThid )
95 ENDIF
96 #endif /* LAYERS_PRHO_REF */
97 ENDIF
98 ENDIF
99
100 #ifdef ALLOW_MNC
101 #ifdef LAYERS_MNC
102 IF ( layers_MNC) THEN
103 C Do MNC output...
104 C But how?
105 ENDIF
106 #endif /* LAYERS_MNC */
107 #endif /* ALLOW_MNC */
108
109 #ifdef ALLOW_TIMEAVE
110 IF ( layers_taveFreq.GT.0. ) THEN
111
112 c set arrays to zero if first timestep
113 IF ( myIter.EQ.nIter0 ) THEN
114 DO bj = myByLo(myThid), myByHi(myThid)
115 DO bi = myBxLo(myThid), myBxHi(myThid)
116 #ifdef LAYERS_UFLUX
117 CALL TIMEAVE_RESET(layers_UFlux_T,Nlayers,bi,bj,myThid)
118 #ifdef LAYERS_THICKNESS
119 CALL TIMEAVE_RESET(layers_HU_T,Nlayers,bi,bj,myThid)
120 #endif /* LAYERS_THICKNESS */
121 #endif /* LAYERS_UFLUX */
122
123 #ifdef LAYERS_VFLUX
124 CALL TIMEAVE_RESET(layers_VFlux_T,Nlayers,bi,bj,myThid)
125 #ifdef LAYERS_THICKNESS
126 CALL TIMEAVE_RESET(layers_HV_T,Nlayers,bi,bj,myThid)
127 #endif /* LAYERS_THICKNESS */
128 #endif /* LAYERS_VFLUX */
129 layers_TimeAve(bi,bj) = 0.
130 ENDDO
131 ENDDO
132
133 C Dump files and restart average computation if needed
134 ELSEIF (
135 & DIFFERENT_MULTIPLE(layers_taveFreq,myTime,deltaTClock)
136 & ) THEN
137
138 C Normalize by integrated time
139 DO bj = myByLo(myThid), myByHi(myThid)
140 DO bi = myBxLo(myThid), myBxHi(myThid)
141
142 #ifdef LAYERS_UFLUX
143 CALL TIMEAVE_NORMALIZE( layers_UFlux_T, layers_timeave,
144 & Nlayers, bi, bj, myThid )
145 #ifdef LAYERS_THICKNESS
146 CALL TIMEAVE_NORMALIZE( layers_HU_T, layers_timeave,
147 & Nlayers, bi, bj, myThid )
148 #endif /* LAYERS_THICKNESS */
149 #endif /* LAYERS_UFLUX */
150
151 #ifdef LAYERS_VFLUX
152 CALL TIMEAVE_NORMALIZE( layers_VFlux_T, layers_timeave,
153 & Nlayers, bi, bj, myThid )
154 #ifdef LAYERS_THICKNESS
155 CALL TIMEAVE_NORMALIZE( layers_HV_T, layers_timeave,
156 & Nlayers, bi, bj, myThid )
157 #endif /* LAYERS_THICKNESS */
158 #endif /* LAYERS_VFLUX */
159
160 #ifdef LAYERS_PRHO_REF
161 IF (LAYER_nb .EQ. 3) THEN
162 CALL TIMEAVE_NORMALIZE( prho_tave, layers_timeave,
163 & Nr, bi, bj, myThid )
164 ENDIF
165 #endif /* LAYERS_PRHO_REF */
166
167 ENDDO
168 ENDDO
169
170 IF ( layers_MDSIO ) THEN
171 WRITE(suff,'(I10.10)') myIter
172 #ifdef LAYERS_UFLUX
173 CALL WRITE_FLD_3D_RL( 'layers_UFlux-tave.', suff, Nlayers,
174 & layers_UFlux_T, myIter, myThid )
175 #ifdef LAYERS_THICKNESS
176 CALL WRITE_FLD_3D_RL( 'layers_HU-tave.', suff, Nlayers,
177 & layers_HU_T, myIter, myThid )
178 #endif /* LAYERS_THICKNESS */
179 #endif /* LAYERS_UFLUX */
180 #ifdef LAYERS_VFLUX
181 CALL WRITE_FLD_3D_RL( 'layers_VFlux-tave.', suff, Nlayers,
182 & layers_VFlux_T, myIter, myThid )
183 #ifdef LAYERS_THICKNESS
184 CALL WRITE_FLD_3D_RL( 'layers_HV-tave.', suff, Nlayers,
185 & layers_HV_T, myIter, myThid )
186 #endif /* LAYERS_THICKNESS */
187 #endif /* LAYERS_VFLUX */
188
189 #ifdef LAYERS_PRHO_REF
190 IF (LAYER_nb .EQ. 3) THEN
191 CALL WRITE_FLD_3D_RL( 'layers_prho-tave.', suff, Nr,
192 & prho_tave, myIter, myThid )
193 ENDIF
194 #endif /* LAYERS_PRHO_REF */
195
196 ENDIF
197
198 #ifdef ALLOW_MNC
199 C Do MNC output.
200 #endif
201
202 C Reset averages to zero
203 DO bj = myByLo(myThid), myByHi(myThid)
204 DO bi = myBxLo(myThid), myBxHi(myThid)
205 #ifdef LAYERS_UFLUX
206 CALL TIMEAVE_RESET(layers_UFlux_T,Nlayers,bi,bj,myThid)
207 #ifdef LAYERS_THICKNESS
208 CALL TIMEAVE_RESET(layers_HU_T,Nlayers,bi,bj,myThid)
209 #endif /* LAYERS_THICKNESS */
210 #endif /* LAYERS_UFLUX */
211
212 #ifdef LAYERS_VFLUX
213 CALL TIMEAVE_RESET(layers_VFlux_T,Nlayers,bi,bj,myThid)
214 #ifdef LAYERS_THICKNESS
215 CALL TIMEAVE_RESET(layers_HV_T,Nlayers,bi,bj,myThid)
216 #endif /* LAYERS_THICKNESS */
217 #endif /* LAYERS_VFLUX */
218
219 #ifdef LAYERS_PRHO_REF
220 IF (LAYER_nb .EQ. 3) THEN
221 CALL TIMEAVE_RESET(prho_tave,Nr,bi,bj,myThid)
222 ENDIF
223 #endif /* LAYERS_PRHO_REF */
224
225 layers_TimeAve(bi,bj) = 0.
226 ENDDO
227 ENDDO
228
229 C-- end of bloc: if time is a multiple of layers_taveFreq
230 ENDIF
231
232 ENDIF
233 #endif /* ALLOW_TIMEAVE */
234
235 #endif /* ALLOW_LAYERS */
236
237 RETURN
238 END

  ViewVC Help
Powered by ViewVC 1.1.22