34 SUBROUTINE applyoperator(numDim,dimSizes,numComponents,numPoints,opDir,opInterval,numStencils, &
35 stencilSizes,stencilStarts,numValues,stencilWeights,stencilOffsets,stencilID,U,dU)
39 INTEGER(KIND=4),
INTENT(IN) :: numDim, opDir,numStencils, numValues, numComponents
40 INTEGER(KIND=8),
INTENT(IN) :: dimSizes(numdim), numPoints
41 INTEGER(KIND=8),
INTENT(IN) :: opInterval(2*numdim)
42 INTEGER(KIND=4),
INTENT(IN) :: stencilSizes(numstencils),stencilStarts(numstencils)
43 INTEGER(KIND=4),
INTENT(IN) :: stencilOffsets(numvalues)
44 REAL(KIND=8),
INTENT(IN) :: stencilWeights(numvalues)
45 INTEGER(KIND=4),
INTENT(IN) :: stencilID(numpoints)
47 REAL(KIND=8),
INTENT(IN),
TARGET :: U(numpoints*numcomponents)
48 REAL(KIND=8),
INTENT(OUT),
TARGET :: dU(numpoints*numcomponents)
51 INTEGER(KIND=4) :: iStencil, iWeight, iComp
52 INTEGER(KIND=8) :: plane, pointOffset, compOffset
53 INTEGER(KIND=8) :: I, J, K, jIndex, jkIndex, kIndex, iPoint
55 REAL(KIND=8),
DIMENSION(:),
POINTER :: uCompPtr
56 REAL(KIND=8),
DIMENSION(:),
POINTER :: duCompPtr
65 DO i = opinterval(1), opinterval(2)
66 istencil = stencilid(i)
68 DO iweight = stencilstarts(istencil),stencilstarts(istencil)+stencilsizes(istencil) - 1
69 du(i) = du(i) + stencilweights(iweight)*u(i+stenciloffsets(iweight))
72 ELSE IF(numdim == 2)
THEN 74 DO j = opinterval(3), opinterval(4)
75 jindex = (j-1)*dimsizes(1)
76 DO i = opinterval(1), opinterval(2)
78 istencil = stencilid(ipoint)
80 DO iweight = stencilstarts(istencil),stencilstarts(istencil)+stencilsizes(istencil) - 1
81 du(ipoint) = du(ipoint) + &
82 stencilweights(iweight)*u(ipoint+stenciloffsets(iweight))
86 ELSE IF(opdir == 2)
THEN 88 DO j = opinterval(3), opinterval(4)
90 DO i = opinterval(1), opinterval(2)
92 istencil = stencilid(ipoint)
94 DO iweight = stencilstarts(istencil),stencilstarts(istencil)+stencilsizes(istencil) - 1
95 du(ipoint) = du(ipoint) + &
96 stencilweights(iweight)*u(ipoint+stenciloffsets(iweight)*plane)
101 ELSE IF(numdim == 3)
THEN 102 plane = dimsizes(1) * dimsizes(2)
104 DO k = opinterval(5), opinterval(6)
106 DO j = opinterval(3), opinterval(4)
107 jkindex = kindex + (j-1)*dimsizes(1)
108 DO i = opinterval(1), opinterval(2)
110 istencil = stencilid(ipoint)
112 DO iweight = stencilstarts(istencil),stencilstarts(istencil)+stencilsizes(istencil) - 1
113 du(ipoint) = du(ipoint) + &
114 stencilweights(iweight)*u(ipoint+stenciloffsets(iweight))
122 pointoffset = dimsizes(1)
126 DO k = opinterval(5), opinterval(6)
128 DO j = opinterval(3), opinterval(4)
129 jkindex = kindex + (j-1)*dimsizes(1)
130 DO i = opinterval(1), opinterval(2)
132 istencil = stencilid(ipoint)
134 DO iweight = stencilstarts(istencil),stencilstarts(istencil)+stencilsizes(istencil) - 1
135 du(ipoint) = du(ipoint) + &
136 stencilweights(iweight)*u(ipoint+stenciloffsets(iweight)*pointoffset)
172 SUBROUTINE applyoperatorv(numDim,dimSizes,numComponents,numPoints,opDir,opInterval,numStencils, &
173 stencilSizes,stencilStarts,numValues,stencilWeights,stencilOffsets,stencilID,U,dU)
177 INTEGER(KIND=4),
INTENT(IN) :: numDim, opDir,numStencils, numValues, numComponents
178 INTEGER(KIND=8),
INTENT(IN) :: dimSizes(numdim), numPoints
179 INTEGER(KIND=8),
INTENT(IN) :: opInterval(2*numdim)
180 INTEGER(KIND=4),
INTENT(IN) :: stencilSizes(numstencils),stencilStarts(numstencils)
181 INTEGER(KIND=4),
INTENT(IN) :: stencilOffsets(numvalues)
182 REAL(KIND=8),
INTENT(IN) :: stencilWeights(numvalues)
183 INTEGER(KIND=4),
INTENT(IN) :: stencilID(numpoints)
185 REAL(KIND=8),
INTENT(IN),
TARGET :: U(numpoints*numcomponents)
186 REAL(KIND=8),
INTENT(OUT),
TARGET :: dU(numpoints*numcomponents)
189 INTEGER(KIND=4) :: iStencil, iWeight, iComp
190 INTEGER(KIND=8) :: plane, pointOffset, compOffset
191 INTEGER(KIND=8) :: I, J, K, jIndex, jkIndex, kIndex, iPoint
193 REAL(KIND=8),
DIMENSION(:),
POINTER :: uCompPtr
194 REAL(KIND=8),
DIMENSION(:),
POINTER :: duCompPtr
196 DO icomp = 1, numcomponents
198 compoffset = (icomp-1)*numpoints
199 ucompptr => u(compoffset+1:compoffset+numpoints)
200 ducompptr => du(compoffset+1:compoffset+numpoints)
203 DO i = opinterval(1), opinterval(2)
204 istencil = stencilid(i)
206 DO iweight = stencilstarts(istencil),stencilstarts(istencil)+stencilsizes(istencil) - 1
207 ducompptr(i) = ducompptr(i) + stencilweights(iweight)*ucompptr(i+stenciloffsets(iweight))
210 ELSE IF(numdim == 2)
THEN 212 DO j = opinterval(3), opinterval(4)
213 jindex = (j-1)*dimsizes(1)
214 DO i = opinterval(1), opinterval(2)
216 istencil = stencilid(ipoint)
217 ducompptr(ipoint) = 0.0_8
218 DO iweight = stencilstarts(istencil),stencilstarts(istencil)+stencilsizes(istencil) - 1
219 ducompptr(ipoint) = ducompptr(ipoint) + &
220 stencilweights(iweight)*ucompptr(ipoint+stenciloffsets(iweight))
224 ELSE IF(opdir == 2)
THEN 226 DO j = opinterval(3), opinterval(4)
228 DO i = opinterval(1), opinterval(2)
230 istencil = stencilid(ipoint)
231 ducompptr(ipoint) = 0.0_8
232 DO iweight = stencilstarts(istencil),stencilstarts(istencil)+stencilsizes(istencil) - 1
233 ducompptr(ipoint) = ducompptr(ipoint) + &
234 stencilweights(iweight)*ucompptr(ipoint+stenciloffsets(iweight)*plane)
239 ELSE IF(numdim == 3)
THEN 240 plane = dimsizes(1) * dimsizes(2)
242 DO k = opinterval(5), opinterval(6)
244 DO j = opinterval(3), opinterval(4)
245 jkindex = kindex + (j-1)*dimsizes(1)
246 DO i = opinterval(1), opinterval(2)
248 istencil = stencilid(ipoint)
249 ducompptr(ipoint) = 0.0_8
250 DO iweight = stencilstarts(istencil),stencilstarts(istencil)+stencilsizes(istencil) - 1
251 ducompptr(ipoint) = ducompptr(ipoint) + &
252 stencilweights(iweight)*ucompptr(ipoint+stenciloffsets(iweight))
260 pointoffset = dimsizes(1)
264 DO k = opinterval(5), opinterval(6)
266 DO j = opinterval(3), opinterval(4)
267 jkindex = kindex + (j-1)*dimsizes(1)
268 DO i = opinterval(1), opinterval(2)
270 istencil = stencilid(ipoint)
271 ducompptr(ipoint) = 0.0_8
272 DO iweight = stencilstarts(istencil),stencilstarts(istencil)+stencilsizes(istencil) - 1
273 ducompptr(ipoint) = ducompptr(ipoint) + &
274 stencilweights(iweight)*ucompptr(ipoint+stenciloffsets(iweight)*pointoffset)
309 SUBROUTINE applyoperatorblobs(numDim,dimSizes,numComponents,numPointsBuffer,opDir,numStencils, &
310 stencilSizes,stencilStarts,numStencilValues,stencilWeights,stencilOffsets,numPointsStencil,&
311 numPointsApply,stencilPoints,U,dU)
315 INTEGER(KIND=4),
INTENT(IN) :: numDim, opDir,numStencils, numStencilValues, numComponents
316 INTEGER(KIND=8),
INTENT(IN) :: numPointsApply, numPointsBuffer
317 INTEGER(KIND=8),
INTENT(IN) :: dimSizes(numdim),numPointsStencil(numstencils)
318 INTEGER(KIND=8),
INTENT(IN) :: stencilPoints(numpointsapply)
319 INTEGER(KIND=4),
INTENT(IN) :: stencilSizes(numstencils),stencilStarts(numstencils)
320 INTEGER(KIND=4),
INTENT(IN) :: stencilOffsets(numstencilvalues)
321 REAL(KIND=8),
INTENT(IN) :: stencilWeights(numstencilvalues)
322 REAL(KIND=8),
INTENT(IN) :: U(numpointsbuffer)
323 REAL(KIND=8),
INTENT(OUT) :: dU(numpointsbuffer)
325 INTEGER(KIND=8) :: stencilPointsOffset, iPoint, pointsStart,pointsEnd,numPointsThisStencil
326 INTEGER(KIND=4) :: iStencil, iWeight, stencilSize, stencilStart, stencilEnd
329 stencilpointsoffset = 1
343 DO istencil = 1, numstencils
344 numpointsthisstencil = numpointsstencil(istencil)
345 stencilsize = stencilsizes(istencil)
346 stencilstart = stencilstarts(istencil)
347 stencilend = stencilstart+stencilsize-1
348 pointsstart = stencilpointsoffset
349 pointsend = pointsstart + numpointsthisstencil-1
350 CALL applysinglestencil(numdim,dimsizes,numcomponents,numpointsbuffer,opdir,numpointsthisstencil, &
351 stencilpoints(pointsstart:pointsend),stencilsize,stencilweights(stencilstart:stencilend),&
352 stenciloffsets(stencilstart:stencilend),u,du)
353 stencilpointsoffset = stencilpointsoffset+numpointsthisstencil
380 SUBROUTINE applysinglestencil(numDim,dimSizes,numComponents,numPointsBuffer,opDir,numPointsApply, &
381 applyPoints,stencilSize,stencilWeights,stencilOffsets,U,dU)
385 INTEGER(KIND=4),
INTENT(IN) :: numDim, opDir, stencilSize, numComponents
386 INTEGER(KIND=8),
INTENT(IN) :: dimSizes(numdim), numPointsBuffer, numPointsApply
387 INTEGER(KIND=8),
INTENT(IN) :: applyPoints(numpointsapply)
388 INTEGER(KIND=4),
INTENT(IN) :: stencilOffsets(stencilsize)
389 REAL(KIND=8),
INTENT(IN) :: stencilWeights(stencilsize)
390 REAL(KIND=8),
INTENT(IN) :: U(numpointsbuffer)
391 REAL(KIND=8),
INTENT(OUT) :: dU(numpointsbuffer)
393 INTEGER(KIND=8) :: I, iPoint, plane
394 INTEGER(KIND=4) :: iStencil, iWeight
397 DO i = 1,numpointsapply
398 ipoint = applypoints(i)
400 DO iweight = 1, stencilsize
401 du(ipoint) = du(ipoint) + stencilweights(iweight)*u(ipoint+stenciloffsets(iweight))
407 ELSE IF(opdir == 3)
THEN 408 plane = dimsizes(1)*dimsizes(2)
410 DO i = 1, numpointsapply
411 ipoint = applypoints(i)
413 DO iweight = 1,stencilsize
414 du(ipoint) = du(ipoint) + stencilweights(iweight)*u(ipoint+stenciloffsets(iweight)*plane)
423 SUBROUTINE yaxpy(numDim,numPoints,bufferSize,bufferInterval,a,X,Y)
425 INTEGER(KIND=4),
INTENT(IN) :: numDim
426 INTEGER(KIND=8),
INTENT(IN) :: numPoints,bufferSize(numdim)
427 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
428 REAL(KIND=8),
INTENT(IN) :: a,X(numpoints)
429 REAL(KIND=8),
INTENT(INOUT) :: Y(numpoints)
431 INTEGER(KIND=8) :: I, J, K
432 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
433 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
435 istart = bufferinterval(1)
436 iend = bufferinterval(2)
437 xsize = buffersize(1)
443 ELSE IF(numdim == 2)
THEN 444 jstart = bufferinterval(3)
445 jend = bufferinterval(4)
449 bufferindex = yindex + i
450 y(bufferindex) = y(bufferindex) + a*x(bufferindex)
453 ELSE IF(numdim == 3)
THEN 454 jstart = bufferinterval(3)
455 jend = bufferinterval(4)
456 kstart = bufferinterval(5)
457 kend = bufferinterval(6)
458 nplane = xsize * buffersize(2)
460 zindex = (k-1)*nplane
462 yzindex = zindex + (j-1)*xsize
464 bufferindex = yzindex + i
465 y(bufferindex) = y(bufferindex) + a*x(bufferindex)
474 SUBROUTINE zaxpy(numDim,numPoints,bufferSize,bufferInterval,a,X,Y,Z)
476 INTEGER(KIND=4),
INTENT(IN) :: numDim
477 INTEGER(KIND=8),
INTENT(IN) :: numPoints,bufferSize(numdim)
478 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
479 REAL(KIND=8),
INTENT(IN) :: a,X(numpoints),Y(numpoints)
480 REAL(KIND=8),
INTENT(OUT) :: Z(numpoints)
482 INTEGER(KIND=8) :: I, J, K
483 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
484 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
486 istart = bufferinterval(1)
487 iend = bufferinterval(2)
488 xsize = buffersize(1)
494 ELSE IF(numdim == 2)
THEN 495 jstart = bufferinterval(3)
496 jend = bufferinterval(4)
500 bufferindex = yindex + i
501 z(bufferindex) = y(bufferindex) + a*x(bufferindex)
504 ELSE IF(numdim == 3)
THEN 505 jstart = bufferinterval(3)
506 jend = bufferinterval(4)
507 kstart = bufferinterval(5)
508 kend = bufferinterval(6)
509 nplane = xsize * buffersize(2)
511 zindex = (k-1)*nplane
513 yzindex = zindex + (j-1)*xsize
515 bufferindex = yzindex + i
516 z(bufferindex) = y(bufferindex) + a*x(bufferindex)
525 SUBROUTINE zaxpby(numDim,numPoints,bufferSize,bufferInterval,a,b,X,Y,Z)
527 INTEGER(KIND=4),
INTENT(IN) :: numDim
528 INTEGER(KIND=8),
INTENT(IN) :: numPoints,bufferSize(numdim)
529 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
530 REAL(KIND=8),
INTENT(IN) :: a,b,X(numpoints),Y(numpoints)
531 REAL(KIND=8),
INTENT(OUT) :: Z(numpoints)
533 INTEGER(KIND=8) :: I, J, K
534 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
535 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
537 istart = bufferinterval(1)
538 iend = bufferinterval(2)
539 xsize = buffersize(1)
543 z(i) = b*y(i) + a*x(i)
545 ELSE IF(numdim == 2)
THEN 546 jstart = bufferinterval(3)
547 jend = bufferinterval(4)
551 bufferindex = yindex + i
552 z(bufferindex) = b*y(bufferindex) + a*x(bufferindex)
555 ELSE IF(numdim == 3)
THEN 556 jstart = bufferinterval(3)
557 jend = bufferinterval(4)
558 kstart = bufferinterval(5)
559 kend = bufferinterval(6)
560 nplane = xsize * buffersize(2)
562 zindex = (k-1)*nplane
564 yzindex = zindex + (j-1)*xsize
566 bufferindex = yzindex + i
567 z(bufferindex) = b*y(bufferindex) + a*x(bufferindex)
576 SUBROUTINE yaxpby(numDim,numPoints,bufferSize,bufferInterval,a,b,X,Y)
578 INTEGER(KIND=4),
INTENT(IN) :: numDim
579 INTEGER(KIND=8),
INTENT(IN) :: numPoints,bufferSize(numdim)
580 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
581 REAL(KIND=8),
INTENT(IN) :: a,b,X(numpoints)
582 REAL(KIND=8),
INTENT(INOUT) :: Y(numpoints)
584 INTEGER(KIND=8) :: I, J, K
585 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
586 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
588 istart = bufferinterval(1)
589 iend = bufferinterval(2)
590 xsize = buffersize(1)
594 y(i) = b*y(i) + a*x(i)
596 ELSE IF(numdim == 2)
THEN 597 jstart = bufferinterval(3)
598 jend = bufferinterval(4)
602 bufferindex = yindex + i
603 y(bufferindex) = b*y(bufferindex) + a*x(bufferindex)
606 ELSE IF(numdim == 3)
THEN 607 jstart = bufferinterval(3)
608 jend = bufferinterval(4)
609 kstart = bufferinterval(5)
610 kend = bufferinterval(6)
611 nplane = xsize * buffersize(2)
613 zindex = (k-1)*nplane
615 yzindex = zindex + (j-1)*xsize
617 bufferindex = yzindex + i
618 y(bufferindex) = b*y(bufferindex) + a*x(bufferindex)
627 SUBROUTINE yax(numDim,numPoints,bufferSize,bufferInterval,a,X,Y)
629 INTEGER(KIND=4),
INTENT(IN) :: numDim
630 INTEGER(KIND=8),
INTENT(IN) :: numPoints,bufferSize(numdim)
631 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
632 REAL(KIND=8),
INTENT(IN) :: a,X(numpoints)
633 REAL(KIND=8),
INTENT(OUT) :: Y(numpoints)
635 INTEGER(KIND=8) :: I, J, K
636 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
637 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
639 istart = bufferinterval(1)
640 iend = bufferinterval(2)
641 xsize = buffersize(1)
647 ELSE IF(numdim == 2)
THEN 648 jstart = bufferinterval(3)
649 jend = bufferinterval(4)
653 bufferindex = yindex + i
654 y(bufferindex) = a*x(bufferindex)
657 ELSE IF(numdim == 3)
THEN 658 jstart = bufferinterval(3)
659 jend = bufferinterval(4)
660 kstart = bufferinterval(5)
661 kend = bufferinterval(6)
662 nplane = xsize * buffersize(2)
664 zindex = (k-1)*nplane
666 yzindex = zindex + (j-1)*xsize
668 bufferindex = yzindex + i
669 y(bufferindex) = a*x(bufferindex)
678 SUBROUTINE zxy(numDim,numPoints,bufferSize,bufferInterval,X,Y,Z)
680 INTEGER(KIND=4),
INTENT(IN) :: numDim
681 INTEGER(KIND=8),
INTENT(IN) :: numPoints,bufferSize(numdim)
682 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
683 REAL(KIND=8),
INTENT(IN) :: X(numpoints)
684 REAL(KIND=8),
INTENT(IN) :: Y(numpoints)
685 REAL(KIND=8),
INTENT(OUT) :: Z(numpoints)
687 INTEGER(KIND=8) :: I, J, K
688 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
689 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
691 istart = bufferinterval(1)
692 iend = bufferinterval(2)
693 xsize = buffersize(1)
699 ELSE IF(numdim == 2)
THEN 700 jstart = bufferinterval(3)
701 jend = bufferinterval(4)
705 bufferindex = yindex + i
706 z(bufferindex) = x(bufferindex)*y(bufferindex)
709 ELSE IF(numdim == 3)
THEN 710 jstart = bufferinterval(3)
711 jend = bufferinterval(4)
712 kstart = bufferinterval(5)
713 kend = bufferinterval(6)
714 nplane = xsize * buffersize(2)
716 zindex = (k-1)*nplane
718 yzindex = zindex + (j-1)*xsize
720 bufferindex = yzindex + i
721 z(bufferindex) = x(bufferindex)*y(bufferindex)
730 SUBROUTINE yxy(numDim,numPoints,bufferSize,bufferInterval,X,Y)
732 INTEGER(KIND=4),
INTENT(IN) :: numDim
733 INTEGER(KIND=8),
INTENT(IN) :: numPoints,bufferSize(numdim)
734 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
735 REAL(KIND=8),
INTENT(IN) :: X(numpoints)
736 REAL(KIND=8),
INTENT(INOUT) :: Y(numpoints)
738 INTEGER(KIND=8) :: I, J, K
739 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
740 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
742 istart = bufferinterval(1)
743 iend = bufferinterval(2)
744 xsize = buffersize(1)
750 ELSE IF(numdim == 2)
THEN 751 jstart = bufferinterval(3)
752 jend = bufferinterval(4)
756 bufferindex = yindex + i
757 y(bufferindex) = x(bufferindex)*y(bufferindex)
760 ELSE IF(numdim == 3)
THEN 761 jstart = bufferinterval(3)
762 jend = bufferinterval(4)
763 kstart = bufferinterval(5)
764 kend = bufferinterval(6)
765 nplane = xsize * buffersize(2)
767 zindex = (k-1)*nplane
769 yzindex = zindex + (j-1)*xsize
771 bufferindex = yzindex + i
772 y(bufferindex) = x(bufferindex)*y(bufferindex)
781 SUBROUTINE zwxpy(numDim,numPoints,bufferSize,bufferInterval,W,X,Y,Z)
783 INTEGER(KIND=4),
INTENT(IN) :: numDim
784 INTEGER(KIND=8),
INTENT(IN) :: numPoints,bufferSize(numdim)
785 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
786 REAL(KIND=8),
INTENT(IN) :: W(numpoints)
787 REAL(KIND=8),
INTENT(IN) :: X(numpoints)
788 REAL(KIND=8),
INTENT(IN) :: Y(numpoints)
789 REAL(KIND=8),
INTENT(OUT) :: Z(numpoints)
791 INTEGER(KIND=8) :: I, J, K
792 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
793 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
795 istart = bufferinterval(1)
796 iend = bufferinterval(2)
797 xsize = buffersize(1)
801 z(i) = x(i)*w(i) + y(i)
803 ELSE IF(numdim == 2)
THEN 804 jstart = bufferinterval(3)
805 jend = bufferinterval(4)
809 bufferindex = yindex + i
810 z(bufferindex) = x(bufferindex)*w(bufferindex) + y(bufferindex)
813 ELSE IF(numdim == 3)
THEN 814 jstart = bufferinterval(3)
815 jend = bufferinterval(4)
816 kstart = bufferinterval(5)
817 kend = bufferinterval(6)
818 nplane = xsize * buffersize(2)
820 zindex = (k-1)*nplane
822 yzindex = zindex + (j-1)*xsize
824 bufferindex = yzindex + i
825 z(bufferindex) = x(bufferindex)*w(bufferindex) + y(bufferindex)
834 SUBROUTINE ywxpy(numDim,numPoints,bufferSize,bufferInterval,W,X,Y)
836 INTEGER(KIND=4),
INTENT(IN) :: numDim
837 INTEGER(KIND=8),
INTENT(IN) :: numPoints,bufferSize(numdim)
838 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
839 REAL(KIND=8),
INTENT(IN) :: W(numpoints)
840 REAL(KIND=8),
INTENT(IN) :: X(numpoints)
841 REAL(KIND=8),
INTENT(INOUT) :: Y(numpoints)
843 INTEGER(KIND=8) :: I, J, K
844 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
845 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
847 istart = bufferinterval(1)
848 iend = bufferinterval(2)
849 xsize = buffersize(1)
853 y(i) = x(i)*w(i) + y(i)
855 ELSE IF(numdim == 2)
THEN 856 jstart = bufferinterval(3)
857 jend = bufferinterval(4)
861 bufferindex = yindex + i
862 y(bufferindex) = x(bufferindex)*w(bufferindex) + y(bufferindex)
865 ELSE IF(numdim == 3)
THEN 866 jstart = bufferinterval(3)
867 jend = bufferinterval(4)
868 kstart = bufferinterval(5)
869 kend = bufferinterval(6)
870 nplane = xsize * buffersize(2)
872 zindex = (k-1)*nplane
874 yzindex = zindex + (j-1)*xsize
876 bufferindex = yzindex + i
877 y(bufferindex) = x(bufferindex)*w(bufferindex) + y(bufferindex)
886 SUBROUTINE zawpxy(numDim,numPoints,bufferSize,bufferInterval,a,W,X,Y,Z)
888 INTEGER(KIND=4),
INTENT(IN) :: numDim
889 INTEGER(KIND=8),
INTENT(IN) :: numPoints,bufferSize(numdim)
890 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
891 REAL(KIND=8),
INTENT(IN) :: a
892 REAL(KIND=8),
INTENT(IN) :: W(numpoints)
893 REAL(KIND=8),
INTENT(IN) :: X(numpoints)
894 REAL(KIND=8),
INTENT(IN) :: Y(numpoints)
895 REAL(KIND=8),
INTENT(OUT) :: Z(numpoints)
897 INTEGER(KIND=8) :: I, J, K
898 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
899 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
901 istart = bufferinterval(1)
902 iend = bufferinterval(2)
903 xsize = buffersize(1)
907 z(i) = a*w(i) + x(i)*y(i)
909 ELSE IF(numdim == 2)
THEN 910 jstart = bufferinterval(3)
911 jend = bufferinterval(4)
915 bufferindex = yindex + i
916 z(bufferindex) = a*w(bufferindex) + x(bufferindex)*y(bufferindex)
919 ELSE IF(numdim == 3)
THEN 920 jstart = bufferinterval(3)
921 jend = bufferinterval(4)
922 kstart = bufferinterval(5)
923 kend = bufferinterval(6)
924 nplane = xsize * buffersize(2)
926 zindex = (k-1)*nplane
928 yzindex = zindex + (j-1)*xsize
930 bufferindex = yzindex + i
931 z(bufferindex) = a*w(bufferindex) + x(bufferindex)*y(bufferindex)
940 SUBROUTINE zvwpxy(numDim,numPoints,bufferSize,bufferInterval,V,W,X,Y,Z)
942 INTEGER(KIND=4),
INTENT(IN) :: numDim
943 INTEGER(KIND=8),
INTENT(IN) :: numPoints,bufferSize(numdim)
944 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
945 REAL(KIND=8),
INTENT(IN) :: V(numpoints)
946 REAL(KIND=8),
INTENT(IN) :: W(numpoints)
947 REAL(KIND=8),
INTENT(IN) :: X(numpoints)
948 REAL(KIND=8),
INTENT(IN) :: Y(numpoints)
949 REAL(KIND=8),
INTENT(OUT) :: Z(numpoints)
951 INTEGER(KIND=8) :: I, J, K
952 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
953 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
955 istart = bufferinterval(1)
956 iend = bufferinterval(2)
957 xsize = buffersize(1)
961 z(i) = v(i)*w(i) + x(i)*y(i)
963 ELSE IF(numdim == 2)
THEN 964 jstart = bufferinterval(3)
965 jend = bufferinterval(4)
969 bufferindex = yindex + i
970 z(bufferindex) = v(bufferindex)*w(bufferindex) + &
971 x(bufferindex)*y(bufferindex)
974 ELSE IF(numdim == 3)
THEN 975 jstart = bufferinterval(3)
976 jend = bufferinterval(4)
977 kstart = bufferinterval(5)
978 kend = bufferinterval(6)
979 nplane = xsize * buffersize(2)
981 zindex = (k-1)*nplane
983 yzindex = zindex + (j-1)*xsize
985 bufferindex = yzindex + i
986 z(bufferindex) = v(bufferindex)*w(bufferindex) + &
987 x(bufferindex)*y(bufferindex)
996 SUBROUTINE zwmxpy(numDim,numPoints,bufferSize,bufferInterval,W,X,Y,Z)
998 INTEGER(KIND=4),
INTENT(IN) :: numDim
999 INTEGER(KIND=8),
INTENT(IN) :: numPoints,bufferSize(numdim)
1000 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
1001 REAL(KIND=8),
INTENT(IN) :: W(numpoints)
1002 REAL(KIND=8),
INTENT(IN) :: X(numpoints)
1003 REAL(KIND=8),
INTENT(IN) :: Y(numpoints)
1004 REAL(KIND=8),
INTENT(OUT) :: Z(numpoints)
1006 INTEGER(KIND=8) :: I, J, K
1007 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
1008 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
1010 istart = bufferinterval(1)
1011 iend = bufferinterval(2)
1012 xsize = buffersize(1)
1014 IF(numdim == 1)
THEN 1016 z(i) = w(i)*(x(i)+y(i))
1018 ELSE IF(numdim == 2)
THEN 1019 jstart = bufferinterval(3)
1020 jend = bufferinterval(4)
1022 yindex = (j-1)*xsize
1024 bufferindex = yindex + i
1025 z(bufferindex) = w(bufferindex)*(x(bufferindex)+y(bufferindex))
1028 ELSE IF(numdim == 3)
THEN 1029 jstart = bufferinterval(3)
1030 jend = bufferinterval(4)
1031 kstart = bufferinterval(5)
1032 kend = bufferinterval(6)
1033 nplane = xsize * buffersize(2)
1035 zindex = (k-1)*nplane
1037 yzindex = zindex + (j-1)*xsize
1039 bufferindex = yzindex + i
1040 z(bufferindex) = w(bufferindex)*(x(bufferindex) + y(bufferindex))
1049 SUBROUTINE zxdoty(numDim,numPoints,bufferSize,bufferInterval,numComponents,X,Y,Z)
1051 INTEGER(KIND=4),
INTENT(IN) :: numDim, numComponents
1052 INTEGER(KIND=8),
INTENT(IN) :: numPoints,bufferSize(numdim)
1053 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
1054 REAL(KIND=8),
INTENT(IN) :: X(numpoints*numcomponents)
1055 REAL(KIND=8),
INTENT(IN) :: Y(numpoints*numcomponents)
1056 REAL(KIND=8),
INTENT(OUT) :: Z(numpoints)
1058 INTEGER(KIND=8) :: I, J, K
1059 INTEGER(KIND=4) :: iComp
1060 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
1061 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd, compOffset
1063 REAL(KIND=8) :: zero = 0.0_8
1065 istart = bufferinterval(1)
1066 iend = bufferinterval(2)
1067 xsize = buffersize(1)
1069 CALL assignmentxa(numdim,numpoints,buffersize,bufferinterval, &
1072 IF(numdim == 1)
THEN 1073 DO icomp = 0, numcomponents-1
1074 compoffset = icomp*numpoints
1076 z(i) = z(i) + x(i+compoffset)*y(i+compoffset)
1079 ELSE IF(numdim == 2)
THEN 1080 jstart = bufferinterval(3)
1081 jend = bufferinterval(4)
1082 DO icomp = 0,numcomponents-1
1083 compoffset = icomp*numpoints
1085 yindex = (j-1)*xsize
1087 bufferindex = yindex + i
1088 z(bufferindex) = z(bufferindex) + &
1089 x(bufferindex+compoffset)*y(bufferindex+compoffset)
1093 ELSE IF(numdim == 3)
THEN 1094 jstart = bufferinterval(3)
1095 jend = bufferinterval(4)
1096 kstart = bufferinterval(5)
1097 kend = bufferinterval(6)
1098 nplane = xsize * buffersize(2)
1099 DO icomp = 0,numcomponents-1
1100 compoffset = icomp*numpoints
1102 zindex = (k-1)*nplane
1104 yzindex = zindex + (j-1)*xsize
1106 bufferindex = yzindex + i
1107 z(bufferindex) = z(bufferindex) + &
1108 x(bufferindex+compoffset)*y(bufferindex+compoffset)
1118 SUBROUTINE xax(numDim,numPoints,bufferSize,bufferInterval,a,X)
1120 INTEGER(KIND=4),
INTENT(IN) :: numDim
1121 INTEGER(KIND=8),
INTENT(IN) :: numPoints,bufferSize(numdim)
1122 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
1123 REAL(KIND=8),
INTENT(IN) :: a
1124 REAL(KIND=8),
INTENT(INOUT) :: X(numpoints)
1126 INTEGER(KIND=8) :: I, J, K
1127 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
1128 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
1130 istart = bufferinterval(1)
1131 iend = bufferinterval(2)
1132 xsize = buffersize(1)
1134 IF(numdim == 1)
THEN 1138 ELSE IF(numdim == 2)
THEN 1139 jstart = bufferinterval(3)
1140 jend = bufferinterval(4)
1142 yindex = (j-1)*xsize
1144 bufferindex = yindex + i
1145 x(bufferindex) = a*x(bufferindex)
1148 ELSE IF(numdim == 3)
THEN 1149 jstart = bufferinterval(3)
1150 jend = bufferinterval(4)
1151 kstart = bufferinterval(5)
1152 kend = bufferinterval(6)
1153 nplane = xsize * buffersize(2)
1155 zindex = (k-1)*nplane
1157 yzindex = zindex + (j-1)*xsize
1159 bufferindex = yzindex + i
1160 x(bufferindex) = a*x(bufferindex)
1169 SUBROUTINE assignmentyx(numDim,numPoints,bufferSize,bufferInterval,X,Y)
1171 INTEGER(KIND=4),
INTENT(IN) :: numDim
1172 INTEGER(KIND=8),
INTENT(IN) :: numPoints
1173 INTEGER(KIND=8),
INTENT(IN) :: bufferSize(numdim)
1174 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
1175 REAL(KIND=8),
INTENT(IN) :: X(numpoints)
1176 REAL(KIND=8),
INTENT(INOUT) :: Y(numpoints)
1178 INTEGER(KIND=8) :: I, J, K
1179 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
1180 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
1182 istart = bufferinterval(1)
1183 iend = bufferinterval(2)
1184 xsize = buffersize(1)
1186 IF(numdim == 1)
THEN 1190 ELSE IF(numdim == 2)
THEN 1191 jstart = bufferinterval(3)
1192 jend = bufferinterval(4)
1194 yindex = (j-1)*xsize
1196 bufferindex = yindex + i
1197 y(bufferindex) = x(bufferindex)
1200 ELSE IF(numdim == 3)
THEN 1201 jstart = bufferinterval(3)
1202 jend = bufferinterval(4)
1203 kstart = bufferinterval(5)
1204 kend = bufferinterval(6)
1205 nplane = xsize * buffersize(2)
1207 zindex = (k-1)*nplane
1209 yzindex = zindex + (j-1)*xsize
1211 bufferindex = yzindex + i
1212 y(bufferindex) = x(bufferindex)
1221 SUBROUTINE assignmentxa(numDim,numPoints,bufferSize,bufferInterval,a,X)
1223 INTEGER(KIND=4),
INTENT(IN) :: numDim
1224 INTEGER(KIND=8),
INTENT(IN) :: numPoints
1225 INTEGER(KIND=8),
INTENT(IN) :: bufferSize(numdim)
1226 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
1227 REAL(KIND=8),
INTENT(IN) :: a
1228 REAL(KIND=8),
INTENT(INOUT) :: X(numpoints)
1230 INTEGER(KIND=8) :: I, J, K
1231 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
1232 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
1235 istart = bufferinterval(1)
1236 iend = bufferinterval(2)
1237 xsize = buffersize(1)
1239 IF(numdim == 1)
THEN 1243 ELSE IF(numdim == 2)
THEN 1244 jstart = bufferinterval(3)
1245 jend = bufferinterval(4)
1247 yindex = (j-1)*xsize
1249 bufferindex = yindex + i
1253 ELSE IF(numdim == 3)
THEN 1254 jstart = bufferinterval(3)
1255 jend = bufferinterval(4)
1256 kstart = bufferinterval(5)
1257 kend = bufferinterval(6)
1258 nplane = xsize * buffersize(2)
1260 zindex = (k-1)*nplane
1262 yzindex = zindex + (j-1)*xsize
1264 bufferindex = yzindex + i
1274 SUBROUTINE assignmentyabsx(numDim,numPoints,bufferSize,bufferInterval,X,Y)
1276 INTEGER(KIND=4),
INTENT(IN) :: numDim
1277 INTEGER(KIND=8),
INTENT(IN) :: numPoints
1278 INTEGER(KIND=8),
INTENT(IN) :: bufferSize(numdim)
1279 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
1280 REAL(KIND=8),
INTENT(IN) :: X(numpoints)
1281 REAL(KIND=8),
INTENT(OUT) :: Y(numpoints)
1283 INTEGER(KIND=8) :: I, J, K
1284 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
1285 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
1288 istart = bufferinterval(1)
1289 iend = bufferinterval(2)
1290 xsize = buffersize(1)
1292 IF(numdim == 1)
THEN 1296 ELSE IF(numdim == 2)
THEN 1297 jstart = bufferinterval(3)
1298 jend = bufferinterval(4)
1300 yindex = (j-1)*xsize
1302 bufferindex = yindex + i
1303 y(bufferindex) = abs(x(bufferindex))
1306 ELSE IF(numdim == 3)
THEN 1307 jstart = bufferinterval(3)
1308 jend = bufferinterval(4)
1309 kstart = bufferinterval(5)
1310 kend = bufferinterval(6)
1311 nplane = xsize * buffersize(2)
1313 zindex = (k-1)*nplane
1315 yzindex = zindex + (j-1)*xsize
1317 bufferindex = yzindex + i
1318 y(bufferindex) = abs(x(bufferindex))
1327 SUBROUTINE veclen(numDim,numPoints,bufferSize,bufferInterval,numComp,V,lenV)
1329 INTEGER(KIND=4),
INTENT(IN) :: numDim, numComp
1330 INTEGER(KIND=8),
INTENT(IN) :: numPoints
1331 INTEGER(KIND=8),
INTENT(IN) :: bufferSize(numdim)
1332 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
1333 REAL(KIND=8),
INTENT(IN) :: V(numcomp*numpoints)
1334 REAL(KIND=8),
INTENT(OUT) :: lenV(numpoints)
1336 INTEGER(KIND=8) :: I, J, K, L
1337 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
1338 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
1341 istart = bufferinterval(1)
1342 iend = bufferinterval(2)
1343 xsize = buffersize(1)
1345 IF(numdim == 1)
THEN 1349 lenv(i) = lenv(i) + v((l-1)*numpoints+i)*v((l-1)*numpoints+i)
1351 lenv(i) = sqrt(lenv(i))
1353 ELSE IF(numdim == 2)
THEN 1354 jstart = bufferinterval(3)
1355 jend = bufferinterval(4)
1357 yindex = (j-1)*xsize
1359 bufferindex = yindex + i
1360 lenv(bufferindex) = 0.0_8
1362 lenv(bufferindex) = lenv(bufferindex) + &
1363 v((l-1)*numpoints+bufferindex)*v((l-1)*numpoints+bufferindex)
1365 lenv(bufferindex) = sqrt(lenv(bufferindex))
1368 ELSE IF(numdim == 3)
THEN 1369 jstart = bufferinterval(3)
1370 jend = bufferinterval(4)
1371 kstart = bufferinterval(5)
1372 kend = bufferinterval(6)
1373 nplane = xsize * buffersize(2)
1375 zindex = (k-1)*nplane
1377 yzindex = zindex + (j-1)*xsize
1379 bufferindex = yzindex + i
1380 lenv(bufferindex) = 0.0_8
1382 lenv(bufferindex) = lenv(bufferindex) + &
1383 v((l-1)*numpoints+bufferindex)*v((l-1)*numpoints+bufferindex)
1385 lenv(bufferindex) = sqrt(lenv(bufferindex))
1395 SUBROUTINE yaxm1(numDim,numPoints,bufferSize,bufferInterval,a,X,Y)
1397 INTEGER(KIND=4),
INTENT(IN) :: numDim
1398 INTEGER(KIND=8),
INTENT(IN) :: numPoints,bufferSize(numdim)
1399 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
1400 REAL(KIND=8),
INTENT(IN) :: a
1401 REAL(KIND=8),
INTENT(INOUT) :: X(numpoints)
1402 REAL(KIND=8),
INTENT(INOUT) :: Y(numpoints)
1404 INTEGER(KIND=8) :: I, J, K
1405 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
1406 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
1408 istart = bufferinterval(1)
1409 iend = bufferinterval(2)
1410 xsize = buffersize(1)
1412 IF(numdim == 1)
THEN 1416 ELSE IF(numdim == 2)
THEN 1417 jstart = bufferinterval(3)
1418 jend = bufferinterval(4)
1420 yindex = (j-1)*xsize
1422 bufferindex = yindex + i
1423 y(bufferindex) = a/x(bufferindex)
1426 ELSE IF(numdim == 3)
THEN 1427 jstart = bufferinterval(3)
1428 jend = bufferinterval(4)
1429 kstart = bufferinterval(5)
1430 kend = bufferinterval(6)
1431 nplane = xsize * buffersize(2)
1433 zindex = (k-1)*nplane
1435 yzindex = zindex + (j-1)*xsize
1437 bufferindex = yzindex + i
1438 y(bufferindex) = a/x(bufferindex)
1444 END SUBROUTINE yaxm1 1448 SUBROUTINE determinant3x3(numPoints,bufferSize,bufferInterval,inMatrix,matrixDeterminant)
1450 INTEGER(KIND=8),
INTENT(IN) :: numPoints,bufferSize(3)
1451 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(6)
1452 REAL(KIND=8),
INTENT(IN) :: inMatrix(9*numpoints)
1453 REAL(KIND=8),
INTENT(INOUT) :: matrixDeterminant(numpoints)
1455 INTEGER(KIND=8) :: I, J, K
1456 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
1457 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
1459 istart = bufferinterval(1)
1460 iend = bufferinterval(2)
1461 xsize = buffersize(1)
1462 jstart = bufferinterval(3)
1463 jend = bufferinterval(4)
1464 kstart = bufferinterval(5)
1465 kend = bufferinterval(6)
1466 nplane = xsize * buffersize(2)
1469 zindex = (k-1)*nplane
1471 yzindex = zindex + (j-1)*xsize
1473 bufferindex = yzindex + i
1475 matrixdeterminant(bufferindex) = &
1476 inmatrix(bufferindex)* &
1477 (inmatrix(bufferindex+8*numpoints) * &
1478 inmatrix(bufferindex+4*numpoints)- &
1479 inmatrix(bufferindex+7*numpoints)* &
1480 inmatrix(bufferindex+5*numpoints))- &
1482 inmatrix(bufferindex+3*numpoints)* &
1483 (inmatrix(bufferindex+8*numpoints)* &
1484 inmatrix(bufferindex+numpoints) - &
1485 inmatrix(bufferindex+7*numpoints) * &
1486 inmatrix(bufferindex+2*numpoints)) + &
1488 inmatrix(bufferindex+6*numpoints)* &
1489 (inmatrix(bufferindex+5*numpoints)* &
1490 inmatrix(bufferindex+numpoints)- &
1491 inmatrix(bufferindex+4*numpoints)* &
1492 inmatrix(bufferindex+2*numpoints))
1500 SUBROUTINE determinant2x2(numPoints,bufferSize,bufferInterval,inMatrix,matrixDeterminant)
1502 INTEGER(KIND=8),
INTENT(IN) :: numPoints,bufferSize(2)
1503 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(4)
1504 REAL(KIND=8),
INTENT(IN) :: inMatrix(4*numpoints)
1505 REAL(KIND=8),
INTENT(INOUT) :: matrixDeterminant(numpoints)
1507 INTEGER(KIND=8) :: I, J, K
1508 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
1509 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
1511 istart = bufferinterval(1)
1512 iend = bufferinterval(2)
1513 xsize = buffersize(1)
1514 jstart = bufferinterval(3)
1515 jend = bufferinterval(4)
1516 nplane = xsize * buffersize(2)
1519 yindex = (j-1)*xsize
1521 bufferindex = yindex + i
1523 matrixdeterminant(bufferindex) = &
1524 (inmatrix(bufferindex)* &
1525 inmatrix(bufferindex+3*numpoints)) - &
1526 (inmatrix(bufferindex+numpoints)* &
1527 inmatrix(bufferindex+2*numpoints))
1534 SUBROUTINE metricsum4(numDim,numPoints,bufferSize,bufferInterval,&
1535 buf1,buf2,buf3,buf4,buf5,buf6,buf7,metricSum)
1537 INTEGER(KIND=4),
INTENT(IN) :: numDim
1538 INTEGER(KIND=8),
INTENT(IN) :: numPoints,bufferSize(numdim)
1539 INTEGER(KIND=8),
INTENT(IN) :: bufferInterval(2*numdim)
1540 REAL(KIND=8),
INTENT(IN) :: buf1(numpoints)
1541 REAL(KIND=8),
INTENT(IN) :: buf2(numpoints)
1542 REAL(KIND=8),
INTENT(IN) :: buf3(numpoints)
1543 REAL(KIND=8),
INTENT(IN) :: buf4(numpoints)
1544 REAL(KIND=8),
INTENT(IN) :: buf5(numpoints)
1545 REAL(KIND=8),
INTENT(IN) :: buf6(numpoints)
1546 REAL(KIND=8),
INTENT(IN) :: buf7(numpoints)
1547 REAL(KIND=8),
INTENT(INOUT) :: metricSum(numpoints)
1549 INTEGER(KIND=8) :: I, J, K
1550 INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
1551 INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
1553 istart = bufferinterval(1)
1554 iend = bufferinterval(2)
1555 xsize = buffersize(1)
1557 IF(numdim == 1)
THEN 1559 metricsum(i) = buf1(i)*buf4(i) - buf2(i)*buf3(i) + buf7(i)*(buf5(i)-buf6(i))
1561 ELSE IF(numdim == 2)
THEN 1562 jstart = bufferinterval(3)
1563 jend = bufferinterval(4)
1565 yindex = (j-1)*xsize
1567 bufferindex = yindex + i
1568 metricsum(bufferindex) = buf1(bufferindex)*buf4(bufferindex) - &
1569 buf2(bufferindex)*buf3(bufferindex) + &
1570 buf7(bufferindex)*(buf5(bufferindex)-buf6(bufferindex))
1573 ELSE IF(numdim == 3)
THEN 1574 jstart = bufferinterval(3)
1575 jend = bufferinterval(4)
1576 kstart = bufferinterval(5)
1577 kend = bufferinterval(6)
1578 nplane = xsize * buffersize(2)
1580 zindex = (k-1)*nplane
1582 yzindex = zindex + (j-1)*xsize
1584 bufferindex = yzindex + i
1585 metricsum(bufferindex) = buf1(bufferindex)*buf4(bufferindex) - &
1586 buf2(bufferindex)*buf3(bufferindex) + &
1587 buf7(bufferindex)*(buf5(bufferindex)-buf6(bufferindex))
subroutine applyoperatorv(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 assignmentyx(numDim, numPoints, bufferSize, bufferInterval, X, Y)
ASSIGNMENTYX point-wise operator performing Y = X.
subroutine ywxpy(numDim, numPoints, bufferSize, bufferInterval, W, X, Y)
YWXPY point-wise operator performing Y = WX + Y, where all are vectors.
subroutine assignmentyabsx(numDim, numPoints, bufferSize, bufferInterval, X, Y)
ASSIGNMENTYABSX point-wise operator performing X = scalar a.
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 determinant3x3(numPoints, bufferSize, bufferInterval, inMatrix, matrixDeterminant)
Computes determinant of 3x3 matrix.
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 yxy(numDim, numPoints, bufferSize, bufferInterval, X, Y)
YXY point-wise operator performing Y = XY (all vectors)
subroutine veclen(numDim, numPoints, bufferSize, bufferInterval, numComp, V, lenV)
VECLEN point-wise operator returning the length of a numComp-dimensional vector.
subroutine assignmentxa(numDim, numPoints, bufferSize, bufferInterval, a, X)
ASSIGNMENTXA point-wise operator performing X = scalar a.
subroutine applyoperatorblobs(numDim, dimSizes, numComponents, numPointsBuffer, opDir, numStencils, stencilSizes, stencilStarts, numStencilValues, stencilWeights, stencilOffsets, numPointsStencil, numPointsApply, stencilPoints, U, dU)
applyoperatorblobs applies an operator by applying each stencil in turn to all the points to which it...
subroutine yaxpby(numDim, numPoints, bufferSize, bufferInterval, a, b, X, Y)
YAXPBY point-wise operator performing Y = aX + bY (scalar a,b)
subroutine zxdoty(numDim, numPoints, bufferSize, bufferInterval, numComponents, X, Y, Z)
ZXDOTY numComponents-vector inner product Z = X * Y.
subroutine zawpxy(numDim, numPoints, bufferSize, bufferInterval, a, W, X, Y, Z)
ZAWPXY point-wise operator performing Z = aW + XY.
subroutine applysinglestencil(numDim, dimSizes, numComponents, numPointsBuffer, opDir, numPointsApply, applyPoints, stencilSize, stencilWeights, stencilOffsets, U, dU)
applysinglestencil applies an operator by applying a given stencil to the specified points ...
subroutine determinant2x2(numPoints, bufferSize, bufferInterval, inMatrix, matrixDeterminant)
Computes determinant of 2x2 matrix.
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 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.
subroutine zaxpy(numDim, numPoints, bufferSize, bufferInterval, a, X, Y, Z)
ZAXPY point-wise operator performing Z = aX + Y (scalar a)
subroutine yaxm1(numDim, numPoints, bufferSize, bufferInterval, a, X, Y)
YAXM1 point-wise operator performing Y = a/X (scalar a)
subroutine metricsum4(numDim, numPoints, bufferSize, bufferInterval, buf1, buf2, buf3, buf4, buf5, buf6, buf7, metricSum)
Computes buf1*buf4 - buf2*buf3 + buf7*(buf5 - buf6)
subroutine zaxpby(numDim, numPoints, bufferSize, bufferInterval, a, b, X, Y, Z)
ZAXPBY point-wise operator performing Z = aX + bY (scalar a,b)
subroutine xax(numDim, numPoints, bufferSize, bufferInterval, a, X)
XAX point-wise operator performing X = aX (scalar a)