]> git.unchartedbackwaters.co.uk Git - francis/ofc.git/commitdiff
Handle origin of fields.
authorFrancis Russell <francis@unchartedbackwaters.co.uk>
Thu, 3 May 2012 15:40:26 +0000 (16:40 +0100)
committerFrancis Russell <francis@unchartedbackwaters.co.uk>
Thu, 3 May 2012 15:40:26 +0000 (16:40 +0100)
src/ofc/generators/onetep/DensePsincToReciprocal.scala
src/ofc/generators/onetep/FieldFragment.scala
src/ofc/generators/onetep/InnerProduct.scala
src/ofc/generators/onetep/Laplacian.scala
src/ofc/generators/onetep/PPDFunctionSet.scala
src/ofc/generators/onetep/ReciprocalToPsinc.scala
src/ofc/generators/onetep/ScaledField.scala

index 640be999d7cea2ebc25dc5db008faa8f1302c200..35c77e17759d90244671aa14d368f17d42750b3c 100644 (file)
@@ -25,6 +25,8 @@ class DensePsincToReciprocal(op: DensePsincFragment, indices: Map[NamedIndex, Ex
 
   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)
index 0129b94b180fee2b324261cb8a46ce25dd3fe554..9dabd65f7cdbea249fbd76c100081122d55424c8 100644 (file)
@@ -9,16 +9,18 @@ trait FieldFragment extends Fragment {
 
 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]]
 }
index bbbf3f31a922896a8ca6b595b8972e88afa7a595..c619b73fb20459b2cefaed62103f1cf6f2ac2c8c 100644 (file)
@@ -4,16 +4,20 @@ import ofc.codegen._
 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)
     }
   }
 
index 7d9766d936e56e6a76d354b2d50586d141e6d31e..ae7ab154b52e0c0e810971aaa2b22731bd19242e 100644 (file)
@@ -62,6 +62,8 @@ class Laplacian(op: Field)  extends Field {
 
     def getSize = opFragment.getSize
 
+    def getOrigin = opFragment.getOrigin
+
     def getBuffer = transformed
 
     def toPsinc = new ReciprocalToPsinc(this)
index 83c10e6c2017f671675888e6f91eebedc2a43d1f..cb0c111825da32a60d55f68c635051e5478bdb47 100644 (file)
@@ -106,9 +106,6 @@ class PPDFunctionSet(basisName: String, dataName: String, indices: Seq[NamedInde
     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)
   }
 
@@ -152,6 +149,21 @@ class PPDFunctionSet(basisName: String, dataName: String, indices: Seq[NamedInde
 
     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)
index e1384042be67cf5d73fa2ec2bf68645f54a50da7..f6b926367184cb202c03d7aa1cf3e202f6f0b44e 100644 (file)
@@ -25,5 +25,7 @@ class ReciprocalToPsinc(op: ReciprocalFragment) extends DensePsincFragment {
 
   def getSize = for (dim <- 0 to 2) yield OnetepTypes.FFTBoxInfo.public % OnetepTypes.FFTBoxInfo.totalPts(dim)
 
+  def getOrigin = op.getOrigin
+
   def getBuffer = fftbox
 }
index e90f0041ba26cc98ac899df44dad32100bca52fd..d48832719a3ce1354f71867776625f0ce88b973d 100644 (file)
@@ -48,6 +48,8 @@ class ScaledField(op: Field, factor: Scalar) extends Field {
 
     def getSize = opFragment.getSize
 
+    def getOrigin = opFragment.getOrigin
+
     def getBuffer = transformed
 
     def toReciprocal = new DensePsincToReciprocal(this, indices)