/[MITgcm]/MITgcm/pkg/diagnostics/diagnostics_write_pickup.F
ViewVC logotype

Contents of /MITgcm/pkg/diagnostics/diagnostics_write_pickup.F

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


Revision 1.11 - (show annotations) (download)
Sun Jul 23 00:24:18 2017 UTC (6 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, HEAD
Changes since 1.10: +5 -5 lines
allows for negative "jdiag" (interpret |jdiag| instead)

1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_write_pickup.F,v 1.10 2009/08/27 18:00:01 jmc Exp $
2 C $Name: $
3
4 #include "DIAG_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7 CBOP
8 C !ROUTINE: DIAGNOSTICS_WRITE_PICKUP
9 C !INTERFACE:
10 SUBROUTINE DIAGNOSTICS_WRITE_PICKUP(
11 I isPerm,
12 I suff,
13 I myTime,
14 I myIter,
15 I myThid )
16
17 C !DESCRIPTION:
18 C Writes current state of the diagnostics package.
19
20 C !USES:
21 IMPLICIT NONE
22
23 C == Global variables ===
24 #include "SIZE.h"
25 #include "EEPARAMS.h"
26 #include "PARAMS.h"
27 #include "DIAGNOSTICS_SIZE.h"
28 #include "DIAGNOSTICS.h"
29
30 C !INPUT/OUTPUT PARAMETERS:
31 C isPerm :: permanent checkpoint flag
32 C suff :: suffix for pickup file (eg. ckptA or 0000000010)
33 C myTime :: current time
34 C myIter :: time-step number
35 C myThid :: Number of this instance
36 LOGICAL isPerm
37 CHARACTER*(*) suff
38 _RL myTime
39 INTEGER myIter
40 INTEGER myThid
41
42 #ifdef DIAGNOSTICS_HAS_PICKUP
43
44 C !LOCAL VARIABLES:
45 C fn :: character buffer for creating filename
46 C prec :: precision of pickup files
47 c INTEGER prec, iChar, lChar, k
48 INTEGER prec, lChar, sn
49 CHARACTER*(MAX_LEN_FNAM) fn
50
51 INTEGER ILNBLNK
52 EXTERNAL ILNBLNK
53
54 INTEGER dUnit, ndId, n, m
55
56 #ifdef ALLOW_MNC
57 INTEGER i, ii
58 CHARACTER*(MAX_LEN_FNAM) diag_mnc_bn
59 INTEGER CW_DIMS, NLEN
60 PARAMETER ( CW_DIMS = 10 )
61 PARAMETER ( NLEN = 80 )
62 INTEGER dim(CW_DIMS), ib(CW_DIMS), ie(CW_DIMS)
63 CHARACTER*(NLEN) dn(CW_DIMS)
64 CHARACTER*(NLEN) d_cw_name
65 CHARACTER*(NLEN) dn_blnk
66 #endif /* ALLOW_MNC */
67
68 CEOP
69
70 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
71
72 IF (diag_pickup_write) THEN
73
74 #ifdef ALLOW_MNC
75 IF (diag_pickup_write_mnc) THEN
76 DO i = 1,NLEN
77 dn_blnk(i:i) = ' '
78 ENDDO
79 DO i = 1,MAX_LEN_FNAM
80 diag_mnc_bn(i:i) = ' '
81 ENDDO
82
83 IF ( isPerm ) THEN
84 WRITE(diag_mnc_bn,'(A)') 'pickup_diagnostics'
85 ELSE
86 ii = ILNBLNK(suff)
87 WRITE(diag_mnc_bn,'(A,A)')
88 & 'pickup_diagnostics.',suff(1:ii)
89 ENDIF
90
91 CALL MNC_CW_SET_UDIM(fn, 0, myThid)
92 IF ( isPerm ) THEN
93 CALL MNC_CW_SET_CITER(fn, 3, 3, myIter, 0, myThid)
94 ELSE
95 CALL MNC_CW_SET_CITER(fn, 2, -1, -1, -1, myThid)
96 ENDIF
97 C Then set the actual unlimited dimension
98 CALL MNC_CW_SET_UDIM(fn, 1, myThid)
99
100 C Update the record dimension by writing the iteration number
101 CALL MNC_CW_RL_W_S('D',diag_mnc_bn,0,0,'T',myTime,myThid)
102 CALL MNC_CW_I_W_S('I',diag_mnc_bn,0,0,'iter',myIter,myThid)
103
104 C Write the qdiag() array
105 d_cw_name(1:NLEN) = dn_blnk(1:NLEN)
106 DO ii = 1,CW_DIMS
107 dn(ii)(1:NLEN) = dn_blnk(1:NLEN)
108 ENDDO
109 d_cw_name(1:10) = 'diag_state'
110 dn(1)(1:3) = 'Xp1'
111 dim(1) = sNx + 2*OLx
112 ib(1) = OLx + 1
113 ie(1) = OLx + sNx + 1
114 dn(2)(1:3) = 'Yp1'
115 dim(2) = sNy + 2*OLy
116 ib(2) = OLy + 1
117 ie(2) = OLy + sNy + 1
118 dn(3)(1:2) = 'Nd'
119 dim(3) = numDiags
120 ib(3) = 1
121 ie(3) = numDiags
122 dn(4)(1:1) = 'T'
123 dim(4) = -1
124 ib(4) = 1
125 ie(4) = 1
126
127 CALL MNC_CW_ADD_GNAME(d_cw_name, 4,
128 & dim, dn, ib, ie, myThid)
129 CALL MNC_CW_ADD_VNAME(d_cw_name, d_cw_name,
130 & 4,5, myThid)
131 CALL MNC_CW_ADD_VATTR_TEXT(d_cw_name,'description',
132 & 'diagnostics state',myThid)
133
134 CALL MNC_CW_RL_W('D',diag_mnc_bn,0,0,
135 & d_cw_name, qdiag, myThid)
136
137 CALL MNC_CW_DEL_VNAME(d_cw_name, myThid)
138 CALL MNC_CW_DEL_GNAME(d_cw_name, myThid)
139
140 C Write the ndiag() array
141 d_cw_name(1:NLEN) = dn_blnk(1:NLEN)
142 DO ii = 1,CW_DIMS
143 dn(ii)(1:NLEN) = dn_blnk(1:NLEN)
144 ENDDO
145 d_cw_name(1:10) = 'diag_count'
146 dn(1)(1:2) = 'Nd'
147 dim(1) = numDiags
148 ib(1) = 1
149 ie(1) = numDiags
150 dn(2)(1:1) = 'T'
151 dim(2) = -1
152 ib(2) = 1
153 ie(2) = 1
154
155 CALL MNC_CW_ADD_GNAME(d_cw_name, 2,
156 & dim, dn, ib, ie, myThid)
157 CALL MNC_CW_ADD_VNAME(d_cw_name, d_cw_name,
158 & 4,5, myThid)
159 CALL MNC_CW_ADD_VATTR_TEXT(d_cw_name,'description',
160 & 'diagnostics state',myThid)
161
162 CALL MNC_CW_I_W('I',diag_mnc_bn,0,0,
163 & d_cw_name, ndiag, myThid)
164
165 CALL MNC_CW_DEL_VNAME(d_cw_name, myThid)
166 CALL MNC_CW_DEL_GNAME(d_cw_name, myThid)
167
168 ENDIF
169 #endif
170
171 IF (diag_pickup_write_mdsio) THEN
172
173 sn = ILNBLNK(suff)
174
175 C Write qdiag()
176 WRITE(fn,'(a,a)') 'pickup_qdiag.', suff(1:sn)
177 prec = precFloat64
178 CALL WRITE_REC_3D_RL( fn, prec, numDiags, qdiag,
179 & 1, myIter, myThid )
180
181 C Write ndiag()
182 _BARRIER
183 _BEGIN_MASTER( myThid )
184 WRITE(fn,'(a,a)') 'pickup_ndiag.', suff(1:sn)
185 CALL MDSFINDUNIT( dUnit, myThid )
186 OPEN( dUnit, file=fn )
187 DO n = 1,nlists
188 DO m = 1,nfields(n)
189 ndId = ABS(jdiag(m,n))
190 WRITE(dUnit,'(I10)') ndiag(ndId,1,1)
191 ENDDO
192 ENDDO
193 CLOSE( dUnit )
194 _END_MASTER( myThid )
195 _BARRIER
196 ENDIF
197
198 ENDIF
199
200 #endif /* DIAGNOSTICS_HAS_PICKUP */
201
202 RETURN
203 END

  ViewVC Help
Powered by ViewVC 1.1.22