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

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

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


Revision 1.3 - (show 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 C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_sum_levels.F,v 1.2 2010/01/13 01:20:38 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 LOGICAL wFac
65
66 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
67
68 IF ( fflags(listId)(2:2).EQ.'I' ) THEN
69
70 gcode = gdiag(ndId)(1:10)
71 wFac = jdiag(md,listId).LT.0
72
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 ELSEIF ( gcode(3:3).EQ.'r' .OR.
101 & (gcode(3:3).EQ.'R' .AND. wFac) ) THEN
102 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 DO j = 2-OLy,sNy+OLy
184 DO i = 2-OLx,sNx+OLx
185 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