Back to home page

MITgcm

 
 

    


File indexing completed on 2024-03-02 06:10:09 UTC

view on githubraw file Latest commit 5cf43646 on 2024-03-01 18:50:49 UTC
6d54cf9ca1 Ed H*0001 #include "AUTODIFF_OPTIONS.h"
bead363026 Jean*0002 #ifdef ALLOW_CTRL
                0003 # include "CTRL_OPTIONS.h"
                0004 #endif
4158fdaabc Patr*0005 
761964351d Jean*0006 C     ==================================================================
                0007 C     active_file_control_slice.F: Routines to handle the I/O of active
                0008 C                                  variables for the adjoint calculations.
                0009 C                                  All files are diRect access files.
                0010 C     Routines:
                0011 C     o  ACTIVE_READ_XZ_RL  : Basic routine to handle active XZ read operations
                0012 C     o  ACTIVE_READ_XZ_RS  : Basic routine to handle active XZ read operations
                0013 C     o  ACTIVE_READ_YZ_RL  : Basic routine to handle active YZ read operations
                0014 C     o  ACTIVE_READ_YZ_RS  : Basic routine to handle active YZ read operations
                0015 
                0016 C     o  ACTIVE_WRITE_XZ_RL : Basic routine to handle active XZ write operations
                0017 C     o  ACTIVE_WRITE_XZ_RS : Basic routine to handle active XZ write operations
                0018 C     o  ACTIVE_WRITE_YZ_RL : Basic routine to handle active YZ write operations
                0019 C     o  ACTIVE_WRITE_YZ_RS : Basic routine to handle active YZ write operations
                0020 
                0021 C     ==================================================================
                0022 
                0023 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0024 CBOP
                0025 C     !ROUTINE: ACTIVE_READ_XZ_RL
                0026 C     !INTERFACE:
                0027       SUBROUTINE ACTIVE_READ_XZ_RL(
                0028      I                          activeVar_file,
                0029      O                          active_var,
                0030      I                          globalFile,
                0031      I                          useCurrentDir,
                0032      I                          lAdInit,
                0033      I                          iRec,
                0034      I                          myNr,
                0035      I                          theSimulationMode,
                0036      I                          myOptimIter,
                0037      I                          myThid )
                0038 C     !DESCRIPTION: \bv
                0039 C     ==================================================================
                0040 C     SUBROUTINE ACTIVE_READ_XZ_RL
                0041 C     ==================================================================
                0042 C     o Read an active XZ _RL variable from file.
                0043 C     The variable *globalfile* can be used as a switch, which allows
                0044 C     to read from a global file. The adjoint files are, however, always
                0045 C     treated as tiled files.
                0046 C     started: heimbach@mit.edu 05-Mar-2001
                0047 C     ==================================================================
                0048 C     SUBROUTINE ACTIVE_READ_XZ_RL
                0049 C     ==================================================================
                0050 C     \ev
                0051 
                0052 C     !USES:
                0053       IMPLICIT NONE
                0054 
                0055 C     == global variables ==
4158fdaabc Patr*0056 #include "EEPARAMS.h"
                0057 #include "SIZE.h"
                0058 #include "PARAMS.h"
5cf4364659 Mart*0059 #include "CTRL_SIZE.h"
4d72283393 Mart*0060 #include "CTRL.h"
4158fdaabc Patr*0061 
761964351d Jean*0062 C     !INPUT/OUTPUT PARAMETERS:
                0063 C     activeVar_file :: filename
                0064 C     active_var     :: array
                0065 C     globalFile     ::
                0066 C     useCurrentDir  :: always read from the current directory
                0067 C                        (even if "mdsioLocalDir" is set)
                0068 C     lAdInit        :: initialisation of corresponding adjoint variable
                0069 C                        and write to active file
                0070 C     iRec           :: record number
                0071 C     myNr           :: vertical array dimension
                0072 C     theSimulationMode :: forward mode or reverse mode simulation
                0073 C     myOptimIter    :: number of optimization iteration (default: 0)
                0074 C     myThid         :: thread number for this instance
                0075       CHARACTER*(*) activeVar_file
                0076       INTEGER  myNr
                0077       _RL      active_var(1-OLx:sNx+OLx,myNr,nSx,nSy)
                0078       LOGICAL  globalFile
                0079       LOGICAL  useCurrentDir
                0080       LOGICAL  lAdInit
                0081       INTEGER  iRec
                0082       INTEGER  theSimulationMode
                0083       INTEGER  myOptimIter
                0084       INTEGER  myThid
                0085 
                0086 C     !LOCAL VARIABLES:
                0087       CHARACTER*(2)  adpref
de57a2ec4b Mart*0088       CHARACTER*(MAX_LEN_FNAM) adfname
761964351d Jean*0089       INTEGER bi,bj
                0090       INTEGER i,k
                0091       INTEGER prec
                0092       LOGICAL w_globFile
                0093       _RS  dummyRS(1)
                0094       _RL  active_data_t(1-OLx:sNx+OLx,myNr,nSx,nSy)
                0095 CEOP
                0096 
                0097 C     force 64-bit io
                0098       prec = ctrlprec
4158fdaabc Patr*0099 
761964351d Jean*0100 C     >>>>>>>>>>>>>>>>>>> FORWARD RUN <<<<<<<<<<<<<<<<<<<
                0101       IF (theSimulationMode .EQ. FORWARD_SIMULATION) THEN
                0102 
                0103 C     Read the active variable from file.
                0104         CALL MDS_READ_SEC_XZ(
                0105      I                activeVar_file, prec, useCurrentDir,
57622776fd Jean*0106      I                'RL', myNr, 1, myNr,
761964351d Jean*0107      O                active_var, dummyRS,
                0108      I                iRec, myThid )
                0109 
                0110         IF ( lAdInit ) THEN
                0111 C     Initialise the corresponding adjoint variable on the
                0112 C     adjoint variable file. These files are tiled.
                0113 
                0114           DO bj = myByLo(myThid), myByHi(myThid)
                0115            DO bi = myBxLo(myThid), myBxHi(myThid)
                0116             DO k = 1, myNr
                0117               DO i=1,sNx
                0118                 active_data_t(i,k,bi,bj) = 0. _d 0
                0119               ENDDO
                0120             ENDDO
                0121            ENDDO
                0122           ENDDO
                0123 
f9d7cbfb72 Ou W*0124           adpref = 'ad'
                0125           CALL ADD_PREFIX( adpref, activeVar_file, adfname )
761964351d Jean*0126           CALL MDS_WRITE_SEC_XZ(
                0127      I                adfname, prec, globalFile, useCurrentDir,
57622776fd Jean*0128      I                'RL', myNr, 1, myNr,
761964351d Jean*0129      I                active_data_t, dummyRS,
                0130      I                iRec, myOptimIter, myThid )
                0131 
                0132         ENDIF
                0133 
                0134       ENDIF
                0135 
                0136 C     >>>>>>>>>>>>>>>>>>> ADJOINT RUN <<<<<<<<<<<<<<<<<<<
                0137       IF (theSimulationMode .EQ. REVERSE_SIMULATION) THEN
                0138 
                0139         CALL MDS_READ_SEC_XZ(
                0140      I                activeVar_file, prec, useCurrentDir,
57622776fd Jean*0141      I                'RL', myNr, 1, myNr,
761964351d Jean*0142      O                active_data_t, dummyRS,
                0143      I                iRec, myThid )
                0144 
                0145 C     Add active_var from appropriate location to data.
                0146         DO bj = myByLo(myThid), myByHi(myThid)
                0147          DO bi = myBxLo(myThid), myBxHi(myThid)
                0148           DO k = 1, myNr
                0149             DO i=1,sNx
                0150               active_data_t(i,k,bi,bj) = active_data_t(i,k,bi,bj)
                0151      &                                 + active_var(i,k,bi,bj)
                0152             ENDDO
                0153           ENDDO
                0154          ENDDO
                0155         ENDDO
                0156 
                0157 C     Store the result on disk.
                0158         w_globFile = .FALSE.
                0159         CALL MDS_WRITE_SEC_XZ(
                0160      I                activeVar_file, prec, w_globFile, useCurrentDir,
57622776fd Jean*0161      I                'RL', myNr, 1, myNr,
761964351d Jean*0162      I                active_data_t, dummyRS,
                0163      I                iRec, myOptimIter, myThid )
                0164 
                0165 C     Set active_var to zero.
                0166         DO bj = myByLo(myThid), myByHi(myThid)
                0167          DO bi = myBxLo(myThid), myBxHi(myThid)
                0168           DO k = 1, myNr
                0169             DO i=1,sNx
                0170               active_var(i,k,bi,bj) = 0 _d 0
                0171             ENDDO
                0172           ENDDO
                0173          ENDDO
                0174         ENDDO
                0175 
                0176       ENDIF
                0177 
                0178 C     >>>>>>>>>>>>>>>>>>> TANGENT RUN <<<<<<<<<<<<<<<<<<<
                0179       IF (theSimulationMode .EQ. TANGENT_SIMULATION) THEN
                0180 C     Read the active variable from file.
                0181         CALL MDS_READ_SEC_XZ(
                0182      I                activeVar_file, prec, useCurrentDir,
57622776fd Jean*0183      I                'RL', myNr, 1, myNr,
761964351d Jean*0184      O                active_var, dummyRS,
                0185      I                iRec, myThid )
                0186       ENDIF
                0187 
                0188       RETURN
                0189       END
                0190 
                0191 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0192 CBOP
                0193 C     !ROUTINE: ACTIVE_READ_XZ_RS
                0194 C     !INTERFACE:
                0195       SUBROUTINE ACTIVE_READ_XZ_RS(
                0196      I                          activeVar_file,
                0197      O                          active_var,
                0198      I                          globalFile,
                0199      I                          useCurrentDir,
                0200      I                          lAdInit,
                0201      I                          iRec,
                0202      I                          myNr,
                0203      I                          theSimulationMode,
                0204      I                          myOptimIter,
                0205      I                          myThid )
                0206 
                0207 C     !DESCRIPTION: \bv
                0208 C     ==================================================================
                0209 C     SUBROUTINE ACTIVE_READ_XZ_RS
                0210 C     ==================================================================
                0211 C     o Read an active XZ _RS variable from file.
                0212 C     The variable *globalfile* can be used as a switch, which allows
                0213 C     to read from a global file. The adjoint files are, however, always
                0214 C     treated as tiled files.
                0215 C     started: heimbach@mit.edu 05-Mar-2001
                0216 C     ==================================================================
                0217 C     SUBROUTINE ACTIVE_READ_XZ_RS
                0218 C     ==================================================================
                0219 C     \ev
                0220 
                0221 C     !USES:
                0222       IMPLICIT NONE
                0223 
                0224 C     == global variables ==
4158fdaabc Patr*0225 #include "EEPARAMS.h"
                0226 #include "SIZE.h"
                0227 #include "PARAMS.h"
5cf4364659 Mart*0228 #include "CTRL_SIZE.h"
4d72283393 Mart*0229 #include "CTRL.h"
4158fdaabc Patr*0230 
761964351d Jean*0231 C     !INPUT/OUTPUT PARAMETERS:
                0232 C     activeVar_file :: filename
                0233 C     active_var     :: array
                0234 C     globalFile     ::
                0235 C     useCurrentDir  :: always read from the current directory
                0236 C                        (even if "mdsioLocalDir" is set)
                0237 C     lAdInit        :: initialisation of corresponding adjoint variable
                0238 C                        and write to active file
                0239 C     iRec           :: record number
                0240 C     myNr           :: vertical array dimension
                0241 C     theSimulationMode :: forward mode or reverse mode simulation
                0242 C     myOptimIter    :: number of optimization iteration (default: 0)
                0243 C     myThid         :: thread number for this instance
                0244       CHARACTER*(*) activeVar_file
                0245       INTEGER  myNr
                0246       _RS      active_var(1-OLx:sNx+OLx,myNr,nSx,nSy)
                0247       LOGICAL  globalFile
                0248       LOGICAL  useCurrentDir
                0249       LOGICAL  lAdInit
                0250       INTEGER  iRec
                0251       INTEGER  theSimulationMode
                0252       INTEGER  myOptimIter
                0253       INTEGER  myThid
                0254 
                0255 C     !LOCAL VARIABLES:
                0256       CHARACTER*(2)  adpref
de57a2ec4b Mart*0257       CHARACTER*(MAX_LEN_FNAM) adfname
761964351d Jean*0258       INTEGER bi,bj
                0259       INTEGER i,k
                0260       INTEGER prec
                0261       LOGICAL w_globFile
                0262       _RS  active_data_t(1-OLx:sNx+OLx,myNr,nSx,nSy)
                0263       _RL  dummyRL(1)
                0264 CEOP
                0265 
                0266 C     force 64-bit io
                0267       prec = ctrlprec
4158fdaabc Patr*0268 
761964351d Jean*0269 C     >>>>>>>>>>>>>>>>>>> FORWARD RUN <<<<<<<<<<<<<<<<<<<
                0270       IF (theSimulationMode .EQ. FORWARD_SIMULATION) THEN
                0271 
                0272 C     Read the active variable from file.
                0273         CALL MDS_READ_SEC_XZ(
                0274      I                activeVar_file, prec, useCurrentDir,
57622776fd Jean*0275      I                'RS', myNr, 1, myNr,
761964351d Jean*0276      O                dummyRL, active_var,
                0277      I                iRec, myThid )
                0278 
                0279         IF ( lAdInit ) THEN
                0280 C     Initialise the corresponding adjoint variable on the
                0281 C     adjoint variable file. These files are tiled.
                0282 
                0283           DO bj = myByLo(myThid), myByHi(myThid)
                0284            DO bi = myBxLo(myThid), myBxHi(myThid)
                0285             DO k = 1, myNr
                0286               DO i=1,sNx
                0287                 active_data_t(i,k,bi,bj) = 0. _d 0
                0288               ENDDO
                0289             ENDDO
                0290            ENDDO
                0291           ENDDO
                0292 
f9d7cbfb72 Ou W*0293           adpref = 'ad'
                0294           CALL ADD_PREFIX( adpref, activeVar_file, adfname )
761964351d Jean*0295           CALL MDS_WRITE_SEC_XZ(
                0296      I                adfname, prec, globalFile, useCurrentDir,
57622776fd Jean*0297      I                'RS', myNr, 1, myNr,
761964351d Jean*0298      I                dummyRL, active_data_t,
                0299      I                iRec, myOptimIter, myThid )
                0300 
                0301         ENDIF
                0302 
                0303       ENDIF
                0304 
                0305 C     >>>>>>>>>>>>>>>>>>> ADJOINT RUN <<<<<<<<<<<<<<<<<<<
                0306       IF (theSimulationMode .EQ. REVERSE_SIMULATION) THEN
                0307 
                0308         CALL MDS_READ_SEC_XZ(
                0309      I                activeVar_file, prec, useCurrentDir,
57622776fd Jean*0310      I                'RS', myNr, 1, myNr,
761964351d Jean*0311      O                dummyRL, active_data_t,
                0312      I                iRec, myThid )
                0313 
                0314 C     Add active_var from appropriate location to data.
                0315         DO bj = myByLo(myThid), myByHi(myThid)
                0316          DO bi = myBxLo(myThid), myBxHi(myThid)
                0317           DO k = 1, myNr
                0318             DO i=1,sNx
                0319               active_data_t(i,k,bi,bj) = active_data_t(i,k,bi,bj)
                0320      &                                 + active_var(i,k,bi,bj)
                0321             ENDDO
                0322           ENDDO
                0323          ENDDO
                0324         ENDDO
                0325 
                0326 C     Store the result on disk.
                0327         w_globFile = .FALSE.
                0328         CALL MDS_WRITE_SEC_XZ(
                0329      I                activeVar_file, prec, w_globFile, useCurrentDir,
57622776fd Jean*0330      I                'RS', myNr, 1, myNr,
761964351d Jean*0331      I                dummyRL, active_data_t,
                0332      I                iRec, myOptimIter, myThid )
                0333 
                0334 C     Set active_var to zero.
                0335         DO bj = myByLo(myThid), myByHi(myThid)
                0336          DO bi = myBxLo(myThid), myBxHi(myThid)
                0337           DO k = 1, myNr
                0338             DO i=1,sNx
                0339               active_var(i,k,bi,bj) = 0 _d 0
                0340             ENDDO
                0341           ENDDO
                0342          ENDDO
                0343         ENDDO
                0344 
                0345       ENDIF
                0346 
                0347 C     >>>>>>>>>>>>>>>>>>> TANGENT RUN <<<<<<<<<<<<<<<<<<<
                0348       IF (theSimulationMode .EQ. TANGENT_SIMULATION) THEN
                0349 C     Read the active variable from file.
                0350         CALL MDS_READ_SEC_XZ(
                0351      I                activeVar_file, prec, useCurrentDir,
57622776fd Jean*0352      I                'RS', myNr, 1, myNr,
761964351d Jean*0353      O                dummyRL, active_var,
                0354      I                iRec, myThid )
                0355       ENDIF
                0356 
                0357       RETURN
                0358       END
                0359 
                0360 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0361 CBOP
                0362 C     !ROUTINE: ACTIVE_READ_YZ_RL
                0363 C     !INTERFACE:
                0364       SUBROUTINE ACTIVE_READ_YZ_RL(
                0365      I                          activeVar_file,
                0366      O                          active_var,
                0367      I                          globalFile,
                0368      I                          useCurrentDir,
                0369      I                          lAdInit,
                0370      I                          iRec,
                0371      I                          myNr,
                0372      I                          theSimulationMode,
                0373      I                          myOptimIter,
                0374      I                          myThid )
                0375 C     !DESCRIPTION: \bv
                0376 C     ==================================================================
                0377 C     SUBROUTINE ACTIVE_READ_YZ_RL
                0378 C     ==================================================================
                0379 C     o Read an active YZ _RL variable from file.
                0380 C     The variable *globalfile* can be used as a switch, which allows
                0381 C     to read from a global file. The adjoint files are, however, always
                0382 C     treated as tiled files.
                0383 C     started: heimbach@mit.edu 05-Mar-2001
                0384 C     ==================================================================
                0385 C     SUBROUTINE ACTIVE_READ_YZ_RL
                0386 C     ==================================================================
                0387 C     \ev
                0388 
                0389 C     !USES:
                0390       IMPLICIT NONE
                0391 
                0392 C     == global variables ==
4158fdaabc Patr*0393 #include "EEPARAMS.h"
                0394 #include "SIZE.h"
                0395 #include "PARAMS.h"
5cf4364659 Mart*0396 #include "CTRL_SIZE.h"
4d72283393 Mart*0397 #include "CTRL.h"
4158fdaabc Patr*0398 
761964351d Jean*0399 C     !INPUT/OUTPUT PARAMETERS:
                0400 C     activeVar_file :: filename
                0401 C     active_var     :: array
                0402 C     globalFile     ::
                0403 C     useCurrentDir  :: always read from the current directory
                0404 C                        (even if "mdsioLocalDir" is set)
                0405 C     lAdInit        :: initialisation of corresponding adjoint variable
                0406 C                        and write to active file
                0407 C     iRec           :: record number
                0408 C     myNr           :: vertical array dimension
                0409 C     theSimulationMode :: forward mode or reverse mode simulation
                0410 C     myOptimIter    :: number of optimization iteration (default: 0)
                0411 C     myThid         :: thread number for this instance
                0412       CHARACTER*(*) activeVar_file
                0413       INTEGER  myNr
                0414       _RL      active_var(1-OLy:sNy+OLy,myNr,nSx,nSy)
                0415       LOGICAL  globalFile
                0416       LOGICAL  useCurrentDir
                0417       LOGICAL  lAdInit
                0418       INTEGER  iRec
                0419       INTEGER  theSimulationMode
                0420       INTEGER  myOptimIter
                0421       INTEGER  myThid
                0422 
                0423 C     !LOCAL VARIABLES:
                0424       CHARACTER*(2)  adpref
de57a2ec4b Mart*0425       CHARACTER*(MAX_LEN_FNAM) adfname
761964351d Jean*0426       INTEGER bi,bj
                0427       INTEGER j,k
                0428       INTEGER prec
                0429       LOGICAL w_globFile
                0430       _RS  dummyRS(1)
                0431       _RL  active_data_t(1-OLy:sNy+OLy,myNr,nSx,nSy)
                0432 CEOP
                0433 
                0434 C     force 64-bit io
                0435       prec = ctrlprec
4158fdaabc Patr*0436 
761964351d Jean*0437 C     >>>>>>>>>>>>>>>>>>> FORWARD RUN <<<<<<<<<<<<<<<<<<<
                0438       IF (theSimulationMode .EQ. FORWARD_SIMULATION) THEN
                0439 
                0440 C     Read the active variable from file.
                0441         CALL MDS_READ_SEC_YZ(
                0442      I                activeVar_file, prec, useCurrentDir,
57622776fd Jean*0443      I                'RL', myNr, 1, myNr,
761964351d Jean*0444      O                active_var, dummyRS,
                0445      I                iRec, myThid )
                0446 
                0447         IF ( lAdInit ) THEN
                0448 C     Initialise the corresponding adjoint variable on the
                0449 C     adjoint variable file. These files are tiled.
                0450 
                0451           DO bj = myByLo(myThid), myByHi(myThid)
                0452            DO bi = myBxLo(myThid), myBxHi(myThid)
                0453             DO k = 1, myNr
                0454              DO j=1,sNy
                0455                 active_data_t(j,k,bi,bj) = 0. _d 0
                0456              ENDDO
                0457             ENDDO
                0458            ENDDO
                0459           ENDDO
                0460 
f9d7cbfb72 Ou W*0461           adpref = 'ad'
                0462           CALL ADD_PREFIX( adpref, activeVar_file, adfname )
761964351d Jean*0463           CALL MDS_WRITE_SEC_YZ(
                0464      I                adfname, prec, globalFile, useCurrentDir,
57622776fd Jean*0465      I                'RL', myNr, 1, myNr,
761964351d Jean*0466      I                active_data_t, dummyRS,
                0467      I                iRec, myOptimIter, myThid )
                0468 
                0469         ENDIF
                0470 
                0471       ENDIF
                0472 
                0473 C     >>>>>>>>>>>>>>>>>>> ADJOINT RUN <<<<<<<<<<<<<<<<<<<
                0474       IF (theSimulationMode .EQ. REVERSE_SIMULATION) THEN
                0475 
                0476         CALL MDS_READ_SEC_YZ(
                0477      I                activeVar_file, prec, useCurrentDir,
57622776fd Jean*0478      I                'RL', myNr, 1, myNr,
761964351d Jean*0479      O                active_data_t, dummyRS,
                0480      I                iRec, myThid )
                0481 
                0482 C     Add active_var from appropriate location to data.
                0483         DO bj = myByLo(myThid), myByHi(myThid)
                0484          DO bi = myBxLo(myThid), myBxHi(myThid)
                0485           DO k = 1, myNr
                0486            DO j=1,sNy
                0487               active_data_t(j,k,bi,bj) = active_data_t(j,k,bi,bj)
                0488      &                                 + active_var(j,k,bi,bj)
                0489            ENDDO
                0490           ENDDO
                0491          ENDDO
                0492         ENDDO
                0493 
                0494 C     Store the result on disk.
                0495         w_globFile = .FALSE.
                0496         CALL MDS_WRITE_SEC_YZ(
                0497      I                activeVar_file, prec, w_globFile, useCurrentDir,
57622776fd Jean*0498      I                'RL', myNr, 1, myNr,
761964351d Jean*0499      I                active_data_t, dummyRS,
                0500      I                iRec, myOptimIter, myThid )
                0501 
                0502 C     Set active_var to zero.
                0503         DO bj = myByLo(myThid), myByHi(myThid)
                0504          DO bi = myBxLo(myThid), myBxHi(myThid)
                0505           DO k = 1, myNr
                0506            DO j=1,sNy
                0507               active_var(j,k,bi,bj) = 0 _d 0
                0508            ENDDO
                0509           ENDDO
                0510          ENDDO
                0511         ENDDO
                0512 
                0513       ENDIF
                0514 
                0515 C     >>>>>>>>>>>>>>>>>>> TANGENT RUN <<<<<<<<<<<<<<<<<<<
                0516       IF (theSimulationMode .EQ. TANGENT_SIMULATION) THEN
                0517 C     Read the active variable from file.
                0518         CALL MDS_READ_SEC_YZ(
                0519      I                activeVar_file, prec, useCurrentDir,
57622776fd Jean*0520      I                'RL', myNr, 1, myNr,
761964351d Jean*0521      O                active_var, dummyRS,
                0522      I                iRec, myThid )
                0523       ENDIF
                0524 
                0525       RETURN
                0526       END
                0527 
                0528 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0529 CBOP
                0530 C     !ROUTINE: ACTIVE_READ_YZ_RS
                0531 C     !INTERFACE:
                0532       SUBROUTINE ACTIVE_READ_YZ_RS(
                0533      I                          activeVar_file,
                0534      O                          active_var,
                0535      I                          globalFile,
                0536      I                          useCurrentDir,
                0537      I                          lAdInit,
                0538      I                          iRec,
                0539      I                          myNr,
                0540      I                          theSimulationMode,
                0541      I                          myOptimIter,
                0542      I                          myThid )
                0543 
                0544 C     !DESCRIPTION: \bv
                0545 C     ==================================================================
                0546 C     SUBROUTINE ACTIVE_READ_YZ_RS
                0547 C     ==================================================================
                0548 C     o Read an active YZ _RS variable from file.
                0549 C     The variable *globalfile* can be used as a switch, which allows
                0550 C     to read from a global file. The adjoint files are, however, always
                0551 C     treated as tiled files.
                0552 C     started: heimbach@mit.edu 05-Mar-2001
                0553 C     ==================================================================
                0554 C     SUBROUTINE ACTIVE_READ_YZ_RS
                0555 C     ==================================================================
                0556 C     \ev
                0557 
                0558 C     !USES:
                0559       IMPLICIT NONE
                0560 
                0561 C     == global variables ==
                0562 #include "EEPARAMS.h"
                0563 #include "SIZE.h"
                0564 #include "PARAMS.h"
5cf4364659 Mart*0565 #include "CTRL_SIZE.h"
4d72283393 Mart*0566 #include "CTRL.h"
4158fdaabc Patr*0567 
761964351d Jean*0568 C     !INPUT/OUTPUT PARAMETERS:
                0569 C     activeVar_file :: filename
                0570 C     active_var     :: array
                0571 C     globalFile     ::
                0572 C     useCurrentDir  :: always read from the current directory
                0573 C                        (even if "mdsioLocalDir" is set)
                0574 C     lAdInit        :: initialisation of corresponding adjoint variable
                0575 C                        and write to active file
                0576 C     iRec           :: record number
                0577 C     myNr           :: vertical array dimension
                0578 C     theSimulationMode :: forward mode or reverse mode simulation
                0579 C     myOptimIter    :: number of optimization iteration (default: 0)
                0580 C     myThid         :: thread number for this instance
                0581       CHARACTER*(*) activeVar_file
                0582       INTEGER  myNr
                0583       _RS      active_var(1-OLy:sNy+OLy,myNr,nSx,nSy)
                0584       LOGICAL  globalFile
                0585       LOGICAL  useCurrentDir
                0586       LOGICAL  lAdInit
                0587       INTEGER  iRec
                0588       INTEGER  theSimulationMode
                0589       INTEGER  myOptimIter
                0590       INTEGER  myThid
                0591 
                0592 C     !LOCAL VARIABLES:
                0593       CHARACTER*(2)  adpref
de57a2ec4b Mart*0594       CHARACTER*(MAX_LEN_FNAM) adfname
761964351d Jean*0595       INTEGER bi,bj
                0596       INTEGER j,k
                0597       INTEGER prec
                0598       LOGICAL w_globFile
                0599       _RS  active_data_t(1-OLy:sNy+OLy,myNr,nSx,nSy)
                0600       _RL  dummyRL(1)
                0601 CEOP
                0602 
                0603 C     force 64-bit io
                0604       prec = ctrlprec
4158fdaabc Patr*0605 
761964351d Jean*0606 C     >>>>>>>>>>>>>>>>>>> FORWARD RUN <<<<<<<<<<<<<<<<<<<
                0607       IF (theSimulationMode .EQ. FORWARD_SIMULATION) THEN
                0608 
                0609 C     Read the active variable from file.
                0610         CALL MDS_READ_SEC_YZ(
                0611      I                activeVar_file, prec, useCurrentDir,
57622776fd Jean*0612      I                'RS', myNr, 1, myNr,
761964351d Jean*0613      O                dummyRL, active_var,
                0614      I                iRec, myThid )
                0615 
                0616         IF ( lAdInit ) THEN
                0617 C     Initialise the corresponding adjoint variable on the
                0618 C     adjoint variable file. These files are tiled.
                0619 
                0620           DO bj = myByLo(myThid), myByHi(myThid)
                0621            DO bi = myBxLo(myThid), myBxHi(myThid)
                0622             DO k = 1, myNr
                0623              DO j=1,sNy
                0624                 active_data_t(j,k,bi,bj) = 0. _d 0
                0625              ENDDO
                0626             ENDDO
                0627            ENDDO
                0628           ENDDO
                0629 
f9d7cbfb72 Ou W*0630           adpref = 'ad'
                0631           CALL ADD_PREFIX( adpref, activeVar_file, adfname )
761964351d Jean*0632           CALL MDS_WRITE_SEC_YZ(
                0633      I                adfname, prec, globalFile, useCurrentDir,
57622776fd Jean*0634      I                'RS', myNr, 1, myNr,
761964351d Jean*0635      I                dummyRL, active_data_t,
                0636      I                iRec, myOptimIter, myThid )
                0637 
                0638         ENDIF
                0639 
                0640       ENDIF
                0641 
                0642 C     >>>>>>>>>>>>>>>>>>> ADJOINT RUN <<<<<<<<<<<<<<<<<<<
                0643       IF (theSimulationMode .EQ. REVERSE_SIMULATION) THEN
                0644 
                0645         CALL MDS_READ_SEC_YZ(
                0646      I                activeVar_file, prec, useCurrentDir,
57622776fd Jean*0647      I                'RS', myNr, 1, myNr,
761964351d Jean*0648      O                dummyRL, active_data_t,
                0649      I                iRec, myThid )
                0650 
                0651 C     Add active_var from appropriate location to data.
                0652         DO bj = myByLo(myThid), myByHi(myThid)
                0653          DO bi = myBxLo(myThid), myBxHi(myThid)
                0654           DO k = 1, myNr
                0655            DO j=1,sNy
                0656               active_data_t(j,k,bi,bj) = active_data_t(j,k,bi,bj)
                0657      &                                 + active_var(j,k,bi,bj)
                0658            ENDDO
                0659           ENDDO
                0660          ENDDO
                0661         ENDDO
                0662 
                0663 C     Store the result on disk.
                0664         w_globFile = .FALSE.
                0665         CALL MDS_WRITE_SEC_YZ(
                0666      I                activeVar_file, prec, w_globFile, useCurrentDir,
57622776fd Jean*0667      I                'RS', myNr, 1, myNr,
761964351d Jean*0668      I                dummyRL, active_data_t,
                0669      I                iRec, myOptimIter, myThid )
                0670 
                0671 C     Set active_var to zero.
                0672         DO bj = myByLo(myThid), myByHi(myThid)
                0673          DO bi = myBxLo(myThid), myBxHi(myThid)
                0674           DO k = 1, myNr
                0675            DO j=1,sNy
                0676               active_var(j,k,bi,bj) = 0 _d 0
                0677            ENDDO
                0678           ENDDO
                0679          ENDDO
                0680         ENDDO
                0681 
                0682       ENDIF
                0683 
                0684 C     >>>>>>>>>>>>>>>>>>> TANGENT RUN <<<<<<<<<<<<<<<<<<<
                0685       IF (theSimulationMode .EQ. TANGENT_SIMULATION) THEN
                0686 C     Read the active variable from file.
                0687         CALL MDS_READ_SEC_YZ(
                0688      I                activeVar_file, prec, useCurrentDir,
57622776fd Jean*0689      I                'RS', myNr, 1, myNr,
761964351d Jean*0690      O                dummyRL, active_var,
                0691      I                iRec, myThid )
                0692       ENDIF
                0693 
                0694       RETURN
                0695       END
                0696 
                0697 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0698 CBOP
                0699 C     !ROUTINE: ACTIVE_WRITE_XZ_RL
                0700 C     !INTERFACE:
                0701       SUBROUTINE ACTIVE_WRITE_XZ_RL(
                0702      I                          activeVar_file,
                0703      I                          active_var,
                0704      I                          globalFile,
                0705      I                          useCurrentDir,
                0706      I                          iRec,
                0707      I                          myNr,
                0708      I                          theSimulationMode,
                0709      I                          myOptimIter,
                0710      I                          myThid )
                0711 
                0712 C     !DESCRIPTION: \bv
                0713 C     ==================================================================
                0714 C     SUBROUTINE ACTIVE_WRITE_XZ_RL
                0715 C     ==================================================================
                0716 C     o Write an active XZ _RL variable to a file.
                0717 C     started: heimbach@mit.edu 05-Mar-2001
                0718 C     ==================================================================
                0719 C     SUBROUTINE ACTIVE_WRITE_XZ_RL
                0720 C     ==================================================================
                0721 C     \ev
                0722 
                0723 C     !USES:
                0724       IMPLICIT NONE
                0725 
                0726 C     == global variables ==
                0727 #include "EEPARAMS.h"
                0728 #include "SIZE.h"
                0729 #include "PARAMS.h"
5cf4364659 Mart*0730 #include "CTRL_SIZE.h"
4d72283393 Mart*0731 #include "CTRL.h"
761964351d Jean*0732 
                0733 C     !INPUT/OUTPUT PARAMETERS:
                0734 C     activeVar_file :: filename
                0735 C     active_var     :: array
                0736 C     globalFile     ::
                0737 C     useCurrentDir  :: always write to the current directory
                0738 C                        (even if "mdsioLocalDir" is set)
                0739 C     iRec           :: record number
                0740 C     myNr           :: vertical array dimension
                0741 C     theSimulationMode :: forward mode or reverse mode simulation
                0742 C     myOptimIter    :: number of optimization iteration (default: 0)
                0743 C     myThid         :: thread number for this instance
                0744       CHARACTER*(*) activeVar_file
                0745       INTEGER  myNr
                0746       _RL      active_var(1-OLx:sNx+OLx,myNr,nSx,nSy)
                0747       LOGICAL  globalFile
                0748       LOGICAL  useCurrentDir
                0749       INTEGER  iRec
                0750       INTEGER  theSimulationMode
                0751       INTEGER  myOptimIter
                0752       INTEGER  myThid
                0753 
                0754 C     !LOCAL VARIABLES:
                0755       INTEGER  i,k
                0756       INTEGER  bi,bj
                0757       INTEGER  prec
                0758       _RS  dummyRS(1)
                0759       _RL  active_data_t(1-OLx:sNx+OLx,myNr,nSx,nSy)
                0760 CEOP
                0761 
                0762 C     force 64-bit io
                0763       prec = ctrlprec
                0764 
                0765 C     >>>>>>>>>>>>>>>>>>> FORWARD RUN <<<<<<<<<<<<<<<<<<<
                0766       IF (theSimulationMode .EQ. FORWARD_SIMULATION) THEN
                0767         CALL MDS_WRITE_SEC_XZ(
                0768      I                activeVar_file, prec, globalFile, useCurrentDir,
57622776fd Jean*0769      I                'RL', myNr, 1, myNr,
761964351d Jean*0770      I                active_var, dummyRS,
                0771      I                iRec, myOptimIter, myThid )
                0772       ENDIF
                0773 
                0774 C     >>>>>>>>>>>>>>>>>>> ADJOINT RUN <<<<<<<<<<<<<<<<<<<
                0775       IF (theSimulationMode .EQ. REVERSE_SIMULATION) THEN
                0776 
                0777         CALL MDS_READ_SEC_XZ(
                0778      I                activeVar_file, prec, useCurrentDir,
57622776fd Jean*0779      I                'RL', myNr, 1, myNr,
761964351d Jean*0780      O                active_data_t, dummyRS,
                0781      I                iRec, myThid )
                0782 
                0783 C     Add active_var from appropriate location to data.
                0784         DO bj = myByLo(myThid), myByHi(myThid)
                0785          DO bi = myBxLo(myThid), myBxHi(myThid)
                0786           DO k = 1, myNr
                0787             DO i=1,sNx
                0788               active_var(i,k,bi,bj) = active_var(i,k,bi,bj)
                0789      &                              + active_data_t(i,k,bi,bj)
                0790               active_data_t(i,k,bi,bj) = 0. _d 0
                0791             ENDDO
                0792           ENDDO
                0793          ENDDO
                0794         ENDDO
                0795         CALL MDS_WRITE_SEC_XZ(
                0796      I                activeVar_file, prec, globalFile, useCurrentDir,
57622776fd Jean*0797      I                'RL', myNr, 1, myNr,
761964351d Jean*0798      I                active_data_t, dummyRS,
                0799      I                iRec, myOptimIter, myThid )
                0800 
                0801       ENDIF
                0802 
                0803 C     >>>>>>>>>>>>>>>>>>> TANGENT RUN <<<<<<<<<<<<<<<<<<<
                0804       IF (theSimulationMode .EQ. TANGENT_SIMULATION) THEN
                0805         CALL MDS_WRITE_SEC_XZ(
                0806      I                activeVar_file, prec, globalFile, useCurrentDir,
57622776fd Jean*0807      I                'RL', myNr, 1, myNr,
761964351d Jean*0808      I                active_var, dummyRS,
                0809      I                iRec, myOptimIter, myThid )
                0810       ENDIF
                0811 
                0812       RETURN
                0813       END
                0814 
                0815 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0816 CBOP
                0817 C     !ROUTINE: ACTIVE_WRITE_XZ_RS
                0818 C     !INTERFACE:
                0819       SUBROUTINE ACTIVE_WRITE_XZ_RS(
                0820      I                          activeVar_file,
                0821      I                          active_var,
                0822      I                          globalFile,
                0823      I                          useCurrentDir,
                0824      I                          iRec,
                0825      I                          myNr,
                0826      I                          theSimulationMode,
                0827      I                          myOptimIter,
                0828      I                          myThid )
                0829 
                0830 C     !DESCRIPTION: \bv
                0831 C     ==================================================================
                0832 C     SUBROUTINE ACTIVE_WRITE_XZ_RS
                0833 C     ==================================================================
                0834 C     o Write an active XZ _RS variable to a file.
                0835 C     started: heimbach@mit.edu 05-Mar-2001
                0836 C     ==================================================================
                0837 C     SUBROUTINE ACTIVE_WRITE_XZ_RS
                0838 C     ==================================================================
                0839 C     \ev
                0840 
                0841 C     !USES:
                0842       IMPLICIT NONE
                0843 
                0844 C     == global variables ==
                0845 #include "EEPARAMS.h"
                0846 #include "SIZE.h"
                0847 #include "PARAMS.h"
5cf4364659 Mart*0848 #include "CTRL_SIZE.h"
4d72283393 Mart*0849 #include "CTRL.h"
4158fdaabc Patr*0850 
761964351d Jean*0851 C     !INPUT/OUTPUT PARAMETERS:
                0852 C     activeVar_file :: filename
                0853 C     active_var     :: array
                0854 C     globalFile     ::
                0855 C     useCurrentDir  :: always write to the current directory
                0856 C                        (even if "mdsioLocalDir" is set)
                0857 C     iRec           :: record number
                0858 C     myNr           :: vertical array dimension
                0859 C     theSimulationMode :: forward mode or reverse mode simulation
                0860 C     myOptimIter    :: number of optimization iteration (default: 0)
                0861 C     myThid         :: thread number for this instance
                0862       CHARACTER*(*) activeVar_file
                0863       INTEGER  myNr
                0864       _RS      active_var(1-OLx:sNx+OLx,myNr,nSx,nSy)
                0865       LOGICAL  globalFile
                0866       LOGICAL  useCurrentDir
                0867       INTEGER  iRec
                0868       INTEGER  theSimulationMode
                0869       INTEGER  myOptimIter
                0870       INTEGER  myThid
                0871 
                0872 C     !LOCAL VARIABLES:
                0873       INTEGER  i,k
                0874       INTEGER  bi,bj
                0875       INTEGER  prec
                0876       _RS  active_data_t(1-OLx:sNx+OLx,myNr,nSx,nSy)
                0877       _RL  dummyRL(1)
                0878 CEOP
                0879 
                0880 C     force 64-bit io
                0881       prec = ctrlprec
                0882 
                0883 C     >>>>>>>>>>>>>>>>>>> FORWARD RUN <<<<<<<<<<<<<<<<<<<
                0884       IF (theSimulationMode .EQ. FORWARD_SIMULATION) THEN
                0885         CALL MDS_WRITE_SEC_XZ(
                0886      I                activeVar_file, prec, globalFile, useCurrentDir,
57622776fd Jean*0887      I                'RS', myNr, 1, myNr,
761964351d Jean*0888      I                dummyRL, active_var,
                0889      I                iRec, myOptimIter, myThid )
                0890       ENDIF
                0891 
                0892 C     >>>>>>>>>>>>>>>>>>> ADJOINT RUN <<<<<<<<<<<<<<<<<<<
                0893       IF (theSimulationMode .EQ. REVERSE_SIMULATION) THEN
                0894 
                0895         CALL MDS_READ_SEC_XZ(
                0896      I                activeVar_file, prec, useCurrentDir,
57622776fd Jean*0897      I                'RS', myNr, 1, myNr,
761964351d Jean*0898      O                dummyRL, active_data_t,
                0899      I                iRec, myThid )
                0900 
                0901 C     Add active_var from appropriate location to data.
                0902         DO bj = myByLo(myThid), myByHi(myThid)
                0903          DO bi = myBxLo(myThid), myBxHi(myThid)
                0904           DO k = 1, myNr
                0905             DO i=1,sNx
                0906               active_var(i,k,bi,bj) = active_var(i,k,bi,bj)
                0907      &                              + active_data_t(i,k,bi,bj)
                0908               active_data_t(i,k,bi,bj) = 0. _d 0
                0909             ENDDO
                0910           ENDDO
                0911          ENDDO
                0912         ENDDO
                0913         CALL MDS_WRITE_SEC_XZ(
                0914      I                activeVar_file, prec, globalFile, useCurrentDir,
57622776fd Jean*0915      I                'RS', myNr, 1, myNr,
761964351d Jean*0916      I                dummyRL, active_data_t,
                0917      I                iRec, myOptimIter, myThid )
                0918 
                0919       ENDIF
                0920 
                0921 C     >>>>>>>>>>>>>>>>>>> TANGENT RUN <<<<<<<<<<<<<<<<<<<
                0922       IF (theSimulationMode .EQ. TANGENT_SIMULATION) THEN
                0923         CALL MDS_WRITE_SEC_XZ(
                0924      I                activeVar_file, prec, globalFile, useCurrentDir,
57622776fd Jean*0925      I                'RS', myNr, 1, myNr,
761964351d Jean*0926      I                dummyRL, active_var,
                0927      I                iRec, myOptimIter, myThid )
                0928       ENDIF
                0929 
                0930       RETURN
                0931       END
                0932 
                0933 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0934 CBOP
                0935 C     !ROUTINE: ACTIVE_WRITE_YZ_RL
                0936 C     !INTERFACE:
                0937       SUBROUTINE ACTIVE_WRITE_YZ_RL(
                0938      I                          activeVar_file,
                0939      I                          active_var,
                0940      I                          globalFile,
                0941      I                          useCurrentDir,
                0942      I                          iRec,
                0943      I                          myNr,
                0944      I                          theSimulationMode,
                0945      I                          myOptimIter,
                0946      I                          myThid )
                0947 
                0948 C     !DESCRIPTION: \bv
                0949 C     ==================================================================
                0950 C     SUBROUTINE ACTIVE_WRITE_YZ_RL
                0951 C     ==================================================================
                0952 C     o Write an active YZ _RL variable to a file.
                0953 C     started: heimbach@mit.edu 05-Mar-2001
                0954 C     ==================================================================
                0955 C     SUBROUTINE ACTIVE_WRITE_YZ_RL
                0956 C     ==================================================================
                0957 C     \ev
                0958 
                0959 C     !USES:
                0960       IMPLICIT NONE
                0961 
                0962 C     == global variables ==
4158fdaabc Patr*0963 #include "EEPARAMS.h"
                0964 #include "SIZE.h"
                0965 #include "PARAMS.h"
5cf4364659 Mart*0966 #include "CTRL_SIZE.h"
4d72283393 Mart*0967 #include "CTRL.h"
4158fdaabc Patr*0968 
761964351d Jean*0969 C     !INPUT/OUTPUT PARAMETERS:
                0970 C     activeVar_file :: filename
                0971 C     active_var     :: array
                0972 C     globalFile     ::
                0973 C     useCurrentDir  :: always write to the current directory
                0974 C                        (even if "mdsioLocalDir" is set)
                0975 C     iRec           :: record number
                0976 C     myNr           :: vertical array dimension
                0977 C     theSimulationMode :: forward mode or reverse mode simulation
                0978 C     myOptimIter    :: number of optimization iteration (default: 0)
                0979 C     myThid         :: thread number for this instance
                0980       CHARACTER*(*) activeVar_file
                0981       INTEGER  myNr
                0982       _RL      active_var(1-OLy:sNy+OLy,myNr,nSx,nSy)
                0983       LOGICAL  globalFile
                0984       LOGICAL  useCurrentDir
                0985       INTEGER  iRec
                0986       INTEGER  theSimulationMode
                0987       INTEGER  myOptimIter
                0988       INTEGER  myThid
                0989 
                0990 C     !LOCAL VARIABLES:
                0991       INTEGER  j,k
                0992       INTEGER  bi,bj
                0993       INTEGER  prec
                0994       _RS  dummyRS(1)
                0995       _RL  active_data_t(1-OLy:sNy+OLy,myNr,nSx,nSy)
                0996 CEOP
                0997 
                0998 C     force 64-bit io
                0999       prec = ctrlprec
                1000 
                1001 C     >>>>>>>>>>>>>>>>>>> FORWARD RUN <<<<<<<<<<<<<<<<<<<
                1002       IF (theSimulationMode .EQ. FORWARD_SIMULATION) THEN
                1003         CALL MDS_WRITE_SEC_YZ(
                1004      I                activeVar_file, prec, globalFile, useCurrentDir,
57622776fd Jean*1005      I                'RL', myNr, 1, myNr,
761964351d Jean*1006      I                active_var, dummyRS,
                1007      I                iRec, myOptimIter, myThid )
                1008       ENDIF
                1009 
                1010 C     >>>>>>>>>>>>>>>>>>> ADJOINT RUN <<<<<<<<<<<<<<<<<<<
                1011       IF (theSimulationMode .EQ. REVERSE_SIMULATION) THEN
                1012 
                1013         CALL MDS_READ_SEC_YZ(
                1014      I                activeVar_file, prec, useCurrentDir,
57622776fd Jean*1015      I                'RL', myNr, 1, myNr,
761964351d Jean*1016      O                active_data_t, dummyRS,
                1017      I                iRec, myThid )
                1018 
                1019 C     Add active_var from appropriate location to data.
                1020         DO bj = myByLo(myThid), myByHi(myThid)
                1021          DO bi = myBxLo(myThid), myBxHi(myThid)
                1022           DO k = 1, myNr
                1023            DO j=1,sNy
                1024               active_var(j,k,bi,bj) = active_var(j,k,bi,bj)
                1025      &                              + active_data_t(j,k,bi,bj)
                1026               active_data_t(j,k,bi,bj) = 0. _d 0
                1027            ENDDO
                1028           ENDDO
                1029          ENDDO
                1030         ENDDO
                1031         CALL MDS_WRITE_SEC_YZ(
                1032      I                activeVar_file, prec, globalFile, useCurrentDir,
57622776fd Jean*1033      I                'RL', myNr, 1, myNr,
761964351d Jean*1034      I                active_data_t, dummyRS,
                1035      I                iRec, myOptimIter, myThid )
                1036 
                1037       ENDIF
                1038 
                1039 C     >>>>>>>>>>>>>>>>>>> TANGENT RUN <<<<<<<<<<<<<<<<<<<
                1040       IF (theSimulationMode .EQ. TANGENT_SIMULATION) THEN
                1041         CALL MDS_WRITE_SEC_YZ(
                1042      I                activeVar_file, prec, globalFile, useCurrentDir,
57622776fd Jean*1043      I                'RL', myNr, 1, myNr,
761964351d Jean*1044      I                active_var, dummyRS,
                1045      I                iRec, myOptimIter, myThid )
                1046       ENDIF
                1047 
                1048       RETURN
                1049       END
                1050 
                1051 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                1052 CBOP
                1053 C     !ROUTINE: ACTIVE_WRITE_YZ_RS
                1054 C     !INTERFACE:
                1055       SUBROUTINE ACTIVE_WRITE_YZ_RS(
                1056      I                          activeVar_file,
                1057      I                          active_var,
                1058      I                          globalFile,
                1059      I                          useCurrentDir,
                1060      I                          iRec,
                1061      I                          myNr,
                1062      I                          theSimulationMode,
                1063      I                          myOptimIter,
                1064      I                          myThid )
                1065 
                1066 C     !DESCRIPTION: \bv
                1067 C     ==================================================================
                1068 C     SUBROUTINE ACTIVE_WRITE_YZ_RS
                1069 C     ==================================================================
                1070 C     o Write an active YZ _RS variable to a file.
                1071 C     started: heimbach@mit.edu 05-Mar-2001
                1072 C     ==================================================================
                1073 C     SUBROUTINE ACTIVE_WRITE_YZ_RS
                1074 C     ==================================================================
                1075 C     \ev
                1076 
                1077 C     !USES:
                1078       IMPLICIT NONE
                1079 
                1080 C     == global variables ==
                1081 #include "EEPARAMS.h"
                1082 #include "SIZE.h"
                1083 #include "PARAMS.h"
5cf4364659 Mart*1084 #include "CTRL_SIZE.h"
4d72283393 Mart*1085 #include "CTRL.h"
4158fdaabc Patr*1086 
761964351d Jean*1087 C     !INPUT/OUTPUT PARAMETERS:
                1088 C     activeVar_file :: filename
                1089 C     active_var     :: array
                1090 C     globalFile     ::
                1091 C     useCurrentDir  :: always write to the current directory
                1092 C                        (even if "mdsioLocalDir" is set)
                1093 C     iRec           :: record number
                1094 C     myNr           :: vertical array dimension
                1095 C     theSimulationMode :: forward mode or reverse mode simulation
                1096 C     myOptimIter    :: number of optimization iteration (default: 0)
                1097 C     myThid         :: thread number for this instance
                1098       CHARACTER*(*) activeVar_file
                1099       INTEGER  myNr
                1100       _RS      active_var(1-OLy:sNy+OLy,myNr,nSx,nSy)
                1101       LOGICAL  globalFile
                1102       LOGICAL  useCurrentDir
                1103       INTEGER  iRec
                1104       INTEGER  theSimulationMode
                1105       INTEGER  myOptimIter
                1106       INTEGER  myThid
                1107 
                1108 C     !LOCAL VARIABLES:
                1109       INTEGER  j,k
                1110       INTEGER  bi,bj
                1111       INTEGER  prec
                1112       _RS  active_data_t(1-OLy:sNy+OLy,myNr,nSx,nSy)
                1113       _RL  dummyRL(1)
                1114 CEOP
                1115 
                1116 C     force 64-bit io
                1117       prec = ctrlprec
                1118 
                1119 C     >>>>>>>>>>>>>>>>>>> FORWARD RUN <<<<<<<<<<<<<<<<<<<
                1120       IF (theSimulationMode .EQ. FORWARD_SIMULATION) THEN
                1121         CALL MDS_WRITE_SEC_YZ(
                1122      I                activeVar_file, prec, globalFile, useCurrentDir,
57622776fd Jean*1123      I                'RS', myNr, 1, myNr,
761964351d Jean*1124      I                dummyRL, active_var,
                1125      I                iRec, myOptimIter, myThid )
                1126       ENDIF
                1127 
                1128 C     >>>>>>>>>>>>>>>>>>> ADJOINT RUN <<<<<<<<<<<<<<<<<<<
                1129       IF (theSimulationMode .EQ. REVERSE_SIMULATION) THEN
                1130 
                1131         CALL MDS_READ_SEC_YZ(
                1132      I                activeVar_file, prec, useCurrentDir,
57622776fd Jean*1133      I                'RS', myNr, 1, myNr,
761964351d Jean*1134      O                dummyRL, active_data_t,
                1135      I                iRec, myThid )
                1136 
                1137 C     Add active_var from appropriate location to data.
                1138         DO bj = myByLo(myThid), myByHi(myThid)
                1139          DO bi = myBxLo(myThid), myBxHi(myThid)
                1140           DO k = 1, myNr
                1141            DO j=1,sNy
                1142               active_var(j,k,bi,bj) = active_var(j,k,bi,bj)
                1143      &                              + active_data_t(j,k,bi,bj)
                1144               active_data_t(j,k,bi,bj) = 0. _d 0
                1145            ENDDO
                1146           ENDDO
                1147          ENDDO
                1148         ENDDO
                1149         CALL MDS_WRITE_SEC_YZ(
                1150      I                activeVar_file, prec, globalFile, useCurrentDir,
57622776fd Jean*1151      I                'RS', myNr, 1, myNr,
761964351d Jean*1152      I                dummyRL, active_data_t,
                1153      I                iRec, myOptimIter, myThid )
                1154 
                1155       ENDIF
                1156 
                1157 C     >>>>>>>>>>>>>>>>>>> TANGENT RUN <<<<<<<<<<<<<<<<<<<
                1158       IF (theSimulationMode .EQ. TANGENT_SIMULATION) THEN
                1159         CALL MDS_WRITE_SEC_YZ(
                1160      I                activeVar_file, prec, globalFile, useCurrentDir,
57622776fd Jean*1161      I                'RS', myNr, 1, myNr,
761964351d Jean*1162      I                dummyRL, active_var,
                1163      I                iRec, myOptimIter, myThid )
                1164       ENDIF
                1165 
                1166       RETURN
                1167       END