LatNet Builder Manual  2.0.1-11
Software Package for Constructing Highly Uniform Point Sets
LatBuilder::Storage< LR, ET, COM, PLO > Class Template Reference

Storage policy. More...

#include <Storage.h>

Detailed Description

template<LatticeType LR, EmbeddingType ET, Compress COM, PerLevelOrder PLO = defaultPerLevelOrder<LR, ET>::Order>
class LatBuilder::Storage< LR, ET, COM, PLO >

Storage policy.

A storage policy indicates how kernel values are stored and represented in a vector. This template class acts as a selector for specialized templates, based on the type of lattice and on the type of compression.

  • For (simple) ordinary lattice rules with modulud \(n\): The kernel values are stored in the natural order: the ith value \(w_i\) is \(w(i/n)\). A Stride with parameter \(a \in \mathbb{N}\) is the mapping that maps an index \(i\) to \(a \times i \mod n\).
  • For a (simple) polynomnial lattice rule with modulus \(P(z)\): Polynomials modulo \(P(z)\) are identified with integers via the formula \(h=\sum a_j2^j\) where \(h(z) = \sum a_jz^j\). The kernel values are stored in the following order: the \(i^{\text{th}}\) value \(w_i\) is \(w(\nu_m(\frac{i(z)}{P(z)}))\). with \(i(z) = \sum a_jz^j\) where \(i=\sum a_j2^j\). A Stride with parameter \(q(z) \in \mathbb{Z}_2[z]\) is the mapping that maps a polynomial \(i(z)\) modulo \(P(z)\) with the polynomial \(h(z) = i(z)q(z) \mod P(z)\) .
  • For embedded ordinary lattice rules with modulus \(p^m\) for a prime \(p\):
    The kernel values are stored in \(m+1\) blocks: the \(k^{\text{th}}\) block ( \(k=0..m\)) is the set \(p^{m-k}U_{p^k}\). the \(k^{\text{th}}\) level is the concatenation of the first \(k\) blocks. The elements within each block can be ordered according to the inversed cyclic order of \(U_{p^k}\). i.e the block (ordered) elements are \(\{p^{m-k}g^{-l}, l=0..\varphi(p^k)-1 \}\) with \(g\) a generator of \(U_{p^k}\). This order permits to do fast CBC exploration. This order can be obtained by setting the PerLevelOrder template parameter to PerLevelOrder::CYCLIC. One can set PerLevelOrder to PerLevelOrder::BASIC, in this case, elements within each block are ordered in the non-decreasing order. PerLevelOrder::CYCLIC is set as the default order, the basic order was introduced especially for polynomial lattices, where the cyclic structure does not apply if \(m>1\).
  • For embedded polynomial lattice rules with modulus \(b(z)^m\) for an irreductible polynomial \(b(z)\): The kernel values are stored in \(m+1\) blocks: the \(k^{\text{th}}\) block ( \(k=0..m\)) is the set \(b(z)^{m-k}(\mathbb{Z}_2[z]/(b(z)^k))^*\). The \(k^{\text{th}}\) level is the concatenation of the first \(k\) blocks. If \(m=1\), we have two block with sizes 1 and \(2^{\deg(b(z))}-1\) and the elements within the second block can be ordered according to the inversed cyclic order of \((\mathbb{Z}_2[z]/(b(z)))^*\). i.e the block (ordered) elements are \(\{g^{-l}, l=0..\varphi(b(z))-1 \}\) with \(g\) a generator of \((\mathbb{Z}_2[z]/(b(z)))^*\). This order permits to do fast CBC exploration, and can be obtained by setting the PerLevelOrder template parameter to PerLevelOrder::CYCLIC. If \(m>1\), the cyclic structure does not apply and we have to set PerLevelOrder to PerLevelOrder::BASIC. In this case, elements of \((\mathbb{Z}_2[z]/(b(z)^k))^*\) are ordered according to the order given by the class GeneratingValues.
Examples:
quantiles.cc, tutorial/FilteredCBC.cc, tutorial/FilteredRCBC.cc, tutorial/MeritSeqCBC.cc, tutorial/MeritSeqCBCSignals.cc, tutorial/MeritSeqCoordUniform.cc, tutorial/MeritSeqFastCBC.cc, tutorial/MeritSeqNonCBC.cc, tutorial/Storage.cc, tutorial/WeightedFigureOfMerit.cc, tutorial/WeightedFigureOfMeritCBC.cc, and tutorial/WeightedFigureOfMeritSignals.cc.

The documentation for this class was generated from the following file: