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