C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_write_state.F,v 1.22 2017/03/24 23:48:33 jmc Exp $
C $Name: $
#include "PTRACERS_OPTIONS.h"
CBOP
C !ROUTINE: PTRACERS_WRITE_STATE
C !INTERFACE:
SUBROUTINE PTRACERS_WRITE_STATE(
I myTime, myIter, myThid )
C !DESCRIPTION:
C dump to files current passive tracer state
C !USES:
IMPLICIT NONE
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "PTRACERS_SIZE.h"
#include "PTRACERS_PARAMS.h"
#include "PTRACERS_FIELDS.h"
C !INPUT PARAMETERS:
C myTime :: model time
C myIter :: time-step number
C myThid :: thread number
_RL myTime
INTEGER myIter
INTEGER myThid
CEOP
#ifdef ALLOW_PTRACERS
C !FUNCTIONS:
LOGICAL DIFFERENT_MULTIPLE
EXTERNAL
INTEGER IO_ERRCOUNT
EXTERNAL
C !LOCAL VARIABLES:
C iTracer :: loop indices
C pref :: character buffer for creating prefix in filename
C iRec :: record number
INTEGER iTracer
CHARACTER*(10) suff
CHARACTER*(MAX_LEN_FNAM) pref
INTEGER iRec
#ifdef ALLOW_MNC
CHARACTER*(1) pf
#endif
IF ( DIFFERENT_MULTIPLE( PTRACERS_dumpFreq, myTime, deltaTClock )
& .OR. dumpInitAndLast.AND.( myTime.EQ.endTime .OR.
& myTime.EQ.startTime )
& ) THEN
C-- Write to files
_BARRIER
#ifdef ALLOW_MNC
IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
pf(1:1) = 'D'
ELSE
pf(1:1) = 'R'
ENDIF
IF ( PTRACERS_snapshot_mnc ) THEN
CALL MNC_CW_SET_UDIM('ptracers', -1, myThid)
CALL MNC_CW_RL_W_S('D','ptracers',0,0,'T',myTime,myThid)
CALL MNC_CW_SET_UDIM('ptracers', 0, myThid)
CALL MNC_CW_I_W_S('I','ptracers',0,0,'iter',myIter,myThid)
DO iTracer = 1,PTRACERS_numInUse
CALL MNC_CW_RL_W(pf,'ptracers',0,0,PTRACERS_names(iTracer),
& pTracer(1-OLx,1-OLy,1,1,1,iTracer),myThid)
ENDDO
ENDIF
#endif /* ALLOW_MNC */
IF ( PTRACERS_snapshot_mdsio ) THEN
C Loop over tracers
DO iTracer=1,PTRACERS_numInUse
#ifdef MULTIPLE_RECORD_STATE_FILES
C Write each snap-shot as a record in a time-history file
IF (PTRACERS_useRecords) THEN
C Write each passive tracer as a record
WRITE(pref,'(A)') 'PTRACERS'
iRec = 1 + NINT( (myTime-startTime) / PTRACERS_dumpFreq )
iRec = (iRec-1)*PTRACERS_num + iTracer + 1
ELSE
C Write each passive tracer in its own file
WRITE(pref,'(2A)') 'PTRACER',PTRACERS_ioLabel(iTracer)
iRec = 1 + NINT( (myTime-startTime) / PTRACERS_dumpFreq )
ENDIF
#else
C Write each snap-shot as a new file with a 10-digit suffix to
C indicate time-step number
IF ( rwSuffixType.EQ.0 ) THEN
WRITE(suff,'(I10.10)') myIter
ELSE
CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
ENDIF
IF (PTRACERS_useRecords) THEN
C Write each passive tracer as a record
WRITE(pref,'(A,A)') 'PTRACERS.', suff
iRec=iTracer
ELSE
C Write each passive tracer in its own file
WRITE(pref,'(3A,A)')
& 'PTRACER', PTRACERS_ioLabel(iTracer), '.', suff
iRec=1
ENDIF
#endif /* MULTIPLE_RECORD_STATE_FILES */
#ifdef ALLOW_OPENAD
CALL WRITE_REC_XYZ_RL(pref,
& pTracer(:,:,:,:,:,iTracer)v,iRec,myIter,myThid)
#else
CALL WRITE_REC_XYZ_RL(pref,
& pTracer(1-OLx,1-OLy,1,1,1,iTracer),iRec,myIter,myThid)
#endif
C End of tracer loop
ENDDO
ENDIF
_BARRIER
C-- Writing to files: end
ENDIF
#endif /* ALLOW_PTRACERS */
RETURN
END