[Dune] [Dune-Commit] dune-common r5532 - trunk/common
Andreas Dedner
dedner at mathematik.uni-freiburg.de
Fri May 29 13:00:12 CEST 2009
The problem of fmatrix being a part of dune-common and heavily
used in dune-grid and at the same time being an interface class of
dune-istl is an unfortunate difficulty;
but asking people forced to use fmatrix
(due to the dune-grid interface) to port a small addition to
fmatrix to the dune-istl matricies
(which we hardly use and do not know anything about),
is asking a bit much in my opinion. FMatrix is used in dune-grid not as
an interface class but as the fixed matrix implementation!
And by the way the documentation does not state that this is an
interface class - and an interface class should not contain the
implementation...
If fmatrix has a method mv and umv
and a method umtv then anybody would expect it to have a method
mtv, would you not agree? That is the only thing we added.
If you think that using a work around like Roberts
FMatrixHelp::multAssignTransposed (which does exactly the mtv operation
is the better approach then we can discuss this...
Andreas
Markus Blatt wrote:
> Hi,
>
> despite living in dune-common, the interface of fmatrix belongs to
> ISTL (at least the one for matrix-vector operations=. If you really
> need this method, you (or some volunteer) should also implement it in all
> ISTL matrices to avoid future surprises.
>
> BTW: I am always suprised how fast my fellow developers are in adding
> and implementing interface changes to core modules besides dune-grid.
>
> Regards,
>
> Markus
>
> On Fri, May 29, 2009 at 10:14:02AM +0200, mnolte at dune-project.org wrote:
>> Author: mnolte
>> Date: 2009-05-29 10:14:02 +0200 (Fri, 29 May 2009)
>> New Revision: 5532
>>
>> Modified:
>> trunk/common/fmatrix.hh
>> Log:
>> add missing method mtv (mv and umtv exist, so mtv should exist, too)
>>
>>
>> Modified: trunk/common/fmatrix.hh
>> ===================================================================
>> --- trunk/common/fmatrix.hh 2009-05-29 08:12:40 UTC (rev 5531)
>> +++ trunk/common/fmatrix.hh 2009-05-29 08:14:02 UTC (rev 5532)
>> @@ -294,13 +294,32 @@
>> if (x.N()!=M()) DUNE_THROW(FMatrixError,"index out of range");
>> if (y.N()!=N()) DUNE_THROW(FMatrixError,"index out of range");
>> #endif
>> - for (size_type i=0; i<n; ++i)
>> + for (size_type i=0; i<n; ++i)
>> + {
>> + y[i] = 0;
>> + for (size_type j=0; j<m; j++)
>> + y[i] += (*this)[i][j] * x[j];
>> + }
>> + }
>> +
>> + //! y = A^T x
>> + template< class X, class Y >
>> + void mtv ( const X &x, Y &y ) const
>> {
>> - y[i] = 0;
>> - for (size_type j=0; j<m; j++)
>> - y[i] += (*this)[i][j] * x[j];
>> +#ifdef DUNE_FMatrix_WITH_CHECKING
>> + assert( &x != &y );
>> + if( x.N() != N() )
>> + DUNE_THROW( FMatrixError, "Index out of range." );
>> + if( y.N() != M() )
>> + DUNE_THROW( FMatrixError, "Index out of range." );
>> +#endif
>> + for( size_type i = 0; i < m; ++i )
>> + {
>> + y[ i ] = 0;
>> + for( size_type j = 0; j < n; ++j )
>> + y[ i ] += (*this)[ j ][ i ] * x[ j ];
>> + }
>> }
>> - }
>>
>> //! y += A x
>> template<class X, class Y>
>>
>>
>> _______________________________________________
>> Dune-Commit mailing list
>> Dune-Commit at dune-project.org
>> http://lists.dune-project.org/mailman/listinfo/dune-commit
>>
>
> _______________________________________________
> Dune mailing list
> Dune at dune-project.org
> http://lists.dune-project.org/mailman/listinfo/dune
More information about the Dune
mailing list