Back to home page

MITgcm

 
 

    


File indexing completed on 2023-07-14 05:10:08 UTC

view on githubraw file Latest commit de57a2ec on 2023-07-13 16:55:13 UTC
97d49af5d4 Jean*0001 #include "AUTODIFF_OPTIONS.h"
                0002 
                0003 C     ==================================================================
                0004 C     active_file_gen_ad.F: Routines to handle the I/O of the active file
                0005 C                           for the adjoint calculations.
                0006 C     Routines
                0007 C    o  adACTIVE_READ_GEN_RL    - Adjoint of ACTIVE_READ_GEN_RL
                0008 C    o  adACTIVE_READ_GEN_RS    - Adjoint of ACTIVE_READ_GEN_RS
                0009 C
                0010 C    o  adACTIVE_WRITE_GEN_RL   - Adjoint of ACTIVE_WRITE_GEN_RL
                0011 C    o  adACTIVE_WRITE_GEN_RS   - Adjoint of ACTIVE_WRITE_GEN_RS
                0012 C
                0013 C     Generic version for each array type (_RL or _RS).
                0014 C     Note: the _RL version can replace the 4 x 2 shape-specific
db46a9c7cf Jean*0015 C           (_xy,_xyz,_xz,_yz) and standard or "_loc" routines.
97d49af5d4 Jean*0016 C     ==================================================================
                0017 
                0018 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0019 CBOP
                0020 C     !ROUTINE: adACTIVE_READ_GEN_RL
                0021 C     !INTERFACE:
                0022 #ifdef AUTODIFF_TAMC_COMPATIBILITY
                0023       SUBROUTINE adACTIVE_READ_GEN_RL(
                0024      I                               activeVar_file,
                0025      I                               arrShape, myNr,
                0026      I                               iRec,
                0027      I                               globalFile,
                0028      I                               useCurrentDir,
                0029      I                               lAdInit,
                0030      I                               myIter,
                0031      I                               myThid,
                0032      O                               adactive_var
                0033      I                               )
                0034 #else
                0035       SUBROUTINE adACTIVE_READ_GEN_RL(
                0036      I                               activeVar_file,
                0037      O                               adactive_var,
                0038      I                               arrShape, myNr,
                0039      I                               iRec,
                0040      I                               globalFile,
                0041      I                               useCurrentDir,
                0042      I                               lAdInit,
                0043      I                               myIter,
                0044      I                               myThid,
                0045      I                               dummy,
                0046      O                               addummy )
                0047 #endif
                0048 
                0049 C     !DESCRIPTION: \bv
                0050 C     ==================================================================
                0051 C     SUBROUTINE adACTIVE_READ_GEN_RL
                0052 C     ==================================================================
                0053 C     o Adjoint of ACTIVE_READ_GEN_RL.
                0054 C     Accept active variable of various (XY,XZ,YZ) shape and level
                0055 C     number, according to arguments arrShape and myNr.
                0056 C     ==================================================================
                0057 C     \ev
                0058 
                0059 C     !USES:
                0060       IMPLICIT NONE
                0061 
                0062 C     == global variables ==
                0063 #include "EEPARAMS.h"
                0064 
                0065 C     !INPUT/OUTPUT PARAMETERS:
                0066 C     activeVar_file :: filename
                0067 C     adactive_var   :: adoint variable array
                0068 C     arrShape       :: shape of active-var array ('XY','XZ' or 'YZ')
                0069 C     myNr           :: number of vertical-levels in active-var array
                0070 C     iRec           :: record number in file
                0071 C     globalFile     :: used for writing global (if =T) or tiled files
                0072 C     useCurrentDir  :: always read from the current directory
                0073 C                        (even if "mdsioLocalDir" is set)
                0074 C     lAdInit        :: initialisation of corresponding adjoint variable
                0075 C                        and write to active file
                0076 C     myIter         :: number of optimization iteration (default: 0)
                0077 C     myThid         :: my Thread Id number
                0078 C     dummy          :: (needed for 2nd derivative code)
                0079       CHARACTER*(*) activeVar_file
                0080       _RL     adactive_var(*)
                0081       CHARACTER*(2) arrShape
                0082       INTEGER myNr
                0083       INTEGER iRec
                0084       LOGICAL globalFile
                0085       LOGICAL useCurrentDir
                0086       LOGICAL lAdInit
                0087       INTEGER myIter
                0088       INTEGER myThid
                0089       _RL     dummy, addummy
                0090 
                0091 C     !LOCAL VARIABLES:
                0092       CHARACTER*(2)  pref
de57a2ec4b Mart*0093       CHARACTER*(MAX_LEN_FNAM) fName
97d49af5d4 Jean*0094 CEOP
                0095 
                0096       pref = 'ad'
f9d7cbfb72 Ou W*0097       CALL ADD_PREFIX( pref, activeVar_file, fName )
97d49af5d4 Jean*0098 
                0099       IF ( arrShape.EQ.'XY' ) THEN
                0100 
                0101         CALL ACTIVE_READ_3D_RL(
                0102      &                 fName, adactive_var, globalFile,
                0103      &                 useCurrentDir, lAdInit, iRec, myNr,
                0104      &                 REVERSE_SIMULATION, myIter, myThid )
                0105 
                0106       ELSEIF ( arrShape.EQ.'XZ' ) THEN
                0107 
                0108         CALL ACTIVE_READ_XZ_RL(
                0109      &                 fName, adactive_var, globalFile,
                0110      &                 useCurrentDir, lAdInit, iRec, myNr,
                0111      &                 REVERSE_SIMULATION, myIter, myThid )
                0112 
                0113       ELSEIF ( arrShape.EQ.'YZ' ) THEN
                0114 
                0115         CALL ACTIVE_READ_YZ_RL(
                0116      &                 fName, adactive_var, globalFile,
                0117      &                 useCurrentDir, lAdInit, iRec, myNr,
                0118      &                 REVERSE_SIMULATION, myIter, myThid )
                0119 
                0120       ELSE
                0121         STOP
                0122      &   'ABNORMAL END: S/R adACTIVE_READ_GEN_RL: invalid arrShape'
                0123       ENDIF
                0124 
                0125       RETURN
                0126       END
                0127 
                0128 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0129 CBOP
                0130 C     !ROUTINE: adACTIVE_READ_GEN_RS
                0131 C     !INTERFACE:
                0132 #ifdef AUTODIFF_TAMC_COMPATIBILITY
                0133       SUBROUTINE adACTIVE_READ_GEN_RS(
                0134      I                               activeVar_file,
                0135      I                               arrShape, myNr,
                0136      I                               iRec,
                0137      I                               globalFile,
                0138      I                               useCurrentDir,
                0139      I                               lAdInit,
                0140      I                               myIter,
                0141      I                               myThid,
                0142      O                               adactive_var
                0143      I                               )
                0144 #else
                0145       SUBROUTINE adACTIVE_READ_GEN_RS(
                0146      I                               activeVar_file,
                0147      O                               adactive_var,
                0148      I                               arrShape, myNr,
                0149      I                               iRec,
                0150      I                               globalFile,
                0151      I                               useCurrentDir,
                0152      I                               lAdInit,
                0153      I                               myIter,
                0154      I                               myThid,
                0155      I                               dummy,
                0156      O                               addummy )
                0157 #endif
                0158 
                0159 C     !DESCRIPTION: \bv
                0160 C     ==================================================================
                0161 C     SUBROUTINE adACTIVE_READ_GEN_RS
                0162 C     ==================================================================
                0163 C     o Adjoint of ACTIVE_READ_GEN_RS.
                0164 C     Accept active variable of various (XY,XZ,YZ) shape and level
                0165 C     number, according to arguments arrShape and myNr.
                0166 C     ==================================================================
                0167 C     \ev
                0168 
                0169 C     !USES:
                0170       IMPLICIT NONE
                0171 
                0172 C     == global variables ==
                0173 #include "EEPARAMS.h"
                0174 
                0175 C     !INPUT/OUTPUT PARAMETERS:
                0176 C     activeVar_file :: filename
                0177 C     adactive_var   :: adoint variable array
                0178 C     arrShape       :: shape of active-var array ('XY','XZ' or 'YZ')
                0179 C     myNr           :: number of vertical-levels in active-var array
                0180 C     iRec           :: record number in file
                0181 C     globalFile     :: used for writing global (if =T) or tiled files
                0182 C     useCurrentDir  :: always read from the current directory
                0183 C                        (even if "mdsioLocalDir" is set)
                0184 C     lAdInit        :: initialisation of corresponding adjoint variable
                0185 C                        and write to active file
                0186 C     myIter         :: number of optimization iteration (default: 0)
                0187 C     myThid         :: my Thread Id number
                0188 C     dummy          :: (needed for 2nd derivative code)
                0189       CHARACTER*(*) activeVar_file
                0190       _RS     adactive_var(*)
                0191       CHARACTER*(2) arrShape
                0192       INTEGER myNr
                0193       INTEGER iRec
                0194       LOGICAL globalFile
                0195       LOGICAL useCurrentDir
                0196       LOGICAL lAdInit
                0197       INTEGER myIter
                0198       INTEGER myThid
                0199       _RS     dummy, addummy
                0200 
                0201 C     !LOCAL VARIABLES:
                0202       CHARACTER*(2)  pref
de57a2ec4b Mart*0203       CHARACTER*(MAX_LEN_FNAM) fName
97d49af5d4 Jean*0204 CEOP
                0205 
                0206       pref = 'ad'
f9d7cbfb72 Ou W*0207       CALL ADD_PREFIX( pref, activeVar_file, fName )
97d49af5d4 Jean*0208 
                0209       IF ( arrShape.EQ.'XY' ) THEN
                0210 
                0211         CALL ACTIVE_READ_3D_RS(
                0212      &                 fName, adactive_var, globalFile,
                0213      &                 useCurrentDir, lAdInit, iRec, myNr,
                0214      &                 REVERSE_SIMULATION, myIter, myThid )
                0215 
                0216       ELSEIF ( arrShape.EQ.'XZ' ) THEN
                0217 
                0218         CALL ACTIVE_READ_XZ_RS(
                0219      &                 fName, adactive_var, globalFile,
                0220      &                 useCurrentDir, lAdInit, iRec, myNr,
                0221      &                 REVERSE_SIMULATION, myIter, myThid )
                0222 
                0223       ELSEIF ( arrShape.EQ.'YZ' ) THEN
                0224 
                0225         CALL ACTIVE_READ_YZ_RS(
                0226      &                 fName, adactive_var, globalFile,
                0227      &                 useCurrentDir, lAdInit, iRec, myNr,
                0228      &                 REVERSE_SIMULATION, myIter, myThid )
                0229 
                0230       ELSE
                0231         STOP
                0232      &   'ABNORMAL END: S/R adACTIVE_READ_GEN_RS: invalid arrShape'
                0233       ENDIF
                0234 
                0235       RETURN
                0236       END
                0237 
                0238 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0239 CBOP
                0240 C     !ROUTINE: adACTIVE_WRITE_GEN_RL
                0241 C     !INTERFACE:
                0242 #ifdef AUTODIFF_TAMC_COMPATIBILITY
                0243       SUBROUTINE adACTIVE_WRITE_GEN_RL(
                0244      I                               activeVar_file,
                0245      I                               arrShape, myNr,
                0246      I                               iRec,
                0247      I                               useCurrentDir,
                0248      I                               myIter,
                0249      I                               myThid,
                0250      U                               adactive_var,
                0251      I                               dummy )
                0252 #else
                0253       SUBROUTINE adACTIVE_WRITE_GEN_RL(
                0254      I                               activeVar_file,
                0255      U                               adactive_var,
                0256      I                               arrShape, myNr,
                0257      I                               iRec,
                0258      I                               useCurrentDir,
                0259      I                               myIter,
                0260      I                               myThid,
                0261      I                               dummy )
                0262 #endif
                0263 
                0264 C     !DESCRIPTION: \bv
                0265 C     ==================================================================
                0266 C     SUBROUTINE adACTIVE_WRITE_GEN_RL
                0267 C     ==================================================================
                0268 C     o Adjoint of ACTIVE_WRITE_GEN_RL.
                0269 C     Accept active variable of various (XY,XZ,YZ) shape and level
                0270 C     number, according to arguments arrShape and myNr.
                0271 C     ==================================================================
                0272 C     \ev
                0273 
                0274 C     !USES:
                0275       IMPLICIT NONE
                0276 
                0277 C     == global variables ==
                0278 #include "EEPARAMS.h"
                0279 
                0280 C     !INPUT/OUTPUT PARAMETERS:
                0281 C     activeVar_file :: filename
                0282 C     active_var     :: active variable array
                0283 C     arrShape       :: shape of active-var array ('XY','XZ' or 'YZ')
                0284 C     myNr           :: number of vertical-levels in active-var array
                0285 C     iRec           :: record number in file
                0286 C     useCurrentDir  :: always write to the current directory
                0287 C                        (even if "mdsioLocalDir" is set)
                0288 C     myIter         :: number of optimization iteration (default: 0)
                0289 C     myThid         :: my Thread Id number
                0290 C     dummy          :: (needed for 2nd derivative code)
                0291       CHARACTER*(*) activeVar_file
                0292       _RL     adactive_var(*)
                0293       CHARACTER*(2) arrShape
                0294       INTEGER myNr
                0295       INTEGER iRec
                0296       LOGICAL useCurrentDir
                0297       INTEGER myIter
                0298       INTEGER myThid
                0299       _RL     dummy
                0300 
                0301 C     !LOCAL VARIABLES:
                0302 C     globalFile     :: used for writing global (if =T) or tiled files
                0303       CHARACTER*(2)  pref
de57a2ec4b Mart*0304       CHARACTER*(MAX_LEN_FNAM) fName
97d49af5d4 Jean*0305       LOGICAL globalFile
                0306 CEOP
                0307 
                0308       pref = 'ad'
f9d7cbfb72 Ou W*0309       CALL ADD_PREFIX( pref, activeVar_file, fName )
97d49af5d4 Jean*0310       globalFile = .FALSE.
                0311 
                0312       IF ( arrShape.EQ.'XY' ) THEN
                0313 
                0314         CALL ACTIVE_WRITE_3D_RL(
                0315      &                 fName, adactive_var, globalFile,
                0316      &                 useCurrentDir, iRec, myNr,
                0317      &                 REVERSE_SIMULATION, myIter, myThid )
                0318 
                0319       ELSEIF ( arrShape.EQ.'XZ' ) THEN
                0320 
                0321         CALL ACTIVE_WRITE_XZ_RL(
                0322      &                 fName, adactive_var, globalFile,
                0323      &                 useCurrentDir, iRec, myNr,
                0324      &                 REVERSE_SIMULATION, myIter, myThid )
                0325 
                0326       ELSEIF ( arrShape.EQ.'YZ' ) THEN
                0327 
                0328         CALL ACTIVE_WRITE_YZ_RL(
                0329      &                 fName, adactive_var, globalFile,
                0330      &                 useCurrentDir, iRec, myNr,
                0331      &                 REVERSE_SIMULATION, myIter, myThid )
                0332 
                0333       ELSE
                0334         STOP
                0335      &   'ABNORMAL END: S/R adACTIVE_WRITE_GEN_RL: invalid arrShape'
                0336       ENDIF
                0337 
                0338       RETURN
                0339       END
                0340 
                0341 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0342 CBOP
                0343 C     !ROUTINE: adACTIVE_WRITE_GEN_RS
                0344 C     !INTERFACE:
                0345 #ifdef AUTODIFF_TAMC_COMPATIBILITY
                0346       SUBROUTINE adACTIVE_WRITE_GEN_RS(
                0347      I                               activeVar_file,
                0348      I                               arrShape, myNr,
                0349      I                               iRec,
                0350      I                               useCurrentDir,
                0351      I                               myIter,
                0352      I                               myThid,
                0353      U                               adactive_var,
                0354      I                               dummy )
                0355 #else
                0356       SUBROUTINE adACTIVE_WRITE_GEN_RS(
                0357      I                               activeVar_file,
                0358      U                               adactive_var,
                0359      I                               arrShape, myNr,
                0360      I                               iRec,
                0361      I                               useCurrentDir,
                0362      I                               myIter,
                0363      I                               myThid,
                0364      I                               dummy )
                0365 #endif
                0366 
                0367 C     !DESCRIPTION: \bv
                0368 C     ==================================================================
                0369 C     SUBROUTINE adACTIVE_WRITE_GEN_RS
                0370 C     ==================================================================
                0371 C     o Adjoint of ACTIVE_WRITE_GEN_RS.
                0372 C     Accept active variable of various (XY,XZ,YZ) shape and level
                0373 C     number, according to arguments arrShape and myNr.
                0374 C     ==================================================================
                0375 C     \ev
                0376 
                0377 C     !USES:
                0378       IMPLICIT NONE
                0379 
                0380 C     == global variables ==
                0381 #include "EEPARAMS.h"
                0382 
                0383 C     !INPUT/OUTPUT PARAMETERS:
                0384 C     activeVar_file :: filename
                0385 C     active_var     :: active variable array
                0386 C     arrShape       :: shape of active-var array ('XY','XZ' or 'YZ')
                0387 C     myNr           :: number of vertical-levels in active-var array
                0388 C     iRec           :: record number in file
                0389 C     useCurrentDir  :: always write to the current directory
                0390 C                        (even if "mdsioLocalDir" is set)
                0391 C     myIter         :: number of optimization iteration (default: 0)
                0392 C     myThid         :: my Thread Id number
                0393 C     dummy          :: (needed for 2nd derivative code)
                0394       CHARACTER*(*) activeVar_file
                0395       _RS     adactive_var(*)
                0396       CHARACTER*(2) arrShape
                0397       INTEGER myNr
                0398       INTEGER iRec
                0399       LOGICAL useCurrentDir
                0400       INTEGER myIter
                0401       INTEGER myThid
                0402       _RS     dummy
                0403 
                0404 C     !LOCAL VARIABLES:
                0405 C     globalFile     :: used for writing global (if =T) or tiled files
                0406       CHARACTER*(2)  pref
de57a2ec4b Mart*0407       CHARACTER*(MAX_LEN_FNAM) fName
97d49af5d4 Jean*0408       LOGICAL globalFile
                0409 CEOP
                0410 
                0411       pref = 'ad'
f9d7cbfb72 Ou W*0412       CALL ADD_PREFIX( pref, activeVar_file, fName )
97d49af5d4 Jean*0413       globalFile = .FALSE.
                0414 
                0415       IF ( arrShape.EQ.'XY' ) THEN
                0416 
                0417         CALL ACTIVE_WRITE_3D_RS(
                0418      &                 fName, adactive_var, globalFile,
                0419      &                 useCurrentDir, iRec, myNr,
                0420      &                 REVERSE_SIMULATION, myIter, myThid )
                0421 
                0422       ELSEIF ( arrShape.EQ.'XZ' ) THEN
                0423 
                0424         CALL ACTIVE_WRITE_XZ_RS(
                0425      &                 fName, adactive_var, globalFile,
                0426      &                 useCurrentDir, iRec, myNr,
                0427      &                 REVERSE_SIMULATION, myIter, myThid )
                0428 
                0429       ELSEIF ( arrShape.EQ.'YZ' ) THEN
                0430 
                0431         CALL ACTIVE_WRITE_YZ_RS(
                0432      &                 fName, adactive_var, globalFile,
                0433      &                 useCurrentDir, iRec, myNr,
                0434      &                 REVERSE_SIMULATION, myIter, myThid )
                0435 
                0436       ELSE
                0437         STOP
                0438      &   'ABNORMAL END: S/R adACTIVE_WRITE_GEN_RS: invalid arrShape'
                0439       ENDIF
                0440 
                0441       RETURN
                0442       END