6 INTEGER(KIND=4),
PARAMETER ::
unirect = 1
13 numDim,gridSizes,numPoints, &
14 opInterval, numStencils, &
15 numStencilValues, stencilSizes, &
16 stencilStarts, stencilOffsets, &
17 stencilWeights,stencilID, &
18 gridCoordinates, gridMetricTensor, &
19 gridJacobianDeterminants)
25 INTEGER(KIND=4),
INTENT(IN) :: numDim
26 INTEGER(KIND=8),
INTENT(IN) :: gridSizes(numdim), numPoints
27 INTEGER(KIND=8),
INTENT(IN) :: opInterval(2*numdim)
28 INTEGER(KIND=4),
INTENT(IN) :: numStencils,numStencilValues
29 INTEGER(KIND=4),
INTENT(IN) :: stencilSizes(numstencils)
30 INTEGER(KIND=4),
INTENT(IN) :: stencilStarts(numstencils)
31 INTEGER(KIND=4),
INTENT(IN) :: stencilOffsets(numstencilvalues)
32 INTEGER(KIND=4),
INTENT(IN),
TARGET :: stencilID(numdim*numpoints)
33 REAL(KIND=8),
INTENT(IN) :: stencilWeights(numstencilvalues)
34 REAL(KIND=8),
INTENT(IN),
TARGET :: gridCoordinates(numdim*numpoints)
35 REAL(KIND=8),
INTENT(INOUT),
TARGET :: gridMetricTensor(numdim*numdim*numpoints)
36 REAL(KIND=8),
INTENT(INOUT),
TARGET :: gridJacobianDeterminants(2*numpoints)
38 REAL(KIND=8),
DIMENSION(:),
ALLOCATABLE :: dCoords
39 REAL(KIND=8),
DIMENSION(:),
POINTER :: jacPtr, jacM1Ptr
40 REAL(KIND=8),
DIMENSION(:),
POINTER :: gridMetricTensorPtr
41 REAL(KIND=8),
DIMENSION(:),
POINTER :: coordPtr
42 INTEGER(KIND=4),
DIMENSION(:),
POINTER :: stencilConnPtr
44 INTEGER(KIND=4) :: numComponents, iDim
50 numDim,gridSizes,numPoints, &
51 opInterval, numStencils, &
52 numStencilValues, stencilSizes, &
53 stencilStarts, stencilOffsets, &
54 stencilWeights,stencilID, &
55 gridCoordinates, gridMetricTensor, &
56 gridJacobianDeterminants)
62 INTEGER(KIND=4),
INTENT(IN) :: numDim
63 INTEGER(KIND=8),
INTENT(IN) :: gridSizes(numdim), numPoints
64 INTEGER(KIND=8),
INTENT(IN) :: opInterval(2*numdim)
65 INTEGER(KIND=4),
INTENT(IN) :: numStencils,numStencilValues
66 INTEGER(KIND=4),
INTENT(IN) :: stencilSizes(numstencils)
67 INTEGER(KIND=4),
INTENT(IN) :: stencilStarts(numstencils)
68 INTEGER(KIND=4),
INTENT(IN) :: stencilOffsets(numstencilvalues)
69 INTEGER(KIND=4),
INTENT(IN),
TARGET :: stencilID(numdim*numpoints)
70 REAL(KIND=8),
INTENT(IN) :: stencilWeights(numstencilvalues)
71 REAL(KIND=8),
INTENT(IN),
TARGET :: gridCoordinates(numdim*numpoints)
72 REAL(KIND=8),
INTENT(INOUT),
TARGET :: gridMetricTensor(numdim*numdim*numpoints)
73 REAL(KIND=8),
INTENT(INOUT),
TARGET :: gridJacobianDeterminants(2*numpoints)
75 REAL(KIND=8),
DIMENSION(:),
ALLOCATABLE :: dCoords
76 REAL(KIND=8),
DIMENSION(:),
POINTER :: jacPtr, jacM1Ptr
77 REAL(KIND=8),
DIMENSION(:),
POINTER :: m1Ptr
78 REAL(KIND=8),
DIMENSION(:),
POINTER :: coordPtr
79 INTEGER(KIND=4),
DIMENSION(:),
POINTER :: stencilConnPtr
81 INTEGER(KIND=4) :: numComponents, iDim
82 INTEGER(KIND=8) :: offSet
84 ALLOCATE(dcoords(numdim*numpoints))
88 jacm1ptr => gridjacobiandeterminants(numpoints+1:2*numpoints)
89 jacptr => gridjacobiandeterminants(1:numpoints)
93 CALL applyoperator(numdim, gridsizes, numcomponents, numpoints, idim, opinterval, &
94 numstencils, stencilsizes, stencilstarts, numstencilvalues, &
95 stencilweights, stenciloffsets, stencilid, gridcoordinates, jacptr)
98 CALL yaxm1(numdim,numpoints,gridsizes,opinterval,1.0_8,jacm1ptr,jacptr)
101 CALL assignmentxa(numdim,numpoints,gridsizes,opinterval,1.0_8,gridmetrictensor)
103 ELSE IF(numdim == 2)
THEN 107 coordptr => gridcoordinates(numpoints+1:numpoints+numpoints)
108 m1ptr => gridmetrictensor(1:numpoints)
109 jacptr => gridjacobiandeterminants(1:numpoints)
110 jacm1ptr => gridjacobiandeterminants(1:numpoints)
111 stencilconnptr => stencilid(numpoints+1:numpoints+numpoints)
114 CALL applyoperator(numdim,gridsizes,numcomponents,numpoints,idim,opinterval, &
115 numstencils,stencilsizes,stencilstarts,numstencilvalues, &
116 stencilweights, stenciloffsets,stencilconnptr,coordptr,jacm1ptr)
119 CALL assignmentyx(numdim,numpoints,gridsizes,opinterval,jacm1ptr,m1ptr)
123 coordptr => gridcoordinates(1:numpoints)
124 m1ptr => gridmetrictensor(offset+1:offset+numpoints)
125 jacptr => gridjacobiandeterminants(1:numpoints)
126 jacm1ptr => gridjacobiandeterminants(1:numpoints)
127 stencilconnptr => stencilid(1:numpoints)
130 CALL applyoperator(numdim,gridsizes,numcomponents,numpoints,idim,opinterval, &
131 numstencils,stencilsizes,stencilstarts,numstencilvalues, &
132 stencilweights, stenciloffsets,stencilconnptr,coordptr,m1ptr)
139 coordptr => gridcoordinates(numpoints+1:numpoints+numpoints)
140 m1ptr => gridmetrictensor(offset+1:offset+numpoints)
141 jacm1ptr => gridjacobiandeterminants(1:numpoints)
144 CALL applyoperator(numdim,gridsizes,numcomponents,numpoints,idim,opinterval, &
145 numstencils,stencilsizes,stencilstarts,numstencilvalues, &
146 stencilweights, stenciloffsets,stencilconnptr,coordptr,m1ptr)
151 coordptr => gridcoordinates(numpoints+1:numpoints+numpoints)
152 m1ptr => gridmetrictensor(offset+1:offset+numpoints)
153 jacm1ptr => gridjacobiandeterminants(1:numpoints)
156 CALL applyoperator(numdim,gridsizes,numcomponents,numpoints,idim,opinterval, &
157 numstencils,stencilsizes,stencilstarts,numstencilvalues, &
158 stencilweights, stenciloffsets,stencilconnptr,coordptr,m1ptr)
160 ELSE IF(numdim == 3)
THEN 168 numDim, gridSizes, numPoints, &
169 opInterval, gridMetric, vBuffer,vHat)
173 INTEGER(KIND=4),
INTENT(IN) :: numDim
174 INTEGER(KIND=8),
INTENT(IN) :: gridSizes(numdim), numPoints
175 INTEGER(KIND=8),
INTENT(IN) :: opInterval(2*numdim)
176 REAL(KIND=8),
INTENT(IN) :: gridMetric(numdim)
177 REAL(KIND=8),
INTENT(IN) :: vBuffer(numdim*numpoints)
178 REAL(KIND=8),
INTENT(OUT) :: vHat(numdim*numpoints)
182 INTEGER(KIND=8) :: iPoint,iX,iY,iZ,iStart,iEnd,jStart,jEnd,kStart,kEnd
183 INTEGER(KIND=8) :: xIndex,zIndex,yIndex,yzIndex,xSize,ySize,zSize
184 INTEGER(KIND=8) :: iPoint2, iPoint3, nPlane, numPoints2, numPoints3
185 REAL(KIND=8) :: xMetric,yMetric,zMetric
188 istart = opinterval(1)
190 xmetric = gridmetric(1)
193 IF( numdim == 1 )
THEN 196 vhat(
ix) = xmetric*vbuffer(
ix)
199 ELSE IF( numdim == 2 )
THEN 201 ymetric = gridmetric(2)
203 jstart = opinterval(3)
207 yindex = (iy-1)*xsize
210 ipoint2 = ipoint+numpoints
211 vhat(ipoint) = xmetric * vbuffer(ipoint)
212 vhat(ipoint2) = ymetric * vbuffer(ipoint2)
216 ELSE IF( numdim == 3 )
THEN 218 ymetric = gridmetric(2)
220 jstart = opinterval(3)
223 zmetric = gridmetric(3)
225 kstart = opinterval(5)
228 nplane = xsize * ysize
229 numpoints2 = 2*numpoints
232 zindex = (iz-1)*nplane
234 yzindex = zindex + (iy-1)*xsize
236 ipoint = yzindex +
ix 237 ipoint2 = ipoint + numpoints
238 ipoint3 = ipoint + numpoints2
239 vhat(ipoint) = xmetric * vbuffer(ipoint)
240 vhat(ipoint2) = ymetric * vbuffer(ipoint2)
241 vhat(ipoint3) = zmetric * vbuffer(ipoint3)
251 numDim, gridSizes, numPoints, &
252 opInterval, gridMetric, vBuffer, vHat)
256 INTEGER(KIND=4),
INTENT(IN) :: numDim
257 INTEGER(KIND=8),
INTENT(IN) :: gridSizes(numdim), numPoints
258 INTEGER(KIND=8),
INTENT(IN) :: opInterval(2*numdim)
259 REAL(KIND=8),
INTENT(IN) :: gridMetric(numdim*numpoints)
260 REAL(KIND=8),
INTENT(IN) :: vBuffer(numdim*numpoints)
261 REAL(KIND=8),
INTENT(OUT) :: vHat(numdim*numpoints)
265 INTEGER(KIND=8) :: iPoint,iX,iY,iZ,iStart,iEnd,jStart,jEnd,kStart,kEnd
266 INTEGER(KIND=8) :: xIndex,zIndex,yIndex,yzIndex,xSize,ySize,zSize
267 INTEGER(KIND=8) :: iPoint2, iPoint3, nPlane, numPoints2, numPoints3
268 REAL(KIND=8) :: xMetric,yMetric,zMetric
271 istart = opinterval(1)
274 IF( numdim == 1 )
THEN 277 vhat(
ix) = gridmetric(
ix)*vbuffer(ipoint)
280 ELSE IF( numdim == 2 )
THEN 283 jstart = opinterval(3)
287 yindex = (iy-1)*xsize
290 ipoint2 = ipoint+numpoints
291 vhat(ipoint) = gridmetric(ipoint) * vbuffer(ipoint)
292 vhat(ipoint2) = gridmetric(ipoint2) * vbuffer(ipoint2)
296 ELSE IF( numdim == 3 )
THEN 299 jstart = opinterval(3)
303 kstart = opinterval(5)
306 nplane = xsize * ysize
307 numpoints2 = 2*numpoints
310 zindex = (iz-1)*nplane
312 yzindex = zindex + (iy-1)*xsize
314 ipoint = yzindex +
ix 315 ipoint2 = ipoint + numpoints
316 ipoint3 = ipoint + numpoints2
317 vhat(ipoint) = gridmetric(ipoint) * vbuffer(ipoint)
318 vhat(ipoint2) = gridmetric(ipoint2) * vbuffer(ipoint2)
319 vhat(ipoint3) = gridmetric(ipoint3) * vbuffer(ipoint3)
subroutine assignmentyx(numDim, numPoints, bufferSize, bufferInterval, X, Y)
ASSIGNMENTYX point-wise operator performing Y = X.
subroutine applyuniformgridmetric(numDim, gridSizes, numPoints, opInterval, gridMetric, vBuffer, vHat)
subroutine computecurvilineargridmetrics(numDim, gridSizes, numPoints, opInterval, numStencils, numStencilValues, stencilSizes, stencilStarts, stencilOffsets, stencilWeights, stencilID, gridCoordinates, gridMetricTensor, gridJacobianDeterminants)
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 ...
Defines MPI-specific parallel global and program classes.
integer(kind=4), parameter unirect
subroutine assignmentxa(numDim, numPoints, bufferSize, bufferInterval, a, X)
ASSIGNMENTXA point-wise operator performing X = scalar a.
subroutine computegridmetrics(numDim, gridSizes, numPoints, opInterval, numStencils, numStencilValues, stencilSizes, stencilStarts, stencilOffsets, stencilWeights, stencilID, gridCoordinates, gridMetricTensor, gridJacobianDeterminants)
subroutine applycartesiangridmetric(numDim, gridSizes, numPoints, opInterval, gridMetric, vBuffer, vHat)
integer(kind=4), parameter curvilinear
integer(kind=4), parameter rectilinear
integer(kind=4), parameter cartesian
subroutine yaxm1(numDim, numPoints, bufferSize, bufferInterval, a, X, Y)
YAXM1 point-wise operator performing Y = a/X (scalar a)