Back to home page

MITgcm

 
 

    


File indexing completed on 2026-10-08 05:08:54 UTC

view on githubraw file Latest commit 27256b2d on 2026-10-07 21:35:21 UTC
497a20ca68 Patr*0001 #include "SEAICE_OPTIONS.h"
93bee5c6a2 Jean*0002 #include "AD_CONFIG.h"
772b2ed80e Gael*0003 #ifdef ALLOW_AUTODIFF
                0004 # include "AUTODIFF_OPTIONS.h"
                0005 #endif
497a20ca68 Patr*0006 
                0007 CBOP
a10c595eb6 Timo*0008 C     !ROUTINE: SEAICE_AD_DUMP
497a20ca68 Patr*0009 C     !INTERFACE:
a10c595eb6 Timo*0010       SUBROUTINE SEAICE_AD_DUMP( myTime, myIter, myThid )
497a20ca68 Patr*0011 
                0012 C     !DESCRIPTION: \bv
                0013 C     *==========================================================*
4545c79864 Jean*0014 C     | SUBROUTINE seaice_ad_dump
497a20ca68 Patr*0015 C     *==========================================================*
b7b61e618a Mart*0016 C     Extract adjoint variable from TAF-generated
497a20ca68 Patr*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 seaice_ad_dump
497a20ca68 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"
c8d9ddcff2 Patr*0033 #include "SEAICE_SIZE.h"
b7a8f5427d Patr*0034 #include "SEAICE_PARAMS.h"
497a20ca68 Patr*0035 #ifdef ALLOW_MNC
                0036 #include "MNC_PARAMS.h"
                0037 #endif
                0038 #include "GRID.h"
                0039 #ifdef ALLOW_AUTODIFF_MONITOR
6bf91ae0ea Gael*0040 # include "AUTODIFF_PARAMS.h"
                0041 # include "AUTODIFF.h"
497a20ca68 Patr*0042 # include "adcommon.h"
a10c595eb6 Timo*0043 # ifdef ALLOW_DIAGNOSTICS
41c4545f8f Jean*0044 #  include "DIAGNOSTICS_P2SHARE.h"
a10c595eb6 Timo*0045 # endif
497a20ca68 Patr*0046 #endif
                0047 
                0048 C     !INPUT/OUTPUT PARAMETERS:
4545c79864 Jean*0049 C     myTime :: time counter for this thread
                0050 C     myIter :: iteration counter for this thread
                0051 C     myThid :: Thread number for this instance of the routine.
                0052       _RL     myTime
                0053       INTEGER myIter
                0054       INTEGER myThid
497a20ca68 Patr*0055 
                0056 #ifdef ALLOW_AUTODIFF_MONITOR
27256b2d6a Jean*0057 #if (defined ALLOW_ADJOINT_RUN || defined ALLOW_ADMTLM )
497a20ca68 Patr*0058 
4545c79864 Jean*0059 C     !FUNCTIONS:
                0060       LOGICAL  DIFFERENT_MULTIPLE
                0061       EXTERNAL DIFFERENT_MULTIPLE
                0062 
497a20ca68 Patr*0063 C     !LOCAL VARIABLES:
4545c79864 Jean*0064 C     suff   :: Hold suffix part of a filename
                0065 C     msgBuf :: Error message buffer
a10c595eb6 Timo*0066 c     CHARACTER*(10) suff
4545c79864 Jean*0067 c     CHARACTER*(MAX_LEN_MBUF) msgBuf
27256b2d6a Jean*0068 # ifdef ALLOW_MNC
18b4e739f1 Mart*0069       _RL var2Du(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0070       _RL var2Dv(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
27256b2d6a Jean*0071 # endif
18b4e739f1 Mart*0072       _RS dumRS(1)
a10c595eb6 Timo*0073       LOGICAL doExch
                0074       LOGICAL doDump
497a20ca68 Patr*0075 CEOP
                0076 
a10c595eb6 Timo*0077 C--- do dump?
                0078       doDump = DIFFERENT_MULTIPLE( adjDumpFreq, myTime, deltaTClock )
4545c79864 Jean*0079 
a10c595eb6 Timo*0080 C--- Test for adexch based on dumpAdVarExch flag
                0081       doExch = doDump
27256b2d6a Jean*0082 # ifdef ALLOW_DIAGNOSTICS
a10c595eb6 Timo*0083       doExch = doDump .OR. useDiag4AdjOutp
27256b2d6a Jean*0084 # endif
a10c595eb6 Timo*0085       doExch = doExch .AND. ( dumpAdVarExch.EQ.1 )
18b4e739f1 Mart*0086 
a10c595eb6 Timo*0087 C--- If necessary, do the exchanges
                0088       IF ( doExch ) THEN
                0089         CALL TIMER_START('I/O (WRITE)        [ADJOINT LOOP]', myThid )
                0090 # ifdef AUTODIFF_TAMC_COMPATIBILITY
                0091         CALL ADEXCH_XY_RL( myThid, adarea )
                0092         CALL ADEXCH_XY_RL( myThid, adheff )
                0093         CALL ADEXCH_XY_RL( myThid, adhsnow )
                0094         CALL ADEXCH_UV_XYZ_RL( .TRUE., myThid, aduice,advice )
                0095 # else
                0096         CALL ADEXCH_XY_RL( adarea, myThid )
                0097         CALL ADEXCH_XY_RL( adheff, myThid )
                0098         CALL ADEXCH_XY_RL( adhsnow, myThid )
                0099         CALL ADEXCH_UV_3D_RL( aduice,advice, .TRUE., 1, myThid )
                0100 # endif /* AUTODIFF_TAMC_COMPATIBILITY */
27256b2d6a Jean*0101       ENDIF
18b4e739f1 Mart*0102 
a10c595eb6 Timo*0103 C-----------------------------------------------------------------------
                0104 C--- Turn diagnostics on/off
41c4545f8f Jean*0105 C    <-- This has already been done in autodiff_inadmode_set_ad.F
18b4e739f1 Mart*0106 
a10c595eb6 Timo*0107 C-----------------------------------------------------------------------
                0108 C--- do dump?
                0109 C-----------------------------------------------------------------------
                0110       IF ( doDump ) THEN
                0111 c increment ad dump record number (used only if dumpAdByRec is true)
                0112         dumpAdRecSi=dumpAdRecSi+1
                0113         CALL TIMER_START('I/O (WRITE)        [ADJOINT LOOP]', myThid )
                0114       ENDIF
                0115 
                0116 C-----------------------------------------------------------------------
                0117 C--- Seaice state variables
                0118 C-----------------------------------------------------------------------
                0119       CALL DUMP_ADJ_XY( dumRS, adarea, 'ADJarea ', 'ADJarea.',
                0120      &     12, doDump, dumpAdRecSi, myTime, myIter, myThid )
                0121       CALL DUMP_ADJ_XY( dumRS, adheff, 'ADJheff ', 'ADJheff.',
                0122      &     12, doDump, dumpAdRecSi, myTime, myIter, myThid )
                0123       CALL DUMP_ADJ_XY( dumRS, adhsnow, 'ADJhsnow', 'ADJhsnow.',
                0124      &     12, doDump, dumpAdRecSi, myTime, myIter, myThid )
45315406aa Mart*0125 # if ( defined SEAICE_CGRID || defined SEAICE_BGRID_DYNAMICS )
a10c595eb6 Timo*0126 C     IF (SEAICEuseDYNAMICS) THEN
                0127       CALL DUMP_ADJ_XY_UV(
                0128      &     dumRS, aduice, 'ADJuice ', 'ADJuice.',
                0129      &     dumRS, advice, 'ADJvice ', 'ADJvice.',
                0130      &     34, doDump, dumpAdRecSi, myTime, myIter, myThid)
                0131 C     ENDIF
45315406aa Mart*0132 # endif
a10c595eb6 Timo*0133 
                0134       IF ( doDump ) THEN
27256b2d6a Jean*0135 # ifdef ALLOW_MNC
497a20ca68 Patr*0136         IF (useMNC .AND. autodiff_mnc) THEN
af20bc5e19 Jean*0137 
aa753c2639 Mart*0138          CALL MNC_CW_SET_UDIM('adseaice', -1, myThid)
                0139          CALL MNC_CW_RL_W_S('D','adseaice',0,0,'T',myTime,myThid)
                0140          CALL MNC_CW_SET_UDIM('adseaice', 0, myThid)
                0141          CALL MNC_CW_I_W_S('I','adseaice',0,0,'iter',myIter,myThid)
                0142          CALL MNC_CW_RL_W_S('D','adseaice',0,0,'model_time',myTime,
                0143      &        myThid)
497a20ca68 Patr*0144 c
aa753c2639 Mart*0145          IF (dumpAdVarExch.EQ.2) THEN
                0146           CALL COPY_ADVAR_OUTP( dumRS, adarea, var2Du, 1 , 12, myThid )
                0147           CALL MNC_CW_RL_W('D','adseaice',0,0,'adarea',
                0148      &         var2Du, myThid)
                0149           CALL COPY_ADVAR_OUTP( dumRS, adheff, var2Du, 1 , 12, myThid )
                0150           CALL MNC_CW_RL_W('D','adseaice',0,0,'adheff',
                0151      &         var2Du, myThid)
                0152           CALL COPY_ADVAR_OUTP( dumRS, adhsnow, var2Du, 1 , 12, myThid )
                0153           CALL MNC_CW_RL_W('D','adseaice',0,0,'adhsnow',
                0154      &         var2Du, myThid)
27256b2d6a Jean*0155 #  if ( defined SEAICE_CGRID || defined SEAICE_BGRID_DYNAMICS )
aa753c2639 Mart*0156 C          IF (SEAICEuseDYNAMICS) THEN
                0157           CALL COPY_AD_UV_OUTP( dumRS, dumRS, aduice, advice,
                0158      &         var2Du, var2Dv, 1, 34, myThid )
                0159           CALL MNC_CW_RL_W('D','adseaice',0,0,'aduice',
                0160      &         var2Du, myThid)
                0161           CALL MNC_CW_RL_W('D','adseaice',0,0,'advice',
                0162      &         var2Dv, myThid)
                0163 C          ENDIF
27256b2d6a Jean*0164 #  endif
aa753c2639 Mart*0165          ELSE
497a20ca68 Patr*0166           CALL MNC_CW_RL_W('D','adseaice',0,0,'adarea',
                0167      &         adarea, myThid)
                0168           CALL MNC_CW_RL_W('D','adseaice',0,0,'adheff',
                0169      &         adheff, myThid)
                0170           CALL MNC_CW_RL_W('D','adseaice',0,0,'adhsnow',
                0171      &         adhsnow, myThid)
27256b2d6a Jean*0172 #  if ( defined SEAICE_CGRID || defined SEAICE_BGRID_DYNAMICS )
aa753c2639 Mart*0173 C          IF (SEAICEuseDYNAMICS) THEN
                0174           CALL MNC_CW_RL_W('D','adseaice',0,0,'aduice',
497a20ca68 Patr*0175      &         aduice, myThid)
aa753c2639 Mart*0176           CALL MNC_CW_RL_W('D','adseaice',0,0,'advice',
497a20ca68 Patr*0177      &         advice, myThid)
aa753c2639 Mart*0178 C          ENDIF
27256b2d6a Jean*0179 #  endif
aa753c2639 Mart*0180          ENDIF
497a20ca68 Patr*0181 
                0182         ENDIF
27256b2d6a Jean*0183 # endif /* ALLOW_MNC */
497a20ca68 Patr*0184 
4545c79864 Jean*0185         CALL TIMER_STOP( 'I/O (WRITE)        [ADJOINT LOOP]', myThid )
497a20ca68 Patr*0186 
4545c79864 Jean*0187       ENDIF
497a20ca68 Patr*0188 
27256b2d6a Jean*0189 #endif /* ALLOW_ADJOINT_RUN or ALLOW_ADMTLM */
497a20ca68 Patr*0190 #endif /* ALLOW_AUTODIFF_MONITOR */
                0191 
d4bd695091 Jean*0192       RETURN
                0193       END