/[MITgcm]/MITgcm/pkg/seaice/seaice_check_pickup.F
ViewVC logotype

Annotation of /MITgcm/pkg/seaice/seaice_check_pickup.F

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


Revision 1.4 - (hide annotations) (download)
Wed Apr 20 01:34:27 2011 UTC (13 years, 1 month ago) by jmc
Branch: MAIN
CVS Tags: checkpoint63a, checkpoint63b, checkpoint63c, checkpoint63, checkpoint62w, checkpoint62z, checkpoint62y, checkpoint62x
Changes since 1.3: +3 -1 lines
avoid un-used variables (placed within proper #ifdef)

1 jmc 1.4 C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_check_pickup.F,v 1.3 2011/03/07 03:12:38 jmc Exp $
2 jmc 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 heimbach 1.2 #include "SEAICE_SIZE.h"
28 jmc 1.1 #include "SEAICE_PARAMS.h"
29     #include "SEAICE.h"
30 heimbach 1.2 #include "SEAICE_TRACER.h"
31 jmc 1.1
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 jmc 1.3 INTEGER nj, ioUnit
57 jmc 1.1 INTEGER tIceFlag, warnCnts
58     LOGICAL stopFlag
59 jmc 1.3 c LOGICAL oldIceAge
60 jmc 1.1 CHARACTER*(MAX_LEN_MBUF) msgBuf
61 heimbach 1.2 CHARACTER*(8) fldName
62 jmc 1.4 #if (defined SEAICE_MULTICATEGORY) || (defined SEAICE_AGE )
63 jmc 1.3 INTEGER i,j,bi,bj
64 jmc 1.4 #endif
65 jmc 1.3 #ifdef SEAICE_MULTICATEGORY
66     INTEGER k
67     #endif
68     #ifdef SEAICE_AGE
69     INTEGER siTrac
70 heimbach 1.2 CHARACTER*(2) fldNum
71 jmc 1.3 #endif
72 jmc 1.1 CEOP
73    
74     c IF ( seaice_pickup_read_mdsio ) THEN
75    
76     IF ( nMissing.GE.1 ) THEN
77     ioUnit = errorMessageUnit
78     tIceFlag = 0
79 jmc 1.3 c oldIceAge = .TRUE.
80 jmc 1.1 DO nj=1,nMissing
81     IF ( missFldList(nj).EQ.'siTICES ' ) tIceFlag = tIceFlag + 2
82     IF ( missFldList(nj).EQ.'siTICE ' ) tIceFlag = tIceFlag + 1
83 jmc 1.3 c IF ( missFldList(nj).EQ.'siAGE ' ) oldIceAge = .FALSE.
84 jmc 1.1 ENDDO
85     stopFlag = .FALSE.
86     warnCnts = nMissing
87 heimbach 1.2
88 jmc 1.1 DO nj=1,nMissing
89 heimbach 1.2 fldName = missFldList(nj)
90     IF ( fldName.EQ.'siTICE '
91 jmc 1.1 & .AND. tIceFlag.LE.1 ) THEN
92     IF ( .NOT.pickupStrictlyMatch ) THEN
93 jmc 1.3 WRITE(msgBuf,'(4A)') '** WARNINGS ** SEAICE_CHECK_PICKUP:',
94     & ' restart with Tice from 1rst category'
95 jmc 1.1 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
96     ENDIF
97 heimbach 1.2 ELSEIF ( fldName.EQ.'siTICES '
98 jmc 1.1 & .AND. tIceFlag.LE.2 ) THEN
99     #ifdef SEAICE_MULTICATEGORY
100     IF ( .NOT.pickupStrictlyMatch ) THEN
101 jmc 1.3 WRITE(msgBuf,'(4A)') '** WARNINGS ** SEAICE_CHECK_PICKUP:',
102     & ' restart from single category Tice (copied to TICES)'
103 jmc 1.1 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
104     C copy TICE -> TICES
105     DO bj=myByLo(myThid),myByHi(myThid)
106     DO bi=myBxLo(myThid),myBxHi(myThid)
107     DO k=1,MULTDIM
108     DO j=1-OLy,sNy+OLy
109     DO i=1-OLx,sNx+OLx
110     TICES(i,j,k,bi,bj) = TICE(i,j,bi,bj)
111     ENDDO
112     ENDDO
113     ENDDO
114     ENDDO
115     ENDDO
116     ENDIF
117     #endif
118 heimbach 1.2 ELSEIF ( fldName(1:6).EQ.'siSigm' ) THEN
119 jmc 1.1 C- Note: try to restart without Sigma1,2,12 (as if SEAICEuseEVPpickup=F)
120     C An alternative would be to restart only if SEAICEuseEVPpickup=F:
121     C if SEAICEuseEVPpickup then stop / else warning / endif
122     IF ( .NOT.pickupStrictlyMatch ) THEN
123 jmc 1.3 WRITE(msgBuf,'(4A)') '** WARNINGS ** SEAICE_CHECK_PICKUP:',
124     & ' restart without "',fldName,'" (set to zero)'
125 jmc 1.1 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
126     ENDIF
127 heimbach 1.2 ELSEIF ( fldName.EQ.'siTICES ' .OR.
128     & fldName.EQ.'siTICE ' .OR.
129     & fldName.EQ.'siUICE ' .OR.
130     & fldName.EQ.'siVICE ' .OR.
131     & fldName.EQ.'siAREA ' .OR.
132     & fldName.EQ.'siHEFF ' .OR.
133     & fldName.EQ.'siHSNOW ' .OR.
134     & fldName.EQ.'siHSALT ' ) THEN
135 jmc 1.1 stopFlag = .TRUE.
136     WRITE(msgBuf,'(4A)') 'SEAICE_CHECK_PICKUP: ',
137 heimbach 1.2 & 'cannot restart without field "',fldName,'"'
138 jmc 1.1 CALL PRINT_ERROR( msgBuf, myThid )
139 heimbach 1.2 #ifdef SEAICE_AGE
140 jmc 1.3 ELSEIF ( fldName.EQ.'siAGEt01' ) THEN
141     IF ( .NOT.pickupStrictlyMatch ) THEN
142     WRITE(msgBuf,'(4A)') '** WARNINGS ** SEAICE_CHECK_PICKUP:',
143     & ' restart without "',fldName,'" (set to zero)'
144     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
145     ENDIF
146 heimbach 1.2 ELSEIF ( fldName(1:6).EQ.'siAGEt' ) THEN
147 jmc 1.3 siTrac = 0
148     DO i = 1, SEAICE_num
149     WRITE(fldNum,'(I2.2)') i
150     IF ( fldName(7:8).EQ.fldNum ) siTrac = i
151     ENDDO
152     IF ( siTrac.EQ.0 ) THEN
153     stopFlag = .TRUE.
154     WRITE(msgBuf,'(4A)') 'SEAICE_CHECK_PICKUP: ',
155     & 'missing field "',fldName,'" not recognized'
156     CALL PRINT_ERROR( msgBuf, myThid )
157     ELSEIF ( .NOT.pickupStrictlyMatch ) THEN
158     WRITE(msgBuf,'(2A,I3,A)')
159     & '** WARNINGS ** SEAICE_CHECK_PICKUP:',
160     & ' restart siTr=', siTrac,
161     & ' from IceAge (siTr=1 copied to IceAgeTr)'
162     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
163     C copy IceAgeTr(...,1) -> IceAgeTr(...,siTrac)
164 heimbach 1.2 DO bj=myByLo(myThid),myByHi(myThid)
165     DO bi=myBxLo(myThid),myBxHi(myThid)
166     DO j=1-OLy,sNy+OLy
167     DO i=1-OLx,sNx+OLx
168 jmc 1.3 IceAgeTr(i,j,bi,bj,siTrac) = IceAgeTr(i,j,bi,bj,1)
169 heimbach 1.2 ENDDO
170     ENDDO
171     ENDDO
172     ENDDO
173     ENDIF
174 jmc 1.3 #endif /* SEAICE_AGE */
175 jmc 1.1 ELSE
176     C- not recognized fields:
177     stopFlag = .TRUE.
178     WRITE(msgBuf,'(4A)') 'SEAICE_CHECK_PICKUP: ',
179 heimbach 1.2 & 'missing field "',fldName,'" not recognized'
180 jmc 1.1 CALL PRINT_ERROR( msgBuf, myThid )
181     ENDIF
182     C- end nj loop
183     ENDDO
184    
185     IF ( stopFlag ) THEN
186     STOP 'ABNORMAL END: S/R SEAICE_CHECK_PICKUP'
187     ELSEIF ( pickupStrictlyMatch ) THEN
188     WRITE(msgBuf,'(4A)') 'SEAICE_CHECK_PICKUP: ',
189     & 'try with " pickupStrictlyMatch=.FALSE.,"',
190     & ' in file: "data", NameList: "PARM03"'
191     CALL PRINT_ERROR( msgBuf, myThid )
192     STOP 'ABNORMAL END: S/R SEAICE_CHECK_PICKUP'
193     ELSEIF ( warnCnts .GT. 0 ) THEN
194     WRITE(msgBuf,'(4A)') '** WARNINGS ** SEAICE_CHECK_PICKUP: ',
195     & 'Will get only an approximated Restart'
196     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
197     ENDIF
198    
199     ENDIF
200    
201     C-- end: seaice_pickup_read_mdsio
202     c ENDIF
203    
204     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
205    
206     RETURN
207     END

  ViewVC Help
Powered by ViewVC 1.1.22