Back to home page

MITgcm

 
 

    


File indexing completed on 2021-03-16 05:11:13 UTC

view on githubraw file Latest commit a10c595e on 2021-03-16 01:30:05 UTC
52dd931a85 Timo*0001 #include "AUTODIFF_OPTIONS.h"
                0002 #ifdef ALLOW_OPENAD
                0003 # include "OPENAD_OPTIONS.h"
                0004 #endif
                0005 #ifdef ALLOW_CTRL
                0006 # include "CTRL_OPTIONS.h"
                0007 #endif
                0008 #include "AD_CONFIG.h"
                0009 
                0010 CBOP
                0011 C     !ROUTINE: ADDUMMY_FOR_ETAN
                0012 C     !INTERFACE:
                0013       SUBROUTINE ADDUMMY_FOR_ETAN( myTime, myIter, myThid )
                0014 
                0015 C     !DESCRIPTION: \bv
                0016 C     *==========================================================*
a10c595eb6 Timo*0017 C     | SUBROUTINE ADDUMMY_FOR_ETAN                              |
52dd931a85 Timo*0018 C     *==========================================================*
                0019 C     Extract adjoint variable for sea level height
                0020 C     from TAMC/TAF-generated
                0021 C     adjoint common blocks, contained in adcommon.h
                0022 C     and write fields to file;
                0023 C     Make sure common blocks in adcommon.h are up-to-date
                0024 C     w.r.t. current adjoint code.
                0025 C
                0026 C     This dummy routine is located inside integr_continuity
                0027 C     to get the impact of rstar or surf_dr adjoint
                0028 C     variables on adEtaN.
                0029 C
                0030 C     This does not use the diagnostics package because adEtaN is a
                0031 C     "half" time step away from the other adjoint variables, but would
                0032 C     have to be written at the same time.
                0033 C
                0034 C     Created: Tim Smith, tsmith@ices.utexas.edu, Sept 12 2018
                0035 C     *==========================================================*
a10c595eb6 Timo*0036 C     | SUBROUTINE ADDUMMY_FOR_ETAN                              |
52dd931a85 Timo*0037 C     *==========================================================*
                0038 C     \ev
                0039 
                0040 C     !USES:
                0041       IMPLICIT NONE
                0042 
                0043 C     == Global variables ===
                0044 #ifdef ALLOW_OPENAD
                0045       use OAD_active
                0046       use OAD_rev
                0047       use OAD_tape
                0048       use OAD_cp
                0049 #endif
                0050 #include "SIZE.h"
                0051 #include "EEPARAMS.h"
                0052 #include "PARAMS.h"
                0053 #ifdef ALLOW_AUTODIFF_MONITOR
a10c595eb6 Timo*0054 # ifdef ALLOW_OPENAD
                0055 #  include "DYNVARS.h"
                0056 # endif
                0057 # include "AUTODIFF_PARAMS.h"
52dd931a85 Timo*0058 # include "AUTODIFF.h"
                0059 # ifndef ALLOW_OPENAD
                0060 #  include "adcommon.h"
                0061 # endif /* ALLOW_OPENAD */
                0062 # ifdef ALLOW_MNC
                0063 #  include "MNC_PARAMS.h"
                0064 # endif
                0065 #endif /* ALLOW_AUTODIFF_MONITOR */
                0066 
                0067 C     !INPUT/OUTPUT PARAMETERS:
                0068 C     == Routine arguments ==
                0069 C     myTime  :: time counter for this thread
                0070 C     myIter  :: iteration counter for this thread
                0071 C     myThid  :: Thread number for this instance of the routine.
                0072       _RL myTime
                0073       INTEGER myIter
                0074       INTEGER myThid
                0075 
                0076 #if (defined (ALLOW_ADJOINT_RUN) || defined (ALLOW_ADMTLM))
                0077 #ifdef ALLOW_AUTODIFF_MONITOR
                0078 
                0079 C     !FUNCTIONS:
                0080       LOGICAL  DIFFERENT_MULTIPLE
                0081       EXTERNAL DIFFERENT_MULTIPLE
                0082 
                0083 C     !LOCAL VARIABLES:
a10c595eb6 Timo*0084 C     == local variables ==
52dd931a85 Timo*0085 C     suff    :: Hold suffix part of a filename
                0086 C     msgBuf  :: Error message buffer
a10c595eb6 Timo*0087 c     CHARACTER*(10) suff
                0088 c     CHARACTER*(MAX_LEN_MBUF) msgBuf
                0089       _RS dumRS(1)
                0090       LOGICAL doDump
52dd931a85 Timo*0091 CEOP
                0092 
a10c595eb6 Timo*0093       doDump = DIFFERENT_MULTIPLE(adjDumpFreq,myTime,deltaTClock)
52dd931a85 Timo*0094 
a10c595eb6 Timo*0095       IF ( doDump ) THEN
                0096 C increment ad dump record number (used only if dumpAdByRec is true)
                0097 C could be just dumpAdRecEt=dumpAdRecMn+1 ????
                0098        dumpAdRecEt = dumpAdRecEt + 1
                0099        CALL TIMER_START('I/O (WRITE)        [ADJOINT LOOP]', myThid )
                0100       ENDIF
52dd931a85 Timo*0101 
                0102 #ifndef ALLOW_OPENAD
a10c595eb6 Timo*0103       CALL DUMP_ADJ_XY(dumRS, adetan, 'ADJetan ', 'ADJetan.',
                0104      &                 12, doDump, dumpAdRecEt, myTime, myIter,myThid)
52dd931a85 Timo*0105 #else /* ndef ALLOW_OPENAD */
a10c595eb6 Timo*0106       CALL DUMP_ADJ_XY(dumRS, etaN%d, 'ADJetan ', 'ADJetan.',
                0107      &                 12, doDump, dumpAdRecEt, myTime, myIter,myThid)
52dd931a85 Timo*0108 #endif /* ndef ALLOW_OPENAD */
                0109 
a10c595eb6 Timo*0110       IF ( doDump ) THEN
52dd931a85 Timo*0111 
a10c595eb6 Timo*0112 C-- NOW NMC output
52dd931a85 Timo*0113 #ifndef ALLOW_OPENAD
                0114 #ifdef ALLOW_MNC
                0115         IF ( useMNC .AND. autodiff_mnc ) THEN
                0116          CALL MNC_CW_SET_UDIM('adstate', -1, myThid)
                0117          CALL MNC_CW_RL_W_S('D','adstate',0,0,'T',myTime,myThid)
                0118          CALL MNC_CW_SET_UDIM('adstate', 0, myThid)
                0119          CALL MNC_CW_I_W_S('I','adstate',0,0,'iter',myIter,myThid)
                0120          CALL MNC_CW_RL_W_S('D','adstate',0,0,'model_time',myTime,
                0121      &        myThid)
                0122          CALL MNC_CW_RL_W('D','adstate',0,0,'adEta', adEtaN, myThid)
                0123 C     endif mnc
                0124         ENDIF
                0125 #endif /* ALLOW_MNC */
                0126 #endif /* ALLOW_OPENAD */
                0127 
                0128         CALL TIMER_STOP( 'I/O (WRITE)        [ADJOINT LOOP]', myThid )
                0129 
                0130       ENDIF
                0131 
                0132 #endif /* ALLOW_AUTODIFF_MONITOR */
                0133 #endif /* ALLOW_ADJOINT_RUN */
                0134 
                0135       RETURN
                0136       END