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

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

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


Revision 1.1 - (hide 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 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

  ViewVC Help
Powered by ViewVC 1.1.22