C $Header: /u/gcmpack/MITgcm/verification/OpenAD/code_oad_all/openad_dumpAdjoint.F,v 1.1 2009/01/29 21:46:50 utke Exp $
C $Name:  $

#include "PACKAGES_CONFIG.h"
#include "CPP_OPTIONS.h"
#ifdef ALLOW_OBCS
# include "OBCS_OPTIONS.h"
#endif
#ifdef ALLOW_SEAICE
# include "SEAICE_OPTIONS.h"
#endif
#ifdef ALLOW_GMREDI
# include "GMREDI_OPTIONS.h"
#endif

C start with a copy of THE_MAIN_LOOP
C and remove some the obvious extras
      SUBROUTINE OPENAD_DUMPADJOINT(myTime, myIter, myThid )
      IMPLICIT NONE

C     == Global variables ==
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"

c**************************************
#ifdef ALLOW_AUTODIFF_TAMC

c These includes are needed for 
c AD-checkpointing. 
c They provide the fields to be stored.

# include "GRID.h"
# include "DYNVARS.h"
# include "FFIELDS.h"
# include "EOS.h"
# include "GAD.h"
# ifdef ALLOW_CD_CODE
#  include "CD_CODE_VARS.h"
# endif
# ifdef ALLOW_PTRACERS
#  include "PTRACERS_SIZE.h"
#  include "PTRACERS.h"
# endif
# ifdef EXACT_CONSERV
#  include "SURFACE.h"
# endif
# ifdef ALLOW_OBCS
#  include "OBCS.h"
# endif
# ifdef ALLOW_EXF
#  include "EXF_FIELDS.h"
#  include "EXF_PARAM.h"
#  ifdef ALLOW_BULKFORMULAE
#   include "EXF_CONSTANTS.h"
#  endif
# endif /* ALLOW_EXF */
# ifdef ALLOW_SEAICE
#  include "SEAICE.h"
# endif
# ifdef ALLOW_EBM
#  include "EBM.h"
# endif
# ifdef ALLOW_KPP
#  include "KPP.h"
#  include "KPP_DIAGS.h"
#  include "KPP_PARAMS.h"
# endif
# ifdef ALLOW_DIVIDED_ADJOINT_MPI
#  include "mpif.h"
# endif

# include "tamc.h"
# include "ctrl.h"
# include "ctrl_dummy.h"
# include "cost.h"

#endif /* ALLOW_AUTODIFF_TAMC */

      INTEGER myThid 
      INTEGER myIter
      _RL     myTime

      double precision foo5(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
      double precision foo4(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)

      CHARACTER*(10) suff
	
      if (Mod(myiter,360).eq.0) then 
         WRITE(suff,'(I10.10)') myIter
         foo5=thetad
         call WRITE_FLD_XYZ_RL('adjtheta.',suff,foo5,myiter,1)
         foo5=saltd
         call WRITE_FLD_XYZ_RL('adjsalt.',suff,foo5,myiter,1)
         foo5=uveld
         call WRITE_FLD_XYZ_RL('adjuvel.',suff,foo5,myiter,1)
         foo5=vveld
         call WRITE_FLD_XYZ_RL('adjvvel.',suff,foo5,myiter,1)
         foo5=wveld
         call WRITE_FLD_XYZ_RL('adjwvel.',suff,foo5,myiter,1)
         foo4=etand
         call WRITE_FLD_XY_RL('adjetan.',suff,foo4,myiter,1)
# ifdef ALLOW_DIFFKR_CONTROL
         foo5=diffkrd
         call WRITE_FLD_XY_RL('adjdiffkr.',suff,foo5,myiter,1)
# endif
# ifdef ALLOW_HFLUX0_CONTROL
         foo4=qnetd
         call WRITE_FLD_XY_RL('adjqnet.',suff,foo4,myiter,1)
# endif
# ifdef ALLOW_SFLUX0_CONTROL
         foo4=empmrd
         call WRITE_FLD_XY_RL('adjempmr.',suff,foo4,myiter,1)
# endif
# ifdef ALLOW_TAUU0_CONTROL 
         foo4=fud
         call WRITE_FLD_XY_RL('adjfu.',suff,foo4,myiter,1)
# endif
# ifdef ALLOW_TAUV0_CONTROL 
         foo4=fvd
         call WRITE_FLD_XY_RL('adjfv.',suff,foo4,myiter,1)
# endif
      endif
      END