1 |
C $Header: /u/gcmpack/models/MITgcmUV/pkg/kpp/kpp_do_diags.F,v 1.4 2001/02/04 14:38:50 cnh Exp $ |
2 |
C $Name: $ |
3 |
|
4 |
#include "KPP_OPTIONS.h" |
5 |
|
6 |
SUBROUTINE KPP_DO_DIAGS( myCurrentTime, myIter, myThid ) |
7 |
C /==========================================================\ |
8 |
C | SUBROUTINE KPP_DO_DIAGS | |
9 |
C | o Do KPP diagnostic output. | |
10 |
C |==========================================================| |
11 |
C | Right now this subroutine assumes JPL direct access I/O | |
12 |
C | format. You will need to update this with your favorite | |
13 |
C | I/O package. | |
14 |
C \==========================================================/ |
15 |
IMPLICIT NONE |
16 |
|
17 |
C === Global variables === |
18 |
#include "SIZE.h" |
19 |
#include "EEPARAMS.h" |
20 |
#include "PARAMS.h" |
21 |
#include "KPP.h" |
22 |
#include "KPP_PARAMS.h" |
23 |
#include "KPP_DIAGS.h" |
24 |
|
25 |
C == Routine arguments == |
26 |
C myCurrentTime - Current time of simulation ( s ) |
27 |
C myIter - Iteration number |
28 |
C myThid - Number of this instance of INI_FORCING |
29 |
_RL myCurrentTime |
30 |
INTEGER myIter |
31 |
INTEGER myThid |
32 |
|
33 |
#ifdef ALLOW_KPP |
34 |
|
35 |
C == Local variables == |
36 |
LOGICAL DIFFERENT_MULTIPLE |
37 |
EXTERNAL DIFFERENT_MULTIPLE |
38 |
INTEGER bi, bj, K |
39 |
_RL DDTT |
40 |
|
41 |
C---------------------------------------------------------------- |
42 |
C Dump snapshot of KPP variables. |
43 |
C---------------------------------------------------------------- |
44 |
|
45 |
IF ( |
46 |
& DIFFERENT_MULTIPLE(dumpFreq,myCurrentTime, |
47 |
& myCurrentTime-deltaTClock) |
48 |
& ) THEN |
49 |
|
50 |
IF (KPPmixingMaps) THEN |
51 |
CALL PLOT_FIELD_XYRL ( KPPhbl , 'KPPhbl' , |
52 |
& myIter, myThid ) |
53 |
CALL PLOT_FIELD_XYZRL ( KPPviscAz , 'KPPviscAz' , |
54 |
& Nr, myIter, myThid ) |
55 |
CALL PLOT_FIELD_XYZRL ( KPPdiffKzT, 'KPPdiffKzT', |
56 |
& Nr, myIter, myThid ) |
57 |
CALL PLOT_FIELD_XYZRL ( KPPghat , 'KPPghat' , |
58 |
& Nr, myIter, myThid ) |
59 |
ENDIF |
60 |
|
61 |
if (KPPwriteState) then |
62 |
CALL WRITE_REC_XYZ_RL('KPPviscAz',KPPviscAz,kpp_drctrec, |
63 |
& myIter,myThid) |
64 |
CALL WRITE_REC_XYZ_RL('KPPdiffKzT',KPPdiffKzT,kpp_drctrec, |
65 |
& myIter,myThid) |
66 |
CALL WRITE_REC_XYZ_RL('KPPdiffKzS',KPPdiffKzS,kpp_drctrec, |
67 |
& myIter,myThid) |
68 |
CALL WRITE_REC_XYZ_RL('KPPghat',KPPghat,kpp_drctrec, |
69 |
& myIter,myThid) |
70 |
CALL WRITE_REC_XY_RL('KPPhbl',KPPhbl,kpp_drctrec, |
71 |
& myIter,myThid) |
72 |
endif |
73 |
|
74 |
C-- Increment record counter |
75 |
kpp_drctrec = kpp_drctrec + 1 |
76 |
|
77 |
ENDIF |
78 |
|
79 |
C---------------------------------------------------------------- |
80 |
C Do KPP time averaging. |
81 |
C---------------------------------------------------------------- |
82 |
|
83 |
#ifdef ALLOW_TIMEAVE |
84 |
|
85 |
C Initialize averages to zero |
86 |
IF ( myIter.EQ.nIter0 ) THEN |
87 |
DO bj = myByLo(myThid), myByHi(myThid) |
88 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
89 |
CALL TIMEAVE_RESET(KPPviscAztave, Nr,bi,bj,myThid) |
90 |
CALL TIMEAVE_RESET(KPPdiffKzTtave,Nr,bi,bj,myThid) |
91 |
CALL TIMEAVE_RESET(KPPghattave, Nr,bi,bj,myThid) |
92 |
CALL TIMEAVE_RESET(KPPdiffKzStave,Nr,bi,bj,myThid) |
93 |
CALL TIMEAVE_RESET(KPPhbltave, 1, bi,bj,myThid) |
94 |
DO k=1,Nr |
95 |
kpp_TimeAve(k,bi,bj)=0. |
96 |
ENDDO |
97 |
ENDDO |
98 |
ENDDO |
99 |
ENDIF |
100 |
|
101 |
C Time Average KPP fields |
102 |
IF ( myIter .EQ. nIter0 .OR. |
103 |
& DIFFERENT_MULTIPLE |
104 |
& (taveFreq,myCurrentTime,myCurrentTime-deltaTClock) ) |
105 |
& THEN |
106 |
DDTT=0.5*deltaTclock |
107 |
ELSE |
108 |
DDTT=deltaTclock |
109 |
ENDIF |
110 |
DO bj = myByLo(myThid), myByHi(myThid) |
111 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
112 |
CALL TIMEAVE_CUMULATE( |
113 |
& KPPviscAztave, KPPviscAz, Nr,DDTT,bi,bj,myThid) |
114 |
CALL TIMEAVE_CUMULATE( |
115 |
& KPPdiffKzTtave,KPPdiffKzT,Nr,DDTT,bi,bj,myThid) |
116 |
CALL TIMEAVE_CUMULATE( |
117 |
& KPPghattave, KPPghat, Nr,DDTT,bi,bj,myThid) |
118 |
CALL TIMEAVE_CUMULATE( |
119 |
& KPPdiffKzStave,KPPdiffKzS,Nr,DDTT,bi,bj,myThid) |
120 |
CALL TIMEAVE_CUMULATE( |
121 |
& KPPhbltave, KPPhbl, 1, DDTT,bi,bj,myThid) |
122 |
C Keep record of how much time has been integrated over |
123 |
DO k=1,Nr |
124 |
kpp_TimeAve(k,bi,bj)=kpp_TimeAve(k,bi,bj)+DDTT |
125 |
ENDDO |
126 |
ENDDO |
127 |
ENDDO |
128 |
|
129 |
C Dump files and restart average computation if needed |
130 |
IF ( myIter.NE.nIter0 .AND. |
131 |
& DIFFERENT_MULTIPLE(taveFreq,myCurrentTime, |
132 |
& myCurrentTime-deltaTClock) |
133 |
& ) THEN |
134 |
|
135 |
C Normalize by integrated time |
136 |
DO bj = myByLo(myThid), myByHi(myThid) |
137 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
138 |
CALL TIMEAVE_NORMALIZ(KPPviscAztave,kpp_timeave, |
139 |
& Nr, bi,bj,myThid) |
140 |
CALL TIMEAVE_NORMALIZ(KPPdiffKzTtave,kpp_timeave, |
141 |
& Nr, bi,bj,myThid) |
142 |
CALL TIMEAVE_NORMALIZ(KPPghattave,kpp_timeave, |
143 |
& Nr, bi,bj,myThid) |
144 |
CALL TIMEAVE_NORMALIZ(KPPdiffKzStave,kpp_timeave, |
145 |
& Nr, bi,bj,myThid) |
146 |
CALL TIMEAVE_NORMALIZ(KPPhbltave,kpp_timeave, |
147 |
& 1, bi,bj,myThid) |
148 |
ENDDO |
149 |
ENDDO |
150 |
|
151 |
CALL WRITE_REC_XYZ_RS('KPPviscAz-T',KPPviscAzTave, |
152 |
& kpp_drctrecTave,myIter,myThid) |
153 |
CALL WRITE_REC_XYZ_RS('KPPdiffKzT-T',KPPdiffKzTTave, |
154 |
& kpp_drctrecTave,myIter,myThid) |
155 |
CALL WRITE_REC_XYZ_RS('KPPdiffKzS-T',KPPdiffKzSTave, |
156 |
& kpp_drctrecTave,myIter,myThid) |
157 |
CALL WRITE_REC_XYZ_RS('KPPghat-T',KPPghatTave, |
158 |
& kpp_drctrecTave,myIter,myThid) |
159 |
CALL WRITE_REC_XY_RS('KPPhbl-T',KPPhblTave, |
160 |
& kpp_drctrecTave,myIter,myThid) |
161 |
|
162 |
C-- Increment record counter |
163 |
kpp_drctrecTave = kpp_drctrecTave + 1 |
164 |
|
165 |
C Reset averages to zero |
166 |
DO bj = myByLo(myThid), myByHi(myThid) |
167 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
168 |
CALL TIMEAVE_RESET(KPPviscAztave, Nr,bi,bj,myThid) |
169 |
CALL TIMEAVE_RESET(KPPdiffKzTtave,Nr,bi,bj,myThid) |
170 |
CALL TIMEAVE_RESET(KPPghattave, Nr,bi,bj,myThid) |
171 |
CALL TIMEAVE_RESET(KPPdiffKzStave,Nr,bi,bj,myThid) |
172 |
CALL TIMEAVE_RESET(KPPhbltave, 1, bi,bj,myThid) |
173 |
DO k=1,Nr |
174 |
kpp_TimeAve(k,bi,bj)=0. |
175 |
ENDDO |
176 |
ENDDO |
177 |
ENDDO |
178 |
|
179 |
C Time Average KPP fields |
180 |
DDTT=0.5*deltaTclock |
181 |
DO bj = myByLo(myThid), myByHi(myThid) |
182 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
183 |
CALL TIMEAVE_CUMULATE( |
184 |
& KPPviscAztave, KPPviscAz, Nr,DDTT,bi,bj,myThid) |
185 |
CALL TIMEAVE_CUMULATE( |
186 |
& KPPdiffKzTtave,KPPdiffKzT,Nr,DDTT,bi,bj,myThid) |
187 |
CALL TIMEAVE_CUMULATE( |
188 |
& KPPghattave, KPPghat, Nr,DDTT,bi,bj,myThid) |
189 |
CALL TIMEAVE_CUMULATE( |
190 |
& KPPdiffKzStave,KPPdiffKzS,Nr,DDTT,bi,bj,myThid) |
191 |
CALL TIMEAVE_CUMULATE( |
192 |
& KPPhbltave, KPPhbl, 1, DDTT,bi,bj,myThid) |
193 |
C Keep record of how much time has been integrated over |
194 |
DO k=1,Nr |
195 |
kpp_TimeAve(k,bi,bj)=kpp_TimeAve(k,bi,bj)+DDTT |
196 |
ENDDO |
197 |
ENDDO |
198 |
ENDDO |
199 |
ENDIF |
200 |
|
201 |
#endif |
202 |
|
203 |
#endif |
204 |
|
205 |
RETURN |
206 |
END |