include/deal.II/lac/identity_matrix.h

00001 //---------------------------------------------------------------------------
00002 //    @f$Id: identity_matrix.h 25345 2012-03-31 08:37:04Z bangerth @f$
00003 //
00004 //    Copyright (C) 2006, 2012 by the deal.II authors
00005 //
00006 //    This file is subject to QPL and may not be  distributed
00007 //    without copyright and license information. Please refer
00008 //    to the file deal.II/doc/license.html for the  text  and
00009 //    further information on this license.
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 // ------------------------- inline and template functions -------------
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

deal.II documentation generated on Tue May 22 2012 12:06:11 by doxygen 1.7.3