Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages   Examples  

CTBdot.icc

Go to the documentation of this file.
00001 
00006 /*----------------------------------------------------------------------------*/
00007 /* C Tool Box: Designed and implemented by:                                   */
00008 /*    Walter F.J. Mueller   Gesellschaft fuer Schwerionenforschung (GSI)      */
00009 /*                          Planckstrasse 1, D-64291 Darmstadt, Germany       */
00010 /*                  Email:  W.F.J.Mueller@gsi.de                              */
00011 /*                  WWW:    http://www-kp3.gsi.de/www/kp3/people/mueller.html */
00012 /*----------------------------------------------------------------------------*/
00013 
00014 #include "CTBtraits.hxx"
00015 #include "CTBnum.hxx"
00016 #include "CTBexceptionIndexRange.hxx"
00017 #include "CTBexceptionConformity.hxx"
00018 
00019 //------------------------------------------+-----------------------------------
00028 template <class T>
00029 inline T CTBdot(const CTBvector<T>& v1, const CTBvector<T>& v2)
00030 {
00031   const T* p_v1 = v1;
00032   const T* p_v2 = v2;
00033   CTBtraits<T>::Sum_t f_sum = 0.;
00034 
00035 #ifdef CTB__ConformityCheck
00036   CTBint n = v1.Size();
00037   if (n != v2.Size())
00038     throw CTBexceptionConformity(n, v2.Size(),
00039                                  "CTBdot(CTBvector&,CTBvector&)");
00040 #else
00041   CTBint n = CTBmin(v1.Size(), v2.Size());
00042 #endif
00043 
00044   for (CTBint i = 0; i < n; i++) f_sum += *p_v1++ * *p_v2++;
00045   return f_sum;
00046 }
00047 
00048 //------------------------------------------+-----------------------------------
00057 template <class T>
00058 inline T CTBdot(const CTBvector<T>& v1, const CTBvector<T>& v2,
00059                 CTBint i_beg, CTBint i_end)
00060 {
00061   const T* p_v1 = &v1(i_beg);
00062   const T* p_v2 = &v2(i_beg);
00063   CTBtraits<T>::Sum_t f_sum = 0.;
00064 
00065 #ifdef CTB__IndexCheck
00066   CTBint n = CTBmin(v1.Size(), v2.Size());
00067   if (i_end >= i_beg && (i_end < 0 || i_end >= n)) 
00068     throw CTBexceptionIndexRange(i_end,n,
00069                                  "CTBdot(CTBvector&,CTBvector&,CTBint,CTBint)");
00070 #endif
00071 
00072   for (CTBint i = i_beg; i <= i_end; i++) f_sum += *p_v1++ * *p_v2++;
00073   return f_sum;
00074 }
00075 
00076 //------------------------------------------+-----------------------------------
00087 template <class T>
00088 inline T CTBdot(const CTBmatrix<T>& m, CTBint i_row, const CTBvector<T>& v)
00089 {
00090   const T* p_m = &m(i_row,0);
00091   const T* p_v = v;
00092   CTBtraits<T>::Sum_t f_sum = 0.;
00093 
00094 #ifdef CTB__ConformityCheck
00095   CTBint n = m.NColumn();
00096   if (n != v.Size())
00097     throw CTBexceptionConformity(n, v.Size(),
00098                                  "CTBdot(CTBmatrix&,CTBint,CTBvector&)");
00099 #else
00100   CTBint n = CTBmin(m.NColumn(), v.Size());
00101 #endif
00102 
00103   for (CTBint i = 0; i < n; i++) f_sum += *p_m++ * *p_v++;
00104   return f_sum;
00105 }
00106 
00107 //------------------------------------------+-----------------------------------
00116 template <class T>
00117 inline T CTBdot(const CTBmatrix<T>& m, CTBint i_row, const CTBvector<T>& v,
00118                 CTBint i_beg, CTBint i_end)
00119 {
00120   const T* p_m = &m(i_row,i_beg);
00121   const T* p_v = &v(i_beg);
00122   CTBtraits<T>::Sum_t f_sum = 0.;
00123 
00124 #ifdef CTB__IndexCheck
00125   CTBint n = CTBmin(m.NColumn(), v.Size());
00126   if (i_end >= i_beg && (i_end < 0 || i_end >= n))
00127     throw CTBexceptionIndexRange(i_end,n,
00128             "CTBdot(CTBmatrix&,CTBint,CTBvector&,CTBint,CTBint)");
00129 #endif
00130 
00131   for (CTBint i = i_beg; i <= i_end; i++) f_sum += *p_m++ * *p_v++;
00132   return f_sum;
00133 }
00134 
00135 //------------------------------------------+-----------------------------------
00146 template <class T>
00147 inline T CTBdot(CTBint i_col, const CTBmatrix<T>& m, const CTBvector<T>& v)
00148 {
00149   const T* p_m  = &m(0,i_col);
00150   const T* p_v  = v;
00151   CTBint   i_nc = m.NColumn();
00152   CTBtraits<T>::Sum_t f_sum = 0.;
00153 
00154 #ifdef CTB__ConformityCheck
00155   CTBint n = m.NRow();
00156   if (n != v.Size())
00157     throw CTBexceptionConformity(n, v.Size(),
00158                                  "CTBdot(CTBint,CTBmatrix&,CTBvector&)");
00159 #else
00160   CTBint n = CTBmin(m.NRow(), v.Size());
00161 #endif
00162 
00163   for (CTBint i = 0; i < n; i++) {
00164     f_sum += *p_m * *p_v++;
00165     p_m   += i_nc;
00166   }
00167   
00168   return f_sum;
00169 }
00170 
00171 //------------------------------------------+-----------------------------------
00181 template <class T>
00182 inline T CTBdot(CTBint i_col, const CTBmatrix<T>& m, const CTBvector<T>& v,
00183                 CTBint i_beg, CTBint i_end)
00184 {
00185   const T* p_m  = &m(i_beg,i_col);
00186   const T* p_v  = &v(i_beg);
00187   CTBint   i_nc = m.NColumn();
00188   CTBtraits<T>::Sum_t f_sum = 0.;
00189 
00190 #ifdef CTB__IndexCheck
00191   CTBint n = CTBmin(m.NRow(), v.Size());
00192   if (i_end >= i_beg && (i_end < 0 || i_end >= n))
00193     throw CTBexceptionIndexRange(i_end,n,
00194             "CTBdot(CTBint,CTBmatrix&,CTBvector&,CTBint,CTBint)");
00195 #endif
00196 
00197   for (CTBint i = i_beg; i <= i_end; i++) {
00198     f_sum += *p_m * *p_v++;
00199     p_m   += i_nc;
00200   }
00201   
00202   return f_sum;
00203 }
00204 
00205 //------------------------------------------+-----------------------------------
00218 template <class T>
00219 inline T CTBdot(const CTBmatrix<T>& m1, CTBint i_row, 
00220                 CTBint i_col, const CTBmatrix<T>& m2)
00221 {
00222   const T* p_m1 = &m1(i_row,0);
00223   const T* p_m2 = &m2(0,i_col);
00224   CTBint i_nc2 = m2.NColumn();
00225   CTBtraits<T>::Sum_t f_sum = 0.;
00226 
00227 #ifdef CTB__ConformityCheck
00228   CTBint n = m1.NColumn();
00229   if (n != m2.NRow()) 
00230     throw CTBexceptionConformity(n, m2.NRow(),
00231                                  "CTBdot(CTBmatrix&,CTBint,CTBint,CTBmatrix&)");
00232 #else
00233   CTBint n = CTBmin(m1.NColumn(), m2.NRow());
00234 #endif
00235 
00236   for (CTBint i = 0; i < n; i++) {
00237     f_sum += *p_m1++ * *p_m2;
00238     p_m2  += i_nc2;
00239   }
00240   
00241   return f_sum;
00242 }
00243 
00244 //------------------------------------------+-----------------------------------
00254 template <class T>
00255 inline T CTBdot(const CTBmatrix<T>& m1, CTBint i_row, 
00256                 CTBint i_col, const CTBmatrix<T>& m2,
00257                 CTBint i_beg, CTBint i_end)
00258 {
00259   const T* p_m1 = &m1(i_row,i_beg);
00260   const T* p_m2 = &m2(i_beg,i_col);
00261   CTBint i_nc2 = m2.NColumn();
00262   CTBtraits<T>::Sum_t f_sum = 0.;
00263 
00264 #ifdef CTB__IndexCheck
00265   CTBint n = CTBmin(m1.NColumn(),m2.NRow() );
00266   if (i_end >= i_beg && (i_end < 0 || i_end >= n))
00267     throw CTBexceptionIndexRange(i_end,n,
00268             "CTBdot(CTBmatrix&,CTBint,CTBint,CTBmatrix&,CTBint,CTBint)");
00269 #endif
00270 
00271   for (CTBint i = i_beg; i <= i_end; i++) {
00272     f_sum += *p_m1++ * *p_m2;
00273     p_m2  += i_nc2;
00274   }
00275   
00276   return f_sum;
00277 }
00278 
00279 

Generated at Fri Oct 24 18:11:28 2003 for CTBbase by doxygen1.2.9-20010812 written by Dimitri van Heesch, © 1997-2001