11 numDim, gridSizes, numPoints, &
12 fullInterval, opInterval, gridMetric, &
13 numStencils, numStencilValues, stencilSizes, stencilStarts, &
14 stencilOffsets, stencilWeights, stencilID, &
15 rhoBuffer,rhoVBuffer,rhoEBuffer,velHat, &
16 pressureBuffer, rhoRHS, rhoVRHS, rhoERHS)
20 INTEGER(KIND=4),
INTENT(IN) :: numDim, numStencils, numStencilValues
21 INTEGER(KIND=8),
INTENT(IN) :: gridSizes(numdim), numPoints
22 INTEGER(KIND=8),
INTENT(IN) :: fullInterval(2*numdim), opInterval(2*numdim)
23 INTEGER(KIND=4),
INTENT(IN) :: stencilSizes(numstencils),stencilStarts(numstencils)
24 INTEGER(KIND=4),
INTENT(IN) :: stencilOffsets(numstencilvalues)
25 INTEGER(KIND=4),
INTENT(IN),
TARGET :: stencilID(numdim*numpoints)
26 REAL(KIND=8),
INTENT(IN) :: stencilWeights(numstencilvalues)
27 REAL(KIND=8),
INTENT(IN) :: gridMetric(numdim)
28 REAL(KIND=8),
INTENT(IN),
TARGET :: velHat(numdim*numpoints)
29 REAL(KIND=8),
INTENT(IN) :: rhoBuffer(numpoints)
30 REAL(KIND=8),
INTENT(IN),
TARGET :: rhoVBuffer(numdim*numpoints)
31 REAL(KIND=8),
INTENT(IN) :: rhoEBuffer(numpoints)
32 REAL(KIND=8),
INTENT(IN) :: pressureBuffer(numpoints)
33 REAL(KIND=8),
INTENT(OUT) :: rhoRHS(numpoints)
34 REAL(KIND=8),
INTENT(OUT),
TARGET :: rhoVRHS(numdim*numpoints)
35 REAL(KIND=8),
INTENT(OUT) :: rhoERHS(numpoints)
38 INTEGER :: iDim, numComponents, iVelDim
39 INTEGER(KIND=8) :: iPoint,iX,iY,iZ,iStart,iEnd,jStart,jEnd,kStart,kEnd
40 INTEGER(KIND=8) :: xIndex,zIndex,yIndex,yzIndex,xSize,ySize,zSize
41 INTEGER(KIND=8) :: iPoint2, iPoint3, pointOffset, pointIndex,vectorPointIndex
42 INTEGER(KIND=8) :: velIndex, fluxIndex, velOffset
43 REAL(KIND=8) :: gridScale
45 REAL(KIND=8),
DIMENSION(:),
ALLOCATABLE :: fluxBuffer, dFluxBuffer, scaledPressure
46 REAL(KIND=8),
DIMENSION(:),
POINTER :: rhoVPtr
47 REAL(KIND=8),
DIMENSION(:),
POINTER :: rhoVRHSPtr
48 REAL(KIND=8),
DIMENSION(:),
POINTER :: bufPtr
49 INTEGER(KIND=4),
DIMENSION(:),
POINTER :: stencilConnectivity
51 ALLOCATE(fluxbuffer(numpoints))
52 ALLOCATE(dfluxbuffer(numpoints))
53 ALLOCATE(scaledpressure(numpoints))
60 pointoffset = (idim-1)*numpoints
62 stencilconnectivity => stencilid((pointoffset+1):(pointoffset+numpoints))
65 bufptr => velhat((pointoffset+1):(pointoffset+numpoints))
66 CALL zxy(numdim,numpoints,gridsizes,fullinterval,rhobuffer,bufptr,fluxbuffer)
70 CALL applyoperator(numdim, gridsizes, numcomponents, numpoints, idim, opinterval, &
71 numstencils, stencilsizes, stencilstarts, numstencilvalues, &
72 stencilweights, stenciloffsets, stencilconnectivity, fluxbuffer, dfluxbuffer)
76 CALL yaxpy(numdim,numpoints,gridsizes,opinterval,-1.0_8,dfluxbuffer,rhorhs)
84 pointoffset = (idim-1)*numpoints
85 gridscale = gridmetric(idim)
86 rhovptr => rhovbuffer((pointoffset+1):(pointoffset+numpoints))
87 rhovrhsptr => rhovrhs((pointoffset+1):(pointoffset+numpoints))
90 CALL yax(numdim,numpoints,gridsizes,fullinterval,gridscale,pressurebuffer,scaledpressure)
92 DO iveldim = 1, numdim
94 veloffset = (iveldim-1)*numpoints
95 bufptr => velhat((veloffset+1):(veloffset+numpoints))
96 stencilconnectivity => stencilid((veloffset+1):(veloffset+numpoints))
98 IF(idim == iveldim)
THEN 100 CALL zwxpy(numdim,numpoints,gridsizes,fullinterval,rhovptr,bufptr,scaledpressure,fluxbuffer)
103 CALL zxy(numdim,numpoints,gridsizes,fullinterval,rhovptr,bufptr,fluxbuffer)
108 CALL applyoperator(numdim, gridsizes, numcomponents, numpoints, iveldim, opinterval, &
109 numstencils, stencilsizes, stencilstarts, numstencilvalues, &
110 stencilweights, stenciloffsets, stencilconnectivity, fluxbuffer, dfluxbuffer)
113 CALL yaxpy(numdim,numpoints,gridsizes,opinterval,-1.0_8,dfluxbuffer,rhovrhsptr)
122 veloffset = (idim-1)*numpoints
123 bufptr => velhat((veloffset+1):(veloffset+numpoints))
125 stencilconnectivity => stencilid((veloffset+1):(veloffset+numpoints))
128 CALL zwmxpy(numdim,numpoints,gridsizes,fullinterval,bufptr,rhoebuffer,pressurebuffer,fluxbuffer)
132 CALL applyoperator(numdim, gridsizes, numcomponents, numpoints, idim, opinterval, &
133 numstencils, stencilsizes, stencilstarts, numstencilvalues, &
134 stencilweights, stenciloffsets, stencilconnectivity, fluxbuffer, dfluxbuffer)
136 CALL yaxpy(numdim,numpoints,gridsizes,opinterval,-1.0_8,dfluxbuffer,rhoerhs)
141 DEALLOCATE(scaledpressure)
142 DEALLOCATE(fluxbuffer)
143 DEALLOCATE(dfluxbuffer)
150 numDim, fluxDim, gridSizes, numPoints, &
151 opInterval, gridMetric, &
152 rhoBuffer,rhoVBuffer,rhoEBuffer,velHat, &
153 pressureBuffer, scaledPressure, fluxBuffer)
157 INTEGER(KIND=4),
INTENT(IN) :: numDim, fluxDim
158 INTEGER(KIND=8),
INTENT(IN) :: gridSizes(numdim), numPoints
159 INTEGER(KIND=8),
INTENT(IN) :: opInterval(2*numdim)
160 REAL(KIND=8),
INTENT(IN) :: gridMetric(numdim)
161 REAL(KIND=8),
INTENT(IN) :: rhoBuffer(numpoints)
162 REAL(KIND=8),
INTENT(IN),
TARGET :: rhoVBuffer(numdim*numpoints)
163 REAL(KIND=8),
INTENT(IN) :: rhoEBuffer(numpoints)
164 REAL(KIND=8),
INTENT(IN),
TARGET :: velHat(numdim*numpoints)
165 REAL(KIND=8),
INTENT(IN) :: pressureBuffer(numpoints)
166 REAL(KIND=8),
INTENT(OUT) :: scaledPressure(numpoints)
167 REAL(KIND=8),
INTENT(OUT),
TARGET :: fluxBuffer(numpoints*(numdim+2))
169 INTEGER :: iDim, numComponents, iVelDim
170 INTEGER(KIND=8) :: iPoint,iX,iY,iZ,iStart,iEnd,jStart,jEnd,kStart,kEnd
171 INTEGER(KIND=8) :: xIndex,zIndex,yIndex,yzIndex,xSize,ySize,zSize,fluxOffset
172 INTEGER(KIND=8) :: iPoint2, iPoint3, pointOffset, pointIndex,vectorPointIndex
173 INTEGER(KIND=8) :: velIndex, fluxIndex, velOffset, dimOffset
174 REAL(KIND=8) :: gridScale
176 REAL(KIND=8),
DIMENSION(:),
POINTER :: rhoVPtr
177 REAL(KIND=8),
DIMENSION(:),
POINTER :: rhoVRHSPtr
178 REAL(KIND=8),
DIMENSION(:),
POINTER :: bufPtr
179 REAL(KIND=8),
DIMENSION(:),
POINTER :: velHatPtr
180 REAL(KIND=8),
DIMENSION(:),
POINTER :: fluxPtr
181 INTEGER(KIND=4),
DIMENSION(:),
POINTER :: stencilConnectivity
186 dimoffset = (idim-1)*numpoints
188 velhatptr => velhat(dimoffset+1:dimoffset+numpoints)
189 fluxptr => fluxbuffer(1:numpoints)
190 gridscale = gridmetric(idim)
195 CALL zxy(numdim,numpoints,gridsizes,opinterval,rhobuffer,velhatptr,fluxptr)
199 CALL yax(numdim,numpoints,gridsizes,opinterval,gridscale,pressurebuffer,scaledpressure)
201 DO iveldim = 1, numdim
203 fluxoffset = fluxoffset + numpoints
204 veloffset = (iveldim-1)*numpoints
205 fluxptr => fluxbuffer(fluxoffset+1:fluxoffset+numpoints)
206 rhovptr => rhovbuffer((veloffset+1):(veloffset+numpoints))
208 IF(idim == iveldim)
THEN 210 CALL zwxpy(numdim,numpoints,gridsizes,opinterval,rhovptr,velhatptr,scaledpressure,fluxptr)
213 CALL zxy(numdim,numpoints,gridsizes,opinterval,rhovptr,velhatptr,fluxptr)
219 fluxoffset = fluxoffset + numpoints
220 fluxptr => fluxbuffer(fluxoffset+1:fluxoffset+numpoints)
223 CALL zwmxpy(numdim,numpoints,gridsizes,opinterval,velhatptr,rhoebuffer,pressurebuffer,fluxptr)
229 numDim, numPoints, gridSizes, opInterval, &
230 fluxDir, gridType, gridMetric, &
231 rhoBuffer,rhoVBuffer,rhoEBuffer,velHat, &
232 pressureBuffer, fluxBuffer)
236 INTEGER(KIND=4),
INTENT(IN) :: numDim, fluxDir, gridType
237 INTEGER(KIND=8),
INTENT(IN) :: gridSizes(numdim), numPoints
238 INTEGER(KIND=8),
INTENT(IN) :: opInterval(2*numdim)
239 REAL(KIND=8),
INTENT(IN),
TARGET :: gridMetric(numdim*numdim*numpoints)
240 REAL(KIND=8),
INTENT(IN) :: rhoBuffer(numpoints)
241 REAL(KIND=8),
INTENT(IN),
TARGET :: rhoVBuffer(numdim*numpoints)
242 REAL(KIND=8),
INTENT(IN) :: rhoEBuffer(numpoints)
243 REAL(KIND=8),
INTENT(IN) :: velHat(numpoints)
244 REAL(KIND=8),
INTENT(IN) :: pressureBuffer(numpoints)
245 REAL(KIND=8),
INTENT(OUT),
TARGET :: fluxBuffer(numpoints*(numdim+2))
247 INTEGER :: iDim, numComponents, iVelDim
248 INTEGER(KIND=8) :: iPoint,iX,iY,iZ,iStart,iEnd,jStart,jEnd,kStart,kEnd
249 INTEGER(KIND=8) :: xIndex,zIndex,yIndex,yzIndex,xSize,ySize,zSize,fluxOffset
250 INTEGER(KIND=8) :: iPoint2, iPoint3, pointOffset, pointIndex,vectorPointIndex
251 INTEGER(KIND=8) :: velIndex, fluxIndex, velOffset, dimOffset, metricOffset
252 REAL(KIND=8) :: gridScale
254 REAL(KIND=8),
DIMENSION(:),
POINTER :: rhoVPtr
255 REAL(KIND=8),
DIMENSION(:),
POINTER :: rhoVRHSPtr
256 REAL(KIND=8),
DIMENSION(:),
POINTER :: fluxPtr
257 REAL(KIND=8),
DIMENSION(:),
POINTER :: metricPtr
258 INTEGER(KIND=4),
DIMENSION(:),
POINTER :: stencilConnectivity
262 fluxptr => fluxbuffer(1:numpoints)
266 CALL zxy(numdim,numpoints,gridsizes,opinterval,rhobuffer,velhat,fluxptr)
271 gridscale = gridmetric(fluxdir)
273 DO iveldim = 1, numdim
275 fluxoffset = fluxoffset + numpoints
276 veloffset = (iveldim-1)*numpoints
277 fluxptr => fluxbuffer(fluxoffset+1:fluxoffset+numpoints)
278 rhovptr => rhovbuffer((veloffset+1):(veloffset+numpoints))
280 IF(fluxdir == iveldim)
THEN 283 CALL zawpxy(numdim,numpoints,gridsizes,opinterval,gridscale,pressurebuffer,&
284 rhovptr,velhat,fluxptr)
287 CALL zxy(numdim,numpoints,gridsizes,opinterval,rhovptr,velhat,fluxptr)
293 metricoffset = (fluxdir-1)*numpoints
294 metricptr => gridmetric(metricoffset+1:metricoffset+numpoints)
296 DO iveldim = 1, numdim
298 fluxoffset = fluxoffset + numpoints
299 veloffset = (iveldim-1)*numpoints
300 fluxptr => fluxbuffer(fluxoffset+1:fluxoffset+numpoints)
301 rhovptr => rhovbuffer((veloffset+1):(veloffset+numpoints))
303 IF(fluxdir == iveldim)
THEN 306 CALL zvwpxy(numdim,numpoints,gridsizes,opinterval,metricptr,pressurebuffer,rhovptr,velhat,fluxptr)
309 CALL zxy(numdim,numpoints,gridsizes,opinterval,rhovptr,velhat,fluxptr)
316 metricoffset = (fluxdir-1)*numdim*numpoints
318 DO iveldim = 1, numdim
320 fluxoffset = fluxoffset + numpoints
321 veloffset = (iveldim-1)*numpoints
322 fluxptr => fluxbuffer(fluxoffset+1:fluxoffset+numpoints)
323 rhovptr => rhovbuffer((veloffset+1):(veloffset+numpoints))
324 metricptr => gridmetric(metricoffset+veloffset+1:metricoffset+veloffset+numpoints)
327 CALL zvwpxy(numdim,numpoints,gridsizes,opinterval,metricptr,pressurebuffer,rhovptr,velhat,fluxptr)
334 fluxoffset = fluxoffset + numpoints
335 fluxptr => fluxbuffer(fluxoffset+1:fluxoffset+numpoints)
338 CALL zwmxpy(numdim,numpoints,gridsizes,opinterval,velhat,rhoebuffer,pressurebuffer,fluxptr)
343 numDim, gridSizes, numPoints, opInterval, &
344 numStencils, numStencilValues, stencilSizes, stencilStarts, &
345 stencilOffsets, stencilWeights, stencilID, &
346 numPointsApply,applyPoints,numScalar, &
347 scalarBuffer,velHat,scalarRHS)
351 INTEGER(KIND=4),
INTENT(IN) :: numDim, numStencils, numStencilValues, numScalar
352 INTEGER(KIND=8),
INTENT(IN) :: gridSizes(numdim), numPoints, numPointsApply
353 INTEGER(KIND=8),
INTENT(IN) :: opInterval(2*numdim), applyPoints(numpointsapply)
354 INTEGER(KIND=4),
INTENT(IN) :: stencilSizes(numstencils),stencilStarts(numstencils)
355 INTEGER(KIND=4),
INTENT(IN) :: stencilOffsets(numstencilvalues)
356 INTEGER(KIND=4),
INTENT(IN),
TARGET :: stencilID(numdim*numpoints)
357 REAL(KIND=8),
INTENT(IN) :: stencilWeights(numstencilvalues)
358 REAL(KIND=8),
INTENT(IN) :: velHat(numdim*numpoints)
359 REAL(KIND=8),
INTENT(IN) :: scalarBuffer(numscalar*numpoints)
360 REAL(KIND=8),
INTENT(OUT) :: scalarRHS(numscalar*numpoints)
363 INTEGER :: iDim, numComponents, iVelDim, iScalar
364 INTEGER(KIND=8) :: iPoint,iX,iY,iZ,iStart,iEnd,jStart,jEnd,kStart,kEnd
365 INTEGER(KIND=8) :: xIndex,zIndex,yIndex,yzIndex,xSize,ySize,zSize
366 INTEGER(KIND=8) :: iPoint2, iPoint3, pointOffset, pointIndex,scalarIndex
367 INTEGER(KIND=8) :: velIndex, fluxIndex, velOffset, scalarOffset
370 REAL(KIND=8),
DIMENSION(:),
ALLOCATABLE :: fluxBuffer, dFluxBuffer
371 INTEGER(KIND=4),
DIMENSION(:),
POINTER :: stencilConnectivity
373 ALLOCATE(fluxbuffer(numpoints))
374 ALLOCATE(dfluxbuffer(numpoints))
380 DO iscalar = 1, numscalar
382 scalaroffset = (iscalar-1)*numpoints
386 pointoffset = (idim-1)*numpoints
388 stencilconnectivity => stencilid((pointoffset+1):(pointoffset+numpoints))
390 DO ipoint = 1, numpointsapply
391 fluxindex = applypoints(ipoint)
392 scalarindex = fluxindex + scalaroffset
393 fluxbuffer(fluxindex) = scalarbuffer(scalarindex) * velhat(fluxindex+pointoffset)
396 CALL applyoperator(numdim, gridsizes, numcomponents, numpoints, idim, opinterval, &
397 numstencils, stencilsizes, stencilstarts, numstencilvalues, &
398 stencilweights, stenciloffsets, stencilconnectivity, fluxbuffer, dfluxbuffer)
400 DO ipoint = 1, numpointsapply
401 fluxindex = applypoints(ipoint)
402 scalarindex = fluxindex + scalaroffset
403 scalarrhs(scalarindex) = scalarrhs(scalarindex) - dfluxbuffer(fluxindex)
409 DEALLOCATE(fluxbuffer)
410 DEALLOCATE(dfluxbuffer)
416 numDim, fluxDim, gridSizes, numPoints, opInterval, &
417 numScalar,scalarBuffer,velHat,scalarFlux)
421 INTEGER(KIND=4),
INTENT(IN) :: numDim, fluxDim, numScalar
422 INTEGER(KIND=8),
INTENT(IN) :: gridSizes(numdim), numPoints
423 INTEGER(KIND=8),
INTENT(IN) :: opInterval(2*numdim)
424 REAL(KIND=8),
INTENT(IN),
TARGET :: velHat(numdim*numpoints)
425 REAL(KIND=8),
INTENT(IN),
TARGET :: scalarBuffer(numscalar*numpoints)
426 REAL(KIND=8),
INTENT(OUT),
TARGET :: scalarFlux(numscalar*numpoints)
429 INTEGER :: iDim, numComponents, iVelDim, iScalar
430 INTEGER(KIND=8) :: iPoint,iX,iY,iZ,iStart,iEnd,jStart,jEnd,kStart,kEnd
431 INTEGER(KIND=8) :: xIndex,zIndex,yIndex,yzIndex,xSize,ySize,zSize
432 INTEGER(KIND=8) :: iPoint2, iPoint3, pointOffset, pointIndex,scalarIndex
433 INTEGER(KIND=8) :: velIndex, fluxIndex, velOffset, scalarOffset
435 REAL(KIND=8),
DIMENSION(:),
POINTER :: fluxPtr,scalarPtr,velHatPtr
443 pointoffset = (idim-1)*numpoints
444 velhatptr => velhat(pointoffset+1:pointoffset+numpoints)
446 DO iscalar = 1, numscalar
448 scalaroffset = (iscalar-1)*numpoints
450 fluxptr => scalarflux(scalaroffset+1:scalaroffset+numpoints)
451 scalarptr => scalarbuffer(scalaroffset+1:scalaroffset+numpoints)
453 CALL zxy(numdim,numpoints,gridsizes,opinterval,scalarptr,velhatptr,fluxptr)
461 numDim, numPoints, gridSizes, opInterval, &
462 numScalars,scalarBuffer,velHat, fluxBuffer)
466 INTEGER(KIND=4),
INTENT(IN) :: numDim, numScalars
467 INTEGER(KIND=8),
INTENT(IN) :: gridSizes(numdim), numPoints
468 INTEGER(KIND=8),
INTENT(IN) :: opInterval(2*numdim)
469 REAL(KIND=8),
INTENT(IN),
TARGET :: scalarBuffer(numscalars*numpoints)
470 REAL(KIND=8),
INTENT(IN) :: velHat(numpoints)
471 REAL(KIND=8),
INTENT(OUT),
TARGET :: fluxBuffer(numscalars*numpoints)
474 INTEGER(KIND=8) :: scalarOffset
476 REAL(KIND=8),
DIMENSION(:),
POINTER :: fluxPtr
477 REAL(KIND=8),
DIMENSION(:),
POINTER :: scalarPtr
481 fluxptr => fluxbuffer(1:numpoints)
485 DO iscalar = 1, numscalars
486 scalarptr => scalarbuffer(scalaroffset+1:scalaroffset+numpoints)
487 fluxptr => fluxbuffer(scalaroffset+1:scalaroffset+numpoints)
488 CALL zxy(numdim,numpoints,gridsizes,opinterval,scalarptr,velhat,fluxptr)
489 scalaroffset = scalaroffset + numpoints
subroutine uniformrhs(numDim, gridSizes, numPoints, fullInterval, opInterval, gridMetric, numStencils, numStencilValues, stencilSizes, stencilStarts, stencilOffsets, stencilWeights, stencilID, rhoBuffer, rhoVBuffer, rhoEBuffer, velHat, pressureBuffer, rhoRHS, rhoVRHS, rhoERHS)
subroutine applyoperator(numDim, dimSizes, numComponents, numPoints, opDir, opInterval, numStencils, stencilSizes, stencilStarts, numValues, stencilWeights, stencilOffsets, stencilID, U, dU)
applyoperator applies an operator specified as a stencil set to the provided state data ...
subroutine uniformscalarrhs(numDim, gridSizes, numPoints, opInterval, numStencils, numStencilValues, stencilSizes, stencilStarts, stencilOffsets, stencilWeights, stencilID, numPointsApply, applyPoints, numScalar, scalarBuffer, velHat, scalarRHS)
subroutine yaxpy(numDim, numPoints, bufferSize, bufferInterval, a, X, Y)
YAXPY point-wise operator performing Y = aX + Y (scalar a)
subroutine zwxpy(numDim, numPoints, bufferSize, bufferInterval, W, X, Y, Z)
ZWXPY point-wise operator performing Z = WX + Y, where all are vectors.
subroutine scalarflux1d(numDim, numPoints, gridSizes, opInterval, numScalars, scalarBuffer, velHat, fluxBuffer)
Flux for scalar transport.
subroutine flux1d(numDim, numPoints, gridSizes, opInterval, fluxDir, gridType, gridMetric, rhoBuffer, rhoVBuffer, rhoEBuffer, velHat, pressureBuffer, fluxBuffer)
subroutine zawpxy(numDim, numPoints, bufferSize, bufferInterval, a, W, X, Y, Z)
ZAWPXY point-wise operator performing Z = aW + XY.
subroutine uniformscalarflux(numDim, fluxDim, gridSizes, numPoints, opInterval, numScalar, scalarBuffer, velHat, scalarFlux)
integer(kind=4), parameter curvilinear
integer(kind=4), parameter rectilinear
subroutine zwmxpy(numDim, numPoints, bufferSize, bufferInterval, W, X, Y, Z)
ZWMXPY point-wise operator performing Z = W(X+Y) where all are vectors.
subroutine yax(numDim, numPoints, bufferSize, bufferInterval, a, X, Y)
YAX point-wise operator performing Y = aX (scalar a)
subroutine uniformflux(numDim, fluxDim, gridSizes, numPoints, opInterval, gridMetric, rhoBuffer, rhoVBuffer, rhoEBuffer, velHat, pressureBuffer, scaledPressure, fluxBuffer)
subroutine zxy(numDim, numPoints, bufferSize, bufferInterval, X, Y, Z)
ZXY point-wise operator performing Z = XY (all vectors)
subroutine zvwpxy(numDim, numPoints, bufferSize, bufferInterval, V, W, X, Y, Z)
ZVWPXY point-wise operator performing Z = VW + XY.