1 |
subroutine getdiag (qdiag,lev,ipoint,qtmp,im,jm,nd,undef) |
2 |
C*********************************************************************** |
3 |
C |
4 |
C PURPOSE |
5 |
C Retrieve averaged model diagnostic |
6 |
C INPUT: |
7 |
C lev ..... Model LEVEL |
8 |
C ipoint ..... DIAGNOSTIC NUMBER FROM MENU |
9 |
C undef ..... UNDEFINED VALUE |
10 |
C im ..... X-DIMENSION |
11 |
C jm ..... Y-DIMENSION |
12 |
C nd ..... Number of 2-D Diagnostics |
13 |
C |
14 |
C OUTPUT: |
15 |
C qtmp ..... AVERAGED DIAGNOSTIC QUANTITY |
16 |
C |
17 |
C*********************************************************************** |
18 |
implicit none |
19 |
|
20 |
#include "SIZE.h" |
21 |
#include "fizhi_SIZE.h" |
22 |
#include "diagnostics_SIZE.h" |
23 |
#include "diagnostics.h" |
24 |
|
25 |
integer im,jm,nd |
26 |
real qdiag(im,jm,nd) |
27 |
|
28 |
integer lev,ipoint |
29 |
integer i,j,ipnt,klev |
30 |
real undef, factor |
31 |
real qtmp(im,jm) |
32 |
|
33 |
do j = 1,jm |
34 |
do i = 1,im |
35 |
qtmp(i,j) = undef |
36 |
enddo |
37 |
enddo |
38 |
|
39 |
IF (IPOINT.LT.1) GO TO 999 |
40 |
|
41 |
KLEV = KDIAG(IPOINT) |
42 |
IF(KLEV.GE.LEV) THEN |
43 |
IPNT = IDIAG(IPOINT) + LEV - 1 |
44 |
FACTOR = 1.0 |
45 |
IF( NDIAG(IPOINT).NE.0 ) FACTOR = 1.0 / NDIAG(IPOINT) |
46 |
do j = 1,jm |
47 |
do i = 1,im |
48 |
if( qdiag(i,j,ipnt).ne.undef ) qtmp(i,j) = qdiag(i,j,ipnt)*factor |
49 |
enddo |
50 |
enddo |
51 |
ENDIF |
52 |
|
53 |
999 RETURN |
54 |
END |
55 |
|
56 |
subroutine getdiag2 (qdiag,lev,ipoint,qtmp,im,jm,nd,undef) |
57 |
C*********************************************************************** |
58 |
C |
59 |
C PURPOSE |
60 |
C Retrieve model diagnostic (No Averaging) |
61 |
C INPUT: |
62 |
C lev ..... Model LEVEL |
63 |
C ipoint ..... DIAGNOSTIC NUMBER FROM MENU |
64 |
C undef ..... UNDEFINED VALUE |
65 |
C im ..... X-DIMENSION |
66 |
C jm ..... Y-DIMENSION |
67 |
C nd ..... Number of 2-D Diagnostics |
68 |
C |
69 |
C OUTPUT: |
70 |
C qtmp ..... DIAGNOSTIC QUANTITY |
71 |
C |
72 |
C*********************************************************************** |
73 |
|
74 |
implicit none |
75 |
|
76 |
#include "SIZE.h" |
77 |
#include "fizhi_SIZE.h" |
78 |
#include "diagnostics_SIZE.h" |
79 |
#include "diagnostics.h" |
80 |
|
81 |
integer im,jm,nd |
82 |
real qdiag(im,jm,nd) |
83 |
|
84 |
integer lev,ipoint |
85 |
integer i,j,ipnt,klev |
86 |
real undef, factor |
87 |
real qtmp(im,jm) |
88 |
|
89 |
do j = 1,jm |
90 |
do i = 1,im |
91 |
qtmp(i,j) = undef |
92 |
enddo |
93 |
enddo |
94 |
|
95 |
IF (IPOINT.LT.1) GO TO 999 |
96 |
|
97 |
KLEV = KDIAG(IPOINT) |
98 |
IF(KLEV.GE.LEV) THEN |
99 |
IPNT = IDIAG(IPOINT) + LEV - 1 |
100 |
do j = 1,jm |
101 |
do i = 1,im |
102 |
qtmp(i,j) = qdiag(i,j,ipnt) |
103 |
enddo |
104 |
enddo |
105 |
ENDIF |
106 |
|
107 |
999 RETURN |
108 |
END |
109 |
subroutine clrindx ( diag,indxlist ) |
110 |
C*********************************************************************** |
111 |
C |
112 |
C PURPOSE |
113 |
C DRIVER TO CLEAR DIAGNOSTICS SPECIFIED IN DIAGNOSTIC INDEX LIST |
114 |
C |
115 |
C ARGUMENT DESCRIPTION |
116 |
C INDXLIST.. INTEGER DIAGNOSTIC INDEX LIST |
117 |
C |
118 |
C*********************************************************************** |
119 |
|
120 |
implicit none |
121 |
|
122 |
#include "SIZE.h" |
123 |
#include "fizhi_SIZE.h" |
124 |
#include "diagnostics_SIZE.h" |
125 |
#include "diagnostics.h" |
126 |
|
127 |
integer indxlist (ndiagt) |
128 |
integer index, n |
129 |
|
130 |
character*8 parms1 |
131 |
character*1 parse1(8) |
132 |
character*3 mate_index |
133 |
integer mate |
134 |
|
135 |
equivalence ( parms1 , parse1(1) ) |
136 |
equivalence ( mate_index , parse1(6) ) |
137 |
|
138 |
DO INDEX=1,NDIAGT |
139 |
N = INDXLIST (index) |
140 |
|
141 |
IF( N.NE.0 .AND. IDIAG(N).NE.0 ) THEN |
142 |
call clrdiag (diag,n) |
143 |
|
144 |
c Check for Counter Diagnostic |
145 |
c ---------------------------- |
146 |
parms1 = gdiag(n) |
147 |
if( parse1(5).eq.'C' ) then |
148 |
read (mate_index,100) mate |
149 |
call clrdiag (diag,mate) |
150 |
endif |
151 |
|
152 |
ENDIF |
153 |
ENDDO |
154 |
|
155 |
100 format(i3) |
156 |
RETURN |
157 |
END |
158 |
|
159 |
|
160 |
subroutine clrdiag (diag,n) |
161 |
C*********************************************************************** |
162 |
C |
163 |
C PURPOSE |
164 |
C INITIALIZE MODEL DIAGNOSTIC QUANTITIES |
165 |
C |
166 |
C*********************************************************************** |
167 |
|
168 |
implicit none |
169 |
#include "SIZE.h" |
170 |
#include "fizhi_SIZE.h" |
171 |
#include "diagnostics_SIZE.h" |
172 |
#include "diagnostics.h" |
173 |
|
174 |
integer n |
175 |
integer i,j,k |
176 |
|
177 |
C ********************************************************************** |
178 |
C **** SET DIAGNOSTIC AND COUNTER TO ZERO **** |
179 |
C ********************************************************************** |
180 |
|
181 |
IF( IDIAG(N).NE.0 ) THEN |
182 |
|
183 |
do k=1,kdiag(n) |
184 |
do j=1,sNx |
185 |
do i=1,sNy |
186 |
qdiag(i,j,idiag(n)+k-1) = 0.0 |
187 |
enddo |
188 |
enddo |
189 |
enddo |
190 |
|
191 |
NDIAG(N) = 0 |
192 |
ENDIF |
193 |
|
194 |
RETURN |
195 |
END |