C $Header: /u/gcmpack/MITgcm/model/src/write_myfield.F,v 1.4 2005/05/15 03:02:08 jmc Exp $
C $Name: $
#include "PACKAGES_CONFIG.h"
#include "CPP_OPTIONS.h"
#undef MULTIPLE_RECORD_STATE_FILES
CBOP
C !ROUTINE: WRITE_MYFIELD
C !INTERFACE:
SUBROUTINE WRITE_MYFIELD (
& myField, myFile, myTime, myIter, myThid )
C !DESCRIPTION: \bv
C *==========================================================*
C | SUBROUTINE WRITE_MYFIELD
C | o Template routine for probing one array at dumpFreq rate
C | place call to this routine into code
C *==========================================================*
C | Write model state files for post-processing. This file
C | includes code for diagnosing W and RHO for output.
C | File write_state.F: Routines to handle mid-level I/O
C | interface.
C | Adapted from S/R WRITE_STATE
C *==========================================================*
C \ev
C !USES:
IMPLICIT NONE
C == Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "DYNVARS.h"
#include "GRID.h"
#include "EOS.h"
LOGICAL DIFFERENT_MULTIPLE
EXTERNAL
INTEGER IO_ERRCOUNT
EXTERNAL
C !INPUT/OUTPUT PARAMETERS:
C == Routine arguments ==
C myThid - Thread number for this instance of the routine.
C myIter - Iteration number
C myTime - Current time of simulation ( s )
_RL myField(sNx,sNy,Nr,nSx,nSy)
_RL myTime
INTEGER myThid
INTEGER myIter
CHARACTER*(*) myFile
C !LOCAL VARIABLES:
C == Local variables ==
CHARACTER*(MAX_LEN_MBUF) suff
CHARACTER*(80) localfile
INTEGER iRec, il
c == external ==
integer ilnblnk
external
CEOP
IF (
& DIFFERENT_MULTIPLE(dumpFreq,myTime,deltaTClock)
& .OR. myTime.EQ.endTime
& .OR. myTime.EQ.startTime
& ) THEN
IF ( dumpFreq .EQ. 0.0 ) THEN
iRec = 1
ELSE
iRec = NINT ( (myTime-startTime) / dumpFreq + 1. )
ENDIF
C-- Going to really do some IO. Make everyone except master thread wait.
_BARRIER
_BEGIN_MASTER( myThid )
C-- Write model fields
il=ilnblnk( myFile )
write(localfile(1:80),'(80a)') ' '
write(localfile(1:80),'(2a)') myFile(1:il),'.'
#ifdef MULTIPLE_RECORD_STATE_FILES
C Write each snap-shot as a new record in one file per variable
C - creates relatively few files but these files can become huge
CALL WRITE_REC_XYZ_RL( localfile, myField,iRec,myIter,myThid)
#else /* MULTIPLE_RECORD_STATE_FILES */
C Write each snap-shot as a new file (original and default method)
C - creates many files but for large configurations is easier to
C transfer analyse a particular snap-shots
WRITE(suff,'(I10.10)') myIter
STOP 'WRITE_FLD_XYZ_RL CALL INCORRECT - CONTACT SUPPORT'
C CALL WRITE_FLD_XYZ_RL( localfile,suff,myField,myIter,myThid)
#endif /* MULTIPLE_RECORD_STATE_FILES */
_END_MASTER( myThid )
_BARRIER
ENDIF
RETURN
END