}
object CellInfo extends StructType {
+ val public = new NamedUnboundVarSymbol[StructType]("pub_cell", OnetepTypes.CellInfo)
val ppdWidth = {for (dim <- 1 to 3) yield new FieldSymbol[IntType]("n_pt"+dim)}.toSeq
val numPPDs = {for (dim <- 1 to 3) yield new FieldSymbol[IntType]("n_ppds_a"+dim)}.toSeq
val pointsInPPD = new FieldSymbol[IntType]("n_pts")
}
object FFTBoxInfo extends StructType {
+ val public = new NamedUnboundVarSymbol[StructType]("pub_fftbox", FFTBoxInfo)
val totalPts = {for (dim <- 1 to 3) yield new FieldSymbol[IntType]("total_pt"+dim)}.toSeq
def getFortranAttributes = Set("type(FFTBOX_INFO)")
}
import ofc.codegen._
object PPDFunctionSet {
- private val pubCell = new NamedUnboundVarSymbol[StructType]("pub_cell", OnetepTypes.CellInfo)
-
private class SphereIndex(name: String, value: Expression[IntType]) extends DiscreteIndex {
def getName = name
def getValue = value
val data = new NamedUnboundVarSymbol[ArrayType[FloatType]](dataName, new ArrayType[FloatType](1))
val numSpheres = basis % FunctionBasis.num
- val ppdWidths = for(dim <- 0 to 2) yield pubCell % CellInfo.ppdWidth(dim)
- val cellWidthInPPDs = for(dim <- 0 to 2) yield pubCell % CellInfo.numPPDs(dim)
+ val ppdWidths = for(dim <- 0 to 2) yield CellInfo.public % CellInfo.ppdWidth(dim)
+ val cellWidthInPPDs = for(dim <- 0 to 2) yield CellInfo.public % CellInfo.numPPDs(dim)
val producer = new ProducerStatement
val sphereIndex = producer.addIteration("sphere_index", 1, numSpheres)
// TODO: We explicitly convert to Expression[IntType] here since we don't promote both sides of the addition for ppdDataIndex.
val ppdDataStart : Expression[IntType] =
- producer.addExpression("ppd_data_start", (sphere % Sphere.offset) + (ppdIndex-1) * (pubCell % CellInfo.pointsInPPD))
+ producer.addExpression("ppd_data_start", (sphere % Sphere.offset) + (ppdIndex-1) * (CellInfo.public % CellInfo.pointsInPPD))
val ppdDataIndex = producer.addExpression("ppd_data_index", ppdDataStart
- + (ppdIndices(2)-1) * (pubCell % CellInfo.ppdWidth(1)) * (pubCell % CellInfo.ppdWidth(0))
- + (ppdIndices(1)-1) * (pubCell % CellInfo.ppdWidth(0))
+ + (ppdIndices(2)-1) * (CellInfo.public % CellInfo.ppdWidth(1)) * (CellInfo.public % CellInfo.ppdWidth(0))
+ + (ppdIndices(1)-1) * (CellInfo.public % CellInfo.ppdWidth(0))
+ (ppdIndices(0)-1))
val dataValue = producer.addExpression("data", data.readAt(ppdDataIndex))
import ofc.codegen._
object SpatialRestriction {
- private val pubFFTBox = new NamedUnboundVarSymbol[StructType]("pub_fftbox", OnetepTypes.FFTBoxInfo)
+ import OnetepTypes._
+
+ private val pubFFTBoxWidth = for (dim <- 0 to 2) yield FFTBoxInfo.public % FFTBoxInfo.totalPts(dim)
+ private val ppdWidth = for(dim <- 0 to 2) yield CellInfo.public % CellInfo.ppdWidth(dim)
}
class SpatialRestriction(op: IterationSpace, function: BindingIndex) extends IterationSpace {