/[MITgcm]/MITgcm_contrib/torge/itd/code/seaice_check_pickup.F
ViewVC logotype

Contents of /MITgcm_contrib/torge/itd/code/seaice_check_pickup.F

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


Revision 1.6 - (show annotations) (download)
Wed Mar 27 18:59:52 2013 UTC (12 years, 4 months ago) by torge
Branch: MAIN
CVS Tags: HEAD
Changes since 1.5: +0 -0 lines
updating my MITgcm_contrib directory to include latest changes on main branch;
settings are to run a 1D test szenario with ITD code and 7 categories

1 C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_check_pickup.F,v 1.10 2012/11/10 22:19:03 jmc Exp $
2 C $Name: $
3
4 #include "SEAICE_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: SEAICE_CHECK_PICKUP
8 C !INTERFACE:
9 SUBROUTINE SEAICE_CHECK_PICKUP(
10 I missFldList,
11 I nMissing, nbFields,
12 I myIter, myThid )
13
14
15 C !DESCRIPTION:
16 C Check that fields that are needed to restart have been read.
17 C In case some fields are missing, stop if pickupStrictlyMatch=T
18 C or try, if possible, to restart without the missing field.
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 "SEAICE_SIZE.h"
28 #include "SEAICE_PARAMS.h"
29 #include "SEAICE.h"
30 #include "SEAICE_TRACER.h"
31
32 C !INPUT/OUTPUT PARAMETERS:
33 C missFldList :: List of missing fields (attempted to read but not found)
34 C nMissing :: Number of missing fields (attempted to read but not found)
35 C nbFields :: number of fields in pickup file (read from meta file)
36 C myIter :: Iteration number
37 C myThid :: my Thread Id. number
38 CHARACTER*(8) missFldList(*)
39 INTEGER nMissing
40 INTEGER nbFields
41 INTEGER myIter
42 INTEGER myThid
43 CEOP
44
45 C !FUNCTIONS
46 INTEGER ILNBLNK
47 EXTERNAL ILNBLNK
48
49 C !LOCAL VARIABLES:
50 C == Local variables ==
51 C nj :: record & field number
52 C ioUnit :: temp for writing msg unit
53 C msgBuf :: Informational/error message buffer
54 C i,j,k :: loop indices
55 C bi,bj :: tile indices
56 INTEGER nj, ioUnit
57 INTEGER tIceFlag, warnCnts
58 LOGICAL stopFlag
59 c LOGICAL oldIceAge
60 #ifdef SEAICE_ITD
61 C Flag indicating absence of ITD fields such as AREAITD
62 C in this case try to use average fields such as AREA
63 C (program will stop if fields liek AREA are missing)
64 LOGICAL useAvgFldsForITD
65 #endif
66 CHARACTER*(MAX_LEN_MBUF) msgBuf
67 CHARACTER*(8) fldName
68 INTEGER i,j,k,bi,bj
69 #ifdef ALLOW_SITRACER
70 INTEGER iTracer
71 CHARACTER*(2) fldNum
72 #endif
73 CEOP
74
75 c IF ( seaice_pickup_read_mdsio ) THEN
76
77 IF ( nMissing.GE.1 ) THEN
78 ioUnit = errorMessageUnit
79 tIceFlag = 0
80 c oldIceAge = .TRUE.
81 DO nj=1,nMissing
82 IF ( missFldList(nj).EQ.'siTICES ' ) tIceFlag = tIceFlag + 2
83 IF ( missFldList(nj).EQ.'siTICE ' ) tIceFlag = tIceFlag + 1
84 c IF ( missFldList(nj).EQ.'siAGE ' ) oldIceAge = .FALSE.
85 ENDDO
86 stopFlag = .FALSE.
87 #ifdef SEAICE_ITD
88 useAvgFldsForITD = .FALSE.
89 #endif
90 warnCnts = nMissing
91
92 DO nj=1,nMissing
93 fldName = missFldList(nj)
94 IF ( fldName.EQ.'siTICE ' .AND. tIceFlag.LE.1 ) THEN
95 IF ( .NOT.pickupStrictlyMatch ) THEN
96 _BEGIN_MASTER( myThid )
97 WRITE(msgBuf,'(4A)') '** WARNING ** SEAICE_CHECK_PICKUP:',
98 & ' restart with Tice from 1rst category'
99 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
100 _END_MASTER( myThid )
101 ENDIF
102 ELSEIF ( fldName.EQ.'siTICES ' .AND. tIceFlag.LE.2 ) THEN
103 IF ( .NOT.pickupStrictlyMatch .AND. SEAICE_multDim.GT.1 ) THEN
104 _BEGIN_MASTER( myThid )
105 WRITE(msgBuf,'(4A)') '** WARNING ** SEAICE_CHECK_PICKUP:',
106 & ' restart from single category Tice (copied to TICES)'
107 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
108 _END_MASTER( myThid )
109 C copy TICE -> TICES
110 DO bj=myByLo(myThid),myByHi(myThid)
111 DO bi=myBxLo(myThid),myBxHi(myThid)
112 DO k=1,MULTDIM
113 DO j=1-OLy,sNy+OLy
114 DO i=1-OLx,sNx+OLx
115 TICES(i,j,k,bi,bj) = TICE(i,j,bi,bj)
116 ENDDO
117 ENDDO
118 ENDDO
119 ENDDO
120 ENDDO
121 ENDIF
122 ELSEIF ( fldName(1:6).EQ.'siSigm' ) THEN
123 C- Note: try to restart without Sigma1,2,12 (as if SEAICEuseEVPpickup=F)
124 C An alternative would be to restart only if SEAICEuseEVPpickup=F:
125 C if SEAICEuseEVPpickup then stop / else warning / endif
126 IF ( .NOT.pickupStrictlyMatch ) THEN
127 _BEGIN_MASTER( myThid )
128 WRITE(msgBuf,'(4A)') '** WARNING ** SEAICE_CHECK_PICKUP:',
129 & ' restart without "',fldName,'" (set to zero)'
130 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
131 _END_MASTER( myThid )
132 ENDIF
133 ELSEIF ( fldName.EQ.'siTICES ' .OR.
134 & fldName.EQ.'siTICE ' .OR.
135 & fldName.EQ.'siUICE ' .OR.
136 & fldName.EQ.'siVICE ' .OR.
137 & fldName.EQ.'siAREA ' .OR.
138 & fldName.EQ.'siHEFF ' .OR.
139 & fldName.EQ.'siHSNOW ' .OR.
140 & fldName.EQ.'siHSALT ' ) THEN
141 stopFlag = .TRUE.
142 _BEGIN_MASTER( myThid )
143 WRITE(msgBuf,'(4A)') 'SEAICE_CHECK_PICKUP: ',
144 & 'cannot restart without field "',fldName,'"'
145 CALL PRINT_ERROR( msgBuf, myThid )
146 _END_MASTER( myThid )
147 #ifdef SEAICE_ITD
148 ELSEIF ( fldName.EQ.'siAREAn ' .OR.
149 & fldName.EQ.'siHEFFn ' .OR.
150 & fldName.EQ.'siHSNOWn' ) THEN
151 IF ( .NOT.pickupStrictlyMatch ) THEN
152 C generate ITD from mean ice thickness
153 useAvgFldsForITD = .TRUE.
154 ELSE
155 C if strict match is requested
156 C run will bestopped in case of missing ITD fields
157 stopFlag = .TRUE.
158 WRITE(msgBuf,'(4A)') 'SEAICE_CHECK_PICKUP: ',
159 & 'cannot restart without ITD field "',fldName,'"'
160 CALL PRINT_ERROR( msgBuf, myThid )
161 ENDIF
162 #endif
163 #ifdef ALLOW_SITRACER
164 ELSEIF ( fldName(1:6).EQ.'siTrac' ) THEN
165 IF ( .NOT.pickupStrictlyMatch ) THEN
166 _BEGIN_MASTER( myThid )
167 DO iTracer = 1, SItrMaxNum
168 WRITE(fldNum,'(I2.2)') iTracer
169 IF ( fldName(7:8).EQ.fldNum ) THEN
170 WRITE(msgBuf,'(4A)')
171 & '** WARNING ** SEAICE_CHECK_PICKUP: ',
172 & 'restart without "',fldName,'" (set to zero)'
173 CALL PRINT_MESSAGE(
174 & msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
175 ENDIF
176 ENDDO
177 _END_MASTER( myThid )
178 ENDIF
179 #endif /* ALLOW_SITRACER */
180 ELSE
181 C- not recognized fields:
182 stopFlag = .TRUE.
183 _BEGIN_MASTER( myThid )
184 WRITE(msgBuf,'(4A)') 'SEAICE_CHECK_PICKUP: ',
185 & 'missing field "',fldName,'" not recognized'
186 CALL PRINT_ERROR( msgBuf, myThid )
187 _END_MASTER( myThid )
188 ENDIF
189 C- end nj loop
190 ENDDO
191
192 IF ( stopFlag ) THEN
193 STOP 'ABNORMAL END: S/R SEAICE_CHECK_PICKUP'
194 ELSEIF ( pickupStrictlyMatch ) THEN
195 _BEGIN_MASTER( myThid )
196 WRITE(msgBuf,'(4A)') 'SEAICE_CHECK_PICKUP: ',
197 & 'try with " pickupStrictlyMatch=.FALSE.,"',
198 & ' in file: "data", NameList: "PARM03"'
199 CALL PRINT_ERROR( msgBuf, myThid )
200 _END_MASTER( myThid )
201 STOP 'ABNORMAL END: S/R SEAICE_CHECK_PICKUP'
202 ELSEIF ( warnCnts .GT. 0 ) THEN
203 _BEGIN_MASTER( myThid )
204 #ifdef SEAICE_ITD
205 IF ( useAvgFldsForITD ) THEN
206 WRITE(msgBuf,'(3A)') '** WARNING ** SEAICE_CHECK_PICKUP:',
207 & ' no ITD fields available, restart from single category',
208 & ' fields, i.e. AREA -> AREAITD, HEFF -> HEFFITD, etc.'
209 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
210 CALL SEAICE_ITD_PICKUP( myIter, myThid )
211 ENDIF
212 #endif
213 WRITE(msgBuf,'(4A)') '** WARNING ** SEAICE_CHECK_PICKUP: ',
214 & 'Will get only an approximated Restart'
215 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
216 _END_MASTER( myThid )
217 ENDIF
218
219 ENDIF
220
221 C-- end: seaice_pickup_read_mdsio
222 c ENDIF
223
224 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
225
226 RETURN
227 END

  ViewVC Help
Powered by ViewVC 1.1.22