/[MITgcm]/MITgcm/pkg/pp81/pp81_do_diags.F
ViewVC logotype

Annotation of /MITgcm/pkg/pp81/pp81_do_diags.F

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


Revision 1.1 - (hide annotations) (download)
Thu Sep 2 09:11:54 2004 UTC (19 years, 10 months ago) by mlosch
Branch: MAIN
CVS Tags: checkpoint55c_post, checkpoint57b_post, checkpoint57f_pre, checkpoint55d_pre, checkpoint57d_post, checkpoint57c_pre, checkpoint55j_post, checkpoint56b_post, checkpoint55h_post, checkpoint57e_post, checkpoint56c_post, checkpoint54e_post, checkpoint55b_post, checkpoint55, checkpoint55a_post, checkpoint57a_post, checkpoint55g_post, checkpoint55f_post, checkpoint57a_pre, checkpoint57, checkpoint56, checkpoint54f_post, checkpoint55e_post, eckpoint57e_pre, checkpoint57c_post, checkpoint55i_post, checkpoint56a_post, checkpoint55d_post
o add two new packages
  - pp81 (Packanowski and Philander, 1981), Richardson number and
    stratification dependent mixing
  - my82 (Mellor and Yamada, 1982) level 2 turbulence closure scheme

1 mlosch 1.1 C $Header: $
2     C $Name: $
3    
4     #include "PP81_OPTIONS.h"
5    
6     #undef MULTIPLE_RECORD_PP81_STATE_FILES
7     CBOP
8     C !ROUTINE: PP81_DO_DIAGS
9     C !INTERFACE:
10     SUBROUTINE PP81_DO_DIAGS( myCurrentTime, myIter, myThid )
11     C !DESCRIPTION: \bv
12     C *==========================================================*
13     C | SUBROUTINE PP81_DO_DIAGS
14     C | o Do PP81 diagnostic output.
15     C *==========================================================
16     C | The following CPP flag (MULTIPLE_RECORD_PP81_STATE_FILES) is
17     C | #define/#undefed here since it is specific to this routine
18     C | and very user-preference specific.
19     C |
20     C | If #undefed (default) the state files are written as in all versions
21     C | prior to checkpoint32, where a file is created per variable, per time
22     C | and per tile. This *has* to be the default because most users use this
23     C | mode and all utilities and scripts (diagnostic) assume this form.
24     C | It is also robust, as explained below.
25     C |
26     C | If #defined, subsequent snap-shots are written as records in the
27     C | same file (no iteration number in filenames).
28     C | Advantages: - fewer files
29     C | - for small problems, is easy to copy the output around
30     C | Disadvantages:
31     C | - breaks a lot of diagnostic scripts
32     C | - for large or long problems this creates huge files
33     C | - is an unexpected, unsolicited change in behaviour which came
34     C | as a surprise (in c32) and inconvenience to several users
35     C | - can not accomodate changing the frequency of output
36     C | after a pickup (this is trivial in previous method
37     C | but needs new code and parameters in this new method)
38     C *==========================================================*
39     C \ev
40    
41     C !USES:
42     IMPLICIT NONE
43     C === Global variables ===
44     #include "SIZE.h"
45     #include "EEPARAMS.h"
46     #include "PARAMS.h"
47     #include "PP81.h"
48     #include "PP81_DIAGS.h"
49    
50     C !INPUT/OUTPUT PARAMETERS:
51     C == Routine arguments ==
52     C myCurrentTime - Current time of simulation ( s )
53     C myIter - Iteration number
54     C myThid - Number of this instance of INI_FORCING
55     _RL myCurrentTime
56     INTEGER myIter
57     INTEGER myThid
58    
59     #ifdef ALLOW_PP81
60    
61     C !LOCAL VARIABLES:
62     C == Local variables ==
63     CHARACTER*(MAX_LEN_MBUF) suff
64     LOGICAL DIFFERENT_MULTIPLE
65     EXTERNAL DIFFERENT_MULTIPLE
66     INTEGER bi, bj, K
67     _RL DDTT
68     CEOP
69    
70     C----------------------------------------------------------------
71     C Dump snapshot of PP variables.
72     C----------------------------------------------------------------
73    
74     IF (
75     & DIFFERENT_MULTIPLE(PPdumpFreq,myCurrentTime,
76     & myCurrentTime-deltaTClock)
77     & ) THEN
78    
79     IF (PPmixingMaps) THEN
80     CALL PLOT_FIELD_XYZRL ( PPviscAr , 'PPviscAr' ,
81     & Nr, myIter, myThid )
82     CALL PLOT_FIELD_XYZRL ( PPdiffKr, 'PPdiffKr',
83     & Nr, myIter, myThid )
84     ENDIF
85    
86     if (PPwriteState) then
87     #ifdef MULTIPLE_RECORD_PP81_STATE_FILES
88     C Write each snap-shot as a new record in one file per variable
89     C - creates relatively few files but these files can become huge
90     CALL WRITE_REC_XYZ_RL('PPviscAr',PPviscAr,pp_drctrec,
91     & myIter,myThid)
92     CALL WRITE_REC_XYZ_RL('PPdiffKr',PPdiffKr,pp_drctrec,
93     & myIter,myThid)
94     #else /* MULTIPLE_RECORD_PP81_STATE_FILES */
95     C Write each snap-shot as a new file
96     C - creates many files but for large configurations is easier to
97     C transfer analyse a particular snap-shots
98     WRITE(suff,'(I10.10)') myIter
99     CALL WRITE_FLD_XYZ_RL('PPviscAr.',suff,PPviscAr,
100     & myIter,myThid)
101     CALL WRITE_FLD_XYZ_RL('PPdiffKr.',suff,PPdiffKr,
102     & myIter,myThid)
103     #endif /* MULTIPLE_RECORD_PP81_STATE_FILES */
104     endif
105    
106     C-- Increment record counter
107     pp_drctrec = pp_drctrec + 1
108    
109     ENDIF
110    
111     C----------------------------------------------------------------
112     C Do PP time averaging.
113     C----------------------------------------------------------------
114    
115     #ifdef ALLOW_TIMEAVE
116    
117     C Initialize averages to zero
118     IF ( myIter.EQ.nIter0 ) THEN
119     DO bj = myByLo(myThid), myByHi(myThid)
120     DO bi = myBxLo(myThid), myBxHi(myThid)
121     CALL TIMEAVE_RESET(PPviscArtave, Nr,bi,bj,myThid)
122     CALL TIMEAVE_RESET(PPdiffKrtave,Nr,bi,bj,myThid)
123     DO k=1,Nr
124     pp_TimeAve(k,bi,bj)=0.
125     ENDDO
126     ENDDO
127     ENDDO
128     ENDIF
129    
130     C Time Average PP fields
131     IF ( myIter .EQ. nIter0 .OR.
132     & DIFFERENT_MULTIPLE
133     & (PPtaveFreq,myCurrentTime,myCurrentTime-deltaTClock) )
134     & THEN
135     DDTT=0.5*deltaTclock
136     ELSE
137     DDTT=deltaTclock
138     ENDIF
139     DO bj = myByLo(myThid), myByHi(myThid)
140     DO bi = myBxLo(myThid), myBxHi(myThid)
141     CALL TIMEAVE_CUMULATE(
142     & PPviscArtave, PPviscAr, Nr,DDTT,bi,bj,myThid)
143     CALL TIMEAVE_CUMULATE(
144     & PPdiffKrtave,PPdiffKr,Nr,DDTT,bi,bj,myThid)
145     C Keep record of how much time has been integrated over
146     DO k=1,Nr
147     pp_TimeAve(k,bi,bj)=pp_TimeAve(k,bi,bj)+DDTT
148     ENDDO
149     ENDDO
150     ENDDO
151    
152     C Dump files and restart average computation if needed
153     IF ( myIter.NE.nIter0 .AND.
154     & DIFFERENT_MULTIPLE(PPtaveFreq,myCurrentTime,
155     & myCurrentTime-deltaTClock)
156     & ) THEN
157    
158     C Normalize by integrated time
159     DO bj = myByLo(myThid), myByHi(myThid)
160     DO bi = myBxLo(myThid), myBxHi(myThid)
161     CALL TIMEAVE_NORMALIZ(PPviscArtave,pp_timeave,
162     & Nr, bi,bj,myThid)
163     CALL TIMEAVE_NORMALIZ(PPdiffKrtave,pp_timeave,
164     & Nr, bi,bj,myThid)
165     ENDDO
166     ENDDO
167    
168     #ifdef MULTIPLE_RECORD_PP81_STATE_FILES
169     C Write each snap-shot as a new record in one file per variable
170     C - creates relatively few files but these files can become huge
171     CALL WRITE_REC_XYZ_RL('PPviscAr-T',PPviscArTave,
172     & pp_drctrecTave,myIter,myThid)
173     CALL WRITE_REC_XYZ_RL('PPdiffKr-T',PPdiffKrTave,
174     & pp_drctrecTave,myIter,myThid)
175     C-- Increment record counter
176     pp_drctrecTave = pp_drctrecTave + 1
177    
178     #else /* MULTIPLE_RECORD_PP81_STATE_FILES */
179    
180     C Write each snap-shot as a new file
181     C - creates many files but for large configurations is easier to
182     C transfer analyse a particular snap-shots
183     WRITE(suff,'(I10.10)') myIter
184     CALL WRITE_FLD_XYZ_RL('PPviscAr-T.',suff,PPviscArTave,
185     & myIter,myThid)
186     CALL WRITE_FLD_XYZ_RL('PPdiffKr-T.',suff,PPdiffKrTave,
187     & myIter,myThid)
188     #endif /* MULTIPLE_RECORD_PP81_STATE_FILES */
189    
190     C Reset averages to zero
191     DO bj = myByLo(myThid), myByHi(myThid)
192     DO bi = myBxLo(myThid), myBxHi(myThid)
193     CALL TIMEAVE_RESET(PPviscArtave, Nr,bi,bj,myThid)
194     CALL TIMEAVE_RESET(PPdiffKrtave,Nr,bi,bj,myThid)
195     DO k=1,Nr
196     pp_TimeAve(k,bi,bj)=0.
197     ENDDO
198     ENDDO
199     ENDDO
200    
201     C Time Average PP fields
202     DDTT=0.5*deltaTclock
203     DO bj = myByLo(myThid), myByHi(myThid)
204     DO bi = myBxLo(myThid), myBxHi(myThid)
205     CALL TIMEAVE_CUMULATE(
206     & PPviscArtave, PPviscAr, Nr,DDTT,bi,bj,myThid)
207     CALL TIMEAVE_CUMULATE(
208     & PPdiffKrtave,PPdiffKr,Nr,DDTT,bi,bj,myThid)
209     C Keep record of how much time has been integrated over
210     DO k=1,Nr
211     pp_TimeAve(k,bi,bj)=pp_TimeAve(k,bi,bj)+DDTT
212     ENDDO
213     ENDDO
214     ENDDO
215     ENDIF
216    
217     #endif /* ALLOW_TIMEAVE */
218    
219     #endif /* ALLOW_PP81 */
220    
221     RETURN
222     END

  ViewVC Help
Powered by ViewVC 1.1.22