C $Header: /u/gcmpack/MITgcm/pkg/autodiff/addummy_in_stepping.F,v 1.25 2005/05/25 04:03:09 edhill Exp $ #include "AUTODIFF_OPTIONS.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" #ifdef ALLOW_MNC #include "MNC_PARAMS.h" #endif #include "GRID.h" #ifdef ALLOW_AUTODIFF_MONITOR # include "adcommon.h" #endif 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 #if (defined (ALLOW_ADJOINT_RUN) defined (ALLOW_ADMTLM)) #ifdef ALLOW_AUTODIFF_MONITOR 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 call TIMER_START('I/O (WRITE) [ADJOINT LOOP]', myThid ) IF ( & DIFFERENT_MULTIPLE(adjDumpFreq,mytime,deltaTClock) & ) THEN write(*,*) 'myIter= ',myiter call ADEXCH_XYZ_RL( mythid,adtheta) call ADEXCH_XYZ_RL( mythid,adsalt) call ADEXCH_XY_RL( mythid,adfu ) call ADEXCH_XY_RL( mythid,adfv ) call ADEXCH_XY_RL( mythid,adqnet ) call ADEXCH_XY_RL( mythid,adempmr ) #ifdef ALLOW_EDTAUX_CONTROL call ADEXCH_XYZ_RL( mythid,adeddytaux ) #endif #ifdef ALLOW_EDTAUY_CONTROL call ADEXCH_XYZ_RL( mythid,adeddytauy ) #endif #ifdef ALLOW_DIFFKR_CONTROL call ADEXCH_XYZ_RL( mythid,addiffkr ) #endif #ifdef ALLOW_KAPGM_CONTROL call ADEXCH_XYZ_RL( mythid,adkapgm ) #endif #ifdef ALLOW_SST0_CONTROL call ADEXCH_XY_RL( mythid,adsst ) #endif #ifdef ALLOW_SSS0_CONTROL call ADEXCH_XY_RL( mythid,adsss ) #endif _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) 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, advvel, myIter, myThid) CALL WRITE_FLD_XY_RL( & 'ADJetan.',suff, advvel, myIter, myThid) CALL WRITE_FLD_XY_RL ( 'ADJtaux.',suff, adfu, myIter, myThid) CALL WRITE_FLD_XY_RL ( 'ADJtauy.',suff, adfv, myIter, myThid) CALL WRITE_FLD_XY_RL ( 'ADJqnet.',suff, adqnet, myIter, myThid) CALL WRITE_FLD_XY_RL ( 'ADJempr.',suff, adempmr, myIter, myThid) c #ifdef ALLOW_EXF CALL WRITE_FLD_XY_RL ( 'ADJustress.', & suff, adustress, myIter, myThid) CALL WRITE_FLD_XY_RL ( 'ADJvstress.', & suff, advstress, myIter, myThid) CALL WRITE_FLD_XY_RL ( 'ADJhflux.', & suff, adhflux, myIter, myThid) CALL WRITE_FLD_XY_RL ( 'ADJsflux.', & suff, adsflux, myIter, myThid) #endif c #ifdef ALLOW_DIFFKR_CONTROL CALL WRITE_FLD_XYZ_RL ( 'ADJdiffkr.',suff, addiffkr, & myIter, myThid) #endif #ifdef ALLOW_KAPGM_CONTROL CALL WRITE_FLD_XYZ_RL ( 'ADJkagm.',suff, adkapgm, & myIter, myThid) #endif #ifdef ALLOW_EDTAUX_CONTROL CALL WRITE_FLD_XYZ_RL( & 'ADJedtaux. ',suff, adeddytaux, myIter, myThid) #endif #ifdef ALLOW_EDTAUY_CONTROL CALL WRITE_FLD_XYZ_RL( & 'ADJedtauy. ',suff, adeddytauy, myIter, myThid) #endif #ifdef ALLOW_SST0_CONTROL CALL WRITE_FLD_XY_RL( 'ADJsst.',suff, adsst, myIter, myThid) #endif #ifdef ALLOW_SSS0_CONTROL CALL WRITE_FLD_XY_RL( 'ADJsss.',suff, adsss, myIter, myThid) #endif c _END_MASTER( myThid ) _BARRIER print *, 'ph-mnc in addummy param ', useMNC #ifdef ALLOW_MNC IF (useMNC .AND. autodiff_mnc) THEN c print *, 'ph-mnc in addummy myiter ', myiter c CALL MNC_CW_SET_UDIM('adstate', -1, myThid) CALL MNC_CW_RL_W_S('D','adstate',0,0,'T',myTime,myThid) CALL MNC_CW_SET_UDIM('adstate', 0, myThid) CALL MNC_CW_I_W_S('I','adstate',0,0,'iter',myIter,myThid) CALL MNC_CW_RL_W_S('D','adstate',0,0,'model_time',myTime, & myThid) c CALL MNC_CW_RL_W('D','adstate',0,0,'adU', aduVel, myThid) CALL MNC_CW_RL_W('D','adstate',0,0,'adV', advVel, myThid) CALL MNC_CW_RL_W('D','adstate',0,0,'adT', adtheta, myThid) CALL MNC_CW_RL_W('D','adstate',0,0,'adS', adsalt, myThid) CALL MNC_CW_RL_W('D','adstate',0,0,'adEta', adetaN, myThid) CALL MNC_CW_RL_W('D','adstate',0,0,'adW', adwVel, myThid) CALL MNC_CW_RL_W('D','adstate',0,0,'adQnet', adQnet, myThid) CALL MNC_CW_RL_W('D','adstate',0,0,'adEmpmr', adEmpmr, myThid) CALL MNC_CW_RL_W('D','adstate',0,0,'adFu', adfu, myThid) CALL MNC_CW_RL_W('D','adstate',0,0,'adFv', adfv, myThid) #ifdef ALLOW_SST0_CONTROL CALL MNC_CW_RL_W('D','adstate',0,0,'adSST', adsst, myThid) #endif #ifdef ALLOW_SSS0_CONTROL CALL MNC_CW_RL_W('D','adstate',0,0,'adSSS', adsss, myThid) #endif c ENDIF #endif /* ALLOW_MNC */ ENDIF call TIMER_STOP( 'I/O (WRITE) [ADJOINT LOOP]', myThid ) #endif /* ALLOW_AUTODIFF_MONITOR */ #endif /* ALLOW_ADJOINT_RUN */ end