/[MITgcm]/MITgcm/pkg/offline/offline_fields_load.F
ViewVC logotype

Contents of /MITgcm/pkg/offline/offline_fields_load.F

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


Revision 1.9 - (show annotations) (download)
Thu Oct 26 00:25:53 2006 UTC (17 years, 6 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint58u_post, checkpoint58w_post, checkpoint58r_post, checkpoint58x_post, checkpoint58t_post, checkpoint59e, checkpoint59d, checkpoint59f, checkpoint59a, checkpoint59c, checkpoint59b, checkpoint59, checkpoint58y_post, checkpoint58v_post, checkpoint58s_post
Changes since 1.8: +10 -18 lines
- all threads call I/0 S/R (needed for singleCPUIO to work in multi-threaded)

1 C $Header: /u/gcmpack/MITgcm/pkg/offline/offline_fields_load.F,v 1.8 2006/03/17 03:22:42 jmc Exp $
2 C $Name: $
3
4 #include "OFFLINE_OPTIONS.h"
5
6 C !ROUTINE: OFFLINE_FIELDS_LOAD
7 C !INTERFACE:
8 SUBROUTINE OFFLINE_FIELDS_LOAD( myTime, myIter, myThid )
9 C *==========================================================*
10 C | SUBROUTINE OFFLINE_FIELDS_LOAD
11 C | o Control reading of fields from external source.
12 C *==========================================================*
13 C | Offline External source field loading routine.
14 C | This routine is called every time we want to
15 C | load a a set of external fields. The routine decides
16 C | which fields to load and then reads them in.
17 C | This routine needs to be customised for particular
18 C | experiments.
19 C | Notes
20 C | =====
21 C | currently the file names need to be specific lengths
22 C | would like to make this more flexible QQ
23 C *==========================================================*
24
25 C !USES:
26 IMPLICIT NONE
27 C === Global variables ===
28 #include "SIZE.h"
29 #include "EEPARAMS.h"
30 #include "PARAMS.h"
31 #include "FFIELDS.h"
32 #include "GRID.h"
33 #include "DYNVARS.h"
34 #ifdef ALLOW_GMREDI
35 #include "GMREDI.h"
36 #include "GMREDI_TAVE.h"
37 #endif
38 #ifdef ALLOW_KPP
39 #include "KPP.h"
40 #endif
41 #ifdef ALLOW_OFFLINE
42 #include "OFFLINE.h"
43 #endif
44
45 C !INPUT/OUTPUT PARAMETERS:
46 C === Routine arguments ===
47 C myThid - Thread no. that called this routine.
48 C myTime - Simulation time
49 C myIter - Simulation timestep number
50 INTEGER myThid
51 _RL myTime
52 INTEGER myIter
53
54 #ifdef ALLOW_OFFLINE
55 C !LOCAL VARIABLES:
56 c fn :: Temp. for building file name.
57 CHARACTER*(MAX_LEN_FNAM) fn
58 CHARACTER*(MAX_LEN_FNAM) fn2
59 INTEGER prec
60
61 C === Local arrays ===
62 C uvel[01] :: Temp. for u
63 C vvel[01] :: Temp. for v
64 C wvel[01] :: Temp. for w
65 c conv[01] :: Temp for Convection Count
66 C [01] :: End points for interpolation
67 C Above use static heap storage to allow exchange.
68 C aWght, bWght :: Interpolation weights
69 COMMON /OFFLINEFFIELDS/
70 & uvel0, vvel0, wvel0, tave0, save0,
71 & conv0, gmkx0, gmky0, gmkz0, hflx0,
72 & sflx0, kdfs0, kght0,
73 & uvel1, vvel1, wvel1, tave1, save1,
74 & conv1, gmkx1, gmky1, gmkz1, hflx1,
75 & sflx1, kdfs1, kght1
76 _RS uvel0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
77 _RS uvel1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
78 _RS vvel0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
79 _RS vvel1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
80 _RS wvel0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
81 _RS wvel1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
82 _RS tave0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
83 _RS tave1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
84 _RS save0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
85 _RS save1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
86 _RS conv0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
87 _RS conv1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
88 _RS gmkx0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
89 _RS gmkx1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
90 _RS gmky0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
91 _RS gmky1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
92 _RS gmkz0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
93 _RS gmkz1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
94 _RS hflx0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
95 _RS hflx1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
96 _RS sflx0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
97 _RS sflx1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
98 _RS kdfs0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
99 _RS kdfs1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
100 _RS kght0 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
101 _RS kght1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
102 c _RS tmp (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
103 _RL tmp
104 _RL sfac (1-OLy:sNy+OLy,nSy)
105
106
107 INTEGER bi,bj,i,j,k,intime0,intime1
108 _RL aWght,bWght,rdt, KGM
109 INTEGER nForcingPeriods,Imytm,Ifprd,Ifcyc,Iftm
110 INTEGER I1, I2
111 INTEGER IFNBLNK, ILNBLNK
112 EXTERNAL IFNBLNK, ILNBLNK
113
114 prec = precFloat32
115 KGM=1.d0
116
117 IF ( periodicExternalForcing ) THEN
118
119 C First call requires that we initialize everything to zero for safety
120 IF ( myIter .EQ. nIter0 ) THEN
121 CALL LEF_ZERO3( uvel0 ,myThid )
122 CALL LEF_ZERO3( vvel0 ,myThid )
123 CALL LEF_ZERO3( wvel0 ,myThid )
124 CALL LEF_ZERO3( tave0 ,myThid )
125 CALL LEF_ZERO3( save0 ,myThid )
126 CALL LEF_ZERO3( conv0 ,myThid )
127 CALL LEF_ZERO3( gmkx0 ,myThid )
128 CALL LEF_ZERO3( gmky0 ,myThid )
129 CALL LEF_ZERO3( gmkz0 ,myThid )
130 CALL LEF_ZERO2( hflx0 ,myThid )
131 CALL LEF_ZERO2( sflx0 ,myThid )
132 CALL LEF_ZERO3( kdfs0 ,myThid )
133 CALL LEF_ZERO3( kght0 ,myThid )
134 CALL LEF_ZERO3( uvel1 ,myThid )
135 CALL LEF_ZERO3( vvel1 ,myThid )
136 CALL LEF_ZERO3( wvel1 ,myThid )
137 CALL LEF_ZERO3( tave1 ,myThid )
138 CALL LEF_ZERO3( save1 ,myThid )
139 CALL LEF_ZERO3( conv1 ,myThid )
140 CALL LEF_ZERO3( gmkx1 ,myThid )
141 CALL LEF_ZERO3( gmky1 ,myThid )
142 CALL LEF_ZERO3( gmkz1 ,myThid )
143 CALL LEF_ZERO2( hflx1 ,myThid )
144 CALL LEF_ZERO2( sflx1 ,myThid )
145 CALL LEF_ZERO3( kdfs1 ,myThid )
146 CALL LEF_ZERO3( kght1 ,myThid )
147 ENDIF
148
149 C Now calculate whether it is time to update the forcing arrays
150 rdt=1. _d 0 / deltaToffline
151 nForcingPeriods=int(offlineForcingCycle/offlineForcingPeriod+0.5)
152 Imytm=int(myTime*rdt-offlineOffsetIter+0.5)
153 Ifprd=int(offlineForcingPeriod*rdt+0.5)
154 Ifcyc=int(offlineForcingCycle*rdt+0.5)
155 Iftm=mod( Imytm+Ifcyc-Ifprd/2 ,Ifcyc)
156
157 intime0=int(Iftm/Ifprd)
158 intime1=mod(intime0+1,nForcingPeriods)
159 aWght=float( Iftm-Ifprd*intime0 )/float( Ifprd )
160 bWght=1.-aWght
161
162 intime0=intime0+1
163 INTIME1=intime1+1
164
165 IF (
166 & Iftm-Ifprd*(intime0-1) .EQ. 0
167 & .OR. myIter .EQ. nIter0
168 & ) THEN
169
170 _BARRIER
171
172 C If the above condition is met then we need to read in
173 C data for the period ahead and the period behind myTime.
174 _BEGIN_MASTER(myThid)
175 WRITE(standardMessageUnit,'(A,2I5,I10,1P1E20.12)')
176 & 'S/R OFFLINE_FIELDS_LOAD: Reading new data:',
177 & intime0, intime1, myIter, myTime
178 _END_MASTER(myThid)
179
180 #ifdef NOT_MODEL_FILES
181 c if reading own files setup reading here
182 #else
183 c
184 IF ( Uvelfile .NE. ' ' ) THEN
185 WRITE(fn2,'(A)') Uvelfile
186 I1=IFNBLNK(fn2)
187 I2=ILNBLNK(fn2)
188 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
189 & intime0*Ifprd +offlineIter0
190 c print*,'OFFLINE READ', fn
191 CALL MDSREADFIELD(fn,prec,'RL',Nr,uvel0, 1,myThid)
192 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
193 & intime1*Ifprd +offlineIter0
194 c print*,'OFFLINE READ', fn
195 CALL MDSREADFIELD(fn,prec,'RL',Nr,uvel1, 1,myThid)
196 ENDIF
197 c
198 IF ( Vvelfile .NE. ' ' ) THEN
199 WRITE(fn2,'(A)') Vvelfile
200 I1=IFNBLNK(fn2)
201 I2=ILNBLNK(fn2)
202 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
203 & intime0*Ifprd +offlineIter0
204 CALL MDSREADFIELD(fn,prec,'RL',Nr,vvel0, 1,myThid)
205 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
206 & intime1*Ifprd +offlineIter0
207 CALL MDSREADFIELD(fn,prec,'RL',Nr,vvel1, 1,myThid)
208 ENDIF
209 c
210 IF (Wvelfile .NE. ' ' ) THEN
211 WRITE(fn2,'(A)') Wvelfile
212 I1=IFNBLNK(fn2)
213 I2=ILNBLNK(fn2)
214 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
215 & intime0*Ifprd +offlineIter0
216 CALL MDSREADFIELD(fn,prec,'RL',Nr,wvel0, 1,myThid)
217 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
218 & intime1*Ifprd +offlineIter0
219 CALL MDSREADFIELD(fn,prec,'RL',Nr,wvel1, 1,myThid)
220 ENDIF
221
222 IF (Thetfile .NE. ' ' ) THEN
223 WRITE(fn2,'(A)') Thetfile
224 I1=IFNBLNK(fn2)
225 I2=ILNBLNK(fn2)
226 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
227 & intime0*Ifprd +offlineIter0
228 CALL MDSREADFIELD(fn,prec,'RL',Nr,tave0, 1,myThid)
229 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
230 & intime1*Ifprd +offlineIter0
231 CALL MDSREADFIELD(fn,prec,'RL',Nr,tave1, 1,myThid)
232 ENDIF
233
234 IF (Saltfile .NE. ' ' ) THEN
235 WRITE(fn2,'(A)') Saltfile
236 I1=IFNBLNK(fn2)
237 I2=ILNBLNK(fn2)
238 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
239 & intime0*Ifprd +offlineIter0
240 CALL MDSREADFIELD(fn,prec,'RL',Nr,save0, 1,myThid)
241 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
242 & intime1*Ifprd +offlineIter0
243 CALL MDSREADFIELD(fn,prec,'RL',Nr,save1, 1,myThid)
244 ENDIF
245
246 IF (ConvFile .NE. ' ' ) THEN
247 WRITE(fn2,'(A)') ConvFile
248 I1=IFNBLNK(fn2)
249 I2=ILNBLNK(fn2)
250 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
251 & intime0*Ifprd +offlineIter0
252 CALL MDSREADFIELD(fn,prec,'RL',Nr,conv0, 1,myThid)
253 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
254 & intime1*Ifprd +offlineIter0
255 CALL MDSREADFIELD(fn,prec,'RL',Nr,conv1, 1,myThid)
256 ENDIF
257 c
258
259 #ifdef ALLOW_GMREDI
260 IF (GMwxFile .NE. ' ' ) THEN
261 WRITE(fn2,'(A)') GMwxFile
262 I1=IFNBLNK(fn2)
263 I2=ILNBLNK(fn2)
264 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
265 & intime0*Ifprd +offlineIter0
266 CALL MDSREADFIELD(fn,prec,'RL',Nr,gmkx0, 1,myThid)
267 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
268 & intime1*Ifprd +offlineIter0
269 CALL MDSREADFIELD(fn,prec,'RL',Nr,gmkx1, 1,myThid)
270 ENDIF
271
272 IF (GMwyFile .NE. ' ') THEN
273 WRITE(fn2,'(A)') GMwyFile
274 I1=IFNBLNK(fn2)
275 I2=ILNBLNK(fn2)
276 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
277 & intime0*Ifprd +offlineIter0
278 CALL MDSREADFIELD(fn,prec,'RL',Nr,gmky0, 1,myThid)
279 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
280 & intime1*Ifprd +offlineIter0
281 CALL MDSREADFIELD(fn,prec,'RL',Nr,gmky1, 1,myThid)
282 ENDIF
283 c
284 IF (GMwzFile .NE. ' ') THEN
285 WRITE(fn2,'(A)') GMwzFile
286 I1=IFNBLNK(fn2)
287 I2=ILNBLNK(fn2)
288 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
289 & intime0*Ifprd +offlineIter0
290 CALL MDSREADFIELD(fn,prec,'RL',Nr,gmkz0, 1,myThid)
291 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
292 & intime1*Ifprd +offlineIter0
293 CALL MDSREADFIELD(fn,prec,'RL',Nr,gmkz1, 1,myThid)
294 ENDIF
295 #endif
296 c
297 IF (HFluxFile .NE. ' ') THEN
298 WRITE(fn2,'(A)') HFluxFile
299 I1=IFNBLNK(fn2)
300 I2=ILNBLNK(fn2)
301 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
302 & intime0*Ifprd +offlineIter0
303 CALL MDSREADFIELD(fn,prec,'RL',1,hflx0, 1,myThid)
304 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
305 & intime1*Ifprd +offlineIter0
306 CALL MDSREADFIELD(fn,prec,'RL',1,hflx1, 1,myThid)
307 ENDIF
308 c
309 IF (SFluxFile .NE. ' ') THEN
310 WRITE(fn2,'(A)') SFluxFile
311 I1=IFNBLNK(fn2)
312 I2=ILNBLNK(fn2)
313 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
314 & intime0*Ifprd +offlineIter0
315 CALL MDSREADFIELD(fn,prec,'RL',1,sflx0, 1,myThid)
316 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
317 & intime1*Ifprd +offlineIter0
318 CALL MDSREADFIELD(fn,prec,'RL',1,sflx1, 1,myThid)
319 ENDIF
320 c
321 #ifdef ALLOW_KPP
322 IF (KPP_DiffSFile .NE. ' ') THEN
323 WRITE(fn2,'(A)') KPP_DiffSFile
324 I1=IFNBLNK(fn2)
325 I2=ILNBLNK(fn2)
326 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
327 & intime0*Ifprd +offlineIter0
328 CALL MDSREADFIELD(fn,prec,'RL',Nr,kdfs0, 1,myThid)
329 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
330 & intime1*Ifprd +offlineIter0
331 CALL MDSREADFIELD(fn,prec,'RL',Nr,kdfs1, 1,myThid)
332 ENDIF
333 c
334 IF (KPP_ghatFile .NE. ' ') THEN
335 WRITE(fn2,'(A)') KPP_ghatFile
336 I1=IFNBLNK(fn2)
337 I2=ILNBLNK(fn2)
338 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
339 & intime0*Ifprd +offlineIter0
340 CALL MDSREADFIELD(fn,prec,'RL',Nr,kght0, 1,myThid)
341 WRITE(fn,'(A,A,I10.10)') fn2(I1:I2),'.',
342 & intime1*Ifprd +offlineIter0
343 CALL MDSREADFIELD(fn,prec,'RL',Nr,kght1, 1,myThid)
344 ENDIF
345 #endif
346 c
347 #endif /* else NOT_MODEL_FILES */
348
349 _EXCH_XYZ_R4(uvel0 , myThid )
350 _EXCH_XYZ_R4(uvel1 , myThid )
351 _EXCH_XYZ_R4(vvel0 , myThid )
352 _EXCH_XYZ_R4(vvel1 , myThid )
353 _EXCH_XYZ_R4(wvel0, myThid )
354 _EXCH_XYZ_R4(wvel1, myThid )
355 _EXCH_XYZ_R4(tave0 , myThid )
356 _EXCH_XYZ_R4(tave1 , myThid )
357 _EXCH_XYZ_R4(save0, myThid )
358 _EXCH_XYZ_R4(save1, myThid )
359 _EXCH_XYZ_R4(conv0, myThid )
360 _EXCH_XYZ_R4(conv1, myThid )
361 _EXCH_XYZ_R4(gmkx0, myThid )
362 _EXCH_XYZ_R4(gmkx1, myThid )
363 _EXCH_XYZ_R4(gmky0 , myThid )
364 _EXCH_XYZ_R4(gmky1 , myThid )
365 _EXCH_XYZ_R4(gmkz0, myThid )
366 _EXCH_XYZ_R4(gmkz1, myThid )
367 _EXCH_XY_R4(hflx0 , myThid )
368 _EXCH_XY_R4(hflx1 , myThid )
369 _EXCH_XY_R4(sflx0, myThid )
370 _EXCH_XY_R4(sflx1, myThid )
371 _EXCH_XYZ_R4(kdfs0 , myThid )
372 _EXCH_XYZ_R4(kdfs1 , myThid )
373 _EXCH_XYZ_R4(kght0, myThid )
374 _EXCH_XYZ_R4(kght1, myThid )
375
376 ENDIF
377
378 C-- Interpolate uvel, vvel, wvel
379 DO bj = myByLo(myThid), myByHi(myThid)
380 DO bi = myBxLo(myThid), myBxHi(myThid)
381 do k=1,Nr
382 DO j=1-Oly,sNy+Oly
383 DO i=1-Olx,sNx+Olx
384 Uvel(i,j,k,bi,bj) = bWght*uvel0(i,j,k,bi,bj)
385 & +aWght*uvel1(i,j,k,bi,bj)
386 Vvel(i,j,k,bi,bj) = bWght*vvel0(i,j,k,bi,bj)
387 & +aWght*vvel1(i,j,k,bi,bj)
388 Wvel(i,j,k,bi,bj) = bWght*wvel0(i,j,k,bi,bj)
389 & +aWght*wvel1(i,j,k,bi,bj)
390 theta(i,j,k,bi,bj) = bWght*tave0(i,j,k,bi,bj)
391 & +aWght*tave1(i,j,k,bi,bj)
392 salt(i,j,k,bi,bj) = bWght*save0(i,j,k,bi,bj)
393 & +aWght*save1(i,j,k,bi,bj)
394 ConvectCount(i,j,k,bi,bj) = bWght*conv0(i,j,k,bi,bj)
395 & +aWght*conv1(i,j,k,bi,bj)
396 IVDConvCount(i,j,k,bi,bj) = bWght*conv0(i,j,k,bi,bj)
397 & +aWght*conv1(i,j,k,bi,bj)
398 #ifdef ALLOW_GMREDI
399 Kwx(i,j,k,bi,bj) = bWght*gmkx0(i,j,k,bi,bj)
400 & +aWght*gmkx1(i,j,k,bi,bj)
401 Kwy(i,j,k,bi,bj) = bWght*gmky0(i,j,k,bi,bj)
402 & +aWght*gmky1(i,j,k,bi,bj)
403 Kwz(i,j,k,bi,bj) = bWght*gmkz0(i,j,k,bi,bj)
404 & +aWght*gmkz1(i,j,k,bi,bj)
405 #endif
406 surfaceForcingT(i,j,bi,bj) = bWght*hflx0(i,j,bi,bj)
407 & +aWght*hflx1(i,j,bi,bj)
408 surfaceForcingT(i,j,bi,bj) = surfaceForcingT(i,j,bi,bj)/
409 & (HeatCapacity_Cp*recip_horiVertRatio*rhoConst)
410 surfaceForcingS(i,j,bi,bj) = bWght*sflx0(i,j,bi,bj)
411 & +aWght*sflx1(i,j,bi,bj)
412 surfaceForcingS(i,j,bi,bj) = surfaceForcingS(i,j,bi,bj)/
413 & (recip_horiVertRatio*rhoConst)
414 #ifdef ALLOW_KPP
415 KPPdiffKzS(i,j,k,bi,bj) = bWght*kdfs0(i,j,k,bi,bj)
416 & +aWght*kdfs1(i,j,k,bi,bj)
417 KPPghat(i,j,k,bi,bj) = bWght*kght0(i,j,k,bi,bj)
418 & +aWght*kght1(i,j,k,bi,bj)
419 #endif
420 ENDDO
421 ENDDO
422 ENDDO
423 ENDDO
424 ENDDO
425
426 CC-- Diagnostics
427 C IF (myThid.EQ.1 .AND. myTime.LT.62208000.) THEN
428 C write(*,'(a,1p5e12.4,3i6,2e12.4)')
429 C & 'time,U,V,W,i0,i1,a,b = ',
430 C & myTime,
431 C & Uvel(1,sNy,1,1,1),Vvel(1,sNy,1,1,1),
432 C & Wvel(1,sNy,1,1,1),
433 C & intime0,intime1,aWght,bWght
434 C write(*,'(a,1p4e12.4,2e12.4)')
435 C & 'time,uvel0,uvel1,U = ',
436 C & myTime,
437 C & uvel0(1,sNy,1,1,1),uvel1(1,sNy,1,1,1),Uvel(1,sNy,1,1,1),
438 C & aWght,bWght
439 C ENDIF
440
441 C endif for periodicForcing
442 ENDIF
443
444 #endif /* ALLOW_OFFLINE */
445
446 RETURN
447 END
448
449 C !ROUTINE: LEF_ZERO3
450 C !INTERFACE:
451 SUBROUTINE LEF_ZERO3( arr ,myThid )
452 C !DESCRIPTION: \bv
453 C This routine simply sets the argument array to zero
454 C Used only by EXTERNAL_FIELDS_LOAD
455 C \ev
456 C !USES:
457 IMPLICIT NONE
458 C === Global variables ===
459 #include "SIZE.h"
460 #include "EEPARAMS.h"
461 C !INPUT/OUTPUT PARAMETERS:
462 C === Arguments ===
463 _RS arr (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
464 INTEGER myThid
465 C !LOCAL VARIABLES:
466 C === Local variables ===
467 INTEGER i,j,bi,bj,k
468 CEOP
469
470 DO bj = myByLo(myThid), myByHi(myThid)
471 DO bi = myBxLo(myThid), myBxHi(myThid)
472 do k=1,Nr
473 DO j=1-Oly,sNy+Oly
474 DO i=1-Olx,sNx+Olx
475 arr(i,j,k,bi,bj)=0.
476 ENDDO
477 ENDDO
478 enddo
479 ENDDO
480 ENDDO
481
482 RETURN
483 END
484
485 C !ROUTINE: LEF_ZERO2
486 C !INTERFACE:
487 SUBROUTINE LEF_ZERO2( arr ,myThid )
488 C !DESCRIPTION: \bv
489 C This routine simply sets the argument array to zero
490 C Used only by EXTERNAL_FIELDS_LOAD
491 C \ev
492 C !USES:
493 IMPLICIT NONE
494 C === Global variables ===
495 #include "SIZE.h"
496 #include "EEPARAMS.h"
497 C !INPUT/OUTPUT PARAMETERS:
498 C === Arguments ===
499 _RS arr (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
500 INTEGER myThid
501 C !LOCAL VARIABLES:
502 C === Local variables ===
503 INTEGER i,j,bi,bj
504 CEOP
505 DO bj = myByLo(myThid), myByHi(myThid)
506 DO bi = myBxLo(myThid), myBxHi(myThid)
507 DO j=1-Oly,sNy+Oly
508 DO i=1-Olx,sNx+Olx
509 arr(i,j,bi,bj)=0.
510 ENDDO
511 ENDDO
512 ENDDO
513 ENDDO
514
515 RETURN
516 END
517

  ViewVC Help
Powered by ViewVC 1.1.22