Back to home page

MITgcm

 
 

    


File indexing completed on 2024-02-01 06:10:18 UTC

view on githubraw file Latest commit 427e24e1 on 2024-01-31 16:50:14 UTC
467a85a3d2 Patr*0001 #include "AUTODIFF_OPTIONS.h"
bead363026 Jean*0002 #ifdef ALLOW_CTRL
                0003 # include "CTRL_OPTIONS.h"
                0004 #endif
735a3220ac Jean*0005 #include "AD_CONFIG.h"
467a85a3d2 Patr*0006 
                0007 CBOP
14f548ea59 Jean*0008 C     !ROUTINE: ADDUMMY_IN_DYNAMICS
467a85a3d2 Patr*0009 C     !INTERFACE:
14f548ea59 Jean*0010       SUBROUTINE ADDUMMY_IN_DYNAMICS( myTime, myIter, myThid )
467a85a3d2 Patr*0011 
                0012 C     !DESCRIPTION: \bv
                0013 C     *==========================================================*
14f548ea59 Jean*0014 C     | SUBROUTINE ADDUMMY_IN_DYNAMICS                           |
467a85a3d2 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     *==========================================================*
14f548ea59 Jean*0022 C     | SUBROUTINE ADDUMMY_IN_DYNAMICS                           |
467a85a3d2 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"
14f548ea59 Jean*0033 #include "AUTODIFF_PARAMS.h"
467a85a3d2 Patr*0034 #ifdef ALLOW_MNC
                0035 #include "MNC_PARAMS.h"
                0036 #endif
14f548ea59 Jean*0037 c#include "GRID.h"
467a85a3d2 Patr*0038 #ifdef ALLOW_AUTODIFF_MONITOR
                0039 # include "adcommon.h"
816e6857b6 Gael*0040 # include "AUTODIFF.h"
467a85a3d2 Patr*0041 #endif
                0042 
                0043 C     !INPUT/OUTPUT PARAMETERS:
                0044 C     == Routine arguments ==
14f548ea59 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
467a85a3d2 Patr*0051 
                0052 #if (defined (ALLOW_ADJOINT_RUN) || defined (ALLOW_ADMTLM))
                0053 #ifdef ALLOW_AUTODIFF_MONITOR
                0054 
14f548ea59 Jean*0055 C     !FUNCTIONS:
                0056       LOGICAL  DIFFERENT_MULTIPLE
                0057       EXTERNAL DIFFERENT_MULTIPLE
                0058 
467a85a3d2 Patr*0059 C     !LOCAL VARIABLES:
                0060 c     == local variables ==
14f548ea59 Jean*0061 C     suff   :: Hold suffix part of a filename
                0062 C     msgBuf :: Error message buffer
df5a9764ba Jean*0063       CHARACTER*(10) suff
7c50f07931 Mart*0064 c     CHARACTER*(MAX_LEN_MBUF) msgBuf
14f548ea59 Jean*0065 #ifdef ALLOW_AUTODIFF_MONITOR_DIAG
                0066       _RL var3Du(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
                0067       _RS dumRS(1)
                0068 #endif
467a85a3d2 Patr*0069 CEOP
                0070 
                0071       IF (
14f548ea59 Jean*0072      &  DIFFERENT_MULTIPLE(adjDumpFreq,myTime,deltaTClock)
467a85a3d2 Patr*0073      & ) THEN
                0074 
14f548ea59 Jean*0075         CALL TIMER_START('I/O (WRITE)        [ADJOINT LOOP]', myThid )
                0076 
816e6857b6 Gael*0077 c increment ad dump record number (used only if dumpAdByRec is true)
                0078         dumpAdRecDy=dumpAdRecDy+1
                0079 c#ifdef ALLOW_DEBUG
                0080 c      IF ( debugMode ) print*,'dumpAdRecDy',dumpAdRecDy
                0081 c#endif
                0082 
14f548ea59 Jean*0083         IF ( dumpAdVarExch.EQ.1 ) THEN
467a85a3d2 Patr*0084 #ifdef AUTODIFF_TAMC_COMPATIBILITY
                0085 C
14f548ea59 Jean*0086 #else /* ndfef AUTODIFF_TAMC_COMPATIBILITY */
467a85a3d2 Patr*0087 #   ifdef ALLOW_AUTODIFF_MONITOR_DIAG
14f548ea59 Jean*0088          CALL ADEXCH_3D_RL( adrhoinsitu, Nr, myThid )
                0089          CALL ADEXCH_3D_RL( adtotphihyd, Nr, myThid )
467a85a3d2 Patr*0090 #   endif
                0091 #endif /* AUTODIFF_TAMC_COMPATIBILITY */
14f548ea59 Jean*0092         ENDIF
467a85a3d2 Patr*0093 
                0094 C--     Set suffix for this set of data files.
df5a9764ba Jean*0095         IF ( rwSuffixType.EQ.0 ) THEN
                0096           WRITE(suff,'(I10.10)') myIter
                0097         ELSE
                0098           CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
                0099         ENDIF
467a85a3d2 Patr*0100 
                0101 #ifdef ALLOW_AUTODIFF_MONITOR_DIAG
14f548ea59 Jean*0102         IF ( dumpAdVarExch.NE.2 ) THEN
816e6857b6 Gael*0103           IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJrhoinsitu.',
                0104      &                          suff, adrhoinsitu, myIter, myThid )
                0105           IF (  dumpAdByRec   ) CALL WRITE_REC_XYZ_RL( 'ADJrhoinsitu',
4545c79864 Jean*0106      &                      adrhoinsitu, dumpAdRecDy, myIter, myThid )
467a85a3d2 Patr*0107 cph( is set to zero in addiags_phi_hyd
14f548ea59 Jean*0108 c          CALL WRITE_FLD_XYZ_RL( 'ADJtotphihyd.', suff,
                0109 c                                 adtotphihyd, myIter, myThid )
467a85a3d2 Patr*0110 cph)
14f548ea59 Jean*0111         ELSE
                0112 C       case dumpAdVarExch = 2
                0113           CALL COPY_ADVAR_OUTP( dumRS,adrhoinsitu,var3Du,Nr,12,myThid )
816e6857b6 Gael*0114           IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJrhoinsitu.',
                0115      &                          suff, var3Du, myIter, myThid )
                0116           IF (  dumpAdByRec   ) CALL WRITE_REC_XYZ_RL( 'ADJrhoinsitu',
4545c79864 Jean*0117      &                          var3Du, dumpAdRecDy, myIter, myThid )
14f548ea59 Jean*0118         ENDIF
467a85a3d2 Patr*0119 #endif
                0120 
14f548ea59 Jean*0121         CALL TIMER_STOP( 'I/O (WRITE)        [ADJOINT LOOP]', myThid )
467a85a3d2 Patr*0122 
14f548ea59 Jean*0123       ENDIF
467a85a3d2 Patr*0124 
                0125 #endif /* ALLOW_AUTODIFF_MONITOR */
                0126 #endif /* ALLOW_ADJOINT_RUN */
                0127 
                0128       RETURN
                0129       END