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

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

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


Revision 1.15 - (hide annotations) (download)
Sun Jan 13 22:46:38 2013 UTC (11 years, 4 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 jmc 1.15 C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_write_pickup.F,v 1.14 2012/04/02 00:06:31 jmc Exp $
2 jmc 1.1 C $Name: $
3    
4 jahn 1.7 #include "GAD_OPTIONS.h"
5 jmc 1.1 #include "PTRACERS_OPTIONS.h"
6    
7     CBOP
8     C !ROUTINE: PTRACERS_WRITE_PICKUP
9    
10     C !INTERFACE: ==========================================================
11 jmc 1.2 SUBROUTINE PTRACERS_WRITE_PICKUP( permCheckPoint,
12 jmc 1.6 & suff, myTime, myIter, myThid )
13 jmc 1.1
14     C !DESCRIPTION:
15     C Writes current state of passive tracers to a pickup file
16    
17     C !USES: ===============================================================
18 jahn 1.7 #include "PTRACERS_MOD.h"
19 jmc 1.1 IMPLICIT NONE
20     #include "SIZE.h"
21     #include "EEPARAMS.h"
22     #include "PARAMS.h"
23 jahn 1.7 #include "GAD.h"
24 jmc 1.1 #include "PTRACERS_SIZE.h"
25 jmc 1.4 #include "PTRACERS_PARAMS.h"
26     #include "PTRACERS_FIELDS.h"
27 jmc 1.1
28     C !INPUT PARAMETERS: ===================================================
29     C permCheckPoint :: permanent or a rolling checkpoint
30     C suff :: suffix for pickup file (eg. ckptA or 0000000010)
31 jmc 1.6 C myTime :: model time
32 jmc 1.1 C myIter :: time-step number
33     C myThid :: thread number
34     LOGICAL permCheckPoint
35     CHARACTER*(*) suff
36 jmc 1.6 _RL myTime
37 jmc 1.1 INTEGER myIter
38     INTEGER myThid
39    
40     C !OUTPUT PARAMETERS: ==================================================
41     C none
42    
43     #ifdef ALLOW_PTRACERS
44    
45 jmc 1.2 C === Functions ====
46     INTEGER ILNBLNK
47     EXTERNAL ILNBLNK
48    
49 jmc 1.1 C !LOCAL VARIABLES: ====================================================
50 jmc 1.5 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 jmc 1.10 INTEGER iTracer, j, prec, lChar
60 jmc 1.5 LOGICAL glf
61 jmc 1.12 _RL timList(1)
62 jmc 1.1 CHARACTER*(MAX_LEN_FNAM) fn
63 jmc 1.5 INTEGER listDim, nWrFlds
64     PARAMETER( listDim = 3*PTRACERS_num )
65     CHARACTER*(8) wrFldList(listDim)
66     CHARACTER*(MAX_LEN_MBUF) msgBuf
67 jmc 1.10 #ifdef PTRACERS_ALLOW_DYN_STATE
68     INTEGER n, iRec
69     #endif
70 jmc 1.1 CEOP
71    
72     #ifdef ALLOW_MNC
73     IF ( PTRACERS_pickup_write_mnc ) THEN
74     IF ( permCheckPoint ) THEN
75 jmc 1.2 WRITE(fn,'(A)') 'pickup_ptracers'
76 jmc 1.1 ELSE
77     lChar = ILNBLNK(suff)
78 jmc 1.2 WRITE(fn,'(2A)') 'pickup_ptracers.', suff(1:lChar)
79 jmc 1.1 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 jmc 1.11 C step since we are saving the gpTrNm1 variable first
92 jmc 1.1 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 jmc 1.4 & gpTrNm1(1-OLx,1-OLy,1,1,1,iTracer),myThid)
97 jmc 1.1 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 jahn 1.7 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 jmc 1.1 #endif /* ALLOW_MNC */
118 jmc 1.2
119 jmc 1.14 lChar = ILNBLNK(suff)
120 jmc 1.1 IF ( PTRACERS_pickup_write_mdsio ) THEN
121    
122 jmc 1.2 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 jmc 1.1 prec = precFloat64
128    
129 jmc 1.5 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 jmc 1.2 CALL WRITE_REC_3D_RL( fn, prec, Nr,
137 jmc 1.13 & pTracer(1-OLx,1-OLy,1,1,1,iTracer),
138 jmc 1.5 & -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 jmc 1.2 CALL WRITE_REC_3D_RL( fn, prec, Nr,
148 jmc 1.13 & gpTrNm1(1-OLx,1-OLy,1,1,1,iTracer),
149 jmc 1.5 & -j, myIter, myThid )
150     IF (j.LE.listDim)
151     & wrFldList(j) = 'gPtr'//PTRACERS_ioLabel(iTracer)//'m1'
152     ENDIF
153    
154 jmc 1.1 ENDDO
155    
156 jmc 1.5 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 jmc 1.12 timList(1) = myTime
171 jmc 1.5 CALL MDS_WR_METAFILES( fn, prec, glf, .FALSE.,
172     & 0, 0, Nr, ' ',
173     & nWrFlds, wrFldList,
174 jmc 1.15 & 1, timList, oneRL,
175 jmc 1.5 & j, myIter, myThid )
176     #endif /* ALLOW_MDSIO */
177     C--------------------------
178 jmc 1.14 ENDIF
179    
180 jmc 1.8 #ifdef PTRACERS_ALLOW_DYN_STATE
181 jahn 1.7 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 jmc 1.14 _BEGIN_MASTER(myThid)
192     WRITE(msgBuf,'(A,I4,A)')'PTRACERS_WRITE_PICKUP: iTracer =',
193     & iTracer, ' : writing 2nd-order moments'
194 jahn 1.7 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
195 jmc 1.14 & 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 jahn 1.7 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 jmc 1.9 I _Ptracers_som(:,:,:,:,:,n,iTracer),
207 jahn 1.7 I iRec, myIter, myThid )
208     ENDDO
209     ENDIF
210     ENDDO
211 jmc 1.8 #endif /* PTRACERS_ALLOW_DYN_STATE */
212 jmc 1.1
213     #endif /* ALLOW_PTRACERS */
214    
215     RETURN
216     END

  ViewVC Help
Powered by ViewVC 1.1.22