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

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

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


Revision 1.1 - (hide annotations) (download)
Mon Jan 11 19:42:32 2010 UTC (14 years, 3 months ago) by jmc
Branch: MAIN
Added/modified to output levels (vertical) integral of diagnostics field

1 jmc 1.1 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_interp_vert.F,v 1.10 2008/11/18 21:41:06 jmc Exp $
2     C $Name: $
3    
4     #include "DIAG_OPTIONS.h"
5    
6     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7     CBOP 0
8     C !ROUTINE: DIAGNOSTICS_SUM_LEVELS
9    
10     C !INTERFACE:
11     SUBROUTINE DIAGNOSTICS_SUM_LEVELS(
12     I listId, md, ndId, ip, im, lm,
13     U fld3d,
14     I undef,
15     I myTime, myIter, myThid )
16    
17     C !DESCRIPTION:
18     C Cumulate selected levels from a multi-level diagnostics field
19     C before writing to file this level integrated output
20     C (e.g., can be used to integrate vertically an Nr field).
21    
22     C !USES:
23     IMPLICIT NONE
24     #include "SIZE.h"
25     #include "EEPARAMS.h"
26     #include "PARAMS.h"
27     #include "GRID.h"
28     #include "DIAGNOSTICS_SIZE.h"
29     #include "DIAGNOSTICS.h"
30    
31     INTEGER NrMax
32     PARAMETER( NrMax = numLevels )
33    
34     C !INPUT PARAMETERS:
35     C listId :: Diagnostics list number being written
36     C md :: field number in the list "listId".
37     C ndId :: diagnostics Id number (in available diagnostics list)
38     C ip :: diagnostics pointer to storage array
39     C im :: counter-mate pointer to storage array
40     C lm :: index in the averageCycle
41     C fld3d :: diagnostics field output array
42     C undef ::
43     C myTime :: current time of simulation (s)
44     C myIter :: current iteration number
45     C myThid :: my Thread Id number
46     INTEGER listId, md, ndId, ip, im, lm
47     _RL fld3d(1-OLx:sNx+OLx,1-OLy:sNy+OLy,NrMax,nSx,nSy)
48     _RL undef
49     _RL myTime
50     INTEGER myIter, myThid
51     CEOP
52    
53     C !FUNCTIONS:
54    
55     C !LOCAL VARIABLES:
56     C i,j,k :: loop indices
57     INTEGER i, j, k
58     INTEGER bi, bj
59     INTEGER kLev
60     _RL tmpFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
61     _RL tmpFac, hFacLoc
62     c CHARACTER*(MAX_LEN_MBUF) msgBuf
63     CHARACTER*(10) gcode
64    
65     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
66    
67     IF (fflags(listId)(2:2).EQ.'I') THEN
68    
69     gcode = gdiag(ndId)(1:10)
70    
71     C-- start loops on tile indices bi,bj:
72     DO bj = myByLo(myThid), myByHi(myThid)
73     DO bi = myBxLo(myThid), myBxHi(myThid)
74    
75     DO j = 1-OLy,sNy+OLy
76     DO i = 1-OLx,sNx+OLx
77     tmpFld(i,j) = 0. _d 0
78     ENDDO
79     ENDDO
80    
81     IF ( gcode(3:3).EQ.' ' ) THEN
82     C-- Cumulate levels directly:
83    
84     DO k = 1,nlevels(listId)
85     kLev = NINT(levs(k,listId))
86     DO j = 1-OLy,sNy+OLy
87     DO i = 1-OLx,sNx+OLx
88     tmpFld(i,j) = tmpFld(i,j) + fld3d(i,j,kLev,bi,bj)
89     ENDDO
90     ENDDO
91     ENDDO
92     DO j = 1-OLy,sNy+OLy
93     DO i = 1-OLx,sNx+OLx
94     fld3d(i,j,1,bi,bj) = tmpFld(i,j)
95     ENDDO
96     ENDDO
97    
98     ELSEIF ( gcode(3:3).EQ.'r' ) THEN
99     C-- Cumulate the level-thickness product:
100    
101     DO k = 1,nlevels(listId)
102     kLev = NINT(levs(k,listId))
103     IF ( gcode(9:9).EQ.'L' ) THEN
104     tmpFac = drC(kLev)
105     ELSE
106     tmpFac = drF(kLev)
107     ENDIF
108     DO j = 1-OLy,sNy+OLy
109     DO i = 1-OLx,sNx+OLx
110     tmpFld(i,j) = tmpFld(i,j)
111     & + tmpFac*fld3d(i,j,kLev,bi,bj)
112     ENDDO
113     ENDDO
114     ENDDO
115     DO j = 1-OLy,sNy+OLy
116     DO i = 1-OLx,sNx+OLx
117     fld3d(i,j,1,bi,bj) = tmpFld(i,j)
118     ENDDO
119     ENDDO
120    
121     ELSEIF ( gcode(3:3).EQ.'R' ) THEN
122     C-- Cumulate the level-thickness & hFac product:
123    
124     IF ( gcode(2:2).EQ.'M' ) THEN
125     DO k = 1,nlevels(listId)
126     kLev = NINT(levs(k,listId))
127     IF ( gcode(9:9).EQ.'L' ) THEN
128     tmpFac = drC(kLev)
129     ELSE
130     tmpFac = drF(kLev)
131     ENDIF
132     DO j = 1-OLy,sNy+OLy
133     DO i = 1-OLx,sNx+OLx
134     tmpFld(i,j) = tmpFld(i,j)
135     & + tmpFac*fld3d(i,j,kLev,bi,bj)
136     & *hFacC(i,j,kLev,bi,bj)
137     ENDDO
138     ENDDO
139     ENDDO
140     ELSEIF ( gcode(2:2).EQ.'U' ) THEN
141     DO k = 1,nlevels(listId)
142     kLev = NINT(levs(k,listId))
143     IF ( gcode(9:9).EQ.'L' ) THEN
144     tmpFac = drC(kLev)
145     ELSE
146     tmpFac = drF(kLev)
147     ENDIF
148     DO j = 1-OLy,sNy+OLy
149     DO i = 1-OLx,sNx+OLx
150     tmpFld(i,j) = tmpFld(i,j)
151     & + tmpFac*fld3d(i,j,kLev,bi,bj)
152     & *hFacW(i,j,kLev,bi,bj)
153     ENDDO
154     ENDDO
155     ENDDO
156     ELSEIF ( gcode(2:2).EQ.'V' ) THEN
157     DO k = 1,nlevels(listId)
158     kLev = NINT(levs(k,listId))
159     IF ( gcode(9:9).EQ.'L' ) THEN
160     tmpFac = drC(kLev)
161     ELSE
162     tmpFac = drF(kLev)
163     ENDIF
164     DO j = 1-OLy,sNy+OLy
165     DO i = 1-OLx,sNx+OLx
166     tmpFld(i,j) = tmpFld(i,j)
167     & + tmpFac*fld3d(i,j,kLev,bi,bj)
168     & *hFacS(i,j,kLev,bi,bj)
169     ENDDO
170     ENDDO
171     ENDDO
172     ELSEIF ( gcode(2:2).EQ.'Z' ) THEN
173     DO k = 1,nlevels(listId)
174     kLev = NINT(levs(k,listId))
175     IF ( gcode(9:9).EQ.'L' ) THEN
176     tmpFac = drC(kLev)
177     ELSE
178     tmpFac = drF(kLev)
179     ENDIF
180     DO j = 1-OLy,sNy+OLy
181     DO i = 1-OLx,sNx+OLx
182     hFacLoc = MIN(
183     & hFacW( i, j, kLev,bi,bj),
184     & hFacW( i,j-1,kLev,bi,bj),
185     & hFacS( i, j, kLev,bi,bj),
186     & hFacS(i-1,j, kLev,bi,bj)
187     & )
188     tmpFld(i,j) = tmpFld(i,j)
189     & + tmpFac*fld3d(i,j,kLev,bi,bj)
190     & *hFacLoc
191     ENDDO
192     ENDDO
193     ENDDO
194     ELSE
195     STOP 'DIAGNOSTICS_SUM_LEVELS: invalid gcode(2)'
196     ENDIF
197     DO j = 1-OLy,sNy+OLy
198     DO i = 1-OLx,sNx+OLx
199     fld3d(i,j,1,bi,bj) = tmpFld(i,j)
200     ENDDO
201     ENDDO
202    
203     ELSE
204     STOP 'DIAGNOSTICS_SUM_LEVELS: Bad gcode(3) option'
205     ENDIF
206    
207     C- end bi,bj loops
208     ENDDO
209     ENDDO
210    
211     ENDIF
212    
213     RETURN
214     END

  ViewVC Help
Powered by ViewVC 1.1.22