/[MITgcm]/MITgcm/pkg/mypackage/mypackage_read_pickup.F
ViewVC logotype

Contents of /MITgcm/pkg/mypackage/mypackage_read_pickup.F

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


Revision 1.6 - (show annotations) (download)
Fri Mar 24 23:38:57 2017 UTC (7 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, HEAD
Changes since 1.5: +9 -3 lines
use new S/R RW_GET_SUFFIX to get file suffix (according to "rwSuffixType")

1 C $Header: /u/gcmpack/MITgcm/pkg/mypackage/mypackage_read_pickup.F,v 1.5 2012/04/03 00:20:14 jmc Exp $
2 C $Name: $
3
4 #include "MYPACKAGE_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7 CBOP
8 C !ROUTINE: MYPACKAGE_READ_PICKUP
9
10 C !INTERFACE:
11 SUBROUTINE MYPACKAGE_READ_PICKUP( myIter, myThid )
12
13 C !DESCRIPTION:
14 C Reads current state of MYPACKAGE from a pickup file
15
16 C !USES:
17 IMPLICIT NONE
18 #include "SIZE.h"
19 #include "EEPARAMS.h"
20 #include "PARAMS.h"
21 #include "MYPACKAGE.h"
22
23 C !INPUT PARAMETERS:
24 C myIter :: time-step number
25 C myThid :: thread number
26 INTEGER myIter
27 INTEGER myThid
28
29 #ifdef ALLOW_MYPACKAGE
30 #if (defined MYPACKAGE_3D_STATE) || (defined MYPACKAGE_2D_STATE)
31
32 C !LOCAL VARIABLES:
33 C fn :: character buffer for creating filename
34 C fp :: precision of pickup files
35 C filePrec :: pickup-file precision (read from meta file)
36 C nbFields :: number of fields in pickup file (read from meta file)
37 C missFldList :: List of missing fields (attempted to read but not found)
38 C missFldDim :: Dimension of missing fields list array: missFldList
39 C nMissing :: Number of missing fields (attempted to read but not found)
40 C j :: loop index
41 C nj :: record number
42 C ioUnit :: temp for writing msg unit
43 C msgBuf :: Informational/error message buffer
44 INTEGER fp
45 INTEGER filePrec, nbFields
46 INTEGER missFldDim, nMissing
47 INTEGER j, nj, ioUnit
48 PARAMETER( missFldDim = 12 )
49 CHARACTER*(10) suff
50 CHARACTER*(MAX_LEN_FNAM) fn
51 CHARACTER*(8) missFldList(missFldDim)
52 CHARACTER*(MAX_LEN_MBUF) msgBuf
53 CEOP
54
55 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
56
57 IF ( pickupSuff.EQ.' ' ) THEN
58 IF ( rwSuffixType.EQ.0 ) THEN
59 WRITE(fn,'(A,I10.10)') 'pickup_mypackage.', myIter
60 ELSE
61 CALL RW_GET_SUFFIX( suff, startTime, myIter, myThid )
62 WRITE(fn,'(A,A)') 'pickup_mypackage.', suff
63 ENDIF
64 ELSE
65 WRITE(fn,'(A,A10)') 'pickup_mypackage.', pickupSuff
66 ENDIF
67 fp = precFloat64
68
69 CALL READ_MFLDS_SET(
70 I fn,
71 O nbFields, filePrec,
72 I Nr, myIter, myThid )
73 _BEGIN_MASTER( myThid )
74 c IF ( filePrec.NE.0 .AND. filePrec.NE.fp ) THEN
75 IF ( nbFields.GE.0 .AND. filePrec.NE.fp ) THEN
76 WRITE(msgBuf,'(2A,I4)') 'MYPACKAGE_READ_PICKUP: ',
77 & 'pickup-file binary precision do not match !'
78 CALL PRINT_ERROR( msgBuf, myThid )
79 WRITE(msgBuf,'(A,2(A,I4))') 'MYPACKAGE_READ_PICKUP: ',
80 & 'file prec.=', filePrec, ' but expecting prec.=', fp
81 CALL PRINT_ERROR( msgBuf, myThid )
82 CALL ALL_PROC_DIE( 0 )
83 STOP 'ABNORMAL END: S/R MYPACKAGE_READ_PICKUP (data-prec Pb)'
84 ENDIF
85 _END_MASTER( myThid )
86
87 IF ( nbFields.LE.0 ) THEN
88 C- No meta-file or old meta-file without List of Fields
89 ioUnit = errorMessageUnit
90 IF ( pickupStrictlyMatch ) THEN
91 WRITE(msgBuf,'(4A)') 'MYPACKAGE_READ_PICKUP: ',
92 & 'no field-list found in meta-file',
93 & ' => cannot check for strick-matching'
94 CALL PRINT_ERROR( msgBuf, myThid )
95 WRITE(msgBuf,'(4A)') 'MYPACKAGE_READ_PICKUP: ',
96 & 'try with " pickupStrictlyMatch=.FALSE.,"',
97 & ' in file: "data", NameList: "PARM03"'
98 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
99 CALL ALL_PROC_DIE( myThid )
100 STOP 'ABNORMAL END: S/R MYPACKAGE_READ_PICKUP'
101 ELSE
102 WRITE(msgBuf,'(4A)') 'WARNING >> MYPACKAGE_READ_PICKUP: ',
103 & ' no field-list found'
104 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
105 IF ( nbFields.EQ.-1 ) THEN
106 C- No meta-file
107 WRITE(msgBuf,'(4A)') 'WARNING >> ',
108 & ' try to read pickup as currently written'
109 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
110 ELSE
111 C- Old meta-file without List of Fields
112 c WRITE(msgBuf,'(4A)') 'WARNING >> ',
113 c & ' try to read pickup as it used to be written'
114 c CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
115 c WRITE(msgBuf,'(4A)') 'WARNING >> ',
116 c & ' until checkpoint59l (2007 Dec 17)'
117 c CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
118 WRITE(msgBuf,'(4A)') 'MYPACKAGE_READ_PICKUP: ',
119 & 'no field-list found in meta-file'
120 CALL PRINT_ERROR( msgBuf, myThid )
121 CALL ALL_PROC_DIE( myThid )
122 STOP 'ABNORMAL END: S/R MYPACKAGE_READ_PICKUP'
123 ENDIF
124 ENDIF
125 ENDIF
126
127 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
128
129 IF ( nbFields.EQ.0 ) THEN
130 C--- Old way to read pickup:
131
132 ELSE
133 C--- New way to read MYPACKAGE pickup:
134 nj = 0
135 C--- read MYPACKAGE 3-D fields for restart
136 #ifdef MYPACKAGE_3D_STATE
137 CALL READ_MFLDS_3D_RL( 'myPaSta1', myPa_StatScal1,
138 & nj, fp, Nr, myIter, myThid )
139 CALL READ_MFLDS_3D_RL( 'myPaSta2', myPa_StatScal2,
140 & nj, fp, Nr, myIter, myThid )
141 CALL READ_MFLDS_3D_RL( 'myPaStaU', myPa_StatVelU,
142 & nj, fp, Nr, myIter, myThid )
143 CALL READ_MFLDS_3D_RL( 'myPaStaV', myPa_StatVelV,
144 & nj, fp, Nr, myIter, myThid )
145 #endif /* MYPACKAGE_3D_STATE */
146 nj = nj*Nr
147 C--- read MYPACKAGE 2-D fields for restart
148 #ifdef MYPACKAGE_2D_STATE
149 CALL READ_MFLDS_3D_RL( 'myPaSur1', myPa_Surf1,
150 & nj, fp, 1 , myIter, myThid )
151 CALL READ_MFLDS_3D_RL( 'myPaSur2', myPa_Surf2,
152 & nj, fp, 1 , myIter, myThid )
153 #endif /* MYPACKAGE_2D_STATE */
154
155 C-- end: new way to read pickup file
156 ENDIF
157
158 C-- Check for missing fields:
159 nMissing = missFldDim
160 CALL READ_MFLDS_CHECK(
161 O missFldList,
162 U nMissing,
163 I myIter, myThid )
164 IF ( nMissing.GT.missFldDim ) THEN
165 WRITE(msgBuf,'(2A,I4)') 'MYPACKAGE_READ_PICKUP: ',
166 & 'missing fields list has been truncated to', missFldDim
167 CALL PRINT_ERROR( msgBuf, myThid )
168 CALL ALL_PROC_DIE( myThid )
169 STOP 'ABNORMAL END: S/R MYPACKAGE_READ_PICKUP (list-size Pb)'
170 ENDIF
171 IF ( nMissing.GE.1 ) THEN
172 ioUnit = errorMessageUnit
173 DO j=1,nMissing
174 WRITE(msgBuf,'(4A)') 'MYPACKAGE_READ_PICKUP: ',
175 & 'cannot restart without field "',missFldList(nj),'"'
176 CALL PRINT_ERROR( msgBuf, myThid )
177 ENDDO
178 CALL ALL_PROC_DIE( myThid )
179 STOP 'ABNORMAL END: S/R MYPACKAGE_READ_PICKUP'
180 ENDIF
181
182 C-- Update overlap regions:
183 #ifdef MYPACKAGE_3D_STATE
184 CALL EXCH_3D_RL( myPa_StatScal1, Nr, myThid )
185 CALL EXCH_3D_RL( myPa_StatScal2, Nr, myThid )
186 IF ( myPa_StaV_Cgrid ) THEN
187 CALL EXCH_UV_3D_RL( myPa_StatVelU, myPa_StatVelV,
188 & .TRUE., Nr, myThid )
189 ELSE
190 C- Assume Agrid position:
191 CALL EXCH_UV_AGRID_3D_RL( myPa_StatVelU, myPa_StatVelV,
192 & .TRUE., Nr, myThid )
193 ENDIF
194 #endif /* MYPACKAGE_3D_STATE */
195 #ifdef MYPACKAGE_2D_STATE
196 CALL EXCH_XY_RL( myPa_Surf1, myThid )
197 CALL EXCH_XY_RL( myPa_Surf2, myThid )
198 #endif /* MYPACKAGE_2D_STATE */
199
200 #endif /* MYPACKAGE_3D_STATE or MYPACKAGE_2D_STATE */
201 #endif /* ALLOW_MYPACKAGE */
202
203 RETURN
204 END

  ViewVC Help
Powered by ViewVC 1.1.22