1 #ifndef DUNE_FEM_FIELDMATRIXCONVERTER_HH 2 #define DUNE_FEM_FIELDMATRIXCONVERTER_HH 6 #include <dune/common/fmatrix.hh> 17 template<
class VectorType,
class ConvertToType >
20 template<
class K,
int m >
26 template<
class K,
int n,
int m >
27 struct DenseMatVecTraits<
Fem::FieldMatrixConverter< FieldVector< K, n *m >, FieldMatrix< K, n, m > > >
30 typedef DenseMatVecTraits< FieldMatrix< K, n, m > >
Traits;
40 template<
class K,
int m >
41 struct DenseMatVecTraits<
Fem::FieldMatrixConverterRow< K, m > >
54 template<
class K,
int m >
55 class FieldMatrixConverterRow
56 :
public Dune::DenseVector< FieldMatrixConverterRow< K, m > >
58 typedef FieldMatrixConverterRow< K, m > This;
59 typedef Dune::DenseVector< FieldMatrixConverterRow< K, m > > Base;
64 using Base::operator=;
65 using Base::operator*;
79 for(
size_t i = 0; i < vec_size(); ++i )
80 vec_access( i ) = other[ i ];
84 template<
class Impl >
87 assert( other.size() == vec_size() );
88 for(
size_t i = 0; i < vec_size(); ++i )
89 vec_access( i ) = other[ i ];
96 assert( vec_size() == x.size() );
98 for( size_type i = 0; i < vec_size(); ++i )
99 result += vec_access( i ) * x[ i ];
105 K &
vec_access (
size_t i ) { assert( i < vec_size() );
return ptr_[ i ]; }
106 const K &
vec_access (
size_t i )
const { assert( i < vec_size() );
return ptr_[ i ]; }
116 template<
typename K,
int n,
int m >
118 :
public Dune::DenseMatrix< FieldMatrixConverter< FieldVector< K, n *m >, FieldMatrix< K, n, m > > >
120 typedef Dune::DenseMatrix< FieldMatrixConverter< FieldVector< K, n *m >, FieldMatrix< K, n, m > > > Base;
154 , mutableVec_( true )
159 : vec_( const_cast< InteralVectorType * >( &v ) )
161 , mutableVec_( false )
168 , mutableVec_( other.mutableVec_ )
174 assert( mutableVec_ );
177 mutableVec_ = other.mutableVec_;
184 assert( mutableVec_ );
185 for(
size_t i = 0; i < rows; ++i )
186 for(
size_t j = 0; j < cols; ++j )
187 (*vec_)[ i * cols + j ] = matrix[ i ][ j ];
193 assert( mutableVec_ );
194 for(
size_t i = 0; i < rows; ++i )
195 for(
size_t j = 0; j < cols; ++j )
196 (*vec_)[ i * cols + j ] += matrix[ i ][ j ];
205 for( size_type i = 0; i < n; ++i )
207 for( size_type j = 0; j < m; ++j )
208 s << a[ i ][ j ] <<
" ";
221 return row_reference( (&(*vec_)[ i * cols ]) );
227 return const_row_reference( (&(*vec_)[ i * cols ]) );
240 template<
class K,
int n,
int m >
244 for(
size_t i = 0; i < n; ++i )
245 for(
size_t j = 0; j < m; ++j )
246 A[ i ][ j ] = B[ i ][ j ];
249 template<
class K,
int n,
int m >
253 for(
size_t i = 0; i < n; ++i )
254 for(
size_t j = 0; j < m; ++j )
255 A[ i ][ j ] = B[ i ][ j ];
261 #endif // #ifndef DUNE_FEM_FIELDMATRIXCONVERTER_HH Base::row_type row_type
type of class return upon operator [] which behaves like a reference
Definition: fmatrixconverter.hh:129
K * container_type
Definition: fmatrixconverter.hh:44
Base::size_type size_type
Definition: fmatrixconverter.hh:62
size_t size_type
Definition: fmatrixconverter.hh:46
Traits::value_type value_type
Definition: fmatrixconverter.hh:32
Traits::container_type container_type
Definition: fmatrixconverter.hh:31
Definition: fmatrixconverter.hh:21
const_row_reference mat_access(size_type i) const
Definition: fmatrixconverter.hh:224
Fem::FieldMatrixConverterRow< K, m > row_reference
Definition: fmatrixconverter.hh:36
Base::const_row_reference const_row_reference
Definition: fmatrixconverter.hh:131
size_type mat_cols() const
Definition: fmatrixconverter.hh:216
K & vec_access(size_t i)
Definition: fmatrixconverter.hh:105
Fem::FieldMatrixConverterRow< K, m > const_row_reference
Definition: fmatrixconverter.hh:37
row_reference mat_access(size_type i)
Definition: fmatrixconverter.hh:218
InteralVectorType * vec_
Definition: fmatrixconverter.hh:231
size_type mat_rows() const
Definition: fmatrixconverter.hh:215
FieldMatrixConverterRow(K *ptr)
Definition: fmatrixconverter.hh:67
FieldMatrixConverter(InteralVectorType &v)
Definition: fmatrixconverter.hh:151
Definition: coordinate.hh:4
void istl_assign_to_fmatrix(FieldMatrix< K, n, m > &A, const Fem::FieldMatrixConverter< FieldVector< K, n *m >, FieldMatrix< K, n, m > > &B)
Definition: fmatrixconverter.hh:241
Double operator*(const Double &a, const Double &b)
Definition: double.hh:495
K block_type
export the type representing the components
Definition: fmatrixconverter.hh:137
K field_type
export the type representing the field
Definition: fmatrixconverter.hh:134
FieldMatrixConverter(const InteralVectorType &v)
Definition: fmatrixconverter.hh:158
Base::row_reference row_reference
Definition: fmatrixconverter.hh:130
K value_type
Definition: fmatrixconverter.hh:45
DenseMatVecTraits< FieldMatrix< K, n, m > > Traits
Definition: fmatrixconverter.hh:30
Fem::FieldMatrixConverter< FieldVector< K, n *m >, FieldMatrix< K, n, m > > derived_type
Definition: fmatrixconverter.hh:29
size_t vec_size() const
Definition: fmatrixconverter.hh:104
FieldVector< K, n *m > InteralVectorType
internal storage of matrix
Definition: fmatrixconverter.hh:124
FieldMatrixConverter(const FieldMatrixConverter &other)
Definition: fmatrixconverter.hh:165
Definition: fmatrixconverter.hh:18
const K & vec_access(size_t i) const
Definition: fmatrixconverter.hh:106
Fem::FieldMatrixConverterRow< K, m > derived_type
Definition: fmatrixconverter.hh:43
OutStreamInterface< StreamTraits > & operator<<(OutStreamInterface< StreamTraits > &out, const DiscreteFunctionInterface< Impl > &df)
write a discrete function into an output stream
Definition: discretefunction_inline.hh:375
std::size_t size_type
The type used for the index access and size operations.
Definition: fmatrixconverter.hh:140
Traits::row_type row_type
Definition: fmatrixconverter.hh:34
FieldMatrixConverterRow(const This &other)
Definition: fmatrixconverter.hh:73
bool mutableVec_
Definition: fmatrixconverter.hh:233
Traits::size_type size_type
Definition: fmatrixconverter.hh:33