Back to home page

MITgcm

 
 

    


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

view on githubraw file Latest commit 41c4545f on 2024-05-10 15:00:41 UTC
feb9c444ae Patr*0001 #include "PTRACERS_OPTIONS.h"
93bee5c6a2 Jean*0002 #include "AD_CONFIG.h"
1198adf517 Jean*0003 #ifdef ALLOW_AUTODIFF
                0004 # include "AUTODIFF_OPTIONS.h"
                0005 #endif
feb9c444ae Patr*0006 
                0007 CBOP
                0008 C     !ROUTINE: ptracers_ad_dump
                0009 C     !INTERFACE:
af20bc5e19 Jean*0010       SUBROUTINE ptracers_ad_dump( myTime, myIter, myThid )
feb9c444ae Patr*0011 
                0012 C     !DESCRIPTION: \bv
                0013 C     *==========================================================*
4545c79864 Jean*0014 C     | SUBROUTINE ptracers_ad_dump
feb9c444ae Patr*0015 C     *==========================================================*
                0016 C     Extract adjoint variable from TAMC/TAF-generated
                0017 C     adjoint common blocks, contained in adcommon.h
                0018 C     and write fields to file;
                0019 C     Make sure common blocks in adcommon.h are up-to-date
                0020 C     w.r.t. current adjoint code.
                0021 C     *==========================================================*
4545c79864 Jean*0022 C     | SUBROUTINE ptracers_ad_dump
feb9c444ae Patr*0023 C     *==========================================================*
                0024 C     \ev
                0025 
                0026 C     !USES:
                0027       IMPLICIT NONE
                0028 
                0029 C     == Global variables ===
                0030 #include "SIZE.h"
                0031 #include "EEPARAMS.h"
                0032 #include "PARAMS.h"
                0033 #include "PTRACERS_SIZE.h"
                0034 #include "PTRACERS_PARAMS.h"
                0035 #ifdef ALLOW_AUTODIFF_MONITOR
a10c595eb6 Timo*0036 # include "AUTODIFF.h"
                0037 # include "AUTODIFF_PARAMS.h"
9ed6d27358 Patr*0038 # include "ptracers_adcommon.h"
feb9c444ae Patr*0039 #endif
a10c595eb6 Timo*0040 #ifdef ALLOW_DIAGNOSTICS
41c4545f8f Jean*0041 # include "DIAGNOSTICS_P2SHARE.h"
a10c595eb6 Timo*0042 #endif
feb9c444ae Patr*0043 
                0044 C     !INPUT/OUTPUT PARAMETERS:
4545c79864 Jean*0045 C     myTime :: time counter for this thread
                0046 C     myIter :: iteration counter for this thread
                0047 C     myThid :: Thread number for this instance of the routine.
                0048       _RL     myTime
                0049       INTEGER myIter
                0050       INTEGER myThid
feb9c444ae Patr*0051 
                0052 #if (defined (ALLOW_ADJOINT_RUN) || defined (ALLOW_ADMTLM))
                0053 #ifdef ALLOW_AUTODIFF_MONITOR
                0054 
4545c79864 Jean*0055 C     !FUNCTIONS:
                0056       LOGICAL  DIFFERENT_MULTIPLE
                0057       EXTERNAL DIFFERENT_MULTIPLE
                0058 
feb9c444ae Patr*0059 C     !LOCAL VARIABLES:
4545c79864 Jean*0060 C     msgBuf :: Error message buffer
feb9c444ae Patr*0061       INTEGER ip
a10c595eb6 Timo*0062       CHARACTER*(8)  diagName
                0063       CHARACTER*(MAX_LEN_FNAM) dumpName
                0064       LOGICAL doExch, doDump
                0065       _RS dumRS(1)
feb9c444ae Patr*0066 CEOP
                0067 
a10c595eb6 Timo*0068 C     Handle exchange options
                0069       doDump = DIFFERENT_MULTIPLE(adjDumpFreq,myTime,deltaTClock)
                0070       doExch = doDump
                0071 #ifdef ALLOW_DIAGNOSTICS
                0072       doExch = doExch.OR.useDiag4AdjOutp
                0073 #endif
                0074       IF (doExch) THEN
                0075        IF (dumpAdVarExch.EQ.1) THEN
                0076         DO ip = 1, PTRACERS_numInUse
                0077 #ifdef AUTODIFF_TAMC_COMPATIBILITY
                0078          CALL ADEXCH_XYZ_RL(myThid, adptracer(1-OLx,1-OLy,1,1,1,ip))
                0079 #else
                0080          CALL ADEXCH_3D_RL(adptracer(1-OLx,1-OLy,1,1,1,ip), Nr, myThid)
                0081 #endif
                0082         ENDDO
                0083        ENDIF
                0084       ENDIF
4545c79864 Jean*0085 
a10c595eb6 Timo*0086       IF (doDump) THEN
4545c79864 Jean*0087         CALL TIMER_START('I/O (WRITE)        [ADJOINT LOOP]', myThid )
a10c595eb6 Timo*0088       ENDIF
feb9c444ae Patr*0089 
a10c595eb6 Timo*0090       DO ip = 1, PTRACERS_numInUse
                0091         WRITE(diagName,'(A6,A2)') 'ADJptr', PTRACERS_ioLabel(ip)
                0092         WRITE(dumpName,'(A10,A2,A1)')
                0093      &        'ADJptracer', PTRACERS_ioLabel(ip), '.'
feb9c444ae Patr*0094 
a10c595eb6 Timo*0095         CALL DUMP_ADJ_XYZ( dumRS, adptracer(1-OLx,1-OLy,1,1,1,ip),
                0096      &                     diagName, dumpName, 12, doDump,
                0097      &                     dumpAdRecMn, myTime, myIter, myThid )
                0098       ENDDO
feb9c444ae Patr*0099 
a10c595eb6 Timo*0100       IF (doDump) THEN
4545c79864 Jean*0101         CALL TIMER_STOP( 'I/O (WRITE)        [ADJOINT LOOP]', myThid )
feb9c444ae Patr*0102       ENDIF
                0103 
                0104 #endif /* ALLOW_AUTODIFF_MONITOR */
                0105 #endif /* ALLOW_ADJOINT_RUN */
                0106 
                0107       RETURN
                0108       END