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

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

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


Revision 1.15 - (show annotations) (download)
Sun Jan 13 22:46:38 2013 UTC (11 years, 3 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64c, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint65, checkpoint65b, checkpoint65a
Changes since 1.14: +2 -2 lines
- add missing value argument to S/R MDS_WR_METAFILES argument list

1 C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_write_pickup.F,v 1.14 2012/04/02 00:06:31 jmc Exp $
2 C $Name: $
3
4 #include "GAD_OPTIONS.h"
5 #include "PTRACERS_OPTIONS.h"
6
7 CBOP
8 C !ROUTINE: PTRACERS_WRITE_PICKUP
9
10 C !INTERFACE: ==========================================================
11 SUBROUTINE PTRACERS_WRITE_PICKUP( permCheckPoint,
12 & suff, myTime, myIter, myThid )
13
14 C !DESCRIPTION:
15 C Writes current state of passive tracers to a pickup file
16
17 C !USES: ===============================================================
18 #include "PTRACERS_MOD.h"
19 IMPLICIT NONE
20 #include "SIZE.h"
21 #include "EEPARAMS.h"
22 #include "PARAMS.h"
23 #include "GAD.h"
24 #include "PTRACERS_SIZE.h"
25 #include "PTRACERS_PARAMS.h"
26 #include "PTRACERS_FIELDS.h"
27
28 C !INPUT PARAMETERS: ===================================================
29 C permCheckPoint :: permanent or a rolling checkpoint
30 C suff :: suffix for pickup file (eg. ckptA or 0000000010)
31 C myTime :: model time
32 C myIter :: time-step number
33 C myThid :: thread number
34 LOGICAL permCheckPoint
35 CHARACTER*(*) suff
36 _RL myTime
37 INTEGER myIter
38 INTEGER myThid
39
40 C !OUTPUT PARAMETERS: ==================================================
41 C none
42
43 #ifdef ALLOW_PTRACERS
44
45 C === Functions ====
46 INTEGER ILNBLNK
47 EXTERNAL ILNBLNK
48
49 C !LOCAL VARIABLES: ====================================================
50 C iTracer :: tracer index
51 C j :: loop index / field number
52 C prec :: pickup-file precision
53 C glf :: local flag for "globalFiles"
54 C fn :: character buffer for creating filename
55 C nWrFlds :: number of fields being written
56 C listDim :: dimension of "wrFldList" local array
57 C wrFldList :: list of written fields
58 C msgBuf :: Informational/error message buffer
59 INTEGER iTracer, j, prec, lChar
60 LOGICAL glf
61 _RL timList(1)
62 CHARACTER*(MAX_LEN_FNAM) fn
63 INTEGER listDim, nWrFlds
64 PARAMETER( listDim = 3*PTRACERS_num )
65 CHARACTER*(8) wrFldList(listDim)
66 CHARACTER*(MAX_LEN_MBUF) msgBuf
67 #ifdef PTRACERS_ALLOW_DYN_STATE
68 INTEGER n, iRec
69 #endif
70 CEOP
71
72 #ifdef ALLOW_MNC
73 IF ( PTRACERS_pickup_write_mnc ) THEN
74 IF ( permCheckPoint ) THEN
75 WRITE(fn,'(A)') 'pickup_ptracers'
76 ELSE
77 lChar = ILNBLNK(suff)
78 WRITE(fn,'(2A)') 'pickup_ptracers.', suff(1:lChar)
79 ENDIF
80 CALL MNC_FILE_CLOSE_ALL_MATCHING(fn, myThid)
81 C First ***define*** the file group name
82 CALL MNC_CW_SET_UDIM(fn, 1, myThid)
83 IF ( permCheckPoint ) THEN
84 CALL MNC_CW_SET_CITER(fn, 3, 3, myIter, -1, myThid)
85 ELSE
86 CALL MNC_CW_SET_CITER(fn, 2, -1, -1, -1, myThid)
87 ENDIF
88 C Then set the actual unlimited dimension
89 CALL MNC_CW_SET_UDIM(fn, 1, myThid)
90 C The following two values should probably be for the n-1 time
91 C step since we are saving the gpTrNm1 variable first
92 CALL MNC_CW_RL_W_S('D',fn,0,0,'T', myTime, myThid)
93 CALL MNC_CW_I_W_S('I',fn,0,0,'iter', myIter, myThid)
94 DO iTracer = 1,PTRACERS_numInUse
95 CALL MNC_CW_RL_W('D',fn,0,0, PTRACERS_names(iTracer),
96 & gpTrNm1(1-OLx,1-OLy,1,1,1,iTracer),myThid)
97 ENDDO
98 CALL MNC_CW_SET_UDIM(fn, 2, myThid)
99 CALL MNC_CW_RL_W_S('D',fn,0,0,'T', myTime, myThid)
100 CALL MNC_CW_I_W_S('I',fn,0,0,'iter', myIter, myThid)
101 DO iTracer = 1,PTRACERS_numInUse
102 CALL MNC_CW_RL_W('D',fn,0,0, PTRACERS_names(iTracer),
103 & pTracer(1-OLx,1-OLy,1,1,1,iTracer),myThid)
104 ENDDO
105 ENDIF
106 IF ( useMNC .AND. PTRACERS_pickup_write_mnc ) THEN
107 DO iTracer = 1, PTRACERS_numInUse
108 IF ( PTRACERS_SOM_Advection(iTracer) ) THEN
109 WRITE(msgBuf,'(3A)')'PTRACERS_WRITE_PICKUP: MNC not yet coded',
110 & ' for SOM advection',
111 & ' => write bin file instead'
112 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
113 & SQUEEZE_RIGHT, myThid)
114 ENDIF
115 ENDDO
116 ENDIF
117 #endif /* ALLOW_MNC */
118
119 lChar = ILNBLNK(suff)
120 IF ( PTRACERS_pickup_write_mdsio ) THEN
121
122 IF ( lChar.EQ.0 ) THEN
123 WRITE(fn,'(2A)') 'pickup_ptracers'
124 ELSE
125 WRITE(fn,'(2A)') 'pickup_ptracers.',suff(1:lChar)
126 ENDIF
127 prec = precFloat64
128
129 C Firstly, write ptracer fields as consecutive records,
130 C one tracer after the other, for all tracers "InUse".
131
132 j = 0
133 C record number < 0 : a hack not to write meta files now:
134 DO iTracer = 1, PTRACERS_numInUse
135 j = j + 1
136 CALL WRITE_REC_3D_RL( fn, prec, Nr,
137 & pTracer(1-OLx,1-OLy,1,1,1,iTracer),
138 & -j, myIter, myThid )
139 IF (j.LE.listDim)
140 & wrFldList(j) = 'pTr'//PTRACERS_ioLabel(iTracer)//' '
141 ENDDO
142
143 C Then write ptracer tendencies (if this tracer is using AB time-stepping)
144 DO iTracer = 1, PTRACERS_numInUse
145 IF ( PTRACERS_AdamsBashGtr(iTracer) ) THEN
146 j = j + 1
147 CALL WRITE_REC_3D_RL( fn, prec, Nr,
148 & gpTrNm1(1-OLx,1-OLy,1,1,1,iTracer),
149 & -j, myIter, myThid )
150 IF (j.LE.listDim)
151 & wrFldList(j) = 'gPtr'//PTRACERS_ioLabel(iTracer)//'m1'
152 ENDIF
153
154 ENDDO
155
156 C--------------------------
157 nWrFlds = j
158 IF ( nWrFlds.GT.listDim ) THEN
159 WRITE(msgBuf,'(2A,I5,A)') 'PTRACERS_WRITE_PICKUP: ',
160 & 'trying to write ',nWrFlds,' fields'
161 CALL PRINT_ERROR( msgBuf, myThid )
162 WRITE(msgBuf,'(2A,I5,A)') 'PTRACERS_WRITE_PICKUP: ',
163 & 'field-list dimension (listDim=',listDim,') too small'
164 CALL PRINT_ERROR( msgBuf, myThid )
165 STOP 'ABNORMAL END: S/R PTRACERS_WRITE_PICKUP (list-size Pb)'
166 ENDIF
167 #ifdef ALLOW_MDSIO
168 C uses this specific S/R to write (with more informations) only meta files
169 glf = globalFiles
170 timList(1) = myTime
171 CALL MDS_WR_METAFILES( fn, prec, glf, .FALSE.,
172 & 0, 0, Nr, ' ',
173 & nWrFlds, wrFldList,
174 & 1, timList, oneRL,
175 & j, myIter, myThid )
176 #endif /* ALLOW_MDSIO */
177 C--------------------------
178 ENDIF
179
180 #ifdef PTRACERS_ALLOW_DYN_STATE
181 C write pickup for 2nd-order moment fields
182 C we write a separate file for each Ptracer that uses SOM advection
183 DO iTracer = 1, PTRACERS_numInUse
184 IF ( PTRACERS_SOM_Advection(iTracer) ) THEN
185 IF ( lChar.EQ.0 ) THEN
186 WRITE(fn,'(2A)') 'pickup_somTRAC',PTRACERS_ioLabel(iTracer)
187 ELSE
188 WRITE(fn,'(4A)') 'pickup_somTRAC',PTRACERS_ioLabel(iTracer),
189 & '.',suff(1:lChar)
190 ENDIF
191 _BEGIN_MASTER(myThid)
192 WRITE(msgBuf,'(A,I4,A)')'PTRACERS_WRITE_PICKUP: iTracer =',
193 & iTracer, ' : writing 2nd-order moments'
194 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
195 & SQUEEZE_RIGHT, myThid )
196 j = ILNBLNK(fn)
197 WRITE(msgBuf,'(A,A)') ' to file: ',fn(1:j)
198 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
199 & SQUEEZE_RIGHT, myThid )
200 _END_MASTER(myThid)
201 prec = precFloat64
202 C Write 2nd Order moments as consecutive records
203 DO n=1,nSOM
204 iRec = n
205 CALL WRITE_REC_3D_RL( fn, prec, Nr,
206 I _Ptracers_som(:,:,:,:,:,n,iTracer),
207 I iRec, myIter, myThid )
208 ENDDO
209 ENDIF
210 ENDDO
211 #endif /* PTRACERS_ALLOW_DYN_STATE */
212
213 #endif /* ALLOW_PTRACERS */
214
215 RETURN
216 END

  ViewVC Help
Powered by ViewVC 1.1.22