C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_read_checkpoint.F,v 1.8 2004/09/03 20:10:47 edhill Exp $ C $Name: $ #include "PTRACERS_OPTIONS.h" C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CBOP C !ROUTINE: PTRACERS_READ_CHECKPOINT C !INTERFACE: SUBROUTINE PTRACERS_READ_CHECKPOINT( myIter, myThid ) C !DESCRIPTION: C Reads current state of passive tracers from 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 myIter :: time-step number C myThid :: thread number INTEGER myIter INTEGER myThid #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 fn :: suffix for pickup file (eg. 0000000010) INTEGER iTracer,prec,iRec CHARACTER*(MAX_LEN_MBUF) fn CEOP WRITE(fn,'(A,I10.10)') 'pickup_ptracers.',myIter prec = precFloat64 #ifdef ALLOW_MNC C IF (useMNC .AND. PTRACERS_mnc_read) THEN C C Read variables from the pickup file C CALL MNC_FILE_CLOSE_ALL_MATCHING(fn, myThid) C CALL MNC_CW_SET_UDIM(fn, 1, myThid) C CALL MNC_CW_RL_R('D',fn,0,0,'uVelD',uVelD, myThid) C CALL MNC_CW_RL_R('D',fn,0,0,'vVelD',vVelD, myThid) C CALL MNC_CW_RL_R('D',fn,0,0,'Unm1',Unm1, myThid) C CALL MNC_CW_RL_R('D',fn,0,0,'Vnm1',Vnm1, myThid) C CALL MNC_CW_RL_R('D',fn,0,0,'etaNm1', etaNm1, myThid) C ELSE #endif /* ALLOW_MNC */ IF ( usePickupBeforeC54 ) THEN C Read fields as consecutive records DO iTracer=1,PTRACERS_num iRec = iTracer CALL MDSREADFIELD(fn,prec,'RL',Nr, & pTracer(1-Olx,1-Oly,1,1,1,iTracer),iRec,myThid) _EXCH_XYZ_R8(pTracer(1-Olx,1-Oly,1,1,1,iTracer),myThid) ENDDO C Read historical tendancies as consecutive records DO iTracer=1,PTRACERS_num iRec = iTracer + PTRACERS_num CALL MDSREADFIELD(fn,prec,'RL',Nr, & gPtr(1-Olx,1-Oly,1,1,1,iTracer),iRec,myThid) _EXCH_XYZ_R8(gPtr(1-Olx,1-Oly,1,1,1,iTracer),myThid) ENDDO DO iTracer=1,PTRACERS_num iRec = iTracer + PTRACERS_num*2 CALL MDSREADFIELD(fn,prec,'RL',Nr, & gPtrNm1(1-Olx,1-Oly,1,1,1,iTracer),iRec,myThid) _EXCH_XYZ_R8(gPtrNm1(1-Olx,1-Oly,1,1,1,iTracer),myThid) ENDDO ELSE C Read fields & tendancies (needed for AB) as consecutive records, C one tracer after the other, only for tracers "InUse". Note: C this allow to restart from a pickup with a different number of C tracers, with write_pickup dumping all of them (PTRACERS_num). DO iTracer=1,PTRACERS_numInUse iRec = 2*iTracer -1 CALL MDSREADFIELD(fn,prec,'RL',Nr, & pTracer(1-Olx,1-Oly,1,1,1,iTracer),iRec,myThid) iRec = 2*iTracer CALL MDSREADFIELD(fn,prec,'RL',Nr, & gPtrNm1(1-Olx,1-Oly,1,1,1,iTracer),iRec,myThid) _EXCH_XYZ_R8(pTracer(1-Olx,1-Oly,1,1,1,iTracer),myThid) _EXCH_XYZ_R8(gPtrNm1(1-Olx,1-Oly,1,1,1,iTracer),myThid) ENDDO ENDIF #ifdef ALLOW_MNC C ENDIF #endif /* ALLOW_MNC */ #endif /* ALLOW_PTRACERS */ RETURN END