/[MITgcm]/MITgcm/pkg/ptracers/ptracers_write_timeave.F
ViewVC logotype

Contents of /MITgcm/pkg/ptracers/ptracers_write_timeave.F

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


Revision 1.6 - (show annotations) (download)
Sat Jul 30 00:58:41 2005 UTC (18 years, 10 months ago) by edhill
Branch: MAIN
CVS Tags: checkpoint57o_post, checkpoint57s_post, checkpoint57r_post, checkpoint57p_post, checkpoint57q_post
Changes since 1.5: +3 -5 lines
 o fix MNC/MDSIO flags in PTRACERS so that (1) it works, and
   (2) its ready to be documented during the 20050801 DocFest

1 C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_write_timeave.F,v 1.5 2005/05/25 04:03:10 edhill Exp $
2 C $Name: $
3
4 #include "PTRACERS_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7 CBOP 1
8 C !ROUTINE: PTRACERS_WRITE_TIMEAVE
9
10 C !INTERFACE:
11 SUBROUTINE PTRACERS_WRITE_TIMEAVE(myTime, myIter, myThid)
12
13 C !DESCRIPTION:
14 C At the end of average period, write the time-average
15 C state-variables on file; then reset for next period
16
17 C !USES:
18 IMPLICIT NONE
19 #include "SIZE.h"
20 #include "EEPARAMS.h"
21 #include "PARAMS.h"
22 #include "PTRACERS_SIZE.h"
23 #include "PTRACERS.h"
24 #include "PTRACERS_STATV.h"
25 C Functions
26 LOGICAL DIFFERENT_MULTIPLE
27 EXTERNAL DIFFERENT_MULTIPLE
28 INTEGER IO_ERRCOUNT
29 EXTERNAL IO_ERRCOUNT
30
31 C !INPUT PARAMETERS:
32 C myThid :: Thread number for this instance of the routine.
33 C myIter :: Iteration number
34 C myTime :: Current time of simulation ( s )
35 INTEGER myThid
36 INTEGER myIter
37 _RL myTime
38 CEOP
39
40 #if ( defined ALLOW_PTRACERS && defined ALLOW_TIMEAVE )
41
42 C !LOCAL VARIABLES:
43 C suff :: Hold suffix part of a filename
44 C TimeAve :: total time over average
45 INTEGER prevPrec
46 CHARACTER*(MAX_LEN_FNAM) suff
47 _RL DDTT
48 INTEGER bi,bj,k, iTracer
49 INTEGER beginIOErrCount
50 INTEGER endIOErrCount
51 CHARACTER*(MAX_LEN_MBUF) msgBuf
52 #ifdef ALLOW_MNC
53 INTEGER ii,jj, ilnb
54 CHARACTER*(MAX_LEN_FNAM) name
55 C Functions
56 INTEGER ILNBLNK
57 #endif /* ALLOW_MNC */
58
59 C Final Time Averages and Dump Files if needed
60 IF ( DIFFERENT_MULTIPLE( PTRACERS_taveFreq, myTime, deltaTClock )
61 & ) THEN
62
63 DO bj = myByLo(myThid), myByHi(myThid)
64 DO bi = myBxLo(myThid), myBxHi(myThid)
65 C Normalize by integrated time
66 DO iTracer=1,PTRACERS_numInUse
67 CALL TIMEAVE_NORMALIZ(
68 & ptracerFluxtave(1-Olx,1-Oly, 1,1,iTracer),
69 & ptracer_full, 1,bi,bj,myThid)
70 CALL TIMEAVE_NORMALIZ(
71 & ptracertave (1-Olx,1-Oly,1,1,1,iTracer),
72 & ptracer_half,Nr,bi,bj,myThid)
73 ENDDO
74 ENDDO
75 ENDDO
76
77 C Write to files
78 _BARRIER
79 _BEGIN_MASTER( myThid )
80
81 #ifdef ALLOW_MNC
82 IF ( PTRACERS_timeave_mnc ) THEN
83 CALL MNC_CW_SET_UDIM('ptr_tave', -1, myThid)
84 CALL MNC_CW_RL_W_S('D','ptr_tave',0,0,'T',myTime,myThid)
85 CALL MNC_CW_SET_UDIM('ptr_tave', 0, myThid)
86 CALL MNC_CW_I_W_S('I','ptr_tave',0,0,'iter',myIter,myThid)
87
88 CALL MNC_CW_SET_UDIM('ptr_flux_tave', -1, myThid)
89 CALL MNC_CW_RL_W_S('D','ptr_flux_tave',0,0,'T',myTime,
90 & myThid)
91 CALL MNC_CW_SET_UDIM('ptr_flux_tave', 0, myThid)
92 CALL MNC_CW_I_W_S('I','ptr_flux_tave',0,0,'iter',myIter,
93 & myThid)
94
95 DO ii = 1,PTRACERS_numInUse
96 CALL MNC_CW_RL_W('D','ptr_tave',0,0,PTRACERS_names(ii),
97 & ptracertave(1-OLx,1-OLy,1,1,1,ii),myThid)
98 DO jj = 1,MAX_LEN_FNAM
99 name(jj:jj) = ' '
100 ENDDO
101 ilnb = ILNBLNK(PTRACERS_names(ii))
102 WRITE(name,'(a,a)') 'surf_',PTRACERS_names(ii)(1:ilnb)
103 CALL MNC_CW_RL_W('D','ptr_flux_tave',0,0,name,
104 & ptracerFluxtave(1-OLx,1-OLy,1,1,ii),myThid)
105 ENDDO
106 ENDIF
107 #endif /* ALLOW_MNC */
108
109 IF ( PTRACERS_timeave_mdsio ) THEN
110
111 C Set IO "context" for writing state
112 #ifdef USE_DFILE
113 CALL DFILE_SET_RW
114 CALL DFILE_SET_CONT_ON_ERROR
115 #endif
116 C Read IO error counter
117 beginIOErrCount = IO_ERRCOUNT(myThid)
118 c prevPrec = writeBinaryPrec
119 c writeBinaryPrec = precFloat32
120
121 do iTracer=1,PTRACERS_numInUse
122 WRITE(suff,'(A7,I2.2,A1,I10.10)') 'PtrFluxtave',
123 & iTracer,'.',myIter
124 CALL WRITE_FLD_XY_RL (suff,' ',
125 & ptracerFluxtave(1-Olx,1-Oly, 1,1,iTracer),
126 & myIter,myThid)
127 WRITE(suff,'(A7,I2.2,A1,I10.10)') 'PTRtave',
128 & iTracer,'.',myIter
129 CALL WRITE_FLD_XYZ_RL(suff,' ',
130 & ptracertave (1-Olx,1-Oly,1,1,1,iTracer),
131 & myIter,myThid)
132 enddo
133
134 c writeBinaryPrec = prevPrec
135 C Reread IO error counter
136 endIOErrCount = IO_ERRCOUNT(myThid)
137
138 C Check for IO errors
139 IF ( endIOErrCount .NE. beginIOErrCount ) THEN
140 WRITE(msgBuf,'(A)') 'S/R PTRACERS_WRITE_TIMEAVE'
141 CALL PRINT_ERROR( msgBuf, 1 )
142 WRITE(msgBuf,'(A)') 'Error writing out data'
143 CALL PRINT_ERROR( msgBuf, 1 )
144 WRITE(msgBuf,'(A,I10)') 'Timestep ',myIter
145 CALL PRINT_ERROR( msgBuf, 1 )
146 ELSE
147 WRITE(msgBuf,'(A,I10)')
148 & '// PTRACER time-average data written, t-step', myIter
149 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
150 & SQUEEZE_RIGHT, 1 )
151 WRITE(msgBuf,'(A)') ' '
152 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
153 & SQUEEZE_RIGHT, 1 )
154 ENDIF
155
156 ENDIF
157
158 _END_MASTER( myThid )
159 _BARRIER
160
161 DO bj = myByLo(myThid), myByHi(myThid)
162 DO bi = myBxLo(myThid), myBxHi(myThid)
163
164 C Like before the 1rst iteration,
165 C ==> call TIMEAVE_STATVARS with myIter=nIter0 :
166 C 1) Reset the averages to zero ;
167 C 2) Start to cumulate state-variables with Half time step.
168
169 CALL PTRACERS_STATVARS(myTime, nIter0, bi, bj, myThid)
170
171 ENDDO
172 ENDDO
173
174 ENDIF
175
176 #endif /* ALLOW_PTRACERS and ALLOW_TIMEAVE */
177
178 RETURN
179 END

  ViewVC Help
Powered by ViewVC 1.1.22