def getSize = for (dim <- 0 to 2) yield OnetepTypes.FFTBoxInfo.public % OnetepTypes.FFTBoxInfo.totalPts(dim)
+ def getOrigin = op.getOrigin
+
def getBuffer = reciprocalBox
def toPsinc = new ReciprocalToPsinc(this)
trait PsincFragment extends FieldFragment {
def toPsinc = this
- def getSize : Seq[Expression[IntType]]
}
trait DensePsincFragment extends PsincFragment {
def getBuffer : Expression[ArrayType[FloatType]]
def toDensePsinc = this
+ def getSize : Seq[Expression[IntType]]
+ def getOrigin : Seq[Expression[IntType]]
}
trait ReciprocalFragment extends FieldFragment {
def toReciprocal = this
def getSize : Seq[Expression[IntType]]
+ def getOrigin : Seq[Expression[IntType]]
def getBuffer : Expression[ArrayType[ComplexType]]
}
class InnerProduct(left: Field, right: Field) extends Scalar {
class LocalFragment(left: FieldFragment, right: FieldFragment) extends ScalarFragment {
+ val leftDense = left.toDensePsinc
+ val rightDense = right.toDensePsinc
+
def setup(context: GenerationContext) {
- left.setup(context)
- right.setup(context)
+ leftDense.setup(context)
+ rightDense.setup(context)
+
+ leftDense.teardown(context)
+ rightDense.teardown(context)
}
def getValue = throw new ofc.UnimplementedException("rargh!")
def teardown(context: GenerationContext) {
- left.teardown(context)
- right.teardown(context)
}
}
def getSize = opFragment.getSize
+ def getOrigin = opFragment.getOrigin
+
def getBuffer = transformed
def toPsinc = new ReciprocalToPsinc(this)
def setup(context: GenerationContext) {}
def teardown(context: GenerationContext) {}
def toReciprocal : ReciprocalFragment = toDensePsinc.toReciprocal
-
- //FIXME: implement me!
- def getSize = throw new UnimplementedException("Implement me!")
def toDensePsinc = new LocalDense(parent, indices)
}
def getSize = for (dim <- 0 to 2) yield OnetepTypes.FFTBoxInfo.public % OnetepTypes.FFTBoxInfo.totalPts(dim)
+ private def getTightBoxOrigin = for (dim <- 0 to 2) yield {
+ import OnetepTypes._
+ val startPPD = tightbox % TightBox.startPPD(dim) - 1
+ val startPPDPoint = startPPD * (CellInfo.public % CellInfo.ppdWidth(dim))
+ val startPoint = startPPDPoint + tightbox % TightBox.startPts(dim)
+ startPoint
+ }
+
+ def getOrigin = {
+ val tightBoxOrigin = getTightBoxOrigin
+
+ for (dim <- 0 to 2) yield
+ tightBoxOrigin(dim) - fftboxOffset(dim)
+ }
+
def getBuffer = fftbox
def toReciprocal = new DensePsincToReciprocal(this, indices)
def getSize = for (dim <- 0 to 2) yield OnetepTypes.FFTBoxInfo.public % OnetepTypes.FFTBoxInfo.totalPts(dim)
+ def getOrigin = op.getOrigin
+
def getBuffer = fftbox
}
def getSize = opFragment.getSize
+ def getOrigin = opFragment.getOrigin
+
def getBuffer = transformed
def toReciprocal = new DensePsincToReciprocal(this, indices)