/[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.11 - (show annotations) (download)
Tue Mar 16 00:22:26 2010 UTC (14 years, 1 month ago) by jmc
Branch: MAIN
CVS Tags: checkpoint63a, checkpoint63, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x
Changes since 1.10: +2 -2 lines
avoid unbalanced quote (single or double) in commented line

1 C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_write_pickup.F,v 1.10 2010/01/02 23:42:51 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_RESTART.h"
27 #include "PTRACERS_FIELDS.h"
28
29 C !INPUT PARAMETERS: ===================================================
30 C permCheckPoint :: permanent or a rolling checkpoint
31 C suff :: suffix for pickup file (eg. ckptA or 0000000010)
32 C myTime :: model time
33 C myIter :: time-step number
34 C myThid :: thread number
35 LOGICAL permCheckPoint
36 CHARACTER*(*) suff
37 _RL myTime
38 INTEGER myIter
39 INTEGER myThid
40
41 C !OUTPUT PARAMETERS: ==================================================
42 C none
43
44 #ifdef ALLOW_PTRACERS
45
46 C === Functions ====
47 INTEGER ILNBLNK
48 EXTERNAL ILNBLNK
49
50 C !LOCAL VARIABLES: ====================================================
51 C iTracer :: tracer index
52 C j :: loop index / field number
53 C prec :: pickup-file precision
54 C glf :: local flag for "globalFiles"
55 C fn :: character buffer for creating filename
56 C nWrFlds :: number of fields being written
57 C listDim :: dimension of "wrFldList" local array
58 C wrFldList :: list of written fields
59 C msgBuf :: Informational/error message buffer
60 INTEGER iTracer, j, prec, lChar
61 LOGICAL glf
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 IF ( PTRACERS_pickup_write_mdsio ) THEN
120
121 lChar = ILNBLNK(suff)
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 CALL MDS_WR_METAFILES( fn, prec, glf, .FALSE.,
171 & 0, 0, Nr, ' ',
172 & nWrFlds, wrFldList,
173 & 1, myTime,
174 & j, myIter, myThid )
175 #endif /* ALLOW_MDSIO */
176 C--------------------------
177 #ifdef PTRACERS_ALLOW_DYN_STATE
178 C write pickup for 2nd-order moment fields
179 C we write a separate file for each Ptracer that uses SOM advection
180 DO iTracer = 1, PTRACERS_numInUse
181 IF ( PTRACERS_SOM_Advection(iTracer) ) THEN
182 IF ( lChar.EQ.0 ) THEN
183 WRITE(fn,'(2A)') 'pickup_somTRAC',PTRACERS_ioLabel(iTracer)
184 ELSE
185 WRITE(fn,'(4A)') 'pickup_somTRAC',PTRACERS_ioLabel(iTracer),
186 & '.',suff(1:lChar)
187 ENDIF
188 WRITE(msgBuf,'(A,I3,A)')'PTRACERS_WRITE_PICKUP: iTracer = ',
189 & iTracer,
190 & ' : writing 2nd-order moments to file '
191 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
192 & SQUEEZE_RIGHT, myThid)
193 CALL PRINT_MESSAGE( fn, standardMessageUnit,
194 & SQUEEZE_RIGHT, myThid)
195 prec = precFloat64
196 C Write 2nd Order moments as consecutive records
197 DO n=1,nSOM
198 iRec = n
199 CALL WRITE_REC_3D_RL( fn, prec, Nr,
200 I _Ptracers_som(:,:,:,:,:,n,iTracer),
201 I iRec, myIter, myThid )
202 ENDDO
203 ENDIF
204 ENDDO
205 #endif /* PTRACERS_ALLOW_DYN_STATE */
206 C--------------------------
207 ENDIF
208
209 #endif /* ALLOW_PTRACERS */
210
211 RETURN
212 END

  ViewVC Help
Powered by ViewVC 1.1.22