/[MITgcm]/MITgcm/pkg/diagnostics/diagnostics_utils.F
ViewVC logotype

Contents of /MITgcm/pkg/diagnostics/diagnostics_utils.F

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


Revision 1.1 - (show annotations) (download)
Thu Feb 12 15:56:38 2004 UTC (20 years, 3 months ago) by molod
Branch: MAIN
CVS Tags: hrcube4, checkpoint52j_post, checkpoint52k_post, checkpoint52j_pre
New diagnostics routines - initialise, read namelist, utilities

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

  ViewVC Help
Powered by ViewVC 1.1.22