1 |
C $Header: /u/gcmpack/MITgcm/pkg/autodiff/active_file_control.F,v 1.11 2011/11/05 19:20:42 heimbach Exp $ |
2 |
C $Name: $ |
3 |
|
4 |
#include "AUTODIFF_OPTIONS.h" |
5 |
|
6 |
C ================================================================== |
7 |
C active_file_control_slice.F: Routines to handle the I/O of active |
8 |
C variables for the adjoint calculations. |
9 |
C All files are diRect access files. |
10 |
C Routines: |
11 |
C o ACTIVE_READ_XZ_RL : Basic routine to handle active XZ read operations |
12 |
C o ACTIVE_READ_XZ_RS : Basic routine to handle active XZ read operations |
13 |
C o ACTIVE_READ_YZ_RL : Basic routine to handle active YZ read operations |
14 |
C o ACTIVE_READ_YZ_RS : Basic routine to handle active YZ read operations |
15 |
|
16 |
C o ACTIVE_WRITE_XZ_RL : Basic routine to handle active XZ write operations |
17 |
C o ACTIVE_WRITE_XZ_RS : Basic routine to handle active XZ write operations |
18 |
C o ACTIVE_WRITE_YZ_RL : Basic routine to handle active YZ write operations |
19 |
C o ACTIVE_WRITE_YZ_RS : Basic routine to handle active YZ write operations |
20 |
|
21 |
C ================================================================== |
22 |
|
23 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
24 |
CBOP |
25 |
C !ROUTINE: ACTIVE_READ_XZ_RL |
26 |
C !INTERFACE: |
27 |
SUBROUTINE ACTIVE_READ_XZ_RL( |
28 |
I activeVar_file, |
29 |
O active_var, |
30 |
I globalFile, |
31 |
I useCurrentDir, |
32 |
I lAdInit, |
33 |
I iRec, |
34 |
I myNr, |
35 |
I theSimulationMode, |
36 |
I myOptimIter, |
37 |
I myThid ) |
38 |
C !DESCRIPTION: \bv |
39 |
C ================================================================== |
40 |
C SUBROUTINE ACTIVE_READ_XZ_RL |
41 |
C ================================================================== |
42 |
C o Read an active XZ _RL variable from file. |
43 |
C The variable *globalfile* can be used as a switch, which allows |
44 |
C to read from a global file. The adjoint files are, however, always |
45 |
C treated as tiled files. |
46 |
C started: heimbach@mit.edu 05-Mar-2001 |
47 |
C ================================================================== |
48 |
C SUBROUTINE ACTIVE_READ_XZ_RL |
49 |
C ================================================================== |
50 |
C \ev |
51 |
|
52 |
C !USES: |
53 |
IMPLICIT NONE |
54 |
|
55 |
C == global variables == |
56 |
#include "EEPARAMS.h" |
57 |
#include "SIZE.h" |
58 |
#include "PARAMS.h" |
59 |
#include "ctrl.h" |
60 |
|
61 |
C !INPUT/OUTPUT PARAMETERS: |
62 |
C activeVar_file :: filename |
63 |
C active_var :: array |
64 |
C globalFile :: |
65 |
C useCurrentDir :: always read from the current directory |
66 |
C (even if "mdsioLocalDir" is set) |
67 |
C lAdInit :: initialisation of corresponding adjoint variable |
68 |
C and write to active file |
69 |
C iRec :: record number |
70 |
C myNr :: vertical array dimension |
71 |
C theSimulationMode :: forward mode or reverse mode simulation |
72 |
C myOptimIter :: number of optimization iteration (default: 0) |
73 |
C myThid :: thread number for this instance |
74 |
CHARACTER*(*) activeVar_file |
75 |
INTEGER myNr |
76 |
_RL active_var(1-OLx:sNx+OLx,myNr,nSx,nSy) |
77 |
LOGICAL globalFile |
78 |
LOGICAL useCurrentDir |
79 |
LOGICAL lAdInit |
80 |
INTEGER iRec |
81 |
INTEGER theSimulationMode |
82 |
INTEGER myOptimIter |
83 |
INTEGER myThid |
84 |
|
85 |
C !FUNCTIONS: |
86 |
INTEGER ILNBLNK |
87 |
EXTERNAL ILNBLNK |
88 |
|
89 |
C !LOCAL VARIABLES: |
90 |
CHARACTER*(2) adpref |
91 |
CHARACTER*(80) adfname |
92 |
INTEGER bi,bj |
93 |
INTEGER i,k |
94 |
INTEGER prec |
95 |
INTEGER il |
96 |
LOGICAL w_globFile |
97 |
_RS dummyRS(1) |
98 |
_RL active_data_t(1-OLx:sNx+OLx,myNr,nSx,nSy) |
99 |
CEOP |
100 |
|
101 |
C force 64-bit io |
102 |
prec = ctrlprec |
103 |
|
104 |
adpref = 'ad' |
105 |
il = ILNBLNK( activeVar_file ) |
106 |
WRITE(adfname(1:80),'(80a)') ' ' |
107 |
WRITE(adfname(1:il+2),'(2A)') adpref, activeVar_file(1:il) |
108 |
|
109 |
C >>>>>>>>>>>>>>>>>>> FORWARD RUN <<<<<<<<<<<<<<<<<<< |
110 |
IF (theSimulationMode .EQ. FORWARD_SIMULATION) THEN |
111 |
|
112 |
C Read the active variable from file. |
113 |
CALL MDS_READ_SEC_XZ( |
114 |
I activeVar_file, prec, useCurrentDir, |
115 |
I 'RL', myNr, |
116 |
O active_var, dummyRS, |
117 |
I iRec, myThid ) |
118 |
|
119 |
IF ( lAdInit ) THEN |
120 |
C Initialise the corresponding adjoint variable on the |
121 |
C adjoint variable file. These files are tiled. |
122 |
|
123 |
DO bj = myByLo(myThid), myByHi(myThid) |
124 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
125 |
DO k = 1, myNr |
126 |
DO i=1,sNx |
127 |
active_data_t(i,k,bi,bj) = 0. _d 0 |
128 |
ENDDO |
129 |
ENDDO |
130 |
ENDDO |
131 |
ENDDO |
132 |
|
133 |
CALL MDS_WRITE_SEC_XZ( |
134 |
I adfname, prec, globalFile, useCurrentDir, |
135 |
I 'RL', myNr, |
136 |
I active_data_t, dummyRS, |
137 |
I iRec, myOptimIter, myThid ) |
138 |
|
139 |
ENDIF |
140 |
|
141 |
ENDIF |
142 |
|
143 |
C >>>>>>>>>>>>>>>>>>> ADJOINT RUN <<<<<<<<<<<<<<<<<<< |
144 |
IF (theSimulationMode .EQ. REVERSE_SIMULATION) THEN |
145 |
|
146 |
CALL MDS_READ_SEC_XZ( |
147 |
I activeVar_file, prec, useCurrentDir, |
148 |
I 'RL', myNr, |
149 |
O active_data_t, dummyRS, |
150 |
I iRec, myThid ) |
151 |
|
152 |
C Add active_var from appropriate location to data. |
153 |
DO bj = myByLo(myThid), myByHi(myThid) |
154 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
155 |
DO k = 1, myNr |
156 |
DO i=1,sNx |
157 |
active_data_t(i,k,bi,bj) = active_data_t(i,k,bi,bj) |
158 |
& + active_var(i,k,bi,bj) |
159 |
ENDDO |
160 |
ENDDO |
161 |
ENDDO |
162 |
ENDDO |
163 |
|
164 |
C Store the result on disk. |
165 |
w_globFile = .FALSE. |
166 |
CALL MDS_WRITE_SEC_XZ( |
167 |
I activeVar_file, prec, w_globFile, useCurrentDir, |
168 |
I 'RL', myNr, |
169 |
I active_data_t, dummyRS, |
170 |
I iRec, myOptimIter, myThid ) |
171 |
|
172 |
C Set active_var to zero. |
173 |
DO bj = myByLo(myThid), myByHi(myThid) |
174 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
175 |
DO k = 1, myNr |
176 |
DO i=1,sNx |
177 |
active_var(i,k,bi,bj) = 0 _d 0 |
178 |
ENDDO |
179 |
ENDDO |
180 |
ENDDO |
181 |
ENDDO |
182 |
|
183 |
ENDIF |
184 |
|
185 |
C >>>>>>>>>>>>>>>>>>> TANGENT RUN <<<<<<<<<<<<<<<<<<< |
186 |
IF (theSimulationMode .EQ. TANGENT_SIMULATION) THEN |
187 |
C Read the active variable from file. |
188 |
CALL MDS_READ_SEC_XZ( |
189 |
I activeVar_file, prec, useCurrentDir, |
190 |
I 'RL', myNr, |
191 |
O active_var, dummyRS, |
192 |
I iRec, myThid ) |
193 |
ENDIF |
194 |
|
195 |
RETURN |
196 |
END |
197 |
|
198 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
199 |
CBOP |
200 |
C !ROUTINE: ACTIVE_READ_XZ_RS |
201 |
C !INTERFACE: |
202 |
SUBROUTINE ACTIVE_READ_XZ_RS( |
203 |
I activeVar_file, |
204 |
O active_var, |
205 |
I globalFile, |
206 |
I useCurrentDir, |
207 |
I lAdInit, |
208 |
I iRec, |
209 |
I myNr, |
210 |
I theSimulationMode, |
211 |
I myOptimIter, |
212 |
I myThid ) |
213 |
|
214 |
C !DESCRIPTION: \bv |
215 |
C ================================================================== |
216 |
C SUBROUTINE ACTIVE_READ_XZ_RS |
217 |
C ================================================================== |
218 |
C o Read an active XZ _RS variable from file. |
219 |
C The variable *globalfile* can be used as a switch, which allows |
220 |
C to read from a global file. The adjoint files are, however, always |
221 |
C treated as tiled files. |
222 |
C started: heimbach@mit.edu 05-Mar-2001 |
223 |
C ================================================================== |
224 |
C SUBROUTINE ACTIVE_READ_XZ_RS |
225 |
C ================================================================== |
226 |
C \ev |
227 |
|
228 |
C !USES: |
229 |
IMPLICIT NONE |
230 |
|
231 |
C == global variables == |
232 |
#include "EEPARAMS.h" |
233 |
#include "SIZE.h" |
234 |
#include "PARAMS.h" |
235 |
#include "ctrl.h" |
236 |
|
237 |
C !INPUT/OUTPUT PARAMETERS: |
238 |
C activeVar_file :: filename |
239 |
C active_var :: array |
240 |
C globalFile :: |
241 |
C useCurrentDir :: always read from the current directory |
242 |
C (even if "mdsioLocalDir" is set) |
243 |
C lAdInit :: initialisation of corresponding adjoint variable |
244 |
C and write to active file |
245 |
C iRec :: record number |
246 |
C myNr :: vertical array dimension |
247 |
C theSimulationMode :: forward mode or reverse mode simulation |
248 |
C myOptimIter :: number of optimization iteration (default: 0) |
249 |
C myThid :: thread number for this instance |
250 |
CHARACTER*(*) activeVar_file |
251 |
INTEGER myNr |
252 |
_RS active_var(1-OLx:sNx+OLx,myNr,nSx,nSy) |
253 |
LOGICAL globalFile |
254 |
LOGICAL useCurrentDir |
255 |
LOGICAL lAdInit |
256 |
INTEGER iRec |
257 |
INTEGER theSimulationMode |
258 |
INTEGER myOptimIter |
259 |
INTEGER myThid |
260 |
|
261 |
C !FUNCTIONS: |
262 |
INTEGER ILNBLNK |
263 |
EXTERNAL ILNBLNK |
264 |
|
265 |
C !LOCAL VARIABLES: |
266 |
CHARACTER*(2) adpref |
267 |
CHARACTER*(80) adfname |
268 |
INTEGER bi,bj |
269 |
INTEGER i,k |
270 |
INTEGER prec |
271 |
INTEGER il |
272 |
LOGICAL w_globFile |
273 |
_RS active_data_t(1-OLx:sNx+OLx,myNr,nSx,nSy) |
274 |
_RL dummyRL(1) |
275 |
CEOP |
276 |
|
277 |
C force 64-bit io |
278 |
prec = ctrlprec |
279 |
|
280 |
adpref = 'ad' |
281 |
il = ILNBLNK( activeVar_file ) |
282 |
WRITE(adfname(1:80),'(80a)') ' ' |
283 |
WRITE(adfname(1:il+2),'(2A)') adpref, activeVar_file(1:il) |
284 |
|
285 |
C >>>>>>>>>>>>>>>>>>> FORWARD RUN <<<<<<<<<<<<<<<<<<< |
286 |
IF (theSimulationMode .EQ. FORWARD_SIMULATION) THEN |
287 |
|
288 |
C Read the active variable from file. |
289 |
CALL MDS_READ_SEC_XZ( |
290 |
I activeVar_file, prec, useCurrentDir, |
291 |
I 'RS', myNr, |
292 |
O dummyRL, active_var, |
293 |
I iRec, myThid ) |
294 |
|
295 |
IF ( lAdInit ) THEN |
296 |
C Initialise the corresponding adjoint variable on the |
297 |
C adjoint variable file. These files are tiled. |
298 |
|
299 |
DO bj = myByLo(myThid), myByHi(myThid) |
300 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
301 |
DO k = 1, myNr |
302 |
DO i=1,sNx |
303 |
active_data_t(i,k,bi,bj) = 0. _d 0 |
304 |
ENDDO |
305 |
ENDDO |
306 |
ENDDO |
307 |
ENDDO |
308 |
|
309 |
CALL MDS_WRITE_SEC_XZ( |
310 |
I adfname, prec, globalFile, useCurrentDir, |
311 |
I 'RS', myNr, |
312 |
I dummyRL, active_data_t, |
313 |
I iRec, myOptimIter, myThid ) |
314 |
|
315 |
ENDIF |
316 |
|
317 |
ENDIF |
318 |
|
319 |
C >>>>>>>>>>>>>>>>>>> ADJOINT RUN <<<<<<<<<<<<<<<<<<< |
320 |
IF (theSimulationMode .EQ. REVERSE_SIMULATION) THEN |
321 |
|
322 |
CALL MDS_READ_SEC_XZ( |
323 |
I activeVar_file, prec, useCurrentDir, |
324 |
I 'RS', myNr, |
325 |
O dummyRL, active_data_t, |
326 |
I iRec, myThid ) |
327 |
|
328 |
C Add active_var from appropriate location to data. |
329 |
DO bj = myByLo(myThid), myByHi(myThid) |
330 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
331 |
DO k = 1, myNr |
332 |
DO i=1,sNx |
333 |
active_data_t(i,k,bi,bj) = active_data_t(i,k,bi,bj) |
334 |
& + active_var(i,k,bi,bj) |
335 |
ENDDO |
336 |
ENDDO |
337 |
ENDDO |
338 |
ENDDO |
339 |
|
340 |
C Store the result on disk. |
341 |
w_globFile = .FALSE. |
342 |
CALL MDS_WRITE_SEC_XZ( |
343 |
I activeVar_file, prec, w_globFile, useCurrentDir, |
344 |
I 'RS', myNr, |
345 |
I dummyRL, active_data_t, |
346 |
I iRec, myOptimIter, myThid ) |
347 |
|
348 |
C Set active_var to zero. |
349 |
DO bj = myByLo(myThid), myByHi(myThid) |
350 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
351 |
DO k = 1, myNr |
352 |
DO i=1,sNx |
353 |
active_var(i,k,bi,bj) = 0 _d 0 |
354 |
ENDDO |
355 |
ENDDO |
356 |
ENDDO |
357 |
ENDDO |
358 |
|
359 |
ENDIF |
360 |
|
361 |
C >>>>>>>>>>>>>>>>>>> TANGENT RUN <<<<<<<<<<<<<<<<<<< |
362 |
IF (theSimulationMode .EQ. TANGENT_SIMULATION) THEN |
363 |
C Read the active variable from file. |
364 |
CALL MDS_READ_SEC_XZ( |
365 |
I activeVar_file, prec, useCurrentDir, |
366 |
I 'RS', myNr, |
367 |
O dummyRL, active_var, |
368 |
I iRec, myThid ) |
369 |
ENDIF |
370 |
|
371 |
RETURN |
372 |
END |
373 |
|
374 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
375 |
CBOP |
376 |
C !ROUTINE: ACTIVE_READ_YZ_RL |
377 |
C !INTERFACE: |
378 |
SUBROUTINE ACTIVE_READ_YZ_RL( |
379 |
I activeVar_file, |
380 |
O active_var, |
381 |
I globalFile, |
382 |
I useCurrentDir, |
383 |
I lAdInit, |
384 |
I iRec, |
385 |
I myNr, |
386 |
I theSimulationMode, |
387 |
I myOptimIter, |
388 |
I myThid ) |
389 |
C !DESCRIPTION: \bv |
390 |
C ================================================================== |
391 |
C SUBROUTINE ACTIVE_READ_YZ_RL |
392 |
C ================================================================== |
393 |
C o Read an active YZ _RL variable from file. |
394 |
C The variable *globalfile* can be used as a switch, which allows |
395 |
C to read from a global file. The adjoint files are, however, always |
396 |
C treated as tiled files. |
397 |
C started: heimbach@mit.edu 05-Mar-2001 |
398 |
C ================================================================== |
399 |
C SUBROUTINE ACTIVE_READ_YZ_RL |
400 |
C ================================================================== |
401 |
C \ev |
402 |
|
403 |
C !USES: |
404 |
IMPLICIT NONE |
405 |
|
406 |
C == global variables == |
407 |
#include "EEPARAMS.h" |
408 |
#include "SIZE.h" |
409 |
#include "PARAMS.h" |
410 |
#include "ctrl.h" |
411 |
|
412 |
C !INPUT/OUTPUT PARAMETERS: |
413 |
C activeVar_file :: filename |
414 |
C active_var :: array |
415 |
C globalFile :: |
416 |
C useCurrentDir :: always read from the current directory |
417 |
C (even if "mdsioLocalDir" is set) |
418 |
C lAdInit :: initialisation of corresponding adjoint variable |
419 |
C and write to active file |
420 |
C iRec :: record number |
421 |
C myNr :: vertical array dimension |
422 |
C theSimulationMode :: forward mode or reverse mode simulation |
423 |
C myOptimIter :: number of optimization iteration (default: 0) |
424 |
C myThid :: thread number for this instance |
425 |
CHARACTER*(*) activeVar_file |
426 |
INTEGER myNr |
427 |
_RL active_var(1-OLy:sNy+OLy,myNr,nSx,nSy) |
428 |
LOGICAL globalFile |
429 |
LOGICAL useCurrentDir |
430 |
LOGICAL lAdInit |
431 |
INTEGER iRec |
432 |
INTEGER theSimulationMode |
433 |
INTEGER myOptimIter |
434 |
INTEGER myThid |
435 |
|
436 |
C !FUNCTIONS: |
437 |
INTEGER ILNBLNK |
438 |
EXTERNAL ILNBLNK |
439 |
|
440 |
C !LOCAL VARIABLES: |
441 |
CHARACTER*(2) adpref |
442 |
CHARACTER*(80) adfname |
443 |
INTEGER bi,bj |
444 |
INTEGER j,k |
445 |
INTEGER prec |
446 |
INTEGER il |
447 |
LOGICAL w_globFile |
448 |
_RS dummyRS(1) |
449 |
_RL active_data_t(1-OLy:sNy+OLy,myNr,nSx,nSy) |
450 |
CEOP |
451 |
|
452 |
C force 64-bit io |
453 |
prec = ctrlprec |
454 |
|
455 |
adpref = 'ad' |
456 |
il = ILNBLNK( activeVar_file ) |
457 |
WRITE(adfname(1:80),'(80a)') ' ' |
458 |
WRITE(adfname(1:il+2),'(2A)') adpref, activeVar_file(1:il) |
459 |
|
460 |
C >>>>>>>>>>>>>>>>>>> FORWARD RUN <<<<<<<<<<<<<<<<<<< |
461 |
IF (theSimulationMode .EQ. FORWARD_SIMULATION) THEN |
462 |
|
463 |
C Read the active variable from file. |
464 |
CALL MDS_READ_SEC_YZ( |
465 |
I activeVar_file, prec, useCurrentDir, |
466 |
I 'RL', myNr, |
467 |
O active_var, dummyRS, |
468 |
I iRec, myThid ) |
469 |
|
470 |
IF ( lAdInit ) THEN |
471 |
C Initialise the corresponding adjoint variable on the |
472 |
C adjoint variable file. These files are tiled. |
473 |
|
474 |
DO bj = myByLo(myThid), myByHi(myThid) |
475 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
476 |
DO k = 1, myNr |
477 |
DO j=1,sNy |
478 |
active_data_t(j,k,bi,bj) = 0. _d 0 |
479 |
ENDDO |
480 |
ENDDO |
481 |
ENDDO |
482 |
ENDDO |
483 |
|
484 |
CALL MDS_WRITE_SEC_YZ( |
485 |
I adfname, prec, globalFile, useCurrentDir, |
486 |
I 'RL', myNr, |
487 |
I active_data_t, dummyRS, |
488 |
I iRec, myOptimIter, myThid ) |
489 |
|
490 |
ENDIF |
491 |
|
492 |
ENDIF |
493 |
|
494 |
C >>>>>>>>>>>>>>>>>>> ADJOINT RUN <<<<<<<<<<<<<<<<<<< |
495 |
IF (theSimulationMode .EQ. REVERSE_SIMULATION) THEN |
496 |
|
497 |
CALL MDS_READ_SEC_YZ( |
498 |
I activeVar_file, prec, useCurrentDir, |
499 |
I 'RL', myNr, |
500 |
O active_data_t, dummyRS, |
501 |
I iRec, myThid ) |
502 |
|
503 |
C Add active_var from appropriate location to data. |
504 |
DO bj = myByLo(myThid), myByHi(myThid) |
505 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
506 |
DO k = 1, myNr |
507 |
DO j=1,sNy |
508 |
active_data_t(j,k,bi,bj) = active_data_t(j,k,bi,bj) |
509 |
& + active_var(j,k,bi,bj) |
510 |
ENDDO |
511 |
ENDDO |
512 |
ENDDO |
513 |
ENDDO |
514 |
|
515 |
C Store the result on disk. |
516 |
w_globFile = .FALSE. |
517 |
CALL MDS_WRITE_SEC_YZ( |
518 |
I activeVar_file, prec, w_globFile, useCurrentDir, |
519 |
I 'RL', myNr, |
520 |
I active_data_t, dummyRS, |
521 |
I iRec, myOptimIter, myThid ) |
522 |
|
523 |
C Set active_var to zero. |
524 |
DO bj = myByLo(myThid), myByHi(myThid) |
525 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
526 |
DO k = 1, myNr |
527 |
DO j=1,sNy |
528 |
active_var(j,k,bi,bj) = 0 _d 0 |
529 |
ENDDO |
530 |
ENDDO |
531 |
ENDDO |
532 |
ENDDO |
533 |
|
534 |
ENDIF |
535 |
|
536 |
C >>>>>>>>>>>>>>>>>>> TANGENT RUN <<<<<<<<<<<<<<<<<<< |
537 |
IF (theSimulationMode .EQ. TANGENT_SIMULATION) THEN |
538 |
C Read the active variable from file. |
539 |
CALL MDS_READ_SEC_YZ( |
540 |
I activeVar_file, prec, useCurrentDir, |
541 |
I 'RL', myNr, |
542 |
O active_var, dummyRS, |
543 |
I iRec, myThid ) |
544 |
ENDIF |
545 |
|
546 |
RETURN |
547 |
END |
548 |
|
549 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
550 |
CBOP |
551 |
C !ROUTINE: ACTIVE_READ_YZ_RS |
552 |
C !INTERFACE: |
553 |
SUBROUTINE ACTIVE_READ_YZ_RS( |
554 |
I activeVar_file, |
555 |
O active_var, |
556 |
I globalFile, |
557 |
I useCurrentDir, |
558 |
I lAdInit, |
559 |
I iRec, |
560 |
I myNr, |
561 |
I theSimulationMode, |
562 |
I myOptimIter, |
563 |
I myThid ) |
564 |
|
565 |
C !DESCRIPTION: \bv |
566 |
C ================================================================== |
567 |
C SUBROUTINE ACTIVE_READ_YZ_RS |
568 |
C ================================================================== |
569 |
C o Read an active YZ _RS variable from file. |
570 |
C The variable *globalfile* can be used as a switch, which allows |
571 |
C to read from a global file. The adjoint files are, however, always |
572 |
C treated as tiled files. |
573 |
C started: heimbach@mit.edu 05-Mar-2001 |
574 |
C ================================================================== |
575 |
C SUBROUTINE ACTIVE_READ_YZ_RS |
576 |
C ================================================================== |
577 |
C \ev |
578 |
|
579 |
C !USES: |
580 |
IMPLICIT NONE |
581 |
|
582 |
C == global variables == |
583 |
#include "EEPARAMS.h" |
584 |
#include "SIZE.h" |
585 |
#include "PARAMS.h" |
586 |
#include "ctrl.h" |
587 |
|
588 |
C !INPUT/OUTPUT PARAMETERS: |
589 |
C activeVar_file :: filename |
590 |
C active_var :: array |
591 |
C globalFile :: |
592 |
C useCurrentDir :: always read from the current directory |
593 |
C (even if "mdsioLocalDir" is set) |
594 |
C lAdInit :: initialisation of corresponding adjoint variable |
595 |
C and write to active file |
596 |
C iRec :: record number |
597 |
C myNr :: vertical array dimension |
598 |
C theSimulationMode :: forward mode or reverse mode simulation |
599 |
C myOptimIter :: number of optimization iteration (default: 0) |
600 |
C myThid :: thread number for this instance |
601 |
CHARACTER*(*) activeVar_file |
602 |
INTEGER myNr |
603 |
_RS active_var(1-OLy:sNy+OLy,myNr,nSx,nSy) |
604 |
LOGICAL globalFile |
605 |
LOGICAL useCurrentDir |
606 |
LOGICAL lAdInit |
607 |
INTEGER iRec |
608 |
INTEGER theSimulationMode |
609 |
INTEGER myOptimIter |
610 |
INTEGER myThid |
611 |
|
612 |
C !FUNCTIONS: |
613 |
INTEGER ILNBLNK |
614 |
EXTERNAL ILNBLNK |
615 |
|
616 |
C !LOCAL VARIABLES: |
617 |
CHARACTER*(2) adpref |
618 |
CHARACTER*(80) adfname |
619 |
INTEGER bi,bj |
620 |
INTEGER j,k |
621 |
INTEGER prec |
622 |
INTEGER il |
623 |
LOGICAL w_globFile |
624 |
_RS active_data_t(1-OLy:sNy+OLy,myNr,nSx,nSy) |
625 |
_RL dummyRL(1) |
626 |
CEOP |
627 |
|
628 |
C force 64-bit io |
629 |
prec = ctrlprec |
630 |
|
631 |
adpref = 'ad' |
632 |
il = ILNBLNK( activeVar_file ) |
633 |
WRITE(adfname(1:80),'(80a)') ' ' |
634 |
WRITE(adfname(1:il+2),'(2A)') adpref, activeVar_file(1:il) |
635 |
|
636 |
C >>>>>>>>>>>>>>>>>>> FORWARD RUN <<<<<<<<<<<<<<<<<<< |
637 |
IF (theSimulationMode .EQ. FORWARD_SIMULATION) THEN |
638 |
|
639 |
C Read the active variable from file. |
640 |
CALL MDS_READ_SEC_YZ( |
641 |
I activeVar_file, prec, useCurrentDir, |
642 |
I 'RS', myNr, |
643 |
O dummyRL, active_var, |
644 |
I iRec, myThid ) |
645 |
|
646 |
IF ( lAdInit ) THEN |
647 |
C Initialise the corresponding adjoint variable on the |
648 |
C adjoint variable file. These files are tiled. |
649 |
|
650 |
DO bj = myByLo(myThid), myByHi(myThid) |
651 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
652 |
DO k = 1, myNr |
653 |
DO j=1,sNy |
654 |
active_data_t(j,k,bi,bj) = 0. _d 0 |
655 |
ENDDO |
656 |
ENDDO |
657 |
ENDDO |
658 |
ENDDO |
659 |
|
660 |
CALL MDS_WRITE_SEC_YZ( |
661 |
I adfname, prec, globalFile, useCurrentDir, |
662 |
I 'RS', myNr, |
663 |
I dummyRL, active_data_t, |
664 |
I iRec, myOptimIter, myThid ) |
665 |
|
666 |
ENDIF |
667 |
|
668 |
ENDIF |
669 |
|
670 |
C >>>>>>>>>>>>>>>>>>> ADJOINT RUN <<<<<<<<<<<<<<<<<<< |
671 |
IF (theSimulationMode .EQ. REVERSE_SIMULATION) THEN |
672 |
|
673 |
CALL MDS_READ_SEC_YZ( |
674 |
I activeVar_file, prec, useCurrentDir, |
675 |
I 'RS', myNr, |
676 |
O dummyRL, active_data_t, |
677 |
I iRec, myThid ) |
678 |
|
679 |
C Add active_var from appropriate location to data. |
680 |
DO bj = myByLo(myThid), myByHi(myThid) |
681 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
682 |
DO k = 1, myNr |
683 |
DO j=1,sNy |
684 |
active_data_t(j,k,bi,bj) = active_data_t(j,k,bi,bj) |
685 |
& + active_var(j,k,bi,bj) |
686 |
ENDDO |
687 |
ENDDO |
688 |
ENDDO |
689 |
ENDDO |
690 |
|
691 |
C Store the result on disk. |
692 |
w_globFile = .FALSE. |
693 |
CALL MDS_WRITE_SEC_YZ( |
694 |
I activeVar_file, prec, w_globFile, useCurrentDir, |
695 |
I 'RS', myNr, |
696 |
I dummyRL, active_data_t, |
697 |
I iRec, myOptimIter, myThid ) |
698 |
|
699 |
C Set active_var to zero. |
700 |
DO bj = myByLo(myThid), myByHi(myThid) |
701 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
702 |
DO k = 1, myNr |
703 |
DO j=1,sNy |
704 |
active_var(j,k,bi,bj) = 0 _d 0 |
705 |
ENDDO |
706 |
ENDDO |
707 |
ENDDO |
708 |
ENDDO |
709 |
|
710 |
ENDIF |
711 |
|
712 |
C >>>>>>>>>>>>>>>>>>> TANGENT RUN <<<<<<<<<<<<<<<<<<< |
713 |
IF (theSimulationMode .EQ. TANGENT_SIMULATION) THEN |
714 |
C Read the active variable from file. |
715 |
CALL MDS_READ_SEC_YZ( |
716 |
I activeVar_file, prec, useCurrentDir, |
717 |
I 'RS', myNr, |
718 |
O dummyRL, active_var, |
719 |
I iRec, myThid ) |
720 |
ENDIF |
721 |
|
722 |
RETURN |
723 |
END |
724 |
|
725 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
726 |
CBOP |
727 |
C !ROUTINE: ACTIVE_WRITE_XZ_RL |
728 |
C !INTERFACE: |
729 |
SUBROUTINE ACTIVE_WRITE_XZ_RL( |
730 |
I activeVar_file, |
731 |
I active_var, |
732 |
I globalFile, |
733 |
I useCurrentDir, |
734 |
I iRec, |
735 |
I myNr, |
736 |
I theSimulationMode, |
737 |
I myOptimIter, |
738 |
I myThid ) |
739 |
|
740 |
C !DESCRIPTION: \bv |
741 |
C ================================================================== |
742 |
C SUBROUTINE ACTIVE_WRITE_XZ_RL |
743 |
C ================================================================== |
744 |
C o Write an active XZ _RL variable to a file. |
745 |
C started: heimbach@mit.edu 05-Mar-2001 |
746 |
C ================================================================== |
747 |
C SUBROUTINE ACTIVE_WRITE_XZ_RL |
748 |
C ================================================================== |
749 |
C \ev |
750 |
|
751 |
C !USES: |
752 |
IMPLICIT NONE |
753 |
|
754 |
C == global variables == |
755 |
#include "EEPARAMS.h" |
756 |
#include "SIZE.h" |
757 |
#include "PARAMS.h" |
758 |
#include "ctrl.h" |
759 |
|
760 |
C !INPUT/OUTPUT PARAMETERS: |
761 |
C activeVar_file :: filename |
762 |
C active_var :: array |
763 |
C globalFile :: |
764 |
C useCurrentDir :: always write to the current directory |
765 |
C (even if "mdsioLocalDir" is set) |
766 |
C iRec :: record number |
767 |
C myNr :: vertical array dimension |
768 |
C theSimulationMode :: forward mode or reverse mode simulation |
769 |
C myOptimIter :: number of optimization iteration (default: 0) |
770 |
C myThid :: thread number for this instance |
771 |
CHARACTER*(*) activeVar_file |
772 |
INTEGER myNr |
773 |
_RL active_var(1-OLx:sNx+OLx,myNr,nSx,nSy) |
774 |
LOGICAL globalFile |
775 |
LOGICAL useCurrentDir |
776 |
INTEGER iRec |
777 |
INTEGER theSimulationMode |
778 |
INTEGER myOptimIter |
779 |
INTEGER myThid |
780 |
|
781 |
C !LOCAL VARIABLES: |
782 |
INTEGER i,k |
783 |
INTEGER bi,bj |
784 |
INTEGER prec |
785 |
_RS dummyRS(1) |
786 |
_RL active_data_t(1-OLx:sNx+OLx,myNr,nSx,nSy) |
787 |
CEOP |
788 |
|
789 |
C force 64-bit io |
790 |
prec = ctrlprec |
791 |
|
792 |
C >>>>>>>>>>>>>>>>>>> FORWARD RUN <<<<<<<<<<<<<<<<<<< |
793 |
IF (theSimulationMode .EQ. FORWARD_SIMULATION) THEN |
794 |
CALL MDS_WRITE_SEC_XZ( |
795 |
I activeVar_file, prec, globalFile, useCurrentDir, |
796 |
I 'RL', myNr, |
797 |
I active_var, dummyRS, |
798 |
I iRec, myOptimIter, myThid ) |
799 |
ENDIF |
800 |
|
801 |
C >>>>>>>>>>>>>>>>>>> ADJOINT RUN <<<<<<<<<<<<<<<<<<< |
802 |
IF (theSimulationMode .EQ. REVERSE_SIMULATION) THEN |
803 |
|
804 |
CALL MDS_READ_SEC_XZ( |
805 |
I activeVar_file, prec, useCurrentDir, |
806 |
I 'RL', myNr, |
807 |
O active_data_t, dummyRS, |
808 |
I iRec, myThid ) |
809 |
|
810 |
C Add active_var from appropriate location to data. |
811 |
DO bj = myByLo(myThid), myByHi(myThid) |
812 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
813 |
DO k = 1, myNr |
814 |
DO i=1,sNx |
815 |
active_var(i,k,bi,bj) = active_var(i,k,bi,bj) |
816 |
& + active_data_t(i,k,bi,bj) |
817 |
active_data_t(i,k,bi,bj) = 0. _d 0 |
818 |
ENDDO |
819 |
ENDDO |
820 |
ENDDO |
821 |
ENDDO |
822 |
CALL MDS_WRITE_SEC_XZ( |
823 |
I activeVar_file, prec, globalFile, useCurrentDir, |
824 |
I 'RL', myNr, |
825 |
I active_data_t, dummyRS, |
826 |
I iRec, myOptimIter, myThid ) |
827 |
|
828 |
ENDIF |
829 |
|
830 |
C >>>>>>>>>>>>>>>>>>> TANGENT RUN <<<<<<<<<<<<<<<<<<< |
831 |
IF (theSimulationMode .EQ. TANGENT_SIMULATION) THEN |
832 |
CALL MDS_WRITE_SEC_XZ( |
833 |
I activeVar_file, prec, globalFile, useCurrentDir, |
834 |
I 'RL', myNr, |
835 |
I active_var, dummyRS, |
836 |
I iRec, myOptimIter, myThid ) |
837 |
ENDIF |
838 |
|
839 |
RETURN |
840 |
END |
841 |
|
842 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
843 |
CBOP |
844 |
C !ROUTINE: ACTIVE_WRITE_XZ_RS |
845 |
C !INTERFACE: |
846 |
SUBROUTINE ACTIVE_WRITE_XZ_RS( |
847 |
I activeVar_file, |
848 |
I active_var, |
849 |
I globalFile, |
850 |
I useCurrentDir, |
851 |
I iRec, |
852 |
I myNr, |
853 |
I theSimulationMode, |
854 |
I myOptimIter, |
855 |
I myThid ) |
856 |
|
857 |
C !DESCRIPTION: \bv |
858 |
C ================================================================== |
859 |
C SUBROUTINE ACTIVE_WRITE_XZ_RS |
860 |
C ================================================================== |
861 |
C o Write an active XZ _RS variable to a file. |
862 |
C started: heimbach@mit.edu 05-Mar-2001 |
863 |
C ================================================================== |
864 |
C SUBROUTINE ACTIVE_WRITE_XZ_RS |
865 |
C ================================================================== |
866 |
C \ev |
867 |
|
868 |
C !USES: |
869 |
IMPLICIT NONE |
870 |
|
871 |
C == global variables == |
872 |
#include "EEPARAMS.h" |
873 |
#include "SIZE.h" |
874 |
#include "PARAMS.h" |
875 |
#include "ctrl.h" |
876 |
|
877 |
C !INPUT/OUTPUT PARAMETERS: |
878 |
C activeVar_file :: filename |
879 |
C active_var :: array |
880 |
C globalFile :: |
881 |
C useCurrentDir :: always write to the current directory |
882 |
C (even if "mdsioLocalDir" is set) |
883 |
C iRec :: record number |
884 |
C myNr :: vertical array dimension |
885 |
C theSimulationMode :: forward mode or reverse mode simulation |
886 |
C myOptimIter :: number of optimization iteration (default: 0) |
887 |
C myThid :: thread number for this instance |
888 |
CHARACTER*(*) activeVar_file |
889 |
INTEGER myNr |
890 |
_RS active_var(1-OLx:sNx+OLx,myNr,nSx,nSy) |
891 |
LOGICAL globalFile |
892 |
LOGICAL useCurrentDir |
893 |
INTEGER iRec |
894 |
INTEGER theSimulationMode |
895 |
INTEGER myOptimIter |
896 |
INTEGER myThid |
897 |
|
898 |
C !LOCAL VARIABLES: |
899 |
INTEGER i,k |
900 |
INTEGER bi,bj |
901 |
INTEGER prec |
902 |
_RS active_data_t(1-OLx:sNx+OLx,myNr,nSx,nSy) |
903 |
_RL dummyRL(1) |
904 |
CEOP |
905 |
|
906 |
C force 64-bit io |
907 |
prec = ctrlprec |
908 |
|
909 |
C >>>>>>>>>>>>>>>>>>> FORWARD RUN <<<<<<<<<<<<<<<<<<< |
910 |
IF (theSimulationMode .EQ. FORWARD_SIMULATION) THEN |
911 |
CALL MDS_WRITE_SEC_XZ( |
912 |
I activeVar_file, prec, globalFile, useCurrentDir, |
913 |
I 'RS', myNr, |
914 |
I dummyRL, active_var, |
915 |
I iRec, myOptimIter, myThid ) |
916 |
ENDIF |
917 |
|
918 |
C >>>>>>>>>>>>>>>>>>> ADJOINT RUN <<<<<<<<<<<<<<<<<<< |
919 |
IF (theSimulationMode .EQ. REVERSE_SIMULATION) THEN |
920 |
|
921 |
CALL MDS_READ_SEC_XZ( |
922 |
I activeVar_file, prec, useCurrentDir, |
923 |
I 'RS', myNr, |
924 |
O dummyRL, active_data_t, |
925 |
I iRec, myThid ) |
926 |
|
927 |
C Add active_var from appropriate location to data. |
928 |
DO bj = myByLo(myThid), myByHi(myThid) |
929 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
930 |
DO k = 1, myNr |
931 |
DO i=1,sNx |
932 |
active_var(i,k,bi,bj) = active_var(i,k,bi,bj) |
933 |
& + active_data_t(i,k,bi,bj) |
934 |
active_data_t(i,k,bi,bj) = 0. _d 0 |
935 |
ENDDO |
936 |
ENDDO |
937 |
ENDDO |
938 |
ENDDO |
939 |
CALL MDS_WRITE_SEC_XZ( |
940 |
I activeVar_file, prec, globalFile, useCurrentDir, |
941 |
I 'RS', myNr, |
942 |
I dummyRL, active_data_t, |
943 |
I iRec, myOptimIter, myThid ) |
944 |
|
945 |
ENDIF |
946 |
|
947 |
C >>>>>>>>>>>>>>>>>>> TANGENT RUN <<<<<<<<<<<<<<<<<<< |
948 |
IF (theSimulationMode .EQ. TANGENT_SIMULATION) THEN |
949 |
CALL MDS_WRITE_SEC_XZ( |
950 |
I activeVar_file, prec, globalFile, useCurrentDir, |
951 |
I 'RS', myNr, |
952 |
I dummyRL, active_var, |
953 |
I iRec, myOptimIter, myThid ) |
954 |
ENDIF |
955 |
|
956 |
RETURN |
957 |
END |
958 |
|
959 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
960 |
CBOP |
961 |
C !ROUTINE: ACTIVE_WRITE_YZ_RL |
962 |
C !INTERFACE: |
963 |
SUBROUTINE ACTIVE_WRITE_YZ_RL( |
964 |
I activeVar_file, |
965 |
I active_var, |
966 |
I globalFile, |
967 |
I useCurrentDir, |
968 |
I iRec, |
969 |
I myNr, |
970 |
I theSimulationMode, |
971 |
I myOptimIter, |
972 |
I myThid ) |
973 |
|
974 |
C !DESCRIPTION: \bv |
975 |
C ================================================================== |
976 |
C SUBROUTINE ACTIVE_WRITE_YZ_RL |
977 |
C ================================================================== |
978 |
C o Write an active YZ _RL variable to a file. |
979 |
C started: heimbach@mit.edu 05-Mar-2001 |
980 |
C ================================================================== |
981 |
C SUBROUTINE ACTIVE_WRITE_YZ_RL |
982 |
C ================================================================== |
983 |
C \ev |
984 |
|
985 |
C !USES: |
986 |
IMPLICIT NONE |
987 |
|
988 |
C == global variables == |
989 |
#include "EEPARAMS.h" |
990 |
#include "SIZE.h" |
991 |
#include "PARAMS.h" |
992 |
#include "ctrl.h" |
993 |
|
994 |
C !INPUT/OUTPUT PARAMETERS: |
995 |
C activeVar_file :: filename |
996 |
C active_var :: array |
997 |
C globalFile :: |
998 |
C useCurrentDir :: always write to the current directory |
999 |
C (even if "mdsioLocalDir" is set) |
1000 |
C iRec :: record number |
1001 |
C myNr :: vertical array dimension |
1002 |
C theSimulationMode :: forward mode or reverse mode simulation |
1003 |
C myOptimIter :: number of optimization iteration (default: 0) |
1004 |
C myThid :: thread number for this instance |
1005 |
CHARACTER*(*) activeVar_file |
1006 |
INTEGER myNr |
1007 |
_RL active_var(1-OLy:sNy+OLy,myNr,nSx,nSy) |
1008 |
LOGICAL globalFile |
1009 |
LOGICAL useCurrentDir |
1010 |
INTEGER iRec |
1011 |
INTEGER theSimulationMode |
1012 |
INTEGER myOptimIter |
1013 |
INTEGER myThid |
1014 |
|
1015 |
C !LOCAL VARIABLES: |
1016 |
INTEGER j,k |
1017 |
INTEGER bi,bj |
1018 |
INTEGER prec |
1019 |
_RS dummyRS(1) |
1020 |
_RL active_data_t(1-OLy:sNy+OLy,myNr,nSx,nSy) |
1021 |
CEOP |
1022 |
|
1023 |
C force 64-bit io |
1024 |
prec = ctrlprec |
1025 |
|
1026 |
C >>>>>>>>>>>>>>>>>>> FORWARD RUN <<<<<<<<<<<<<<<<<<< |
1027 |
IF (theSimulationMode .EQ. FORWARD_SIMULATION) THEN |
1028 |
CALL MDS_WRITE_SEC_YZ( |
1029 |
I activeVar_file, prec, globalFile, useCurrentDir, |
1030 |
I 'RL', myNr, |
1031 |
I active_var, dummyRS, |
1032 |
I iRec, myOptimIter, myThid ) |
1033 |
ENDIF |
1034 |
|
1035 |
C >>>>>>>>>>>>>>>>>>> ADJOINT RUN <<<<<<<<<<<<<<<<<<< |
1036 |
IF (theSimulationMode .EQ. REVERSE_SIMULATION) THEN |
1037 |
|
1038 |
CALL MDS_READ_SEC_YZ( |
1039 |
I activeVar_file, prec, useCurrentDir, |
1040 |
I 'RL', myNr, |
1041 |
O active_data_t, dummyRS, |
1042 |
I iRec, myThid ) |
1043 |
|
1044 |
C Add active_var from appropriate location to data. |
1045 |
DO bj = myByLo(myThid), myByHi(myThid) |
1046 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
1047 |
DO k = 1, myNr |
1048 |
DO j=1,sNy |
1049 |
active_var(j,k,bi,bj) = active_var(j,k,bi,bj) |
1050 |
& + active_data_t(j,k,bi,bj) |
1051 |
active_data_t(j,k,bi,bj) = 0. _d 0 |
1052 |
ENDDO |
1053 |
ENDDO |
1054 |
ENDDO |
1055 |
ENDDO |
1056 |
CALL MDS_WRITE_SEC_YZ( |
1057 |
I activeVar_file, prec, globalFile, useCurrentDir, |
1058 |
I 'RL', myNr, |
1059 |
I active_data_t, dummyRS, |
1060 |
I iRec, myOptimIter, myThid ) |
1061 |
|
1062 |
ENDIF |
1063 |
|
1064 |
C >>>>>>>>>>>>>>>>>>> TANGENT RUN <<<<<<<<<<<<<<<<<<< |
1065 |
IF (theSimulationMode .EQ. TANGENT_SIMULATION) THEN |
1066 |
CALL MDS_WRITE_SEC_YZ( |
1067 |
I activeVar_file, prec, globalFile, useCurrentDir, |
1068 |
I 'RL', myNr, |
1069 |
I active_var, dummyRS, |
1070 |
I iRec, myOptimIter, myThid ) |
1071 |
ENDIF |
1072 |
|
1073 |
RETURN |
1074 |
END |
1075 |
|
1076 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
1077 |
CBOP |
1078 |
C !ROUTINE: ACTIVE_WRITE_YZ_RS |
1079 |
C !INTERFACE: |
1080 |
SUBROUTINE ACTIVE_WRITE_YZ_RS( |
1081 |
I activeVar_file, |
1082 |
I active_var, |
1083 |
I globalFile, |
1084 |
I useCurrentDir, |
1085 |
I iRec, |
1086 |
I myNr, |
1087 |
I theSimulationMode, |
1088 |
I myOptimIter, |
1089 |
I myThid ) |
1090 |
|
1091 |
C !DESCRIPTION: \bv |
1092 |
C ================================================================== |
1093 |
C SUBROUTINE ACTIVE_WRITE_YZ_RS |
1094 |
C ================================================================== |
1095 |
C o Write an active YZ _RS variable to a file. |
1096 |
C started: heimbach@mit.edu 05-Mar-2001 |
1097 |
C ================================================================== |
1098 |
C SUBROUTINE ACTIVE_WRITE_YZ_RS |
1099 |
C ================================================================== |
1100 |
C \ev |
1101 |
|
1102 |
C !USES: |
1103 |
IMPLICIT NONE |
1104 |
|
1105 |
C == global variables == |
1106 |
#include "EEPARAMS.h" |
1107 |
#include "SIZE.h" |
1108 |
#include "PARAMS.h" |
1109 |
#include "ctrl.h" |
1110 |
|
1111 |
C !INPUT/OUTPUT PARAMETERS: |
1112 |
C activeVar_file :: filename |
1113 |
C active_var :: array |
1114 |
C globalFile :: |
1115 |
C useCurrentDir :: always write to the current directory |
1116 |
C (even if "mdsioLocalDir" is set) |
1117 |
C iRec :: record number |
1118 |
C myNr :: vertical array dimension |
1119 |
C theSimulationMode :: forward mode or reverse mode simulation |
1120 |
C myOptimIter :: number of optimization iteration (default: 0) |
1121 |
C myThid :: thread number for this instance |
1122 |
CHARACTER*(*) activeVar_file |
1123 |
INTEGER myNr |
1124 |
_RS active_var(1-OLy:sNy+OLy,myNr,nSx,nSy) |
1125 |
LOGICAL globalFile |
1126 |
LOGICAL useCurrentDir |
1127 |
INTEGER iRec |
1128 |
INTEGER theSimulationMode |
1129 |
INTEGER myOptimIter |
1130 |
INTEGER myThid |
1131 |
|
1132 |
C !LOCAL VARIABLES: |
1133 |
INTEGER j,k |
1134 |
INTEGER bi,bj |
1135 |
INTEGER prec |
1136 |
_RS active_data_t(1-OLy:sNy+OLy,myNr,nSx,nSy) |
1137 |
_RL dummyRL(1) |
1138 |
CEOP |
1139 |
|
1140 |
C force 64-bit io |
1141 |
prec = ctrlprec |
1142 |
|
1143 |
C >>>>>>>>>>>>>>>>>>> FORWARD RUN <<<<<<<<<<<<<<<<<<< |
1144 |
IF (theSimulationMode .EQ. FORWARD_SIMULATION) THEN |
1145 |
CALL MDS_WRITE_SEC_YZ( |
1146 |
I activeVar_file, prec, globalFile, useCurrentDir, |
1147 |
I 'RS', myNr, |
1148 |
I dummyRL, active_var, |
1149 |
I iRec, myOptimIter, myThid ) |
1150 |
ENDIF |
1151 |
|
1152 |
C >>>>>>>>>>>>>>>>>>> ADJOINT RUN <<<<<<<<<<<<<<<<<<< |
1153 |
IF (theSimulationMode .EQ. REVERSE_SIMULATION) THEN |
1154 |
|
1155 |
CALL MDS_READ_SEC_YZ( |
1156 |
I activeVar_file, prec, useCurrentDir, |
1157 |
I 'RS', myNr, |
1158 |
O dummyRL, active_data_t, |
1159 |
I iRec, myThid ) |
1160 |
|
1161 |
C Add active_var from appropriate location to data. |
1162 |
DO bj = myByLo(myThid), myByHi(myThid) |
1163 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
1164 |
DO k = 1, myNr |
1165 |
DO j=1,sNy |
1166 |
active_var(j,k,bi,bj) = active_var(j,k,bi,bj) |
1167 |
& + active_data_t(j,k,bi,bj) |
1168 |
active_data_t(j,k,bi,bj) = 0. _d 0 |
1169 |
ENDDO |
1170 |
ENDDO |
1171 |
ENDDO |
1172 |
ENDDO |
1173 |
CALL MDS_WRITE_SEC_YZ( |
1174 |
I activeVar_file, prec, globalFile, useCurrentDir, |
1175 |
I 'RS', myNr, |
1176 |
I dummyRL, active_data_t, |
1177 |
I iRec, myOptimIter, myThid ) |
1178 |
|
1179 |
ENDIF |
1180 |
|
1181 |
C >>>>>>>>>>>>>>>>>>> TANGENT RUN <<<<<<<<<<<<<<<<<<< |
1182 |
IF (theSimulationMode .EQ. TANGENT_SIMULATION) THEN |
1183 |
CALL MDS_WRITE_SEC_YZ( |
1184 |
I activeVar_file, prec, globalFile, useCurrentDir, |
1185 |
I 'RS', myNr, |
1186 |
I dummyRL, active_var, |
1187 |
I iRec, myOptimIter, myThid ) |
1188 |
ENDIF |
1189 |
|
1190 |
RETURN |
1191 |
END |