29 #ifndef _CHAINCON_EZ_SHI_H_ 30 #define _CHAINCON_EZ_SHI_H_ 38 #include "chomp/system/config.h" 54 template <
class SimCellT,
class ProdCellT>
55 inline void EZ_SHI (
const SimCellT &s1,
const SimCellT &s2,
60 throw "Different dimensions of cells for the SHI operator.";
62 for (
int q = 0; q < m; ++ q)
64 for (
int p = 0; p < m - q; ++ p)
67 std::vector<int> alpha (p + 1);
68 std::vector<int> beta (q);
76 sh.
get (alpha, beta, sig);
80 for (
int i = 0; i < q; ++ i)
82 SimCellT cell1new (cell1, m - i);
83 cell1. swap (cell1new);
86 SimCellT cell1new (cell1,
88 cell1. swap (cell1new);
90 for (
int i = 0; i < q; ++ i)
92 SimCellT cell1new (cell1,
93 -1 - (beta [i] + mBar));
94 cell1. swap (cell1new);
97 for (
int i = 0; i < p; ++ i)
99 SimCellT cell2new (cell2,
101 cell2. swap (cell2new);
103 for (
int i = 0; i <= p; ++ i)
105 SimCellT cell2new (cell2,
106 -1 - (alpha [i] + mBar));
107 cell2. swap (cell2new);
111 ProdCellT prod (cell1, cell2);
112 if (!prod. degenerate ())
126 template <
class SimCellT,
class ProdCellT,
class CoefT>
127 inline void EZ_SHI (
const SimCellT &s1,
const SimCellT &s2,
134 throw "Different dimensions of cells for the SHI operator.";
136 for (
int q = 0; q < m; ++ q)
138 for (
int p = 0; p < m - q; ++ p)
141 std::vector<int> alpha (p + 1);
142 std::vector<int> beta (q);
146 int mBar (m - p - q);
150 sh.
get (alpha, beta, sig);
154 for (
int i = 0; i < q; ++ i)
156 SimCellT cell1new (cell1, m - i);
157 cell1. swap (cell1new);
160 SimCellT cell1new (cell1,
162 cell1. swap (cell1new);
164 for (
int i = 0; i < q; ++ i)
166 SimCellT cell1new (cell1,
167 -1 - (beta [i] + mBar));
168 cell1. swap (cell1new);
171 for (
int i = 0; i < p; ++ i)
173 SimCellT cell2new (cell2,
175 cell2. swap (cell2new);
177 for (
int i = 0; i <= p; ++ i)
179 SimCellT cell2new (cell2,
180 -1 - (alpha [i] + mBar));
181 cell2. swap (cell2new);
186 if ((mBar + sig) & 1)
190 ProdCellT prod (cell1, cell2);
191 if (!prod. degenerate ())
212 template <
class ProdCellT>
215 EZ_SHI (s. getLeft (), s. getRight (), t);
221 template <
class ProdCellT,
class CoefT>
224 EZ_SHI (s. getLeft (), s. getRight (), t);
233 template <
class ProdCellT>
237 for (int_t n = 0; n < s. size (); ++ n)
240 EZ_SHI (s. getCell (n), result);
248 template <
class ProdCellT,
class CoefT>
252 for (int_t n = 0; n < s. size (); ++ n)
255 EZ_SHI (s. getCell (n), result);
256 result *= s. getCoef (n);
264 #endif // _CHAINCON_EZ_SHI_H_
An iterator of all the (p,q)-shuffles.
A Cartesian product of simplicial cells of arbitrary type.
A chain with coefficients in an arbitrary ring.
A tensor of chains with coefficients in an arbitrary commutative ring.
void EZ_SHI(const SimCellT &s1, const SimCellT &s2, tCombChain< ProdCellT > &t)
Computes the Shih operator on a product of two simplicial cells.
A combinatorial tensor (for coefficients in Z_2).