1 |
molod |
1.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 |