/[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.3 - (hide annotations) (download)
Mon Jun 4 16:35:57 2012 UTC (13 years, 2 months ago) by torge
Branch: MAIN
Changes since 1.2: +34 -0 lines
adjusting pickup to work with ITD --- introducing seaice_itd_pickup.F (use pickup from single-category files to initialize multi-category variables assuming a log-normal distribution) --- remove some lines from seaice_init_varia.F and seaice_model.F now that pickup works

1 dimitri 1.1 C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_check_pickup.F,v 1.7 2012/03/05 15:21:44 gforget 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 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     IF ( fldName.EQ.'siTICE '
95     & .AND. tIceFlag.LE.1 ) THEN
96     IF ( .NOT.pickupStrictlyMatch ) THEN
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     ENDIF
101     ELSEIF ( fldName.EQ.'siTICES '
102     & .AND. tIceFlag.LE.2 ) THEN
103     IF (SEAICE_multDim.GT.1) THEN
104     IF ( .NOT.pickupStrictlyMatch ) THEN
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     C copy TICE -> TICES
109     DO bj=myByLo(myThid),myByHi(myThid)
110     DO bi=myBxLo(myThid),myBxHi(myThid)
111     DO k=1,MULTDIM
112     DO j=1-OLy,sNy+OLy
113     DO i=1-OLx,sNx+OLx
114     TICES(i,j,k,bi,bj) = TICE(i,j,bi,bj)
115     ENDDO
116     ENDDO
117     ENDDO
118     ENDDO
119     ENDDO
120     ENDIF
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     WRITE(msgBuf,'(4A)') '** WARNING ** SEAICE_CHECK_PICKUP:',
128     & ' restart without "',fldName,'" (set to zero)'
129     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
130     ENDIF
131     ELSEIF ( fldName.EQ.'siTICES ' .OR.
132     & fldName.EQ.'siTICE ' .OR.
133     & fldName.EQ.'siUICE ' .OR.
134     & fldName.EQ.'siVICE ' .OR.
135     & fldName.EQ.'siAREA ' .OR.
136     & fldName.EQ.'siHEFF ' .OR.
137     & fldName.EQ.'siHSNOW ' .OR.
138     & fldName.EQ.'siHSALT ' ) THEN
139     stopFlag = .TRUE.
140     WRITE(msgBuf,'(4A)') 'SEAICE_CHECK_PICKUP: ',
141     & 'cannot restart without field "',fldName,'"'
142     CALL PRINT_ERROR( msgBuf, myThid )
143 torge 1.3 #ifdef SEAICE_ITD
144     ELSEIF ( fldName.EQ.'siAREAn ' .OR.
145     & fldName.EQ.'siHEFFn ' .OR.
146     & fldName.EQ.'siHSNOWn' ) THEN
147     IF ( .NOT.pickupStrictlyMatch ) THEN
148     C generate ITD from mean ice thickness
149     useAvgFldsForITD = .TRUE.
150     ELSE
151     C if strict match is requested
152     C run will bestopped in case of missing ITD fields
153     stopFlag = .TRUE.
154     WRITE(msgBuf,'(4A)') 'SEAICE_CHECK_PICKUP: ',
155     & 'cannot restart without ITD field "',fldName,'"'
156     CALL PRINT_ERROR( msgBuf, myThid )
157     ENDIF
158     #endif
159 dimitri 1.1 #ifdef ALLOW_SITRACER
160     ELSEIF ( fldName(1:6).EQ.'siTrac' ) THEN
161     DO iTracer = 1, SItrMaxNum
162     WRITE(fldNum,'(I2.2)') iTracer
163     IF ( fldName(7:8).EQ.fldNum ) THEN
164     IF ( .NOT.pickupStrictlyMatch ) THEN
165     WRITE(msgBuf,'(4A)')
166     & '** WARNINGS ** SEAICE_CHECK_PICKUP: ',
167     & 'restart without "',fldName,'" (set to zero)'
168     CALL PRINT_MESSAGE(
169     & msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
170     ENDIF
171     ENDIF
172     ENDDO
173     #endif /* ALLOW_SITRACER */
174     ELSE
175     C- not recognized fields:
176     stopFlag = .TRUE.
177     WRITE(msgBuf,'(4A)') 'SEAICE_CHECK_PICKUP: ',
178     & 'missing field "',fldName,'" not recognized'
179     CALL PRINT_ERROR( msgBuf, myThid )
180     ENDIF
181     C- end nj loop
182     ENDDO
183    
184     IF ( stopFlag ) THEN
185     STOP 'ABNORMAL END: S/R SEAICE_CHECK_PICKUP'
186     ELSEIF ( pickupStrictlyMatch ) THEN
187     WRITE(msgBuf,'(4A)') 'SEAICE_CHECK_PICKUP: ',
188     & 'try with " pickupStrictlyMatch=.FALSE.,"',
189     & ' in file: "data", NameList: "PARM03"'
190     CALL PRINT_ERROR( msgBuf, myThid )
191     STOP 'ABNORMAL END: S/R SEAICE_CHECK_PICKUP'
192     ELSEIF ( warnCnts .GT. 0 ) THEN
193 torge 1.3 #ifdef SEAICE_ITD
194     IF ( useAvgFldsForITD ) THEN
195     WRITE(msgBuf,'(3A)') '** WARNING ** SEAICE_CHECK_PICKUP:',
196     & ' no ITD fields available, restart from single category',
197     & ' fields, i.e. AREA -> AREAITD, HEFF -> HEFFITD, etc.'
198     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
199     CALL SEAICE_ITD_PICKUP( myIter, myThid )
200     ENDIF
201     #endif
202 dimitri 1.1 WRITE(msgBuf,'(4A)') '** WARNING ** SEAICE_CHECK_PICKUP: ',
203     & 'Will get only an approximated Restart'
204     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
205     ENDIF
206    
207     ENDIF
208    
209     C-- end: seaice_pickup_read_mdsio
210     c ENDIF
211    
212     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
213    
214     RETURN
215     END

  ViewVC Help
Powered by ViewVC 1.1.22