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

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

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

revision 1.9 by edhill, Tue Jul 6 03:55:53 2004 UTC revision 1.10 by edhill, Wed Jul 7 03:47:05 2004 UTC
# Line 26  C*************************************** Line 26  C***************************************
26  #ifdef ALLOW_FIZHI  #ifdef ALLOW_FIZHI
27  #include "fizhi_SIZE.h"  #include "fizhi_SIZE.h"
28  #else  #else
29         integer Nrphys        integer Nrphys
30         parameter (Nrphys=0)        parameter (Nrphys=0)
31  #endif  #endif
32    
33  #include "diagnostics_SIZE.h"  #include "diagnostics_SIZE.h"
34  #include "diagnostics.h"  #include "diagnostics.h"
35          
36        integer myThid,lev,ipoint        integer myThid,lev,ipoint
37        _RL undef        _RL undef
38        _RL qtmp(1-OLx:sNx+Olx,1-Oly:sNy+Oly,Nr+Nrphys,Nsx,Nsy)        _RL qtmp(1-OLx:sNx+Olx,1-Oly:sNy+Oly,Nr+Nrphys,Nsx,Nsy)
39          
40        _RL factor        _RL factor
41        integer i,j,ipnt,klev        integer i,j,ipnt,klev
42        integer bi,bj        integer bi,bj
43          
44        if (ipoint.lt.1) go to 999        if (ipoint.lt.1) go to 999
45          
46        klev = kdiag(ipoint)        klev = kdiag(ipoint)
47        if(klev.ge.lev) then        if(klev.ge.lev) then
48        ipnt = idiag(ipoint) + lev - 1          ipnt = idiag(ipoint) + lev - 1
49        factor = 1.0          factor = 1.0
50        if(ndiag(ipoint).ne.0) factor = 1.0/ndiag(ipoint)          if(ndiag(ipoint).ne.0) factor = 1.0/ndiag(ipoint)
51    
52        do bj=myByLo(myThid), myByHi(myThid)          do bj=myByLo(myThid), myByHi(myThid)
53        do bi=myBxLo(myThid), myBxHi(myThid)            do bi=myBxLo(myThid), myBxHi(myThid)
54                
55        do j = 1,sNy              do j = 1,sNy
56        do i = 1,sNx                do i = 1,sNx
57         if( qdiag(i,j,ipnt,bi,bj).ne.undef ) then                  if( qdiag(i,j,ipnt,bi,bj).ne.undef ) then
58          qtmp(i,j,lev,bi,bj) = qdiag(i,j,ipnt,bi,bj)*factor                    qtmp(i,j,lev,bi,bj) = qdiag(i,j,ipnt,bi,bj)*factor
59         else                  else
60          qtmp(i,j,lev,bi,bj) = undef                    qtmp(i,j,lev,bi,bj) = undef
61         endif                  endif
62        enddo                enddo
63        enddo              enddo
64                
65        enddo            enddo
66        enddo          enddo
67    
68        endif        endif
69    
# Line 107  C*************************************** Line 107  C***************************************
107        integer bi,bj        integer bi,bj
108    
109        if (ipoint.lt.1) go to 999        if (ipoint.lt.1) go to 999
110          
111        klev = kdiag(ipoint)        klev = kdiag(ipoint)
112        if(klev.ge.lev) then        if (klev .ge. lev) then
113        ipnt = idiag(ipoint) + lev - 1          ipnt = idiag(ipoint) + lev - 1
114            
115        do bj=myByLo(myThid), myByHi(myThid)          do bj=myByLo(myThid), myByHi(myThid)
116        do bi=myBxLo(myThid), myBxHi(myThid)            do bi=myBxLo(myThid), myBxHi(myThid)
117                
118        do j = 1,sNy              do j = 1,sNy
119        do i = 1,sNx                do i = 1,sNx
120         if( qdiag(i,j,ipnt,bi,bj).ne.undef ) then                  qtmp(i,j,lev,bi,bj) = qdiag(i,j,ipnt,bi,bj)
121          qtmp(i,j,lev,bi,bj) = qdiag(i,j,ipnt,bi,bj)                enddo
122         else              enddo
123          qtmp(i,j,lev,bi,bj) = undef              
124         endif            enddo
125        enddo          enddo
126        enddo          
   
       enddo  
       enddo  
   
127        endif        endif
128    
129   999  return   999  return
130        end        end
131    
132    
133        subroutine clrindx (myThid,listnum)        subroutine clrindx (myThid,listnum)
134  C***********************************************************************  C***********************************************************************
135  C  C
# Line 161  C*************************************** Line 159  C***************************************
159        equivalence (     parms1 , parse1(1) )        equivalence (     parms1 , parse1(1) )
160        equivalence ( mate_index , parse1(6) )        equivalence ( mate_index , parse1(6) )
161    
162        do n=1,nfields(listnum)        do n = 1,nfields(listnum)
163         do m=1,ndiagt          do m = 1,ndiagt
164          if( flds(n,listnum).eq.cdiag(m) .and. idiag(m).ne.0 ) then            if( flds(n,listnum).eq.cdiag(m) .and. idiag(m).ne.0 ) then
165           call clrdiag (myThid,m)              call clrdiag (myThid,m)
166    
167  c Check for Counter Diagnostic  C           Check for Counter Diagnostic
168  c ----------------------------              parms1 =  gdiag(m)
169           parms1 =  gdiag(m)              if ( parse1(5).eq.'C' ) then
170           if( parse1(5).eq.'C' ) then                read (mate_index,100) mate
171            read (mate_index,100) mate                call clrdiag (myThid,mate)
172            call clrdiag (myThid,mate)              endif
173           endif            endif
174          endif          enddo
        enddo  
175        enddo        enddo
176                                        
177    100 format(i3)    100 format(i3)
# Line 205  C ****              SET DIAGNOSTIC AND C Line 202  C ****              SET DIAGNOSTIC AND C
202  C **********************************************************************          C **********************************************************************        
203                                                                                                                                                                    
204        do bj=myByLo(myThid), myByHi(myThid)        do bj=myByLo(myThid), myByHi(myThid)
205        do bi=myBxLo(myThid), myBxHi(myThid)          do bi=myBxLo(myThid), myBxHi(myThid)
206         do k = 1,kdiag(index)            do k = 1,kdiag(index)
207          do j = 1,sNy              do j = 1,sNy
208          do i = 1,sNx                do i = 1,sNx
209           qdiag(i,j,idiag(index)+k-1,bi,bj) = 0.0                  qdiag(i,j,idiag(index)+k-1,bi,bj) = 0. _d 0
210          enddo                enddo
211                enddo
212              enddo
213          enddo          enddo
        enddo  
214        enddo        enddo
215        enddo        
   
216        ndiag(index) = 0        ndiag(index) = 0
217    
218        return        return
# Line 261  C ************************************** Line 258  C **************************************
258            IDIAG(NUM) = IPOINTER            IDIAG(NUM) = IPOINTER
259            IPOINTER   = IPOINTER + KDIAG(NUM)            IPOINTER   = IPOINTER + KDIAG(NUM)
260            ndiagmx    = ndiagmx  + KDIAG(NUM)            ndiagmx    = ndiagmx  + KDIAG(NUM)
261            if(myThid.eq.1) WRITE(6,2000)KDIAG(NUM),NUM,CDIAG(NUM),ndiagmx            if (myThid.eq.1)
262         &         WRITE(6,2000)KDIAG(NUM),NUM,CDIAG(NUM),ndiagmx
263          endif          endif
264        ELSE        ELSE
265            if(myThid.eq.1) WRITE(6,3000) NUM, CDIAG(NUM)            if (myThid.eq.1)
266         &       WRITE(6,3000) NUM, CDIAG(NUM)
267        ENDIF        ENDIF
268    
269  c Check for Counter Diagnostic  C     Check for Counter Diagnostic
270  c ----------------------------        if ( parse1(5).eq.'C') then
271        if( parse1(5).eq.'C') then          read (mate_index,100) mate
272        read (mate_index,100) mate  
273            IF( IDIAG(mate).EQ.0 ) THEN
274        IF( IDIAG(mate).EQ.0 ) THEN            if(ndiagmx+kdiag(num).gt.numdiags) then
275         if(ndiagmx+kdiag(num).gt.numdiags) then              write(6,5000)num,cdiag(num)
276          write(6,5000)num,cdiag(num)            else
277         else              IDIAG(mate) = IPOINTER
278          IDIAG(mate) = IPOINTER              IPOINTER    = IPOINTER + KDIAG(mate)
279          IPOINTER    = IPOINTER + KDIAG(mate)              ndiagmx     = ndiagmx  + KDIAG(mate)
280          ndiagmx     = ndiagmx  + KDIAG(mate)              if (myThid.eq.1)
281          if(myThid.eq.1)WRITE(6,2000)KDIAG(mate),mate,CDIAG(mate),ndiagmx       &           WRITE(6,2000)KDIAG(mate),mate,CDIAG(mate),ndiagmx
282         endif            endif
283        ELSE          ELSE
284            if(myThid.eq.1) WRITE(6,3000) mate, CDIAG(mate)            if(myThid.eq.1) WRITE(6,3000) mate, CDIAG(mate)
285        ENDIF          ENDIF
286        endif        endif
287    
288        RETURN        RETURN

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

  ViewVC Help
Powered by ViewVC 1.1.22