atlas  0.6
Classes | Functions
atlas::subquotient Namespace Reference

Classes

class  Subquotient
 
class  Subspace
 

Functions

template<size_t dim>
BitMatrix< dim > subquotientMap (const Subquotient< dim > &source, const Subquotient< dim > &dest, const BitMatrix< dim > &m)
 
template BitMatrix< constants::RANK_MAXsubquotientMap (const Subquotient< constants::RANK_MAX > &, const Subquotient< constants::RANK_MAX > &, const BitMatrix< constants::RANK_MAX > &)
 

Function Documentation

template<size_t dim>
BitMatrix< dim > atlas::subquotient::subquotientMap ( const Subquotient< dim > &  source,
const Subquotient< dim > &  dest,
const BitMatrix< dim > &  m 
)

Synopsis: puts in |msq| the matrix of the map induced by |m| at the subquotient level.

Precondition: |m| has |source.rank()| columns and |dest.rank()| rows, in other words it defines a map at the level of the ambient $Z/2Z$-vector spaces. Moreover it maps |source.space()| to |dest.space()| and |source.denominator()| to |dest.denominator()|. [This is a strong condition, which it is the caller's responsibility to ensure. It is not sufficient that |m| gives rise to a mathematically well-defined map between the subquotients; for instance while for any subspaces $A,B$ there is a canonical isomorphism between the subquotients $(A+B)/A$ and $B/(A B)$, the identity matrix might not produce such an isomorphism when applied from the former to the latter subquotient (although it would in the opposite direction). MvL]

The subquotient matrix will be expressed in terms of the canonical bases for the subquotients (which are made up of those elements of the basis of the larger subspace |space()| that are zero on the bits supporting the smaller subspace |denominator()|.) Therefore its size will be |source.dimension()| columns and |dest.dimension()| rows.

Algorithm: take the image through |m| of the subquotient basis in |source|; then project onto the subquotient basis in |dest|. Note that this procedure inspects neither |source.denominator()| nor |dest.space()|, but it does select using |source.support()| those basis vectors from |source.space()| that cannot be reduced modulo |source.denominator()|, forming a complementary space.

template BitMatrix<constants::RANK_MAX> atlas::subquotient::subquotientMap ( const Subquotient< constants::RANK_MAX > &  ,
const Subquotient< constants::RANK_MAX > &  ,
const BitMatrix< constants::RANK_MAX > &   
)