[Dune-devel] [Dune-Commit] [Commit] dune-common - 64df627: Implement read-only IdentityMatrix
Oliver Sander
sander at igpm.rwth-aachen.de
Tue Dec 3 11:32:31 CET 2013
Hi Christoph,
out of curiosity: what do you need such a matrix for?
Cheers,
Oliver
Am 03.12.2013 11:26, schrieb Christoph Gersbacher:
> New commit, appeared at Tue Dec 3 11:26:03 2013 +0100
> as part of the following ref changes:
>
> branch refs/heads/master updated from 79e8fa8 -> d58db46
>
> Browsable version: http://cgit.dune-project.org/repositories/dune-common/commit/?id=64df62745d93fbe6c380a039eebb5a3ac8f0da0c
>
> ======================================================================
>
> commit 64df62745d93fbe6c380a039eebb5a3ac8f0da0c
> Author: Christoph Gersbacher <christoph.gersbacher at mathematik.uni-freiburg.de>
> Date: Wed Oct 9 11:34:01 2013 +0200
>
> Implement read-only IdentityMatrix
>
> This implementation of an IdentityMatrix does not hold any data. It
> implements a reduced version of the DenseMatrix interface including a
> standard C++ cast operator to a Dune::FieldMatrix. This code illustrates
> the new forward capabilities of DenseMatrixAssigner.
>
> dune/common/CMakeLists.txt | 1 +
> dune/common/Makefile.am | 1 +
> dune/common/identitymatrix.hh | 160 ++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 162 insertions(+)
> create mode 100644 dune/common/identitymatrix.hh
>
>
>
> diff --git a/dune/common/CMakeLists.txt b/dune/common/CMakeLists.txt
> index 0075584..91ebd9e 100644
> --- a/dune/common/CMakeLists.txt
> +++ b/dune/common/CMakeLists.txt
> @@ -58,6 +58,7 @@ install(FILES
> genericiterator.hh
> gmpfield.hh
> hash.hh
> + identitymatrix.hh
> indent.hh
> interfaces.hh
> ios_state.hh
> diff --git a/dune/common/Makefile.am b/dune/common/Makefile.am
> index 189757a..4212515 100644
> --- a/dune/common/Makefile.am
> +++ b/dune/common/Makefile.am
> @@ -54,6 +54,7 @@ commoninclude_HEADERS = \
> genericiterator.hh \
> gmpfield.hh \
> hash.hh \
> + identitymatrix.hh \
> indent.hh \
> interfaces.hh \
> ios_state.hh \
> diff --git a/dune/common/identitymatrix.hh b/dune/common/identitymatrix.hh
> new file mode 100644
> index 0000000..646e398
> --- /dev/null
> +++ b/dune/common/identitymatrix.hh
> @@ -0,0 +1,160 @@
> +#ifndef DUNE_COMMON_IDENTITYMATRIX_HH
> +#define DUNE_COMMON_IDENTITYMATRIX_HH
> +
> +#include <dune/common/fmatrix.hh>
> +#include <dune/common/ftraits.hh>
> +#include <dune/common/math.hh>
> +#include <dune/common/std/constexpr.hh>
> +
> +/**
> + * \file
> + * \ingroup DenseMatVec
> + * \brief Implementation of an identity matrix that does not store
> + * any data.
> + * \author Christoph Gersbacher
> + */
> +
> +namespace Dune
> +{
> +
> + // IdentityMatrix
> + // --------------
> +
> + /** \class IdentityMatrix
> + *
> + * \ingroup DenseMatVec
> + *
> + * \brief Read-only identity matrix.
> + *
> + * Implementation of an identity matrix that does not store any data.
> + *
> + * \tparam K field type
> + * \tparam N dimension
> + */
> + template< class K, int N >
> + struct IdentityMatrix
> + {
> + /** \brief field type */
> + typedef K field_type;
> + /** \brief size type */
> + typedef std::size_t size_type;
> +
> + /** \brief return number of rows */
> + DUNE_CONSTEXPR size_type rows () const { return N; }
> + /** \brief return number of columns */
> + DUNE_CONSTEXPR size_type cols () const { return N; }
> +
> + /** \copydoc Dune::DenseMatrix::mv */
> + template< class X, class Y >
> + void mv ( const X &x, Y &y ) const
> + {
> + y = x;
> + }
> +
> + /** \copydoc Dune::DenseMatrix::mtv */
> + template< class X, class Y >
> + void mtv ( const X &x, Y &y ) const
> + {
> + y = x;
> + }
> +
> + /** \copydoc Dune::DenseMatrix::umv */
> + template< class X, class Y >
> + void umv ( const X &x, Y &y ) const
> + {
> + y += x;
> + }
> +
> + /** \copydoc Dune::DenseMatrix::umtv */
> + template< class X, class Y >
> + void umtv ( const X &x, Y &y ) const
> + {
> + y += x;
> + }
> +
> + /** \copydoc Dune::DenseMatrix::umhv */
> + template< class X, class Y >
> + void umhv ( const X &x, Y &y ) const
> + {
> + y += x;
> + }
> +
> + /** \copydoc Dune::DenseMatrix::mmv */
> + template< class X, class Y >
> + void mmv ( const X &x, Y &y ) const
> + {
> + y -= x;
> + }
> +
> + /** \copydoc Dune::DenseMatrix::mmtv */
> + template< class X, class Y >
> + void mmtv ( const X &x, Y &y ) const
> + {
> + y -= x;
> + }
> +
> + /** \copydoc Dune::DenseMatrix::mmhv */
> + template< class X, class Y >
> + void mmhv ( const X &x, Y &y ) const
> + {
> + y -= x;
> + }
> +
> + /** \copydoc Dune::DenseMatrix::usmv */
> + template< class X, class Y >
> + void usmv ( const field_type &alpha, const X &x, Y &y ) const
> + {
> + y.axpy( alpha, x );
> + }
> +
> + /** \copydoc Dune::DenseMatrix::usmtv */
> + template< class X, class Y >
> + void usmtv ( const field_type &alpha, const X &x, Y &y ) const
> + {
> + y.axpy( alpha, x );
> + }
> +
> + /** \copydoc Dune::DenseMatrix::usmhv */
> + template< class X, class Y >
> + void usmhv ( const field_type &alpha, const X &x, Y &y ) const
> + {
> + y.axpy( alpha, x );
> + }
> +
> + /** \copydoc Dune::DenseMatrix::frobenius_norm */
> + typename FieldTraits< field_type >::real_type frobenius_norm () const
> + {
> + return std::sqrt( frobenius_norm2() );
> + }
> +
> + /** \copydoc Dune::DenseMatrix::frobenius_norm2 */
> + typename FieldTraits< field_type >::real_type frobenius_norm2 () const
> + {
> + return FieldTraits< field_type >::real_type( N );
> + }
> +
> + /** \copydoc Dune::DenseMatrix::infinity_norm */
> + typename FieldTraits< field_type >::real_type infinity_norm () const
> + {
> + return FieldTraits< field_type >::real_type( 1 );
> + }
> +
> + /** \copydoc Dune::DenseMatrix::infinity_norm_real */
> + typename FieldTraits< field_type >::real_type infinity_norm_real () const
> + {
> + return FieldTraits< field_type >::real_type( 1 );
> + }
> +
> + /** \brief cast to FieldMatrix */
> + operator FieldMatrix< field_type, N, N > () const
> + {
> + FieldMatrix< field_type, N, N > fieldMatrix( 0 );
> + for( int i = 0; i < N; ++i )
> + fieldMatrix[ i ][ i ] = field_type( 1 );
> + return fieldMatrix;
> + }
> + };
> +
> +} // namespace Dune
> +
> +#endif // #ifndef DUNE_COMMON_IDENTITYMATRIX_HH
>
> _______________________________________________
> Dune-Commit mailing list
> Dune-Commit at dune-project.org
> http://lists.dune-project.org/mailman/listinfo/dune-commit
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 551 bytes
Desc: OpenPGP digital signature
URL: <https://lists.dune-project.org/pipermail/dune-devel/attachments/20131203/e9e39cd7/attachment.sig>
More information about the Dune-devel
mailing list