Back to home page

MITgcm

 
 

    


File indexing completed on 2024-05-11 05:10:14 UTC

view on githubraw file Latest commit 41c4545f on 2024-05-10 15:00:41 UTC
a10c595eb6 Timo*0001 #include "AUTODIFF_OPTIONS.h"
                0002 #include "AD_CONFIG.h"
                0003 
                0004 CBOP
                0005 C !ROUTINE: DUMP_ADJ_XYZ_UV
                0006 C !INTERFACE:
                0007       SUBROUTINE DUMP_ADJ_XYZ_UV(
                0008      I           u3DRS, u3DRL, uDiagName, uDumpName,
                0009      I           v3DRS, v3DRL, vDiagName, vDumpName,
                0010      I           vType, doDump, dumpAdRec, myTime, myIter, myThid )
                0011 
                0012 C !DESCRIPTION:
                0013 C     Helper subroutine to dump to file and fill corresponding diagnostics
                0014 C     for 3-D 2-component vector field given the millions of autodiff options
                0015 
                0016 C !USES:
                0017       IMPLICIT NONE
                0018 
                0019 C     == Global variables ===
                0020 #include "SIZE.h"
                0021 #include "EEPARAMS.h"
                0022 #include "PARAMS.h"
                0023 #include "AUTODIFF_PARAMS.h"
                0024 #ifdef ALLOW_AUTODIFF_MONITOR
                0025 # ifdef ALLOW_DIAGNOSTICS
41c4545f8f Jean*0026 #  include "DIAGNOSTICS_P2SHARE.h"
a10c595eb6 Timo*0027 # endif
                0028 #endif /* ALLOW_AUTODIFF_MONITOR */
                0029 
                0030 C !INPUT/OUTPUT PARAMETERS:
                0031 C   u3DRS   ( RS ) :: input 3-D, u-component AD-variable field
                0032 C   u3DRL   ( RL ) :: input 3-D, u-component AD-variable field
                0033 C   uDiagName (C ) :: u-component diagnostics name
                0034 C   uDumpName (C ) :: u-component output file prefix
                0035 C   v3DRS   ( RS ) :: input 3-D, v-component AD-variable field
                0036 C   v3DRL   ( RL ) :: input 3-D, v-component AD-variable field
                0037 C   vDiagName (C ) :: v-component diagnostics name
                0038 C   vDumpName (C ) :: v-component output file prefix
                0039 C   vType  ( Int ) :: type of AD-variable (select which ADEXCH to use)
                0040 C       vType (1rst digit):
                0041 C           = 1,3 : process RS input field ; = 2,4 : process RL input field
                0042 C           = 1,2 : without sign. ;          = 3,4 : with sign.
                0043 C       vType (2nd digit) = 10 : A-grid location (i.e., grid-cell center)
                0044 C                         = 20 : B-grid location (i.e., grid-cell corner)
                0045 C                         = 30 : C-grid location ; = 40 : D-grid location
                0046 C   doDump   ( L ) :: do write field to file
                0047 C   dumpAdRec (I ) :: record number in file
                0048 C   myTime         :: time counter for this thread
                0049 C   myIter         :: iteration counter for this thread
                0050 C   myThid         :: Thread number for this instance of the routine.
                0051       _RS u3DRS(*)
                0052       _RL u3DRL(*)
                0053       _RS v3DRS(*)
                0054       _RL v3DRL(*)
                0055       CHARACTER*(8) uDiagName
                0056       CHARACTER*(8) vDiagName
                0057       CHARACTER*(*) uDumpName
                0058       CHARACTER*(*) vDumpName
                0059       INTEGER vType
                0060       LOGICAL doDump
                0061       INTEGER dumpAdRec
                0062       _RL     myTime
                0063       INTEGER myIter
                0064       INTEGER myThid
                0065 
                0066 #if (defined (ALLOW_ADJOINT_RUN) || defined (ALLOW_ADMTLM))
                0067 #ifdef ALLOW_AUTODIFF_MONITOR
                0068 
                0069 C !LOCAL VARIABLES:
                0070 C   suff           :: Hold suffix part of a filename
                0071 C   uCopy  ( RL )  :: copy of u-component input field
                0072 C   vCopy  ( RL )  :: copy of v-component input field
                0073       CHARACTER*(10) suff
                0074       _RL uCopy(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
                0075       _RL vCopy(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
                0076 CEOP
                0077 
                0078 C-----------------------------------------------------------------------
                0079 C--- Output adj variables in diagnostics
                0080 C-----------------------------------------------------------------------
                0081 
                0082 C --- 1. Write out dump fields
                0083       IF ( doDump ) THEN
                0084 
                0085 C--     Set suffix for this set of data files.
                0086         IF ( rwSuffixType.EQ.0 ) THEN
                0087           WRITE(suff,'(I10.10)') myIter
                0088         ELSE
                0089           CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
                0090         ENDIF
                0091 
                0092         IF ( dumpAdVarExch.EQ.2 ) THEN
                0093 
                0094 C--       Copy first
                0095           CALL COPY_AD_UV_OUTP( u3DRS, v3DRS, u3DRL, v3DRL,
                0096      &                          uCopy, vCopy, Nr, vType, myThid )
                0097           IF ( dumpAdByRec ) THEN
                0098             CALL WRITE_REC_XYZ_RL( uDumpName, uCopy, dumpAdRec,
                0099      &                             myIter, myThid )
                0100             CALL WRITE_REC_XYZ_RL( vDumpName, vCopy, dumpAdRec,
                0101      &                             myIter, myThid )
                0102           ELSE
                0103             CALL WRITE_FLD_XYZ_RL( uDumpName, suff, uCopy,
                0104      &                             myIter, myThid )
                0105             CALL WRITE_FLD_XYZ_RL( vDumpName, suff, vCopy,
                0106      &                             myIter, myThid )
                0107           ENDIF
                0108 
                0109         ELSE ! dumpAdVarExch.eq.2
                0110 
                0111 C--       Write directly
                0112           IF ( MOD(vType,2).NE.1 ) THEN
                0113             IF ( dumpAdByRec ) THEN
                0114               CALL WRITE_REC_XYZ_RL( uDumpName, u3DRL, dumpAdRec,
                0115      &                               myIter, myThid )
                0116               CALL WRITE_REC_XYZ_RL( vDumpName, v3DRL, dumpAdRec,
                0117      &                               myIter, myThid )
                0118             ELSE
                0119               CALL WRITE_FLD_XYZ_RL( uDumpName, suff,u3DRL,
                0120      &                               myIter, myThid )
                0121               CALL WRITE_FLD_XYZ_RL( vDumpName, suff,v3DRL,
                0122      &                               myIter, myThid )
                0123             ENDIF
                0124           ELSE ! is RL
                0125             IF ( dumpAdByRec ) THEN
                0126               CALL WRITE_REC_XYZ_RS( uDumpName, u3DRS, dumpAdRec,
                0127      &                               myIter, myThid )
                0128               CALL WRITE_REC_XYZ_RS( uDumpName, v3DRS, dumpAdRec,
                0129      &                               myIter, myThid )
                0130             ELSE
                0131               CALL WRITE_FLD_XYZ_RS( uDumpName, suff, u3DRS,
                0132      &                               myIter, myThid )
                0133               CALL WRITE_FLD_XYZ_RS( vDumpName, suff, v3DRS,
                0134      &                               myIter, myThid )
                0135             ENDIF
                0136           ENDIF
                0137 
                0138         ENDIF
                0139       ENDIF
                0140 
                0141 C --- 2. Fill diagnostics
                0142 #ifdef ALLOW_DIAGNOSTICS
                0143       IF ( useDiag4AdjOutp .AND. uDiagName.NE.'- None -'
                0144      &                     .AND. vDiagName.NE.'- None -' ) THEN
                0145         IF ( dumpAdVarExch.EQ.2 ) THEN
                0146           IF ( .NOT.doDump )
                0147      &      CALL COPY_AD_UV_OUTP( u3DRS, v3DRS, u3DRL, v3DRL,
                0148      &                            uCopy, vCopy, Nr, vType, myThid )
                0149           CALL DIAGNOSTICS_FILL( uCopy, uDiagName, 0,Nr,0,1,1, myThid )
                0150           CALL DIAGNOSTICS_FILL( vCopy, vDiagName, 0,Nr,0,1,1, myThid )
                0151         ELSE
                0152           IF ( MOD(vType,2).NE.1 ) THEN
                0153             CALL DIAGNOSTICS_FILL( u3DRL, uDiagName,
                0154      &                             0, Nr, 0, 1, 1, myThid )
                0155             CALL DIAGNOSTICS_FILL( v3DRL, vDiagName,
                0156      &                             0, Nr, 0, 1, 1, myThid )
                0157           ELSE
                0158             CALL DIAGNOSTICS_FILL_RS( u3DRS, uDiagName,
                0159      &                             0, Nr, 0, 1, 1, myThid )
                0160             CALL DIAGNOSTICS_FILL_RS( v3DRS, vDiagName,
                0161      &                             0, Nr, 0, 1, 1, myThid )
                0162           ENDIF
                0163         ENDIF
                0164       ENDIF
                0165 #endif /* ALLOW_DIAGNOSTICS */
                0166 
                0167 #endif /* ALLOW_AUTODIFF_MONITOR */
                0168 #endif /* ALLOW_ADJOINT_RUN */
                0169 
                0170       RETURN
                0171       END