/[MITgcm]/MITgcm/pkg/ptracers/ptracers_write_state.F
ViewVC logotype

Diff of /MITgcm/pkg/ptracers/ptracers_write_state.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.10 by jmc, Wed Apr 6 18:45:48 2005 UTC revision 1.19 by jmc, Sat Nov 10 22:09:32 2007 UTC
# Line 7  CBOP Line 7  CBOP
7  C     !ROUTINE: PTRACERS_WRITE_STATE  C     !ROUTINE: PTRACERS_WRITE_STATE
8    
9  C     !INTERFACE:  C     !INTERFACE:
10        SUBROUTINE PTRACERS_WRITE_STATE(        SUBROUTINE PTRACERS_WRITE_STATE(
11       I     myIter, myTime, myThid )       I     myIter, myTime, myThid )
12    
13  C     !DESCRIPTION:  C     !DESCRIPTION:
14  C     Calculates tendancy for passive tracers and integrates forward in  C     dump to files current passive tracer state
 C     time.  
15    
16  C     !USES:  C     !USES:
17        IMPLICIT NONE        IMPLICIT NONE
# Line 20  C     !USES: Line 19  C     !USES:
19  #include "EEPARAMS.h"  #include "EEPARAMS.h"
20  #include "PARAMS.h"  #include "PARAMS.h"
21  #include "PTRACERS_SIZE.h"  #include "PTRACERS_SIZE.h"
22  #include "PTRACERS.h"  #include "PTRACERS_PARAMS.h"
23    #include "PTRACERS_FIELDS.h"
24    
25  C     !INPUT PARAMETERS:  C     !INPUT PARAMETERS:
26  C     myIter    :: time-step number  C     myIter    :: time-step number
# Line 33  CEOP Line 33  CEOP
33    
34  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
35    
36    C     === Functions ====
37          LOGICAL  DIFFERENT_MULTIPLE
38          EXTERNAL DIFFERENT_MULTIPLE
39          INTEGER  IO_ERRCOUNT
40          EXTERNAL IO_ERRCOUNT
41    
42  C     !LOCAL VARIABLES:  C     !LOCAL VARIABLES:
43  C     iTracer   :: loop indices  C     iTracer   :: loop indices
44  C     suff      :: character buffer for creating suffix in filename  C     pref      :: character buffer for creating prefix in filename
45  C     iRec      :: record number  C     iRec      :: record number
46        INTEGER iTracer        INTEGER iTracer
47        CHARACTER*(MAX_LEN_MBUF) suff        CHARACTER*(MAX_LEN_FNAM) pref
48        INTEGER iRec        INTEGER iRec
49    #ifdef ALLOW_MNC
50          CHARACTER*(1) pf
51    #endif
52    
53        LOGICAL  DIFF_BASE_MULTIPLE        IF ( DIFFERENT_MULTIPLE( PTRACERS_dumpFreq, myTime, deltaTClock )
54        EXTERNAL DIFF_BASE_MULTIPLE       &  .OR. dumpInitAndLast.AND.( myTime.EQ.endTime .OR.
55        INTEGER  IO_ERRCOUNT       &                             myTime.EQ.startTime  )
56        EXTERNAL IO_ERRCOUNT       &   ) THEN
57    
58        IF (  C--   Write to files
      &     DIFF_BASE_MULTIPLE(baseTime,PTRACERS_dumpFreq,  
      &     myTime,deltaTClock) .OR.  
      &     myTime.EQ.endTime .OR.  
      &     myTime.EQ.startTime  
      &     ) THEN  
         
 C     Write to files  
59         _BARRIER         _BARRIER
        _BEGIN_MASTER( myThid )  
60    
61  #ifdef ALLOW_MNC  #ifdef ALLOW_MNC
62         IF (useMNC .AND. PTRACERS_write_mnc) THEN          IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
63              pf(1:1) = 'D'
64            ELSE
65              pf(1:1) = 'R'
66            ENDIF
67    
68           IF ( PTRACERS_snapshot_mnc ) THEN
69          CALL MNC_CW_SET_UDIM('ptracers', -1, myThid)          CALL MNC_CW_SET_UDIM('ptracers', -1, myThid)
70          CALL MNC_CW_I_W_S('I','ptracers',0,0,'T',myIter,myThid)          CALL MNC_CW_RL_W_S('D','ptracers',0,0,'T',myTime,myThid)
71          CALL MNC_CW_SET_UDIM('ptracers', 0, myThid)          CALL MNC_CW_SET_UDIM('ptracers', 0, myThid)
72            CALL MNC_CW_I_W_S('I','ptracers',0,0,'iter',myIter,myThid)
73          DO iTracer = 1,PTRACERS_numInUse          DO iTracer = 1,PTRACERS_numInUse
74           CALL MNC_CW_RL_W('D','ptracers',0,0,PTRACERS_names(iTracer),           CALL MNC_CW_RL_W(pf,'ptracers',0,0,PTRACERS_names(iTracer),
75       &        pTracer(1-OLx,1-OLy,1,1,1,iTracer),myThid)       &        pTracer(1-OLx,1-OLy,1,1,1,iTracer),myThid)
76          ENDDO          ENDDO
77         ENDIF         ENDIF
78  #endif /*  ALLOW_MNC  */  #endif /*  ALLOW_MNC  */
79    
80         IF (PTRACERS_write_mdsio) THEN         IF ( PTRACERS_snapshot_mdsio ) THEN
81    
82  C       Loop over tracers  C       Loop over tracers
83          DO iTracer=1,PTRACERS_numInUse          DO iTracer=1,PTRACERS_numInUse
# Line 78  C       Loop over tracers Line 86  C       Loop over tracers
86  C     Write each snap-shot as a record in a time-history file  C     Write each snap-shot as a record in a time-history file
87           IF (PTRACERS_useRecords) THEN           IF (PTRACERS_useRecords) THEN
88  C     Write each passive tracer as a record  C     Write each passive tracer as a record
89            WRITE(suff,'(A)') 'PTRACERS'            WRITE(pref,'(A)') 'PTRACERS'
90            iRec = int ( (myCurrentTime-startTime)            iRec = 1 + NINT( (myTime-startTime) / PTRACERS_dumpFreq )
      &         / PTRACERS_dumpFreq + 1.5 )  
91            iRec = (iRec-1)*PTRACERS_num + iTracer + 1            iRec = (iRec-1)*PTRACERS_num + iTracer + 1
92           ELSE           ELSE
93  C     Write each passive tracer in its own file  C     Write each passive tracer in its own file
94            WRITE(pref,'(A7,I2.2)') 'PTRACER',iTracer            WRITE(pref,'(2A)') 'PTRACER',PTRACERS_ioLabel(iTracer)
95            iRec = int ( (myCurrentTime-startTime)            iRec = 1 + NINT( (myTime-startTime) / PTRACERS_dumpFreq )
      &         / PTRACERS_dumpFreq + 1.5 )  
96           ENDIF           ENDIF
97  #else  #else
98  C         Write each snap-shot as a new file with a 10-digit suffix to  C     Write each snap-shot as a new file with a 10-digit suffix to
99  C     indicate time-step number  C     indicate time-step number
100           IF (PTRACERS_useRecords) THEN           IF (PTRACERS_useRecords) THEN
101  C     Write each passive tracer as a record  C     Write each passive tracer as a record
102            WRITE(suff,'(A,I10.10)') 'PTRACERS',myIter            WRITE(pref,'(A,I10.10)') 'PTRACERS.',myIter
103            iRec=iTracer            iRec=iTracer
104           ELSE           ELSE
105  C     Write each passive tracer in its own file  C     Write each passive tracer in its own file
106            WRITE(suff,'(A7,I2.2,A1,I10.10)')            WRITE(pref,'(3A,I10.10)')
107       &         'PTRACER',iTracer,'.',myIter       &         'PTRACER',PTRACERS_ioLabel(iTracer),'.',myIter
108            iRec=1            iRec=1
109           ENDIF           ENDIF
110  #endif /* MULTIPLE_RECORD_STATE_FILES */  #endif /* MULTIPLE_RECORD_STATE_FILES */
111            
112           CALL WRITE_REC_XYZ_RL(suff,           CALL WRITE_REC_XYZ_RL(pref,
113       &        pTracer(1-Olx,1-Oly,1,1,1,iTracer),iRec,myIter,myThid)       &        pTracer(1-Olx,1-Oly,1,1,1,iTracer),iRec,myIter,myThid)
114            
115  C     End of tracer loop  C     End of tracer loop
116          ENDDO          ENDDO
117            
118         ENDIF         ENDIF
119    
        _END_MASTER( myThid )  
120         _BARRIER         _BARRIER
121  C     DIFF_BASE_MULTIPLE  C--   Writing to files: end
122        ENDIF        ENDIF
123    
124  #endif /* ALLOW_PTRACERS */  #endif /* ALLOW_PTRACERS */

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.19

  ViewVC Help
Powered by ViewVC 1.1.22