/[MITgcm]/MITgcm/pkg/autodiff/active_file_control_slice.F
ViewVC logotype

Contents of /MITgcm/pkg/autodiff/active_file_control_slice.F

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


Revision 1.12 - (show annotations) (download)
Thu Aug 2 22:07:59 2012 UTC (11 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64, checkpoint63r, checkpoint63s, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f
Changes since 1.11: +1137 -737 lines
- add 1 argument (useCurrentDir) to high level S/R ACTIVE_READ/WRITE_3D/XZ/YZ_RL
- switch to use standard pkg/mdsio S/R MDS_READ/WRITE_SEC_XZ/YZ
- do calculation in multi-threaded (was single thread before)
- add _RS version of new high level S/R ACTIVE_READ/WRITE_3D/XZ/YZ_RL

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

  ViewVC Help
Powered by ViewVC 1.1.22