/[MITgcm]/MITgcm/pkg/cheapaml/cheapaml_read_pickup.F
ViewVC logotype

Contents of /MITgcm/pkg/cheapaml/cheapaml_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:34:13 2017 UTC (7 years, 1 month 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/cheapaml/cheapaml_read_pickup.F,v 1.5 2012/12/23 20:18:01 jmc Exp $
2 C $Name: $
3
4 #include "CHEAPAML_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7 CBOP
8 C !ROUTINE: CHEAPAML_READ_PICKUP
9
10 C !INTERFACE:
11 SUBROUTINE CHEAPAML_READ_PICKUP( myIter, myThid )
12
13 C !DESCRIPTION:
14 C Reads current state of CHEAPAML 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 "CHEAPAML.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_CHEAPAML
30
31 C !LOCAL VARIABLES:
32 C fn :: character buffer for creating filename
33 C fp :: precision of pickup files
34 C filePrec :: pickup-file precision (read from meta file)
35 C nbFields :: number of fields in pickup file (read from meta file)
36 C missFldList :: List of missing fields (attempted to read but not found)
37 C missFldDim :: Dimension of missing fields list array: missFldList
38 C nMissing :: Number of missing fields (attempted to read but not found)
39 C j :: loop index
40 C nj :: record number
41 C ioUnit :: temp for writing msg unit
42 C msgBuf :: Informational/error message buffer
43 LOGICAL stopFlag
44 INTEGER fp
45 INTEGER filePrec, nbFields
46 INTEGER missFldDim, nMissing, warnCnts
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 _BARRIER
56
57 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
58
59 IF ( pickupSuff.EQ.' ' ) THEN
60 IF ( rwSuffixType.EQ.0 ) THEN
61 WRITE(fn,'(A,I10.10)') 'pickup_cheapaml.', myIter
62 ELSE
63 CALL RW_GET_SUFFIX( suff, startTime, myIter, myThid )
64 WRITE(fn,'(A,A)') 'pickup_cheapaml.', myIter
65 ENDIF
66 ELSE
67 WRITE(fn,'(A,A10)') 'pickup_cheapaml.', pickupSuff
68 ENDIF
69 fp = precFloat64
70
71 CALL READ_MFLDS_SET(
72 I fn,
73 O nbFields, filePrec,
74 I Nr, myIter, myThid )
75 _BEGIN_MASTER( myThid )
76 c IF ( filePrec.NE.0 .AND. filePrec.NE.fp ) THEN
77 IF ( nbFields.GE.0 .AND. filePrec.NE.fp ) THEN
78 WRITE(msgBuf,'(2A,I4)') 'CHEAPAML_READ_PICKUP: ',
79 & 'pickup-file binary precision do not match !'
80 CALL PRINT_ERROR( msgBuf, myThid )
81 WRITE(msgBuf,'(A,2(A,I4))') 'CHEAPAML_READ_PICKUP: ',
82 & 'file prec.=', filePrec, ' but expecting prec.=', fp
83 CALL PRINT_ERROR( msgBuf, myThid )
84 STOP 'ABNORMAL END: S/R CHEAPAML_READ_PICKUP (data-prec Pb)'
85 ENDIF
86 _END_MASTER( myThid )
87
88 IF ( nbFields.LE.0 ) THEN
89 C- No meta-file or old meta-file without List of Fields
90 ioUnit = errorMessageUnit
91 IF ( pickupStrictlyMatch ) THEN
92 WRITE(msgBuf,'(4A)') 'CHEAPAML_READ_PICKUP: ',
93 & 'no field-list found in meta-file',
94 & ' => cannot check for strick-matching'
95 CALL PRINT_ERROR( msgBuf, myThid )
96 WRITE(msgBuf,'(4A)') 'CHEAPAML_READ_PICKUP: ',
97 & 'try with " pickupStrictlyMatch=.FALSE.,"',
98 & ' in file: "data", NameList: "PARM03"'
99 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
100 STOP 'ABNORMAL END: S/R CHEAPAML_READ_PICKUP'
101 ELSE
102 WRITE(msgBuf,'(4A)') 'WARNING >> CHEAPAML_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)') 'CHEAPAML_READ_PICKUP: ',
119 & 'no field-list found in meta-file'
120 CALL PRINT_ERROR( msgBuf, myThid )
121 STOP 'ABNORMAL END: S/R CHEAPAML_READ_PICKUP'
122 ENDIF
123 ENDIF
124 ENDIF
125
126 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
127
128 IF ( nbFields.EQ.0 ) THEN
129 C--- Old way to read pickup:
130 ELSE
131 C--- New way to read CHEAPAML pickup:
132 nj = 0
133 nj = nj*Nr
134 C--- read CHEAPAML 2-D fields for restart
135 CALL READ_MFLDS_3D_RL( 'Tair ', Tair,
136 & nj, fp, 1 , myIter, myThid )
137 CALL READ_MFLDS_3D_RL( 'gTairNm1', gTairm,
138 & nj, fp, 1 , myIter, myThid )
139
140 IF(useFreshWaterFlux)THEN
141 CALL READ_MFLDS_3D_RL( 'Qair ', qair,
142 & nj, fp, 1 , myIter, myThid )
143 CALL READ_MFLDS_3D_RL( 'gQairNm1', gqairm,
144 & nj, fp, 1 , myIter, myThid )
145 ENDIF
146 IF(useCheaptracer)THEN
147 CALL READ_MFLDS_3D_RL( 'cTracer ', Cheaptracer,
148 & nj, fp, 1 ,myIter, myThid )
149 CALL READ_MFLDS_3D_RL( 'gTracNm1', Cheaptracer,
150 & nj, fp, 1 ,myIter, myThid )
151 ENDIF
152
153 C-- end: new way to read pickup file
154 ENDIF
155
156 C-- Check for missing fields:
157 nMissing = missFldDim
158 CALL READ_MFLDS_CHECK(
159 O missFldList,
160 U nMissing,
161 I myIter, myThid )
162 IF ( nMissing.GT.missFldDim ) THEN
163 WRITE(msgBuf,'(2A,I4)') 'CHEAPAML_READ_PICKUP: ',
164 & 'missing fields list has been truncated to', missFldDim
165 CALL PRINT_ERROR( msgBuf, myThid )
166 STOP 'ABNORMAL END: S/R CHEAPAML_READ_PICKUP (list-size Pb)'
167 ENDIF
168 IF ( nMissing.GE.1 ) THEN
169 _BEGIN_MASTER( myThid )
170 ioUnit = errorMessageUnit
171 stopFlag = .FALSE.
172 warnCnts = nMissing
173 DO j=1,nMissing
174 IF ( missFldList(j).EQ.'gTairNm1' ) THEN
175 cheapTairStartAB = 0
176 ELSEIF ( missFldList(j).EQ.'gQairNm1' ) THEN
177 cheapQairStartAB = 0
178 ELSEIF ( missFldList(j).EQ.'gTracNm1' ) THEN
179 cheapTracStartAB = 0
180 ELSE
181 stopFlag = .TRUE.
182 WRITE(msgBuf,'(4A)') 'CHEAPAML_READ_PICKUP: ',
183 & 'cannot restart without field "',missFldList(nj),'"'
184 CALL PRINT_ERROR( msgBuf, myThid )
185 ENDIF
186 ENDDO
187 IF ( stopFlag ) THEN
188 STOP 'ABNORMAL END: S/R CHEAPAML_READ_PICKUP'
189 ELSEIF ( pickupStrictlyMatch ) THEN
190 WRITE(msgBuf,'(4A)') 'CHEAPAML_READ_PICKUP: ',
191 & 'try with " pickupStrictlyMatch=.FALSE.,"',
192 & ' in file: "data", NameList: "PARM03"'
193 CALL PRINT_ERROR( msgBuf, myThid )
194 STOP 'ABNORMAL END: S/R CHEAPAML_READ_PICKUP'
195 ELSEIF ( warnCnts .GT. 0 ) THEN
196 WRITE(msgBuf,'(4A)') '** WARNING ** CHEAPAML_READ_PICKUP: ',
197 & 'Will get only an approximated Restart'
198 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
199 ENDIF
200 _END_MASTER( myThid )
201 ENDIF
202
203 C-- Update overlap regions:
204 CALL EXCH_XY_RL( Tair, myThid )
205 CALL EXCH_XY_RL( qair, myThid )
206 CALL EXCH_XY_RL( Cheaptracer, myThid )
207
208 #endif /* ALLOW_CHEAPAML */
209
210 RETURN
211 END

  ViewVC Help
Powered by ViewVC 1.1.22