/[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.16 - (show annotations) (download)
Mon Aug 18 14:34:27 2014 UTC (9 years, 10 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65c, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, HEAD
Changes since 1.15: +6 -3 lines
- implement Adams-Bashforth on pTracers (instead of on tracer tendency),
  switched on by setting PTRACERS_doAB_onGpTr=F (default set to doAB_onGtGs).

1 C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_write_pickup.F,v 1.15 2013/01/13 22:46:38 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) .OR.
146 & PTRACERS_AdamsBash_Tr(iTracer) ) THEN
147 j = j + 1
148 CALL WRITE_REC_3D_RL( fn, prec, Nr,
149 & gpTrNm1(1-OLx,1-OLy,1,1,1,iTracer),
150 & -j, myIter, myThid )
151 IF ( j.LE.listDim .AND. PTRACERS_AdamsBashGtr(iTracer) )
152 & wrFldList(j) = 'gPtr'//PTRACERS_ioLabel(iTracer)//'m1'
153 IF ( j.LE.listDim .AND. PTRACERS_AdamsBash_Tr(iTracer) )
154 & wrFldList(j) = 'pTr'//PTRACERS_ioLabel(iTracer)//'Nm1'
155 ENDIF
156
157 ENDDO
158
159 C--------------------------
160 nWrFlds = j
161 IF ( nWrFlds.GT.listDim ) THEN
162 WRITE(msgBuf,'(2A,I5,A)') 'PTRACERS_WRITE_PICKUP: ',
163 & 'trying to write ',nWrFlds,' fields'
164 CALL PRINT_ERROR( msgBuf, myThid )
165 WRITE(msgBuf,'(2A,I5,A)') 'PTRACERS_WRITE_PICKUP: ',
166 & 'field-list dimension (listDim=',listDim,') too small'
167 CALL PRINT_ERROR( msgBuf, myThid )
168 STOP 'ABNORMAL END: S/R PTRACERS_WRITE_PICKUP (list-size Pb)'
169 ENDIF
170 #ifdef ALLOW_MDSIO
171 C uses this specific S/R to write (with more informations) only meta files
172 glf = globalFiles
173 timList(1) = myTime
174 CALL MDS_WR_METAFILES( fn, prec, glf, .FALSE.,
175 & 0, 0, Nr, ' ',
176 & nWrFlds, wrFldList,
177 & 1, timList, oneRL,
178 & j, myIter, myThid )
179 #endif /* ALLOW_MDSIO */
180 C--------------------------
181 ENDIF
182
183 #ifdef PTRACERS_ALLOW_DYN_STATE
184 C write pickup for 2nd-order moment fields
185 C we write a separate file for each Ptracer that uses SOM advection
186 DO iTracer = 1, PTRACERS_numInUse
187 IF ( PTRACERS_SOM_Advection(iTracer) ) THEN
188 IF ( lChar.EQ.0 ) THEN
189 WRITE(fn,'(2A)') 'pickup_somTRAC',PTRACERS_ioLabel(iTracer)
190 ELSE
191 WRITE(fn,'(4A)') 'pickup_somTRAC',PTRACERS_ioLabel(iTracer),
192 & '.',suff(1:lChar)
193 ENDIF
194 _BEGIN_MASTER(myThid)
195 WRITE(msgBuf,'(A,I4,A)')'PTRACERS_WRITE_PICKUP: iTracer =',
196 & iTracer, ' : writing 2nd-order moments'
197 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
198 & SQUEEZE_RIGHT, myThid )
199 j = ILNBLNK(fn)
200 WRITE(msgBuf,'(A,A)') ' to file: ',fn(1:j)
201 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
202 & SQUEEZE_RIGHT, myThid )
203 _END_MASTER(myThid)
204 prec = precFloat64
205 C Write 2nd Order moments as consecutive records
206 DO n=1,nSOM
207 iRec = n
208 CALL WRITE_REC_3D_RL( fn, prec, Nr,
209 I _Ptracers_som(:,:,:,:,:,n,iTracer),
210 I iRec, myIter, myThid )
211 ENDDO
212 ENDIF
213 ENDDO
214 #endif /* PTRACERS_ALLOW_DYN_STATE */
215
216 #endif /* ALLOW_PTRACERS */
217
218 RETURN
219 END

  ViewVC Help
Powered by ViewVC 1.1.22