C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_write_checkpoint.F,v 1.5 2004/07/26 17:06:57 jmc Exp $
C $Name:  $

#include "PTRACERS_OPTIONS.h"

CBOP
C !ROUTINE: PTRACERS_WRITE_CHECKPOINT

C !INTERFACE: ==========================================================
      SUBROUTINE PTRACERS_WRITE_CHECKPOINT( suff,myIter,myTime,myThid )

C !DESCRIPTION:
C     Writes current state of passive tracers to a pickup file

C !USES: ===============================================================
      IMPLICIT NONE
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "PTRACERS_SIZE.h"
#include "PTRACERS.h"

C !INPUT PARAMETERS: ===================================================
C  suff                 :: suffix for pickup file (eg. ckptA or 0000000010)
C  myIter               :: time-step number
C  myTime               :: model time
C  myThid               :: thread number
      CHARACTER*(*) suff
      INTEGER myIter
      _RL myTime
      INTEGER myThid

C !OUTPUT PARAMETERS: ==================================================
C  none

#ifdef ALLOW_PTRACERS

C !LOCAL VARIABLES: ====================================================
C  iTracer		:: loop indices
C  iRec    		:: record number
C  fn   		:: character buffer for creating filename
C  prec 		:: precision of pickup files
C  lgf  		:: flag to write "global" files
      INTEGER iTracer,prec,iRec,iChar,lChar
      CHARACTER*(MAX_LEN_FNAM) fn
      LOGICAL lgf
CEOP

      lChar = 0
      DO iChar = 1,len(suff)
       IF ( suff(iChar:iChar) .NE. ' ') lChar=iChar
      ENDDO
      WRITE(fn,'(A,A)') 'pickup_ptracers.',suff(1:lChar)
      prec = precFloat64
      lgf = globalFiles

C Write fields & tendancies (needed for AB) as consecutive records,
C  one tracer after the other, for all available tracers.
C  note: this allow to restart from a pickup with a different number of
C      tracers, with read_pickup reading only the tracers "InUse".
      DO iTracer=1,PTRACERS_num
       iRec = 2*iTracer - 1 
       CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,
     &      pTracer(1-Olx,1-Oly,1,1,1,iTracer),iRec,myIter,myThid)

       iRec = 2*iTracer
       CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,
     &      gPtrNm1(1-Olx,1-Oly,1,1,1,iTracer),iRec,myIter,myThid)
      ENDDO

#endif /* ALLOW_PTRACERS */

      RETURN
      END