atlas  0.6
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 atlas::subquotient::subquotientMap ( const Subquotient< constants::RANK_MAX > & , const Subquotient< constants::RANK_MAX > & , const BitMatrix< constants::RANK_MAX > & )