/[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.3 - (hide annotations) (download)
Sun Jul 23 00:41:59 2017 UTC (6 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, HEAD
Changes since 1.2: +6 -3 lines
do not multiply by hFac if already done as diagnostic was filled up.

1 jmc 1.3 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_sum_levels.F,v 1.2 2010/01/13 01:20:38 jmc Exp $
2 jmc 1.1 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 jmc 1.3 LOGICAL wFac
65 jmc 1.1
66     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
67    
68 jmc 1.3 IF ( fflags(listId)(2:2).EQ.'I' ) THEN
69 jmc 1.1
70     gcode = gdiag(ndId)(1:10)
71 jmc 1.3 wFac = jdiag(md,listId).LT.0
72 jmc 1.1
73     C-- start loops on tile indices bi,bj:
74     DO bj = myByLo(myThid), myByHi(myThid)
75     DO bi = myBxLo(myThid), myBxHi(myThid)
76    
77     DO j = 1-OLy,sNy+OLy
78     DO i = 1-OLx,sNx+OLx
79     tmpFld(i,j) = 0. _d 0
80     ENDDO
81     ENDDO
82    
83     IF ( gcode(3:3).EQ.' ' ) THEN
84     C-- Cumulate levels directly:
85    
86     DO k = 1,nlevels(listId)
87     kLev = NINT(levs(k,listId))
88     DO j = 1-OLy,sNy+OLy
89     DO i = 1-OLx,sNx+OLx
90     tmpFld(i,j) = tmpFld(i,j) + fld3d(i,j,kLev,bi,bj)
91     ENDDO
92     ENDDO
93     ENDDO
94     DO j = 1-OLy,sNy+OLy
95     DO i = 1-OLx,sNx+OLx
96     fld3d(i,j,1,bi,bj) = tmpFld(i,j)
97     ENDDO
98     ENDDO
99    
100 jmc 1.3 ELSEIF ( gcode(3:3).EQ.'r' .OR.
101     & (gcode(3:3).EQ.'R' .AND. wFac) ) THEN
102 jmc 1.1 C-- Cumulate the level-thickness product:
103    
104     DO k = 1,nlevels(listId)
105     kLev = NINT(levs(k,listId))
106     IF ( gcode(9:9).EQ.'L' ) THEN
107     tmpFac = drC(kLev)
108     ELSE
109     tmpFac = drF(kLev)
110     ENDIF
111     DO j = 1-OLy,sNy+OLy
112     DO i = 1-OLx,sNx+OLx
113     tmpFld(i,j) = tmpFld(i,j)
114     & + tmpFac*fld3d(i,j,kLev,bi,bj)
115     ENDDO
116     ENDDO
117     ENDDO
118     DO j = 1-OLy,sNy+OLy
119     DO i = 1-OLx,sNx+OLx
120     fld3d(i,j,1,bi,bj) = tmpFld(i,j)
121     ENDDO
122     ENDDO
123    
124     ELSEIF ( gcode(3:3).EQ.'R' ) THEN
125     C-- Cumulate the level-thickness & hFac product:
126    
127     IF ( gcode(2:2).EQ.'M' ) THEN
128     DO k = 1,nlevels(listId)
129     kLev = NINT(levs(k,listId))
130     IF ( gcode(9:9).EQ.'L' ) THEN
131     tmpFac = drC(kLev)
132     ELSE
133     tmpFac = drF(kLev)
134     ENDIF
135     DO j = 1-OLy,sNy+OLy
136     DO i = 1-OLx,sNx+OLx
137     tmpFld(i,j) = tmpFld(i,j)
138     & + tmpFac*fld3d(i,j,kLev,bi,bj)
139     & *hFacC(i,j,kLev,bi,bj)
140     ENDDO
141     ENDDO
142     ENDDO
143     ELSEIF ( gcode(2:2).EQ.'U' ) THEN
144     DO k = 1,nlevels(listId)
145     kLev = NINT(levs(k,listId))
146     IF ( gcode(9:9).EQ.'L' ) THEN
147     tmpFac = drC(kLev)
148     ELSE
149     tmpFac = drF(kLev)
150     ENDIF
151     DO j = 1-OLy,sNy+OLy
152     DO i = 1-OLx,sNx+OLx
153     tmpFld(i,j) = tmpFld(i,j)
154     & + tmpFac*fld3d(i,j,kLev,bi,bj)
155     & *hFacW(i,j,kLev,bi,bj)
156     ENDDO
157     ENDDO
158     ENDDO
159     ELSEIF ( gcode(2:2).EQ.'V' ) THEN
160     DO k = 1,nlevels(listId)
161     kLev = NINT(levs(k,listId))
162     IF ( gcode(9:9).EQ.'L' ) THEN
163     tmpFac = drC(kLev)
164     ELSE
165     tmpFac = drF(kLev)
166     ENDIF
167     DO j = 1-OLy,sNy+OLy
168     DO i = 1-OLx,sNx+OLx
169     tmpFld(i,j) = tmpFld(i,j)
170     & + tmpFac*fld3d(i,j,kLev,bi,bj)
171     & *hFacS(i,j,kLev,bi,bj)
172     ENDDO
173     ENDDO
174     ENDDO
175     ELSEIF ( gcode(2:2).EQ.'Z' ) THEN
176     DO k = 1,nlevels(listId)
177     kLev = NINT(levs(k,listId))
178     IF ( gcode(9:9).EQ.'L' ) THEN
179     tmpFac = drC(kLev)
180     ELSE
181     tmpFac = drF(kLev)
182     ENDIF
183 jmc 1.2 DO j = 2-OLy,sNy+OLy
184     DO i = 2-OLx,sNx+OLx
185 jmc 1.1 hFacLoc = MIN(
186     & hFacW( i, j, kLev,bi,bj),
187     & hFacW( i,j-1,kLev,bi,bj),
188     & hFacS( i, j, kLev,bi,bj),
189     & hFacS(i-1,j, kLev,bi,bj)
190     & )
191     tmpFld(i,j) = tmpFld(i,j)
192     & + tmpFac*fld3d(i,j,kLev,bi,bj)
193     & *hFacLoc
194     ENDDO
195     ENDDO
196     ENDDO
197     ELSE
198     STOP 'DIAGNOSTICS_SUM_LEVELS: invalid gcode(2)'
199     ENDIF
200     DO j = 1-OLy,sNy+OLy
201     DO i = 1-OLx,sNx+OLx
202     fld3d(i,j,1,bi,bj) = tmpFld(i,j)
203     ENDDO
204     ENDDO
205    
206     ELSE
207     STOP 'DIAGNOSTICS_SUM_LEVELS: Bad gcode(3) option'
208     ENDIF
209    
210     C- end bi,bj loops
211     ENDDO
212     ENDDO
213    
214     ENDIF
215    
216     RETURN
217     END

  ViewVC Help
Powered by ViewVC 1.1.22