C $Header: /u/gcmpack/MITgcm/verification/bottom_ctrl_5x5/code_ad/addummy_in_stepping.F,v 1.4 2012/08/12 01:34:44 jmc Exp $
C $Name: $
#include "AUTODIFF_OPTIONS.h"
#include "AD_CONFIG.h"
CBOP
C !ROUTINE: addummy_in_stepping
C !INTERFACE:
subroutine ADDUMMY_IN_STEPPING( mytime, myiter, myThid )
C !DESCRIPTION: \bv
C *==========================================================*
C | SUBROUTINE addummy_in_stepping |
C *==========================================================*
C Extract adjoint variable from TAMC/TAF-generated
C adjoint common blocks, contained in adcommon.h
C and write fields to file;
C Make sure common blocks in adcommon.h are up-to-date
C w.r.t. current adjoint code.
C *==========================================================*
C | SUBROUTINE addummy_in_stepping |
C *==========================================================*
C \ev
C !USES:
IMPLICIT NONE
C == Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "adcommon.h"
LOGICAL DIFFERENT_MULTIPLE
EXTERNAL
INTEGER IO_ERRCOUNT
EXTERNAL
C !INPUT/OUTPUT PARAMETERS:
C == Routine arguments ==
C myIter - iteration counter for this thread
C myTime - time counter for this thread
C myThid - Thread number for this instance of the routine.
integer myThid
integer myiter
_RL mytime
C !LOCAL VARIABLES:
c == local variables ==
C suff - Hold suffix part of a filename
C beginIOErrCount - Begin and end IO error counts
C endIOErrCount
C msgBuf - Error message buffer
CHARACTER*(MAX_LEN_FNAM) suff
INTEGER beginIOErrCount
INTEGER endIOErrCount
CHARACTER*(MAX_LEN_MBUF) msgBuf
c == end of interface ==
CEOP
#if (defined (ALLOW_ADJOINT_RUN) defined (ALLOW_ADMTLM))
#ifdef ALLOW_AUTODIFF_MONITOR
call TIMER_START('I/O (WRITE) [ADJOINT LOOP]', myThid )
IF (
& DIFFERENT_MULTIPLE(ADJdumpFreq,mytime,deltaTClock)
& ) THEN
write(*,*) 'myIter= ',myiter
_BARRIER
_BEGIN_MASTER( myThid )
C-- Set suffix for this set of data files.
WRITE(suff,'(I10.10)') myIter
writeBinaryPrec = writeStatePrec
C-- Read IO error counter
beginIOErrCount = IO_ERRCOUNT(myThid)
Cml CALL WRITE_FLD_XY_RL ( 'ADJtaux.',suff, adfu, myIter, myThid)
Cml CALL WRITE_FLD_XY_RL ( 'ADJtauy.',suff, adfv, myIter, myThid)
Cml CALL WRITE_FLD_XY_RL ( 'ADJqnet.',suff, adqnet, myIter, myThid)
Cml CALL WRITE_FLD_XY_RL ( 'ADJempr.',suff, adempmr, myIter, myThid)
c
Cml CALL WRITE_FLD_XYZ_RL(
Cml & 'ADJgtnm1.',suff, adgtnm1, myIter, myThid)
Cml CALL WRITE_FLD_XYZ_RL(
Cml & 'ADJgsnm1.',suff, adgsnm1, myIter, myThid)
Cml CALL WRITE_FLD_XYZ_RL(
Cml & 'ADJgunm1.',suff, adgunm1, myIter, myThid)
Cml CALL WRITE_FLD_XYZ_RL(
Cml & 'ADJgvnm1.',suff, adgvnm1, myIter, myThid)
Cml#ifdef ALLOW_PASSIVE_TRACER
Cml CALL WRITE_FLD_XYZ_RL(
Cml & 'ADJgtr1nm1. ',suff, adgtr1nm1, myIter, myThid)
Cml#endif
c
CALL WRITE_FLD_XYZ_RL(
& 'ADJtheta.',suff, adtheta, myIter, myThid)
CALL WRITE_FLD_XYZ_RL(
& 'ADJsalt.',suff, adsalt, myIter, myThid)
CALL WRITE_FLD_XYZ_RL(
& 'ADJuvel.',suff, aduvel, myIter, myThid)
CALL WRITE_FLD_XYZ_RL(
& 'ADJvvel.',suff, advvel, myIter, myThid)
CALL WRITE_FLD_XYZ_RL(
& 'ADJwvel.',suff, adwvel, myIter, myThid)
Cml#ifdef ALLOW_PASSIVE_TRACER
Cml CALL WRITE_FLD_XYZ_RL(
Cml & 'ADJtr1. ',suff, adtr1, myIter, myThid)
Cml#endif
Cml#ifdef ALLOW_DIFFKR_CONTROL
Cml CALL WRITE_FLD_XYZ_RL ( 'ADJdiffkr.',suff, addiffkr,
Cml & myIter, myThid)
Cml#endif
Cml#ifdef ALLOW_KAPGM_CONTROL
Cml CALL WRITE_FLD_XYZ_RL ( 'ADJkagm.',suff, adkapgm,
Cml & myIter, myThid)
Cml#endif
#ifdef ALLOW_DEPTH_CONTROL
CML( Does not make sense at this point
CML CALL WRITE_FLD_XY_RL ( 'ADJxx_r_low.',suff,
CML & adxx_r_low, myIter, myThid)
CML)
CALL WRITE_FLD_XYZ_RL ( 'ADJhFacC.',suff,
& adhfacc, myIter, myThid)
CALL WRITE_FLD_XYZ_RL ( 'ADJhFacS.',suff,
& adhfacs, myIter, myThid)
CALL WRITE_FLD_XYZ_RL ( 'ADJhFacW.',suff,
& adhfacw, myIter, myThid)
CALL WRITE_FLD_XYZ_RL ( 'ADJrhFacC.',suff,
& adrecip_hfacc, myIter, myThid)
CALL WRITE_FLD_XYZ_RL ( 'ADJrhFacS.',suff,
& adrecip_hfacs, myIter, myThid)
CALL WRITE_FLD_XYZ_RL ( 'ADJrhFacW.',suff,
& adrecip_hfacw, myIter, myThid)
#endif /* ALLOW_DEPTH_CONTROL */
cph CALL WRITE_FLD_XY_RL( 'ADJ_sst.',suff, adsst, myIter, myThid)
cph CALL WRITE_FLD_XY_RL( 'ADJ_sss.',suff, adsss, myIter, myThid)
C-- Reread IO error counter
endIOErrCount = IO_ERRCOUNT(myThid)
C-- Check for IO errors
IF ( endIOErrCount .NE. beginIOErrCount ) THEN
WRITE(msgBuf,'(A)') 'S/R ADDUMMY_IN_STEPPING'
CALL PRINT_ERROR( msgBuf, 1 )
WRITE(msgBuf,'(A)') 'Error writing out model state'
CALL PRINT_ERROR( msgBuf, 1 )
WRITE(msgBuf,'(A,I10)') 'Timestep ',myIter
CALL PRINT_ERROR( msgBuf, 1 )
ELSE
WRITE(msgBuf,'(A,I10)')
& '// Model state written, timestep', myIter
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT, 1 )
WRITE(msgBuf,'(A)') ' '
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT, 1 )
ENDIF
_END_MASTER( myThid )
_BARRIER
ENDIF
call TIMER_STOP( 'I/O (WRITE) [ADJOINT LOOP]', myThid )
#endif /* ALLOW_AUTODIFF_MONITOR */
#endif /* ALLOW_ADJOINT_RUN */
RETURN
END