C $Header: /u/gcmpack/MITgcm/pkg/cd_code/cd_code_checkpoint.F,v 1.6 2004/10/13 04:37:37 edhill Exp $
C $Name: $
#include "CD_CODE_OPTIONS.h"
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
CBOP
C !ROUTINE: CD_CODE_READ_CHECKPOINT
C !INTERFACE:
SUBROUTINE CD_CODE_READ_CHECKPOINT( myIter, myThid )
C !DESCRIPTION:
C Read the checkpoint.
C !USES:
IMPLICIT NONE
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#ifdef ALLOW_MNC
#include "MNC_PARAMS.h"
#endif
#include "CD_CODE_VARS.h"
C !INPUT/OUTPUT PARAMETERS:
INTEGER myIter
INTEGER myThid
CEOP
#ifdef ALLOW_CD_CODE
C !LOCAL VARIABLES:
CHARACTER*(MAX_LEN_FNAM) fn
CHARACTER*(10) suff
INTEGER prec
C Suffix for pickup files
IF (pickupSuff.EQ.' ') THEN
WRITE(suff,'(I10.10)') myIter
ELSE
WRITE(suff,'(A10)') pickupSuff
ENDIF
_BARRIER
_BEGIN_MASTER( myThid )
prec = precFloat64
WRITE(fn,'(A,A10)') 'pickup_cd.',suff
#ifdef ALLOW_MNC
IF (useMNC .AND. pickup_read_mnc) THEN
C Read variables from the pickup file
CALL MNC_FILE_CLOSE_ALL_MATCHING(fn, myThid)
CALL MNC_CW_SET_UDIM(fn, 1, myThid)
CALL MNC_CW_RL_R('D',fn,0,0,'uVelD',uVelD, myThid)
CALL MNC_CW_RL_R('D',fn,0,0,'vVelD',vVelD, myThid)
CALL MNC_CW_RL_R('D',fn,0,0,'Unm1',Unm1, myThid)
CALL MNC_CW_RL_R('D',fn,0,0,'Vnm1',Vnm1, myThid)
CALL MNC_CW_RL_R('D',fn,0,0,'etaNm1', etaNm1, myThid)
ENDIF
#endif /* ALLOW_MNC */
IF (pickup_read_mdsio) THEN
CALL MDSREADFIELD(fn,prec,'RL',Nr,uVelD, 1,myThid)
CALL MDSREADFIELD(fn,prec,'RL',Nr,vVelD, 2,myThid)
CALL MDSREADFIELD(fn,prec,'RL',Nr,uNM1, 3,myThid)
CALL MDSREADFIELD(fn,prec,'RL',Nr,vNM1, 4,myThid)
IF ( usePickupBeforeC54 ) THEN
CALL MDSREADFIELD(fn,prec,'RL', 1,etaNm1,6*Nr+1,myThid)
ELSE
CALL MDSREADFIELD(fn,prec,'RL', 1,etaNm1,4*Nr+1,myThid)
ENDIF
ENDIF
_END_MASTER( myThid )
_BARRIER
_EXCH_XYZ_R8( uVelD, myThid )
_EXCH_XYZ_R8( vVelD, myThid )
CALL EXCH_UV_XYZ_RL(uNM1,vNM1,.TRUE.,myThid)
_EXCH_XY_R8( etaNm1, myThid )
#endif /* ALLOW_CD_CODE */
RETURN
END
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
CBOP
C !ROUTINE: CD_CODE_WRITE_CHECKPOINT
C !INTERFACE:
SUBROUTINE CD_CODE_WRITE_CHECKPOINT(
I prec,
I lgf,
I permCheckPoint,
I myIter,
I myThid )
C !DESCRIPTION:
C Read the pickup.
C !USES:
IMPLICIT NONE
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#ifdef ALLOW_MNC
#include "MNC_PARAMS.h"
#endif
#include "CD_CODE_VARS.h"
C !INPUT/OUTPUT PARAMETERS:
INTEGER prec
LOGICAL lgf
LOGICAL permCheckPoint
INTEGER myIter
INTEGER myThid
CEOP
#ifdef ALLOW_CD_CODE
C !LOCAL VARIABLES:
CHARACTER*(MAX_LEN_FNAM) fn
IF ( permCheckPoint ) THEN
WRITE(fn,'(A,I10.10)') 'pickup_cd.',myIter
ELSE
WRITE(fn,'(A,A)') 'pickup_cd.',checkPtSuff(nCheckLev)
ENDIF
#ifdef ALLOW_MNC
IF (useMNC .AND. pickup_write_mnc) THEN
C Read variables from the pickup file
CALL MNC_FILE_CLOSE_ALL_MATCHING(fn, myThid)
CALL MNC_CW_SET_UDIM(fn, 1, myThid)
CALL MNC_CW_RL_W('D',fn,0,0,'uVelD',uVelD, myThid)
CALL MNC_CW_RL_W('D',fn,0,0,'vVelD',vVelD, myThid)
CALL MNC_CW_RL_W('D',fn,0,0,'Unm1',Unm1, myThid)
CALL MNC_CW_RL_W('D',fn,0,0,'Vnm1',Vnm1, myThid)
CALL MNC_CW_RL_W('D',fn,0,0,'etaNm1', etaNm1, myThid)
ENDIF
#endif /* ALLOW_MNC */
IF (pickup_write_mdsio) THEN
CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,uVelD,1,myIter,myThid)
CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,vVelD,2,myIter,myThid)
CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,uNM1, 3,myIter,myThid)
CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,vNM1, 4,myIter,myThid)
CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 1,etaNm1,4*Nr+1,
& myIter,myThid)
ENDIF
#endif /* ALLOW_CD_CODE */
RETURN
END