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

Annotation of /MITgcm/model/src/read_pickup.F

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


Revision 1.1 - (hide annotations) (download)
Thu Aug 24 01:14:19 2006 UTC (17 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: mitgcm_mapl_00, checkpoint58u_post, checkpoint58w_post, checkpoint58r_post, checkpoint58x_post, checkpoint58t_post, checkpoint58q_post, checkpoint59e, checkpoint59d, checkpoint59g, checkpoint59f, checkpoint59a, checkpoint59c, checkpoint59b, checkpoint59i, checkpoint59h, checkpoint59, checkpoint58o_post, checkpoint58y_post, checkpoint58v_post, checkpoint58s_post, checkpoint58p_post
split checkpoint.F (between different S/R) ; clean up the code
 and use RW interface package (instead of low level MDSIO S/R)

1 jmc 1.1 C $Header: /u/gcmpack/MITgcm/model/src/checkpoint.F,v 1.67 2006/08/09 02:23:13 jmc Exp $
2     C $Name: $
3    
4     #include "PACKAGES_CONFIG.h"
5     #include "CPP_OPTIONS.h"
6    
7     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
8     CBOP
9     C !ROUTINE: READ_PICKUP
10     C !INTERFACE:
11     SUBROUTINE READ_PICKUP(
12     I myIter, myThid )
13    
14     C !DESCRIPTION:
15     C This is the controlling routine for IO to read restart (or
16     C "pickup" or "checkpoint" ) files. It calls routines from other
17     C packages (\textit{eg.} rw and mnc) to do the per-variable
18     C reads.
19    
20     C !USES:
21     IMPLICIT NONE
22     #include "SIZE.h"
23     #include "EEPARAMS.h"
24     #include "PARAMS.h"
25     #include "DYNVARS.h"
26     #include "SURFACE.h"
27     #ifdef ALLOW_NONHYDROSTATIC
28     #include "NH_VARS.h"
29     #endif
30     #ifdef ALLOW_MNC
31     #include "MNC_PARAMS.h"
32     #endif
33    
34     C !INPUT/OUTPUT PARAMETERS:
35     C myIter :: Iteration number
36     C myThid :: my Thread number Id.
37     INTEGER myIter
38     INTEGER myThid
39     CEOP
40    
41     C !LOCAL VARIABLES:
42     C fp :: pickup-file precision
43     C fn :: Temp. for building file name.
44     INTEGER fp
45     INTEGER i, nj
46     CHARACTER*(MAX_LEN_FNAM) fn
47     CHARACTER*(10) suff
48     #ifdef ALLOW_ADAMSBASHFORTH_3
49     INTEGER j
50     #endif
51    
52     C Suffix for pickup files
53     DO i = 1,MAX_LEN_FNAM
54     fn(i:i) = ' '
55     ENDDO
56     IF (pickupSuff .EQ. ' ') THEN
57     WRITE(suff,'(I10.10)') myIter
58     ELSE
59     WRITE(suff,'(A10)') pickupSuff
60     ENDIF
61     WRITE(fn,'(A,A10)') 'pickup.',suff
62    
63     C Going to really do some IO. Make everyone except master thread wait.
64     _BARRIER
65    
66     IF (pickup_read_mdsio) THEN
67    
68     fp = precFloat64
69    
70     C Read model fields
71     IF ( usePickupBeforeC54 ) THEN
72     #ifndef ALLOW_ADAMSBASHFORTH_3
73     CALL READ_REC_3D_RL( fn, fp, Nr, uVel, 1, myIter,myThid )
74     CALL READ_REC_3D_RL( fn, fp, Nr, gU, 2, myIter,myThid )
75     CALL READ_REC_3D_RL( fn, fp, Nr, guNm1, 3, myIter,myThid )
76     CALL READ_REC_3D_RL( fn, fp, Nr, vVel, 4, myIter,myThid )
77     CALL READ_REC_3D_RL( fn, fp, Nr, gV, 5, myIter,myThid )
78     CALL READ_REC_3D_RL( fn, fp, Nr, gvNm1, 6, myIter,myThid )
79     CALL READ_REC_3D_RL( fn, fp, Nr, theta, 7, myIter,myThid )
80     CALL READ_REC_3D_RL( fn, fp, Nr, gT, 8, myIter,myThid )
81     CALL READ_REC_3D_RL( fn, fp, Nr, gtNm1, 9, myIter,myThid )
82     CALL READ_REC_3D_RL( fn, fp, Nr, salt, 10, myIter,myThid )
83     CALL READ_REC_3D_RL( fn, fp, Nr, gS, 11, myIter,myThid )
84     CALL READ_REC_3D_RL( fn, fp, Nr, gsNm1,12, myIter,myThid )
85     #endif /* ALLOW_ADAMSBASHFORTH_3 */
86     CALL READ_REC_3D_RL( fn, fp, 1, etaN,
87     & 12*Nr+1, myIter,myThid )
88     #ifdef NONLIN_FRSURF
89     IF (nonlinFreeSurf .GE. 0) THEN
90     CALL READ_REC_3D_RL(fn, fp, 1, etaH,
91     & 12*Nr+2, myIter,myThid )
92     ENDIF
93     #endif
94     ELSE
95     #ifdef ALLOW_ADAMSBASHFORTH_3
96     j = 3
97     IF ( startFromPickupAB2 ) j = 2
98     nj = 0
99     CALL READ_REC_3D_RL( fn, fp, Nr, uVel, nj+1, myIter,myThid )
100     CALL READ_REC_3D_RL( fn, fp, Nr, guNm(1-Olx,1-Oly,1,1,1,1),
101     & nj+2, myIter,myThid )
102     CALL READ_REC_3D_RL( fn, fp, Nr, guNm(1-Olx,1-Oly,1,1,1,2),
103     & nj+j, myIter,myThid )
104     nj = j
105     CALL READ_REC_3D_RL( fn, fp, Nr, vVel, nj+1, myIter,myThid )
106     CALL READ_REC_3D_RL( fn, fp, Nr, gvNm(1-Olx,1-Oly,1,1,1,1),
107     & nj+2, myIter,myThid )
108     CALL READ_REC_3D_RL( fn, fp, Nr, gvNm(1-Olx,1-Oly,1,1,1,2),
109     & nj+j, myIter,myThid )
110     nj = 2*j
111     CALL READ_REC_3D_RL( fn, fp, Nr, theta,nj+1, myIter,myThid )
112     CALL READ_REC_3D_RL( fn, fp, Nr, gtNm(1-Olx,1-Oly,1,1,1,1),
113     & nj+2, myIter,myThid )
114     CALL READ_REC_3D_RL( fn, fp, Nr, gtNm(1-Olx,1-Oly,1,1,1,2),
115     & nj+j, myIter,myThid )
116     nj = 3*j
117     CALL READ_REC_3D_RL( fn, fp, Nr, salt, nj+1, myIter,myThid )
118     CALL READ_REC_3D_RL( fn, fp, Nr, gsNm(1-Olx,1-Oly,1,1,1,1),
119     & nj+2, myIter,myThid )
120     CALL READ_REC_3D_RL( fn, fp, Nr, gsNm(1-Olx,1-Oly,1,1,1,2),
121     & nj+j, myIter,myThid )
122     nj = 4*j
123     #else /* ALLOW_ADAMSBASHFORTH_3 */
124     CALL READ_REC_3D_RL( fn, fp, Nr, uVel, 1, myIter,myThid )
125     CALL READ_REC_3D_RL( fn, fp, Nr, guNm1, 2, myIter,myThid )
126     CALL READ_REC_3D_RL( fn, fp, Nr, vVel, 3, myIter,myThid )
127     CALL READ_REC_3D_RL( fn, fp, Nr, gvNm1, 4, myIter,myThid )
128     CALL READ_REC_3D_RL( fn, fp, Nr, theta, 5, myIter,myThid )
129     CALL READ_REC_3D_RL( fn, fp, Nr, gtNm1, 6, myIter,myThid )
130     CALL READ_REC_3D_RL( fn, fp, Nr, salt, 7, myIter,myThid )
131     CALL READ_REC_3D_RL( fn, fp, Nr, gsNm1, 8, myIter,myThid )
132     nj = 8
133     #endif /* ALLOW_ADAMSBASHFORTH_3 */
134     CALL READ_REC_3D_RL( fn,fp,1, etaN, nj*Nr+1, myIter,myThid )
135     #ifdef EXACT_CONSERV
136     IF (exactConserv) THEN
137     CALL READ_REC_3D_RL(fn,fp,1,dEtaHdt,nj*Nr+2,myIter,myThid )
138     ENDIF
139     IF (nonlinFreeSurf .GT. 0) THEN
140     CALL READ_REC_3D_RL(fn,fp,1, etaH, nj*Nr+3, myIter,myThid )
141     ENDIF
142     #endif
143     ENDIF
144    
145     IF ( useDynP_inEos_Zc ) THEN
146     WRITE(fn,'(A,A10)') 'pickup_ph.',suff
147     CALL READ_REC_3D_RL( fn, fp, Nr, totPhiHyd,1,myIter,myThid )
148     ENDIF
149     #ifdef ALLOW_NONHYDROSTATIC
150     IF ( use3Dsolver ) THEN
151     WRITE(fn,'(A,A10)') 'pickup_nh.',suff
152     CALL READ_REC_3D_RL( fn, fp, Nr, phi_nh, 1, myIter,myThid )
153     CALL READ_REC_3D_RL( fn, fp, Nr, gwNm1, 2, myIter,myThid )
154     ENDIF
155     #endif
156    
157     ENDIF
158    
159     #ifdef ALLOW_MNC
160     IF (useMNC .AND. pickup_read_mnc) THEN
161     WRITE(fn,'(A)') 'pickup'
162     CALL MNC_FILE_CLOSE_ALL_MATCHING(fn, myThid)
163     CALL MNC_CW_SET_UDIM(fn, 1, myThid)
164     CALL MNC_CW_SET_CITER(fn, 3, 3, myIter, -1, myThid)
165     CALL MNC_CW_RL_R('D',fn,0,0,'U',uVel, myThid)
166     CALL MNC_CW_RL_R('D',fn,0,0,'V',vVel, myThid)
167     CALL MNC_CW_RL_R('D',fn,0,0,'Temp',theta, myThid)
168     CALL MNC_CW_RL_R('D',fn,0,0,'S',salt, myThid)
169     CALL MNC_CW_RL_R('D',fn,0,0,'Eta',etaN, myThid)
170     #ifndef ALLOW_ADAMSBASHFORTH_3
171     CALL MNC_CW_RL_R('D',fn,0,0,'gUnm1',guNm1, myThid)
172     CALL MNC_CW_RL_R('D',fn,0,0,'gVnm1',gvNm1, myThid)
173     CALL MNC_CW_RL_R('D',fn,0,0,'gTnm1',gtNm1, myThid)
174     CALL MNC_CW_RL_R('D',fn,0,0,'gSnm1',gsNm1, myThid)
175     #endif /* ALLOW_ADAMSBASHFORTH_3 */
176     C#ifdef NONLIN_FRSURF
177     C IF ( nonlinFreeSurf.GE.0 .AND. usePickupBeforeC54 )
178     C & CALL MNC_CW_RL_R('D',fn,0,0,'EtaH', etaH, myThid)
179     C#endif
180     #ifdef EXACT_CONSERV
181     IF (exactConserv) THEN
182     CALL MNC_CW_RL_R('D',fn,0,0,'dEtaHdt',dEtaHdt,myThid)
183     ENDIF
184     IF (nonlinFreeSurf .GT. 0) THEN
185     CALL MNC_CW_RL_R('D',fn,0,0,'EtaH', etaH, myThid)
186     ENDIF
187     #endif
188     #ifdef ALLOW_NONHYDROSTATIC
189     IF (use3Dsolver) THEN
190     CALL MNC_CW_RL_R('D',fn,0,0,'phi_nh', phi_nh, myThid)
191     c CALL MNC_CW_RL_R('D',fn,0,0,'gW', gW, myThid)
192     CALL MNC_CW_RL_R('D',fn,0,0,'gWnm1', gwNm1, myThid)
193     ENDIF
194     #endif
195     IF ( useDynP_inEos_Zc ) THEN
196     CALL MNC_CW_RL_R('D',fn,0,0,'phiHyd',totPhiHyd,myThid)
197     ENDIF
198     ENDIF
199     #endif /* ALLOW_MNC */
200    
201     _BARRIER
202    
203     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
204    
205     C Fill in edge regions
206     CALL EXCH_UV_3D_RL( uVel, vVel, .TRUE., Nr, myThid )
207     CALL EXCH_3D_RL( theta, Nr, myThid )
208     CALL EXCH_3D_RL( salt, Nr, myThid )
209     #ifdef ALLOW_ADAMSBASHFORTH_3
210     CALL EXCH_UV_3D_RL( guNm(1-Olx,1-Oly,1,1,1,1),
211     & gvNm(1-Olx,1-Oly,1,1,1,1),.TRUE.,Nr,myThid )
212     CALL EXCH_3D_RL( gtNm(1-Olx,1-Oly,1,1,1,1), Nr, myThid )
213     CALL EXCH_3D_RL( gsNm(1-Olx,1-Oly,1,1,1,1), Nr, myThid )
214     CALL EXCH_UV_3D_RL( guNm(1-Olx,1-Oly,1,1,1,2),
215     & gvNm(1-Olx,1-Oly,1,1,1,2),.TRUE.,Nr,myThid )
216     CALL EXCH_3D_RL( gtNm(1-Olx,1-Oly,1,1,1,2), Nr, myThid )
217     CALL EXCH_3D_RL( gsNm(1-Olx,1-Oly,1,1,1,2), Nr, myThid )
218     #else /* ALLOW_ADAMSBASHFORTH_3 */
219     CALL EXCH_UV_3D_RL( guNm1, gvNm1, .TRUE., Nr, myThid )
220     CALL EXCH_3D_RL( gtNm1, Nr, myThid )
221     CALL EXCH_3D_RL( gsNm1, Nr, myThid )
222     #endif /* ALLOW_ADAMSBASHFORTH_3 */
223     CALL EXCH_XY_RL( etaN, myThid )
224     CALL EXCH_XY_RL( etaH, myThid )
225     #ifdef EXACT_CONSERV
226     CALL EXCH_XY_RL( detaHdt, myThid )
227     #endif
228    
229     IF ( useDynP_inEos_Zc )
230     & CALL EXCH_3D_RL( totPhiHyd, Nr, myThid )
231    
232     #ifdef ALLOW_NONHYDROSTATIC
233     IF ( use3Dsolver ) THEN
234     CALL EXCH_3D_RL( phi_nh, Nr, myThid )
235     CALL EXCH_3D_RL( gwNm1, Nr, myThid )
236     ENDIF
237     #endif
238    
239     RETURN
240     END

  ViewVC Help
Powered by ViewVC 1.1.22