00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __deal2__identity_matrix_h
00013 #define __deal2__identity_matrix_h
00014
00015
00016 #include <deal.II/base/config.h>
00017 #include <deal.II/lac/exceptions.h>
00018
00019 DEAL_II_NAMESPACE_OPEN
00020
00069 class IdentityMatrix
00070 {
00071 public:
00078 IdentityMatrix ();
00079
00084 IdentityMatrix (const unsigned int n);
00085
00090 void reinit (const unsigned int n);
00091
00098 unsigned int m () const;
00099
00106 unsigned int n () const;
00107
00116 template <class VECTOR1, class VECTOR2>
00117 void vmult (VECTOR1 &out,
00118 const VECTOR2 &in) const;
00119
00128 template <class VECTOR1, class VECTOR2>
00129 void vmult_add (VECTOR1 &out,
00130 const VECTOR2 &in) const;
00131
00140 template <class VECTOR1, class VECTOR2>
00141 void Tvmult (VECTOR1 &out,
00142 const VECTOR2 &in) const;
00143
00144
00154 template <class VECTOR1, class VECTOR2>
00155 void Tvmult_add (VECTOR1 &out,
00156 const VECTOR2 &in) const;
00157 private:
00158
00163 unsigned int size;
00164 };
00165
00166
00167
00168
00169
00170 #ifndef DOXYGEN
00171
00172
00173 inline
00174 IdentityMatrix::IdentityMatrix ()
00175 :
00176 size (0)
00177 {}
00178
00179
00180
00181 inline
00182 IdentityMatrix::IdentityMatrix (const unsigned int n)
00183 :
00184 size (n)
00185 {}
00186
00187
00188
00189 inline
00190 void
00191 IdentityMatrix::reinit (const unsigned int n)
00192 {
00193 size = n;
00194 }
00195
00196
00197
00198 inline
00199 unsigned int
00200 IdentityMatrix::m () const
00201 {
00202 return size;
00203 }
00204
00205
00206
00207 inline
00208 unsigned int
00209 IdentityMatrix::n () const
00210 {
00211 return size;
00212 }
00213
00214
00215
00216 template <class VECTOR1, class VECTOR2>
00217 inline
00218 void
00219 IdentityMatrix::vmult (VECTOR1 &out,
00220 const VECTOR2 &in) const
00221 {
00222 Assert (out.size() == size, ExcDimensionMismatch (out.size(), size));
00223 Assert (in.size() == size, ExcDimensionMismatch (in.size(), size));
00224
00225 out = in;
00226 }
00227
00228
00229
00230 template <class VECTOR1, class VECTOR2>
00231 inline
00232 void
00233 IdentityMatrix::vmult_add (VECTOR1 &out,
00234 const VECTOR2 &in) const
00235 {
00236 Assert (out.size() == size, ExcDimensionMismatch (out.size(), size));
00237 Assert (in.size() == size, ExcDimensionMismatch (in.size(), size));
00238
00239 out += in;
00240 }
00241
00242
00243
00244 template <class VECTOR1, class VECTOR2>
00245 inline
00246 void
00247 IdentityMatrix::Tvmult (VECTOR1 &out,
00248 const VECTOR2 &in) const
00249 {
00250 Assert (out.size() == size, ExcDimensionMismatch (out.size(), size));
00251 Assert (in.size() == size, ExcDimensionMismatch (in.size(), size));
00252
00253 out = in;
00254 }
00255
00256
00257
00258 template <class VECTOR1, class VECTOR2>
00259 inline
00260 void
00261 IdentityMatrix::Tvmult_add (VECTOR1 &out,
00262 const VECTOR2 &in) const
00263 {
00264 Assert (out.size() == size, ExcDimensionMismatch (out.size(), size));
00265 Assert (in.size() == size, ExcDimensionMismatch (in.size(), size));
00266
00267 out += in;
00268 }
00269
00270
00271 #endif
00272
00275 DEAL_II_NAMESPACE_CLOSE
00276
00277 #endif
00278
00279