29 #ifndef _CHAINCON_CUBPRODUCT_H_ 30 #define _CHAINCON_CUBPRODUCT_H_ 39 #include "chomp/system/config.h" 40 #include "chomp/struct/hashsets.h" 56 template <
class CubCellT,
class SetT>
59 using chomp::homology::sbug;
61 typedef typename SetT::value_type ProdT;
62 typedef typename ProdT::CellType SimCellT;
63 typedef typename CubCellT::CoordType CoordT;
68 int spaceDim (q. spaceDim ());
69 std::vector<tSimplSet<SimCellT> > edgeComplexes (spaceDim);
70 for (
int i = 0; i < spaceDim; ++ i)
73 coords [0] = q. left (i);
74 coords [1] = q. right (i);
75 SimCellT cell (1, coords);
76 edgeComplexes [i]. add (cell);
77 edgeComplexes [i]. addFaces (1);
78 edgeComplexes [i]. addDegenerate (0, spaceDim);
82 std::vector<int_t> counters (spaceDim);
83 std::vector<int_t> maxCounters (spaceDim);
84 for (
int i = 0; i < spaceDim; ++ i)
85 maxCounters [i] = edgeComplexes [i]. size ();
91 for (
int dim = 0; dim <= spaceDim; ++ dim)
95 for (
int cur = 0; cur < spaceDim; ++ cur)
98 while ((counters [cur] < maxCounters [cur]) &&
99 (edgeComplexes [cur] [counters [cur]].
104 if (counters [cur] >= maxCounters [cur])
105 throw "Missing cells in cube2product init.";
111 while ((counters [cur] < maxCounters [cur]) &&
112 (edgeComplexes [cur] [counters [cur]].
117 while (counters [cur] >= maxCounters [cur])
120 while ((counters [cur] < maxCounters [cur]) &&
121 (edgeComplexes [cur] [counters [cur]].
126 if (counters [cur] >= maxCounters [cur])
127 throw "Missing cells in cube2product.";
132 while ((counters [cur] < maxCounters [cur]) &&
133 (edgeComplexes [cur] [counters [cur]].
145 ProdT prodCell (edgeComplexes [0] [counters [0]]);
146 for (
int i = 1; i < spaceDim; ++ i)
150 ProdT prodNew (prodCell, ProdT
151 (edgeComplexes [i] [counters [i]]));
152 prodCell. swap (prodNew);
154 cells. add (prodCell);
165 #endif // _CHAINCON_CUBPRODUCT_H_ A Cartesian product of simplicial cells of arbitrary type.
void cube2product(const CubCellT &q, SetT &cells)
Transforms an elementary cube into a simplicial set that represents the Cartesian product of the simp...