/[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.2 - (show annotations) (download)
Wed Jul 15 22:02:50 1998 UTC (25 years, 9 months ago) by adcroft
Branch: MAIN
CVS Tags: branch-point-rdot
Branch point for: branch-rdot
Changes since 1.1: +29 -0 lines
Fixed two bugs in time-averaging:
 o Every other level of K23 was zero.
 o No meta files were generated with the "intermediate" variable
   data files.

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

  ViewVC Help
Powered by ViewVC 1.1.22