/[MITgcm]/MITgcm/model/src/check_pickup.F
ViewVC logotype

Contents of /MITgcm/model/src/check_pickup.F

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


Revision 1.6 - (show annotations) (download)
Tue Jan 20 20:46:55 2015 UTC (9 years, 3 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, HEAD
Changes since 1.5: +7 -1 lines
- move ALLOW_EDDYPSI block out of DYNVARS.h and merge it into FFIELDS.h
- rename uMean,vMean --> uEulerMean,vEulerMean (+ change name in pickup file)
- add frictionHeating field to pickup-files (for synchronous time-stepping)

1 C $Header: /u/gcmpack/MITgcm/model/src/check_pickup.F,v 1.5 2011/10/28 21:20:17 jmc Exp $
2 C $Name: $
3
4 c#include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6
7 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
8 CBOP
9 C !ROUTINE: CHECK_PICKUP
10 C !INTERFACE:
11 SUBROUTINE CHECK_PICKUP(
12 I missFldList,
13 I nMissing, nbFields,
14 I myIter, myThid )
15
16 C !DESCRIPTION:
17 C Check that fields that are needed to restart have been read.
18 C In case some fields are missing, stop if pickupStrictlyMatch=T
19 C or try, if possible, to restart without the missing field.
20
21 C !USES:
22 IMPLICIT NONE
23 #include "SIZE.h"
24 #include "EEPARAMS.h"
25 #include "PARAMS.h"
26 #include "RESTART.h"
27 c#ifdef ALLOW_GENERIC_ADVDIFF
28 c# include "GAD.h"
29 c#endif
30
31 C !INPUT/OUTPUT PARAMETERS:
32 C missFldList :: List of missing fields (attempted to read but not found)
33 C nMissing :: Number of missing fields (attempted to read but not found)
34 C nbFields :: number of fields in pickup file (read from meta file)
35 C myIter :: Iteration number
36 C myThid :: my Thread Id. number
37 CHARACTER*(8) missFldList(*)
38 INTEGER nMissing
39 INTEGER nbFields
40 INTEGER myIter
41 INTEGER myThid
42 CEOP
43
44 C !FUNCTIONS
45 INTEGER ILNBLNK
46 EXTERNAL ILNBLNK
47
48 C !LOCAL VARIABLES:
49 INTEGER j
50 INTEGER ioUnit
51 INTEGER warnCnts
52 LOGICAL stopFlag
53 CHARACTER*(MAX_LEN_MBUF) msgBuf
54
55 ioUnit = errorMessageUnit
56
57 c IF (pickup_read_mdsio) THEN
58 _BEGIN_MASTER( myThid )
59
60 IF ( nbFields.GE.1 ) THEN
61 C- flag startFromPickupAB2 is becoming obsolete with new way to read
62 C pickup file: cancel its effect (from initialisation) by resetting
63 C start-AB parameters:
64 tempStartAB = nIter0
65 saltStartAB = nIter0
66 mom_StartAB = nIter0
67 nHydStartAB = nIter0
68 ENDIF
69 IF ( selectNHfreeSurf.GE.1 ) THEN
70 IF ( nbFields.EQ.0 ) THEN
71 WRITE(msgBuf,'(4A)') '** WARNING ** CHECK_PICKUP: ',
72 & 'restart like hydrostatic free-surf (dPhiNH missing)'
73 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
74 ELSE
75 C- assume reading dPhiNH was OK (otherwise expected in missing field list)
76 dPhiNHstatus = 1
77 ENDIF
78 ENDIF
79
80 IF ( nMissing.GE.1 ) THEN
81 stopFlag = .FALSE.
82 warnCnts = nMissing
83 DO j=1,nMissing
84 C- Case where missing field is not essential or can be recomputed
85 IF ( missFldList(j).EQ.'dEtaHdt '
86 & .AND. .NOT.useRealFreshWaterFlux ) THEN
87 warnCnts = warnCnts - 1
88 IF ( .NOT.pickupStrictlyMatch ) THEN
89 WRITE(msgBuf,'(4A)') ' CHECK_PICKUP: ',
90 & 'no RealFreshWaterFlux => can restart without "dEtaHdt "'
91 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
92 ENDIF
93 ELSEIF ( missFldList(j).EQ.'dPhiNH '
94 & .AND. implicitNHPress.EQ.1. _d 0 ) THEN
95 warnCnts = warnCnts - 1
96 dPhiNHstatus = 0
97 IF ( .NOT.pickupStrictlyMatch ) THEN
98 WRITE(msgBuf,'(4A)') ' CHECK_PICKUP: ',
99 & 'fully Implic.NH-Press => can restart without "dPhiNH "'
100 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
101 ENDIF
102 C- Old pickup for which special code takes care of missing fields
103 ELSEIF ( missFldList(j).EQ.'dEtaHdt '
104 & .AND.usePickupBeforeC54 ) THEN
105 C- with RealFreshWaterFlux, needs dEtaHdt to restart when:
106 C * synchronousTimeStep & usingPCoords => needs PmEpR for surf-forcing
107 C <- present code might be wrong if usePickupBeforeC54 and LinFS
108 C * synchronousTimeStep & nonlinFreeSurf > 0 => needs PmEpR for surf-forcing
109 C * select_rStar <> 0 => needs dEtaHdt for 1rst Integr_continuity
110 IF ( .NOT.pickupStrictlyMatch ) THEN
111 WRITE(msgBuf,'(4A)') '** WARNING ** CHECK_PICKUP: ',
112 & 'restart as before C54 without "dEtaHdt "'
113 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
114 ENDIF
115
116 C- fields used only to speed-up solver(s) convergence:
117 C (no serious problems expected if missing, but get a non-perfect restart)
118 ELSEIF ( missFldList(j).EQ.'EtaN '
119 & .AND. rigidLid ) THEN
120 IF ( .NOT.pickupStrictlyMatch ) THEN
121 WRITE(msgBuf,'(4A)') '** WARNING ** CHECK_PICKUP: ',
122 & 'restart with 1rst guess == 0 for CG2D solver'
123 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
124 ENDIF
125 ELSEIF ( missFldList(j).EQ.'Phi_NHyd' ) THEN
126 IF ( .NOT.pickupStrictlyMatch ) THEN
127 WRITE(msgBuf,'(4A)') '** WARNING ** CHECK_PICKUP: ',
128 & 'restart with 1rst guess == 0 for CG3D solver'
129 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
130 ENDIF
131 ELSEIF ( missFldList(j).EQ.'dPhiNH ' ) THEN
132 dPhiNHstatus = 0
133 IF ( .NOT.pickupStrictlyMatch ) THEN
134 WRITE(msgBuf,'(4A)') '** WARNING ** CHECK_PICKUP: ',
135 & 'restart like hydrostatic free-surf (dPhiNH missing)'
136 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
137 ENDIF
138 ELSEIF ( missFldList(j).EQ.'AddMass '
139 & .AND. selectAddFluid.EQ.2 ) THEN
140 IF ( .NOT.pickupStrictlyMatch ) THEN
141 WRITE(msgBuf,'(4A)') '** WARNING ** CHECK_PICKUP: ',
142 & 'restart with AddMass == 0'
143 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
144 ENDIF
145 ELSEIF ( missFldList(j).EQ.'FricHeat' ) THEN
146 IF ( .NOT.pickupStrictlyMatch ) THEN
147 WRITE(msgBuf,'(4A)') '** WARNING ** CHECK_PICKUP: ',
148 & 'restart with Frictional Dissipation Heating == 0'
149 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
150 ENDIF
151
152 C- Absolutely needed fields:
153 ELSEIF ( missFldList(j).EQ.'Uvel ' .OR.
154 & missFldList(j).EQ.'Vvel ' .OR.
155 & missFldList(j).EQ.'Theta ' .OR.
156 & missFldList(j).EQ.'Salt ' .OR.
157 & missFldList(j).EQ.'EtaN ' ) THEN
158 stopFlag = .TRUE.
159 WRITE(msgBuf,'(4A)') 'CHECK_PICKUP: ',
160 & 'cannot restart without field "',missFldList(j),'"'
161 CALL PRINT_ERROR( msgBuf, myThid )
162
163 C- fields needed for restart (alternative not presently implemented)
164 ELSEIF ( missFldList(j).EQ.'PhiHyd ' .OR.
165 & missFldList(j).EQ.'AddMass ' .OR.
166 & missFldList(j).EQ.'dEtaHdt ' .OR.
167 & missFldList(j).EQ.'EtaH ' ) THEN
168 stopFlag = .TRUE.
169 WRITE(msgBuf,'(4A)') 'CHECK_PICKUP: ',
170 & 'cannot currently restart without field "',missFldList(j),'"'
171 CALL PRINT_ERROR( msgBuf, myThid )
172
173 C- fields with alternative in place to restart without:
174 C- (but get a non-perfect restart)
175 ELSEIF ( missFldList(j).EQ.'GuNm1 ' .OR.
176 & missFldList(j).EQ.'GvNm1 ' ) THEN
177 mom_StartAB = 0
178 ELSEIF ( missFldList(j).EQ.'GuNm2 ' .OR.
179 & missFldList(j).EQ.'GvNm2 ' ) THEN
180 mom_StartAB = MIN( mom_startAB, 1 )
181 ELSEIF ( missFldList(j).EQ.'GtNm1 ' .OR.
182 & missFldList(j).EQ.'TempNm1 ' ) THEN
183 tempStartAB = 0
184 ELSEIF ( missFldList(j).EQ.'GtNm2 ' .OR.
185 & missFldList(j).EQ.'TempNm2 ' ) THEN
186 tempStartAB = MIN( tempStartAB, 1 )
187 ELSEIF ( missFldList(j).EQ.'GsNm1 ' .OR.
188 & missFldList(j).EQ.'SaltNm1 ' ) THEN
189 saltStartAB = 0
190 ELSEIF ( missFldList(j).EQ.'GsNm2 ' .OR.
191 & missFldList(j).EQ.'SaltNm2 ' ) THEN
192 saltStartAB = MIN( saltStartAB, 1 )
193 ELSEIF ( missFldList(j).EQ.'GwNm1 ' ) THEN
194 nHydStartAB = 0
195 ELSEIF ( missFldList(j).EQ.'GwNm2 ' ) THEN
196 nHydStartAB = MIN( nHydStartAB, 1 )
197
198 ELSE
199 C- not recognized fields:
200 stopFlag = .TRUE.
201 WRITE(msgBuf,'(4A)') 'CHECK_PICKUP: ',
202 & 'missing field "',missFldList(j),'" not recognized'
203 CALL PRINT_ERROR( msgBuf, myThid )
204 ENDIF
205 ENDDO
206
207 IF ( stopFlag ) THEN
208 STOP 'ABNORMAL END: S/R CHECK_PICKUP'
209 ELSEIF ( pickupStrictlyMatch ) THEN
210 WRITE(msgBuf,'(4A)') 'CHECK_PICKUP: ',
211 & 'try with " pickupStrictlyMatch=.FALSE.,"',
212 & ' in file: "data", NameList: "PARM03"'
213 CALL PRINT_ERROR( msgBuf, myThid )
214 STOP 'ABNORMAL END: S/R CHECK_PICKUP'
215 ELSEIF ( warnCnts .GT. 0 ) THEN
216 WRITE(msgBuf,'(4A)') '** WARNING ** CHECK_PICKUP: ',
217 & 'Will get only an approximated Restart'
218 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
219 IF ( mom_StartAB.LT.nIter0 .OR.
220 & nHydStartAB.LT.nIter0 .OR.
221 & tempStartAB.LT.nIter0 .OR.
222 & saltStartAB.LT.nIter0 ) THEN
223 WRITE(msgBuf,'(2(A,I10))')
224 & ' Continue with mom_StartAB =', mom_StartAB,
225 & ' ; nHydStartAB =', nHydStartAB
226 CALL PRINT_MESSAGE(msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
227 WRITE(msgBuf,'(2(A,I10))')
228 & ' with tempStartAB =', tempStartAB,
229 & ' ; saltStartAB =', saltStartAB
230 CALL PRINT_MESSAGE(msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
231 ENDIF
232 ENDIF
233
234 ENDIF
235
236 _END_MASTER( myThid )
237 c ENDIF
238
239 RETURN
240 END

  ViewVC Help
Powered by ViewVC 1.1.22