/[MITgcm]/MITgcm/diags/src/write_time_averages.F
ViewVC logotype

Contents of /MITgcm/diags/src/write_time_averages.F

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


Revision 1.12 - (show annotations) (download)
Sun Feb 4 14:38:41 2001 UTC (23 years, 3 months ago) by cnh
Branch: MAIN
CVS Tags: checkpoint35
Changes since 1.11: +2 -0 lines
Made sure each .F and .h file had
the CVS keywords Header and Name at its start.
Most had header but very few currently have Name, so
lots of changes!

1 C $Header: $
2 C $Name: $
3 #include "CPP_EEOPTIONS.h"
4
5 SUBROUTINE WRITE_TIME_AVERAGES(myCurrentTime, myIter, myThid)
6 C /==========================================================\
7 C | SUBROUTINE WRITE_TIME_AVERAGES |
8 C | |
9 C \==========================================================/
10 IMPLICIT NONE
11
12 C == Global variables ===
13 #include "SIZE.h"
14 #include "EEPARAMS.h"
15 #include "PARAMS.h"
16 #include "AVER.h"
17 #include "DYNVARS.h"
18
19 LOGICAL DIFFERENT_MULTIPLE
20 EXTERNAL DIFFERENT_MULTIPLE
21 INTEGER IO_ERRCOUNT
22 EXTERNAL IO_ERRCOUNT
23
24 C == Routine arguments ==
25 C myThid - Thread number for this instance of the routine.
26 C myIter - Iteration number
27 C myCurrentTime - Current time of simulation ( s )
28 INTEGER myThid
29 INTEGER myIter
30 _RL myCurrentTime
31 INTEGER prevPrec
32
33 C == Local variables ==
34 C suff - Hold suffix part of a filename
35 C TimeAve - total time over average
36 CHARACTER*(MAX_LEN_FNAM) suff
37 _RL DDTT
38 INTEGER bi,bj,k
39 INTEGER beginIOErrCount
40 INTEGER endIOErrCount
41 CHARACTER*(MAX_LEN_MBUF) msgBuf
42
43 C Final Time Averages and Dump Files if needed
44 IF ( myIter.NE.nIter0 .AND.
45 & DIFFERENT_MULTIPLE(taveFreq,myCurrentTime,
46 & myCurrentTime-deltaTClock)
47 & ) THEN
48
49 WRITE(suff,'(I10.10)') myIter
50
51 C Normalize by integrated time
52 DO bj = myByLo(myThid), myByHi(myThid)
53 DO bi = myBxLo(myThid), myBxHi(myThid)
54 DO k=1,Nr
55 CALL TIMEAVER_FINAL_XYZ(thetatave,timeave,bi,bj,K,myThid)
56 CALL TIMEAVER_FINAL_XYZ(salttave,timeave,bi,bj,K,myThid)
57 CALL TIMEAVER_FINAL_XYZ(uVeltave,timeave,bi,bj,K,myThid)
58 CALL TIMEAVER_FINAL_XYZ(vVeltave,timeave,bi,bj,K,myThid)
59 CALL TIMEAVER_FINAL_XYZ(uttave,timeave,bi,bj,K,myThid)
60 CALL TIMEAVER_FINAL_XYZ(vttave,timeave,bi,bj,K,myThid)
61 CALL TIMEAVER_FINAL_XYZ(k13tave,intertimeave,bi,bj,K,myThid)
62 CALL TIMEAVER_FINAL_XYZ(k23tave,intertimeave,bi,bj,K,myThid)
63 CALL TIMEAVER_FINAL_XYZ(wVeltave,intertimeave,bi,bj,K,myThid)
64 CALL TIMEAVER_FINAL_XYZ(ConvectCountTave,intertimeave,
65 & bi,bj,K,myThid)
66 ENDDO
67 CALL TIMEAVER_FINAL_XY(KapGMtave,intertimeave,bi,bj,myThid)
68 ENDDO
69 ENDDO
70
71 C Write to files
72 _BARRIER
73 _BEGIN_MASTER( myThid )
74
75 C-- Set IO "context" for writing state
76 #ifdef USE_DFILE
77 CALL DFILE_SET_RW
78 CALL DFILE_SET_CONT_ON_ERROR
79 #endif
80 C-- Read IO error counter
81 beginIOErrCount = IO_ERRCOUNT(myThid)
82 prevPrec = writeBinaryPrec
83 writeBinaryPrec = precFloat32
84 CALL WRITE_FLD_XYZ_RL('Ttave.',suff,thetatave,myIter,myThid)
85 CALL WRITE_FLD_XYZ_RL('Stave.',suff,salttave,myIter,myThid)
86 CALL WRITE_FLD_XYZ_RL('uVeltave.',suff,uVeltave,myIter,myThid)
87 CALL WRITE_FLD_XYZ_RL('vVeltave.',suff,vVeltave,myIter,myThid)
88 CALL WRITE_FLD_XYZ_RL('UTtave.',suff,uttave,myIter,myThid)
89 CALL WRITE_FLD_XYZ_RL('VTtave.',suff,vttave,myIter,myThid)
90 CALL WRITE_FLD_XYZ_RL('K13tave.',suff,k13tave,myIter,myThid)
91 CALL WRITE_FLD_XYZ_RL('K23tave.',suff,k23tave,myIter,myThid)
92 CALL WRITE_FLD_XYZ_RL('WTtave.',suff,wVeltave,myIter,myThid)
93 CALL WRITE_FLD_XY_RL('KapGMtave.',suff,KapGMtave,myIter,myThid)
94 CALL WRITE_FLD_XYZ_RL('ConvectCntTave.',suff,ConvectCountTave,
95 & myIter,myThid)
96 writeBinaryPrec = prevPrec
97 C-- Reread IO error counter
98 endIOErrCount = IO_ERRCOUNT(myThid)
99
100 C-- Check for IO errors
101 IF ( endIOErrCount .NE. beginIOErrCount ) THEN
102 WRITE(msgBuf,'(A)') 'S/R WRITE_TIME_AVERAGES'
103 CALL PRINT_ERROR( msgBuf, 1 )
104 WRITE(msgBuf,'(A)') 'Error writing out data'
105 CALL PRINT_ERROR( msgBuf, 1 )
106 WRITE(msgBuf,'(A,I10)') 'Timestep ',myIter
107 CALL PRINT_ERROR( msgBuf, 1 )
108 ELSE
109 WRITE(msgBuf,'(A,I10)')
110 & '// Time-average data written, t-step', myIter
111 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
112 & SQUEEZE_RIGHT, 1 )
113 WRITE(msgBuf,'(A)') ' '
114 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
115 & SQUEEZE_RIGHT, 1 )
116 ENDIF
117
118 _END_MASTER( myThid )
119 _BARRIER
120
121 DO bj = myByLo(myThid), myByHi(myThid)
122 DO bi = myBxLo(myThid), myBxHi(myThid)
123 DO k=1,Nr
124
125 C Reset the averages to zero
126 CALL TIMEAVER_INI_XYZ(thetatave, bi,bj,K,myThid)
127 CALL TIMEAVER_INI_XYZ(salttave, bi,bj,K,myThid)
128 CALL TIMEAVER_INI_XYZ(uVeltave, bi,bj,K,myThid)
129 CALL TIMEAVER_INI_XYZ(vVeltave, bi,bj,K,myThid)
130 CALL TIMEAVER_INI_XYZ(uttave, bi,bj,K,myThid)
131 CALL TIMEAVER_INI_XYZ(vttave, bi,bj,K,myThid)
132 CALL TIMEAVER_INI_XYZ(k13tave, bi,bj,K,myThid)
133 CALL TIMEAVER_INI_XYZ(k23tave, bi,bj,K,myThid)
134 CALL TIMEAVER_INI_XYZ(wVeltave, bi,bj,K,myThid)
135 IF (K.EQ.1) CALL TIMEAVER_INI_XY(KapGMtave, bi,bj,myThid)
136 CALL TIMEAVER_INI_XYZ(ConvectCountTave, bi,bj,K,myThid)
137 TimeAve(k,bi,bj)=0.
138 InterTimeAve(k,bi,bj)=0.
139
140 C Time Averages of single fields
141 DDTT=0.5*deltaTclock
142 CALL TIMEAVER_1FLD_XYZ(theta, thetatave, DDTT, bi,bj,K,myThid)
143 CALL TIMEAVER_1FLD_XYZ(salt, salttave, DDTT, bi,bj,K,myThid)
144 CALL TIMEAVER_1FLD_XYZ(uVel, uVeltave, DDTT, bi,bj,K,myThid)
145 CALL TIMEAVER_1FLD_XYZ(vVel, vVeltave, DDTT, bi,bj,K,myThid)
146
147 C Time Averages of "double" fields
148 CALL TIMEAVER_2FLD_XYZ(theta, uVel, uttave, 1, DDTT,
149 & bi,bj,K,myThid)
150 CALL TIMEAVER_2FLD_XYZ(theta, vVel, vttave, 2, DDTT,
151 & bi,bj,K,myThid)
152
153 C Keep record of how much time has been integrated over
154 TimeAve(k,bi,bj)=TimeAve(k,bi,bj)+DDTT
155
156 ENDDO
157 ENDDO
158 ENDDO
159
160 ENDIF
161
162 RETURN
163 END

  ViewVC Help
Powered by ViewVC 1.1.22