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