16 numDim, fluxDim, gridSizes, numPoints, opInterval, velocity, &
17 gridMetric, tauOneBuffer, tauTwoBuffer, tauThreeBuffer, scaledTau, &
18 heatFluxBuffer, fluxBuffer)
22 INTEGER(KIND=4),
INTENT(IN) :: numDim, fluxDim
23 INTEGER(KIND=8),
INTENT(IN) :: gridSizes(numdim), numPoints
24 INTEGER(KIND=8),
INTENT(IN) :: opInterval(2*numdim)
25 REAL(KIND=8),
INTENT(IN) :: gridMetric(numdim)
26 REAL(KIND=8),
INTENT(IN),
TARGET :: velocity(numdim*numpoints)
27 REAL(KIND=8),
INTENT(IN),
TARGET :: tauOneBuffer(numpoints)
28 REAL(KIND=8),
INTENT(IN),
TARGET :: tauTwoBuffer(numpoints)
29 REAL(KIND=8),
INTENT(IN),
TARGET :: tauThreeBuffer(numpoints)
30 REAL(KIND=8),
INTENT(OUT) :: scaledTau(numpoints)
31 REAL(KIND=8),
INTENT(IN),
TARGET :: heatFluxBuffer(numpoints*numdim)
32 REAL(KIND=8),
INTENT(OUT),
TARGET :: fluxBuffer(numpoints*(numdim+2))
34 INTEGER :: iDim, numComponents, iVelDim
35 INTEGER(KIND=8) :: iPoint,iX,iY,iZ,iStart,iEnd,jStart,jEnd,kStart,kEnd
36 INTEGER(KIND=8) :: xIndex,zIndex,yIndex,yzIndex,xSize,ySize,zSize,fluxOffset
37 INTEGER(KIND=8) :: iPoint2, iPoint3, pointOffset, pointIndex,vectorPointIndex
38 INTEGER(KIND=8) :: velIndex, fluxIndex, velOffset, heatOffset, dimOffset
39 REAL(KIND=8) :: gridScale
40 REAL(KIND=8) :: minusOne
42 REAL(KIND=8),
DIMENSION(:),
POINTER :: bufPtr
43 REAL(KIND=8),
DIMENSION(:),
POINTER :: velocityPtr
44 REAL(KIND=8),
DIMENSION(:),
POINTER :: fluxPtr
45 REAL(KIND=8),
DIMENSION(:),
POINTER :: tauOnePtr
46 REAL(KIND=8),
DIMENSION(:),
POINTER :: tauTwoPtr
47 REAL(KIND=8),
DIMENSION(:),
POINTER :: tauThreePtr
48 REAL(KIND=8),
DIMENSION(:),
POINTER :: heatFluxPtr
55 velocityptr => velocity(1:numpoints)
56 heatfluxptr => heatfluxbuffer((fluxdim-1)*numpoints+1:numpoints+(fluxdim-1)*numpoints)
57 gridscale = gridmetric(idim)
58 fluxptr => fluxbuffer(1:numpoints)
59 tauoneptr => tauonebuffer(1:numpoints)
60 tautwoptr => tautwobuffer(1:numpoints)
61 tauthreeptr=> tauthreebuffer(1:numpoints)
63 DO iveldim = 1, numdim
67 fluxoffset = fluxoffset + numpoints
68 fluxptr => fluxbuffer(fluxoffset+1:fluxoffset+numpoints)
74 CALL yax(numdim,numpoints,gridsizes,opinterval,gridscale,tauoneptr,fluxptr)
76 ELSEIF(iveldim == 2)
THEN 77 CALL yax(numdim,numpoints,gridsizes,opinterval,gridscale,tautwoptr,fluxptr)
79 ELSEIF(iveldim == 3)
THEN 80 CALL yax(numdim,numpoints,gridsizes,opinterval,gridscale,tauthreeptr,fluxptr)
87 fluxoffset = fluxoffset + numpoints
88 fluxptr => fluxbuffer(fluxoffset+1:fluxoffset+numpoints)
95 CALL zxy(numdim,numpoints,gridsizes,opinterval,velocityptr,tauonebuffer,scaledtau)
97 velocityptr => velocity(numpoints+1:2*numpoints)
98 CALL zwxpy(numdim,numpoints,gridsizes,opinterval,velocityptr,tautwobuffer,scaledtau,scaledtau)
100 velocityptr => velocity(2*numpoints+1:3*numpoints)
101 CALL zwxpy(numdim,numpoints,gridsizes,opinterval,velocityptr,tauthreebuffer,scaledtau,scaledtau)
107 CALL yax(numdim,numpoints,gridsizes,opinterval,gridscale,scaledtau,fluxptr)
111 CALL yaxpy(numdim,numpoints,gridsizes,opinterval,gridscale,heatfluxptr,fluxptr)
124 (numdim, fluxdir, gridsizes, numpoints, opinterval, gridtype, &
125 gridmetric, taubuffer, energybuffer, fluxbuffer)
129 INTEGER(KIND=4),
INTENT(IN) :: numDim, fluxDir, gridType
130 INTEGER(KIND=8),
INTENT(IN) :: gridSizes(numdim),numPoints
131 INTEGER(KIND=8),
INTENT(IN) :: opInterval(2*numdim)
132 REAL(KIND=8),
INTENT(IN),
TARGET :: gridMetric(numdim*numdim*numpoints)
133 REAL(KIND=8),
INTENT(IN),
TARGET :: tauBuffer(numpoints*numdim*(numdim+1)/2)
134 REAL(KIND=8),
INTENT(IN),
TARGET :: energyBuffer(numpoints*numdim)
135 REAL(KIND=8),
INTENT(OUT),
TARGET :: fluxBuffer(numpoints*(numdim+2))
137 INTEGER :: iDim, tensorIndex, iVel
138 INTEGER(KIND=8) :: fluxOffset, tensorOffset, dirOffset, metricOffset
139 INTEGER(KIND=8) :: velIndex, fluxIndex, velOffset, heatOffset, dimOffset
140 REAL(KIND=8) :: gridScale
141 REAL(KIND=8) :: minusOne
143 REAL(KIND=8),
DIMENSION(:),
POINTER :: bufPtr
144 REAL(KIND=8),
DIMENSION(:),
POINTER :: metricPtr
145 REAL(KIND=8),
DIMENSION(:),
POINTER :: fluxPtr
146 REAL(KIND=8),
DIMENSION(:),
POINTER :: tauPtr
147 REAL(KIND=8),
DIMENSION(:),
POINTER :: energyPtr
149 INTEGER,
DIMENSION(2,2) :: index2D
150 INTEGER,
DIMENSION(3,3) :: index3D
153 index2d = reshape((/ 0, 1, 1, 2 /), shape(index2d))
154 index3d = reshape((/ 0, 1, 2, 1, 3, 4, 2, 4, 5 /), shape(index3d))
156 diroffset = (fluxdir-1)*numpoints
161 gridscale = gridmetric(fluxdir)
167 tensorindex = index2d(fluxdir,idim)
169 tensorindex = index3d(fluxdir,idim)
172 tensoroffset = tensorindex*numpoints
173 fluxoffset = fluxoffset + numpoints
174 fluxptr => fluxbuffer(fluxoffset+1:fluxoffset+numpoints)
175 tauptr => taubuffer(tensoroffset+1:tensoroffset+numpoints)
178 CALL yax(numdim,numpoints,gridsizes,opinterval,gridscale,tauptr,fluxptr)
183 fluxoffset = fluxoffset + numpoints
184 fluxptr => fluxbuffer(fluxoffset+1:fluxoffset+numpoints)
185 energyptr => energybuffer(diroffset+1:diroffset+numpoints)
187 CALL yax(numdim,numpoints,gridsizes,opinterval,gridscale,energyptr,fluxptr)
191 metricptr => gridmetric(diroffset+1:diroffset+numpoints)
197 tensorindex = index2d(fluxdir,idim)
199 tensorindex = index3d(fluxdir,idim)
202 tensoroffset = tensorindex*numpoints
203 fluxoffset = fluxoffset + numpoints
204 fluxptr => fluxbuffer(fluxoffset+1:fluxoffset+numpoints)
205 tauptr => taubuffer(tensoroffset+1:tensoroffset+numpoints)
208 CALL zxy(numdim,numpoints,gridsizes,opinterval,metricptr,tauptr,fluxptr)
213 fluxoffset = fluxoffset + numpoints
214 fluxptr => fluxbuffer(fluxoffset+1:fluxoffset+numpoints)
215 energyptr => energybuffer(diroffset+1:diroffset+numpoints)
217 CALL zxy(numdim,numpoints,gridsizes,opinterval,metricptr,energyptr,fluxptr)
222 metricoffset = (fluxdir-1)*numdim*numpoints
228 fluxoffset = fluxoffset + numpoints
229 fluxptr => fluxbuffer(fluxoffset+1:fluxoffset+numpoints)
231 CALL assignmentxa(numdim,numpoints,gridsizes,opinterval,0.0_8,fluxptr)
235 veloffset = (ivel-1)*numpoints+metricoffset
236 metricptr => gridmetric(veloffset+1:veloffset+numpoints)
239 tensorindex = index2d(ivel,idim)
241 tensorindex = index3d(ivel,idim)
244 tensoroffset = tensorindex*numpoints
245 tauptr => taubuffer(tensoroffset+1:tensoroffset+numpoints)
248 CALL ywxpy(numdim,numpoints,gridsizes,opinterval,metricptr,tauptr,fluxptr)
257 fluxoffset = fluxoffset + numpoints
258 fluxptr => fluxbuffer(fluxoffset+1:fluxoffset+numpoints)
259 metricptr => gridmetric(metricoffset+1:metricoffset+numdim*numpoints)
261 CALL zxdoty(numdim,numpoints,gridsizes,opinterval,numdim,metricptr,energybuffer,fluxptr)
275 (numdim, fluxdir, gridsizes, numpoints, opinterval, gridtype, &
276 gridmetric, gradscalar, fluxbuffer)
280 INTEGER(KIND=4),
INTENT(IN) :: numDim, fluxDir, gridType
281 INTEGER(KIND=8),
INTENT(IN) :: gridSizes(numdim),numPoints
282 INTEGER(KIND=8),
INTENT(IN) :: opInterval(2*numdim)
283 REAL(KIND=8),
INTENT(IN),
TARGET :: gridMetric(numdim*numdim*numpoints)
284 REAL(KIND=8),
INTENT(IN),
TARGET :: gradScalar(numpoints*numdim)
285 REAL(KIND=8),
INTENT(OUT) :: fluxBuffer(numpoints)
287 INTEGER(KIND=8) :: dirOffset, metricOffset
288 INTEGER(KIND=8) :: velIndex, fluxIndex, velOffset, heatOffset, dimOffset
289 REAL(KIND=8) :: gridScale
290 REAL(KIND=8) :: minusOne
292 REAL(KIND=8),
DIMENSION(:),
POINTER :: gradPtr
293 REAL(KIND=8),
DIMENSION(:),
POINTER :: metricPtr
295 diroffset = (fluxdir-1)*numpoints
299 gridscale = gridmetric(fluxdir)
300 gradptr => gradscalar(diroffset+1:diroffset+numpoints)
303 CALL yax(numdim,numpoints,gridsizes,opinterval,gridscale,gradptr,fluxbuffer)
307 metricptr => gridmetric(diroffset+1:diroffset+numpoints)
308 gradptr => gradscalar(diroffset+1:diroffset+numpoints)
311 CALL zxy(numdim,numpoints,gridsizes,opinterval,metricptr,gradptr,fluxbuffer)
315 metricoffset = diroffset*numdim
316 metricptr => gridmetric(metricoffset+1:metricoffset+numdim*numpoints)
318 CALL zxdoty(numdim,numpoints,gridsizes,opinterval,numdim,metricptr,gradscalar,fluxbuffer)
subroutine ywxpy(numDim, numPoints, bufferSize, bufferInterval, W, X, Y)
YWXPY point-wise operator performing Y = WX + Y, where all are vectors.
subroutine viscidstronguniformflux(numDim, fluxDim, gridSizes, numPoints, opInterval, velocity, gridMetric, tauOneBuffer, tauTwoBuffer, tauThreeBuffer, scaledTau, heatFluxBuffer, fluxBuffer)
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, fluxDir, gridSizes, numPoints, opInterval, gridType, gridMetric, gradScalar, fluxBuffer)
Compute the curvilinear cartesian viscous fluxes in 1 dimension.
subroutine assignmentxa(numDim, numPoints, bufferSize, bufferInterval, a, X)
ASSIGNMENTXA point-wise operator performing X = scalar a.
subroutine strongflux1d(numDim, fluxDir, gridSizes, numPoints, opInterval, gridType, gridMetric, tauBuffer, energyBuffer, fluxBuffer)
Compute the curvilinear cartesian viscous fluxes in 1 dimension.
subroutine zxdoty(numDim, numPoints, bufferSize, bufferInterval, numComponents, X, Y, Z)
ZXDOTY numComponents-vector inner product Z = X * Y.
integer(kind=4), parameter rectilinear
subroutine yax(numDim, numPoints, bufferSize, bufferInterval, a, X, Y)
YAX point-wise operator performing Y = aX (scalar a)
subroutine zxy(numDim, numPoints, bufferSize, bufferInterval, X, Y, Z)
ZXY point-wise operator performing Z = XY (all vectors)