QECellStructure.mesa
Last Edited by: Arnon, May 3, 1986 3:53:47 pm PDT
DIRECTORY
Rope,
IO,
AlgebraClasses,
Ints,
BigRats,
RatIntervals,
Variables,
Polynomials,
AlgebraicNumbers,
Vectors,
Sequences,
Formulas,
SamplePoints,
CoveringSets;
QECellStructure: CEDAR DEFINITIONS
~ BEGIN OPEN AC: AlgebraClasses, BR: BigRats, RI: RatIntervals, VARS: Variables, AN: AlgebraicNumbers, SEQ: Sequences, POL: Polynomials, QFF: Formulas, SP: SamplePoints, CS: CoveringSets;
Cell Representation
Cell: TYPE = AC.Object;
CellIndex: TYPE = Vectors.Vector; -- of Ints.Int
Signature: TYPE = Vectors.Vector; -- of FormulaOperators.Operators
CellData: TYPE = REF CellDataRec;
CellDataRec: TYPE = RECORD [
cad: AC.Object ← NIL, -- access to the cad to which this cell belongs
dimension: Ints.Int, -- = sum of parities of index components
index: CellIndex, -- length of index (= cad.dimension) is dimension r of ambient space
basisSignature: Signature ← NIL, -- signature with respect to cad.basis
inputSignature: Signature ← NIL, -- signature with respect to cad.inputPolynomials
samplePoint: SP.SamplePoint ← NIL,
definingFormula: QFF.Formula ← NIL,
coveringSet: CS.CoveringSet ← NIL,
boundary: SEQ.Sequence ← NIL, -- of the Cells that comprise this Cell's boundary, in lexicographic order (for binary searching). Assumes that the Cad has the boundary property.
boundaryCoveringSet: CS.CoveringSet ← NIL, -- a CoveringSet that "fills in the gap" between a cell and its boundary. At this time we only offer complete boundaryCoveringSets, e.g. not the fill-in between a cell and just one of its adjacent cells
inBoundary: SEQ.Sequence ← NIL, -- of the Cells in whose boundaries this Cell is contained, in lexicographic order (for binary searching). Assumes that the Cad has the boundary property. Taken together, boundary and inBoundary comprise the set of all Cells adjacent to this one.
look: REF ANYNIL -- rendering parameters, e.g. color, "fatness"
abstractVertex: Graphs.Vertex ← Graphs.nullVertex,
primarySignature: Signature ← NIL, -- with respect to cad.primaryPolynomials
primaryRegion: NAT ← 0, -- which signed component wrt primarySignature
secondarySignature: Signature ← NIL, -- with respect to cad.secondaryPolynomials
secondaryRegion: NAT ← 0, -- which signed component wrt secondarySignature
extensionData: ExtensionData ← NIL, -- needed by current E^3 adjacency algorithm
identicallyZeroBasisElements: SEQ.Sequence ← NIL, -- of polynomials, elements of cad.basis which are identically zero on this cell; currently used only for degenerate 0-cells in E^2.
sectionDefiningPolynomial: POL.Polynomial ← NIL, -- possibly nonNIL for sections only; r-variate integral polynomial whose variety contains it (used by display)
sectionDefiningPolynomialRoot: NAT ← 0, -- which real root of sectionDefiningPolynomial is this section (over base of this stack) (used by display)
];
Instance Data for Cell Structures
CellStructureData: TYPE = REF CellStructureDataRec;
CellStructureDataRec: TYPE = RECORD [
samplePointVariable: Variables.Variable, -- = variable of appropriate Sample Point Structure, i.e. variable in terms of which the minimal polynomials of sample point primitive elements will be expressed, and so also SamplePoint coordinates
formulaPolyRing: AC.Object -- for the polynomials occurring in cell defining formulas. Length[allVariables] of this polynomial ring = ambientSpaceDimension of cell = ambientSpaceDimension of appropriate Covering Set Structure = dimension of appropriate Sample Point Structure.
];
Cell Structure Ops
MakeCellStructure: AC.BinaryOp;
arguments are samplePointVariable: Variables.Variable and formulaPolyRing: PolynomialStructure
PrintName: AC.ToRopeOp;
ShortPrintName: AC.ToRopeOp;
SamplePointVariable: AC.UnaryOp;
selector: return the samplePointVariable characterizing this particular Cell Structure
FormulaPolyRing: AC.UnaryOp;
selector: return the formulaPolyRing characterizing this particular Cell Structure
AmbientSpaceDimension: AC.UnaryOp;
selector: return the ambient Space Dimension (as an Ints.Int) for this particular Cell Structure
IsCellStructure: AC.UnaryPredicate;
Conversion and IO
Recast: AC.BinaryOp;
CanRecast: AC.BinaryPredicate;
ToExpr: AC.ToExprOp;
LegalFirstChar: AC.LegalFirstCharOp;
Read: AC.ReadOp;
FromRope: AC.FromRopeOp;
ToRope: AC.ToRopeOp;
Write: AC.WriteOp;
Selectors
Cad: AC.UnaryOp;
Dimension: AC.UnaryOp;
Index: AC.UnaryOp;
BasisSignature: AC.UnaryOp;
SamplePoint: AC.UnaryOp;
DefiningFormula: AC.UnaryOp;
Boundary: AC.UnaryOp;
CoveringSet: AC.UnaryOp;
BoundingBox: AC.UnaryOp;
of cell covering set, if any
Color: AC.UnaryOp;
Operations
SetCad: AC.BinaryOp;
Args are a Cell and a Cad. cad field of Cell set to second arg.
ComputeDimension: AC.UnaryOp;
Arg is cell index, output is its dimension as an Ints.Int.
DimensionTwoOrLess: AC.UnaryPredicate;
Arg is Cell, returns true if dimension is 2 or less.
DimensionTwo: AC.UnaryPredicate;
Arg is Cell, returns true if dimension = 2.
DimensionOneOrLess: AC.UnaryPredicate;
Arg is Cell, returns true if dimension is 1 or less.
DimensionOne: AC.UnaryPredicate;
Arg is Cell, returns true if dimension = 1.
DimensionZero: AC.UnaryPredicate;
Arg is Cell, returns true if dimension = 0.
IsSection: AC.UnaryPredicate;
Arg is Cell, returns true if a section.
IsSector: AC.UnaryPredicate;
Arg is Cell, returns true if a sector.
MakeBoundaryCoveringSet: AlgebraClasses.UnaryOp;
Input is a Cell. Returns a CoveringSet that "fills in the gap" between the input Cell and its boundary. It is assumed that for each pair of CoveringSets of the input Cell and one of its adjacent (boundary) Cells, that one of the CoveringSets is a "refinement" of the other.
ModifyCoveringSet: AlgebraClasses.BinaryOp;
Probably need to be multiple routines here for different modifications. Intended to do things like refine a covering set, perhaps adaptively according to curvature.
END.