Creating geomodels with Generalized Maps Marcus Apel, 2004 based on works of the Gocad Research Group, Nancy reference: J-L Mallet: « Geomodeling », Oxford University Press 2002 Reminders: How are objects defined? cellular partition: sub-division into cells in N-dimensions connectivity with other objects embedding: geometry in 3d space numerical properties cellular partition and connectivity - incidence graph describes all possible paths to go from a n-cell to a 0-cell, with only connecting k-cells to (k-1)-cells, n>k>0 incidence graph nodes Cells, edges CellViews incidence: cell C is an element of CellView w. 3 relationship classes in a GMap a cell Ci is i-adjacent to another cell Ck, iff a cell Ci is a sub-cell of Ck, iff k=i a (i-1)-cell incident to both can be found, or (i, k) are incident to at least one common (i+1)-cell example: 2 triangles (i,k=2) sharing an edge i<k Ci can be reached by descending the incidence graph example: polygon (k=2) with sub-cells edges (i=1) and vertices (i=0) the k*-adjacency of a i-cell Ci contains all k-cells Ck such that Ci is a subcell of Ck. example: all polyhedra (k=3) connected to a vertex (i=0) adjacency classes darts, involution, GMap a dart corresponds to a path (CellView) in the incidence graph adjacency relations are translated in relations between pairs of darts: a dart has N+1 ai functions (maps), defined from Ai adjacency relations: for example a0 connects each pair of darts (d1,d2): a0(d1)=d2; a0(d2)=d1 involution a N-GMap {D, (a0, ..., aN)} is a set D of darts with a set of N+1 ai involution functions incidence graph Simplified data structure of a GMap struct GMap{ Set<Dart*> d; } struct Dart{ Dart* alpha[N+1]; Embedding* emb[N+1]; } GMap - Example GMap{d1a0,d2a0,..., d3a1} // darts for 6+3 involutions Dart d1a0{*d2; *emb1}, F1 Dart d2a0{*d1; *emb2}, ... Embedding emb1{coordxyz, p}, ... E1 d2 E2 E3 V2 V3 d1 V1 Functions acting on a GMap the basic function: traversing the orbit of a dart d: iterating the set of darts that can be reached by a given set of ai involutions Basic operations on GMaps recursive subdivision: an GMap of dimension N may be thought of a set of GMaps of dimension N-1 sewn along cells of dimension N-2; (N-2)-cells are sewn (N-3)-cells; etc. until vertices are reached example: a volume can be represented by polyhedra sewn along their faces; a polyhedron is represented by its boundary polygons sewn along their edges. Basic operations on GMaps create new GMap delete GMap create isolated dart and add it to a GMap, involutions are initialized as ai(d)=d delete a dart from a GMap create an ai involution between 2 darts delete an ai involution between 2 darts Sew algorithm - create a N-GMap from (N-1)-cells 2 orbit traversals of the (N-1)-cells along which the N-cell will be sewn, and setting the involution sew(d1,d2,N) { for (d'1 in < a NO1 >(d1), d'2 in < a NO1 >(d2) ){ dispatchCellEmbedding(d'1,d'2); d'1->a[N]=d'2; d'2->a[N]=d'1; } } how does unsew work? Representing Objects with G-Maps: hierarchical GMaps with Frame 1) Represents the objects boundaries (Macro-topology) Representing Objects with G-Maps: hierarchical GMaps with Frame 2) Can be used to subdivide space in regions Representing Objects with G-Maps Representing 3d-Objects with G-Maps 3 glued surfaces along a radial line free edges a3(d) ≠ a2(d) glued edges a3(d) = a2(d) Construction of a model 1. 2. 3. 4. 5. create empty (N+1) dimensional model M create a cellular GMap-partition L(W) of the Ndimensional dividing wall W create Frame F(W) such that L(W) is the Lattice of F(W) and add W to model M repeat (2) and (3) for a set of N-dividing walls M=M(W1,..., Wi) if necessary, use the glue ("sew") operator to weld frames of the model M Building a Model with G-Maps (I) Building a Model with G-Maps (II) Building a Model with G-Maps (III) Building a Model with G-Maps (IV) Horizon Fault Region Strong points of G-Maps Strong mathematical basis - data structure - operators only 2 concepts to understand: darts and involution uncoupling of topology and geometry generically defined in N dimensions generic functions work for for N-cells more GMap – model examples