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

Annotation 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.4 - (hide annotations) (download)
Mon Oct 22 19:46:30 2012 UTC (12 years, 9 months ago) by torge
Branch: MAIN
Changes since 1.3: +29 -17 lines
adopt changes on main branch

1 torge 1.4 C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_check_pickup.F,v 1.8 2012/03/27 22:28:57 jmc Exp $
2 dimitri 1.1 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 torge 1.3 #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 dimitri 1.1 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 torge 1.3 #ifdef SEAICE_ITD
88     useAvgFldsForITD = .FALSE.
89     #endif
90 dimitri 1.1 warnCnts = nMissing
91    
92     DO nj=1,nMissing
93     fldName = missFldList(nj)
94 torge 1.4 IF ( fldName.EQ.'siTICE ' .AND. tIceFlag.LE.1 ) THEN
95 dimitri 1.1 IF ( .NOT.pickupStrictlyMatch ) THEN
96 torge 1.4 _BEGIN_MASTER( myThid )
97 dimitri 1.1 WRITE(msgBuf,'(4A)') '** WARNING ** SEAICE_CHECK_PICKUP:',
98     & ' restart with Tice from 1rst category'
99     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
100 torge 1.4 _END_MASTER( myThid )
101 dimitri 1.1 ENDIF
102 torge 1.4 ELSEIF ( fldName.EQ.'siTICES ' .AND. tIceFlag.LE.2 ) THEN
103     IF ( .NOT.pickupStrictlyMatch .AND. SEAICE_multDim.GT.1 ) THEN
104     _BEGIN_MASTER( myThid )
105 dimitri 1.1 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 torge 1.4 _END_MASTER( myThid )
109 dimitri 1.1 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 torge 1.4 _BEGIN_MASTER( myThid )
128 dimitri 1.1 WRITE(msgBuf,'(4A)') '** WARNING ** SEAICE_CHECK_PICKUP:',
129     & ' restart without "',fldName,'" (set to zero)'
130     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
131 torge 1.4 _END_MASTER( myThid )
132 dimitri 1.1 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 torge 1.4 _BEGIN_MASTER( myThid )
143 dimitri 1.1 WRITE(msgBuf,'(4A)') 'SEAICE_CHECK_PICKUP: ',
144     & 'cannot restart without field "',fldName,'"'
145     CALL PRINT_ERROR( msgBuf, myThid )
146 torge 1.4 _END_MASTER( myThid )
147 torge 1.3 #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 dimitri 1.1 #ifdef ALLOW_SITRACER
164     ELSEIF ( fldName(1:6).EQ.'siTrac' ) THEN
165 torge 1.4 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 dimitri 1.1 & 'restart without "',fldName,'" (set to zero)'
173 torge 1.4 CALL PRINT_MESSAGE(
174 dimitri 1.1 & msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
175     ENDIF
176 torge 1.4 ENDDO
177     _END_MASTER( myThid )
178     ENDIF
179 dimitri 1.1 #endif /* ALLOW_SITRACER */
180     ELSE
181     C- not recognized fields:
182     stopFlag = .TRUE.
183 torge 1.4 _BEGIN_MASTER( myThid )
184 dimitri 1.1 WRITE(msgBuf,'(4A)') 'SEAICE_CHECK_PICKUP: ',
185     & 'missing field "',fldName,'" not recognized'
186     CALL PRINT_ERROR( msgBuf, myThid )
187 torge 1.4 _END_MASTER( myThid )
188 dimitri 1.1 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 torge 1.4 _BEGIN_MASTER( myThid )
196 dimitri 1.1 WRITE(msgBuf,'(4A)') 'SEAICE_CHECK_PICKUP: ',
197     & 'try with " pickupStrictlyMatch=.FALSE.,"',
198     & ' in file: "data", NameList: "PARM03"'
199     CALL PRINT_ERROR( msgBuf, myThid )
200 torge 1.4 _END_MASTER( myThid )
201 dimitri 1.1 STOP 'ABNORMAL END: S/R SEAICE_CHECK_PICKUP'
202     ELSEIF ( warnCnts .GT. 0 ) THEN
203 torge 1.4 _BEGIN_MASTER( myThid )
204 torge 1.3 #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 dimitri 1.1 WRITE(msgBuf,'(4A)') '** WARNING ** SEAICE_CHECK_PICKUP: ',
214     & 'Will get only an approximated Restart'
215     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
216 torge 1.4 _END_MASTER( myThid )
217 dimitri 1.1 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