/[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.10 by edhill, Wed Jul 7 03:47:05 2004 UTC revision 1.11 by molod, Wed Jul 7 15:58:17 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).ge.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                  qtmp(i,j,lev,bi,bj) = qdiag(i,j,ipnt,bi,bj)         if( qdiag(i,j,ipnt,bi,bj).ge.undef ) then
121                enddo          qtmp(i,j,lev,bi,bj) = qdiag(i,j,ipnt,bi,bj)
122              enddo         else
123                        qtmp(i,j,lev,bi,bj) = undef
124            enddo         endif
125          enddo        enddo
126                  enddo
127    
128          enddo
129          enddo
130    
131        endif        endif
132    
133   999  return   999  return
134        end        end
   
   
135        subroutine clrindx (myThid,listnum)        subroutine clrindx (myThid,listnum)
136  C***********************************************************************  C***********************************************************************
137  C  C
# Line 159  C*************************************** Line 161  C***************************************
161        equivalence (     parms1 , parse1(1) )        equivalence (     parms1 , parse1(1) )
162        equivalence ( mate_index , parse1(6) )        equivalence ( mate_index , parse1(6) )
163    
164        do n = 1,nfields(listnum)        do n=1,nfields(listnum)
165          do m = 1,ndiagt         do m=1,ndiagt
166            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
167              call clrdiag (myThid,m)           call clrdiag (myThid,m)
168    
169  C           Check for Counter Diagnostic  c Check for Counter Diagnostic
170              parms1 =  gdiag(m)  c ----------------------------
171              if ( parse1(5).eq.'C' ) then           parms1 =  gdiag(m)
172                read (mate_index,100) mate           if( parse1(5).eq.'C' ) then
173                call clrdiag (myThid,mate)            read (mate_index,100) mate
174              endif            call clrdiag (myThid,mate)
175            endif           endif
176          enddo          endif
177           enddo
178        enddo        enddo
179                                        
180    100 format(i3)    100 format(i3)
# Line 202  C ****              SET DIAGNOSTIC AND C Line 205  C ****              SET DIAGNOSTIC AND C
205  C **********************************************************************          C **********************************************************************        
206                                                                                                                                                                    
207        do bj=myByLo(myThid), myByHi(myThid)        do bj=myByLo(myThid), myByHi(myThid)
208          do bi=myBxLo(myThid), myBxHi(myThid)        do bi=myBxLo(myThid), myBxHi(myThid)
209            do k = 1,kdiag(index)         do k = 1,kdiag(index)
210              do j = 1,sNy          do j = 1,sNy
211                do i = 1,sNx          do i = 1,sNx
212                  qdiag(i,j,idiag(index)+k-1,bi,bj) = 0. _d 0           qdiag(i,j,idiag(index)+k-1,bi,bj) = 0.0
213                enddo          enddo
             enddo  
           enddo  
214          enddo          enddo
215           enddo
216        enddo        enddo
217                enddo
218    
219        ndiag(index) = 0        ndiag(index) = 0
220    
221        return        return
# Line 258  C ************************************** Line 261  C **************************************
261            IDIAG(NUM) = IPOINTER            IDIAG(NUM) = IPOINTER
262            IPOINTER   = IPOINTER + KDIAG(NUM)            IPOINTER   = IPOINTER + KDIAG(NUM)
263            ndiagmx    = ndiagmx  + KDIAG(NUM)            ndiagmx    = ndiagmx  + KDIAG(NUM)
264            if (myThid.eq.1)            if(myThid.eq.1) WRITE(6,2000)KDIAG(NUM),NUM,CDIAG(NUM),ndiagmx
      &         WRITE(6,2000)KDIAG(NUM),NUM,CDIAG(NUM),ndiagmx  
265          endif          endif
266        ELSE        ELSE
267            if (myThid.eq.1)            if(myThid.eq.1) WRITE(6,3000) NUM, CDIAG(NUM)
      &       WRITE(6,3000) NUM, CDIAG(NUM)  
268        ENDIF        ENDIF
269    
270  C     Check for Counter Diagnostic  c Check for Counter Diagnostic
271        if ( parse1(5).eq.'C') then  c ----------------------------
272          read (mate_index,100) mate        if( parse1(5).eq.'C') then
273          read (mate_index,100) mate
274          IF( IDIAG(mate).EQ.0 ) THEN  
275            if(ndiagmx+kdiag(num).gt.numdiags) then        IF( IDIAG(mate).EQ.0 ) THEN
276              write(6,5000)num,cdiag(num)         if(ndiagmx+kdiag(num).gt.numdiags) then
277            else          write(6,5000)num,cdiag(num)
278              IDIAG(mate) = IPOINTER         else
279              IPOINTER    = IPOINTER + KDIAG(mate)          IDIAG(mate) = IPOINTER
280              ndiagmx     = ndiagmx  + KDIAG(mate)          IPOINTER    = IPOINTER + KDIAG(mate)
281              if (myThid.eq.1)          ndiagmx     = ndiagmx  + KDIAG(mate)
282       &           WRITE(6,2000)KDIAG(mate),mate,CDIAG(mate),ndiagmx          if(myThid.eq.1)WRITE(6,2000)KDIAG(mate),mate,CDIAG(mate),ndiagmx
283            endif         endif
284          ELSE        ELSE
285            if(myThid.eq.1) WRITE(6,3000) mate, CDIAG(mate)            if(myThid.eq.1) WRITE(6,3000) mate, CDIAG(mate)
286          ENDIF        ENDIF
287        endif        endif
288    
289        RETURN        RETURN

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

  ViewVC Help
Powered by ViewVC 1.1.22