• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

MLAPI_Expressions.h

Go to the documentation of this file.
00001 #ifndef ML_EXPRESSIONS_H
00002 #define ML_EXPRESSIONS_H
00003 
00004 #include "MLAPI_LinearCombinations.h"
00005 
00006 namespace MLAPI {
00007 
00017 /* ******************************************************************** */
00018 /* See the file COPYRIGHT for a complete copyright notice, contact      */
00019 /* person and disclaimer.                                               */        
00020 /* ******************************************************************** */
00021 
00022 // =============================================== //
00023 // OPERATOR + BETWEEN VECTORS AND LINEAR OPERATORS //
00024 // =============================================== //
00025 
00026 // ====================================================================== 
00028 // ====================================================================== 
00029 #ifndef MLAPI_LC
00030 MultiVectorCombination operator+(const MultiVector& x, const MultiVector& y);
00031 
00032 LinearCombinationAdd operator+(const BaseLinearCombination& left, 
00033                                const BaseLinearCombination& right);
00034 
00035 LinearCombinationMixed operator+(const BaseLinearCombination& left, 
00036                                  const MultiVector& right);
00037 
00038 LinearCombinationMixed operator+(const MultiVector& left, 
00039                                  const BaseLinearCombination& right);
00040 
00041 // ====================================================================== 
00043 // ====================================================================== 
00044 
00045 MultiVectorCombination operator+(const MultiVectorScaled& left, 
00046                                  const MultiVectorScaled& right);
00047 
00048 // ====================================================================== 
00050 // ====================================================================== 
00051 
00052 Residual operator+(const MultiVectorScaled& left, 
00053                    const BaseOperatorTimesMultiVector& right);
00054 
00055 // ====================================================================== 
00057 // ====================================================================== 
00058 
00059 Residual operator+(const MultiVector& left, 
00060                    const BaseOperatorTimesMultiVector& right);
00061 
00062 // ====================================================================== 
00064 // ====================================================================== 
00065 
00066 MultiVectorCombination operator+(const MultiVectorScaled& left, 
00067                                  const MultiVectorScaled& right);
00068 
00069 // ====================================================================== 
00071 // ====================================================================== 
00072 
00073 Residual operator+(const MultiVectorScaled& left, 
00074                    const BaseOperatorTimesMultiVector& right);
00075 
00076 // ====================================================================== 
00078 // ====================================================================== 
00079 
00080 Residual operator+(const MultiVector& left, 
00081                    const BaseOperatorTimesMultiVector& right);
00082 
00083 // =============================================== //
00084 // OPERATOR - BETWEEN VECTORS AND LINEAR OPERATORS //
00085 // =============================================== //
00086 
00087 // ====================================================================== 
00089 // ====================================================================== 
00090 
00091 MultiVectorCombination operator-(const MultiVector& x, const MultiVector& y);
00092 
00093 LinearCombinationAdd operator-(const BaseLinearCombination& left, 
00094                                 const BaseLinearCombination& right);
00095 
00096 LinearCombinationMixed operator-(const BaseLinearCombination& left, 
00097                                 const MultiVector& right);
00098 
00099 LinearCombinationMixed operator-(const MultiVector& left, 
00100                                 const BaseLinearCombination& right);
00101 
00102 // ====================================================================== 
00104 // ====================================================================== 
00105 
00106 Residual operator-(const MultiVector& left, 
00107                    const BaseOperatorTimesMultiVector& right);
00108 #else
00109 inline 
00110 MultiVector operator+(const MultiVector& x, const MultiVector& y)
00111 {
00112   MultiVector res(x.GetVectorSpace(), y.GetNumVectors());
00113   res.Update(1.0, x, 1.0, y);
00114   return(res);
00115 }
00116 
00117 inline 
00118 MultiVector operator-(const MultiVector& x, const MultiVector& y)
00119 {
00120   MultiVector res(x.GetVectorSpace(), y.GetNumVectors());
00121   res.Update(1.0, x, -1.0, y);
00122   return(res);
00123 }
00124 
00125 inline 
00126 MultiVector operator*(const Operator& A, const MultiVector& y)
00127 {
00128   MultiVector res(A.GetOperatorRangeSpace(), y.GetNumVectors());
00129   A.Apply(y, res);
00130   return(res);
00131 }
00132 #endif
00133 
00134 // ====================================================================== 
00136 // ====================================================================== 
00137 
00138 MultiVector operator+(const MultiVector& x, const double alpha);
00139 
00140 // ====================================================================== 
00142 // ====================================================================== 
00143 
00144 MultiVector operator+(const double alpha, const MultiVector& x);
00145 
00146 // ====================================================================== 
00148 // ====================================================================== 
00149 
00150 MultiVector operator-(const MultiVector& x, const double alpha);
00151 
00152 // ====================================================================== 
00154 // ====================================================================== 
00155 
00156 MultiVector operator-(const double alpha, const MultiVector& x);
00157 
00158 #if 0
00159 // ====================================================================== 
00161 // ====================================================================== 
00162 
00163 MultiVector operator+= (const double alpha);
00164 
00165 // ====================================================================== 
00167 // ====================================================================== 
00168 
00169 MultiVector operator-= (const double alpha);
00170 #endif
00171 
00172 // ====================================================================== 
00174 // ====================================================================== 
00175 
00176 Operator operator+(const Operator& A, const Operator& B);
00177 
00178 // ====================================================================== 
00180 // ====================================================================== 
00181 
00182 Operator operator-(const Operator& A, const Operator& B);
00183 
00184 // ====================================================================== 
00186 // ====================================================================== 
00187 
00188 Operator operator*(const Operator& A, const Operator& B);
00189 
00190 // ====================================================================== 
00192 // ====================================================================== 
00193 
00194 Operator operator*(const Operator& A, const double alpha);
00195 
00196 // ====================================================================== 
00198 // ====================================================================== 
00199 
00200 Operator operator*(const double alpha, const Operator& A);
00201 
00202 // ====================================================================== 
00204 // ====================================================================== 
00205 
00206 inline Operator operator/(const Operator& A, const double alpha)
00207 {
00208   return(A * (1.0 / alpha));
00209 }
00210 
00211 // ====================================================================== 
00213 // ====================================================================== 
00214 
00215 MultiVector operator*(const MultiVector& x, const double alpha);
00216 
00217 inline MultiVector operator*(const double alpha, const MultiVector&x)
00218 {
00219   return(x * alpha);
00220 }
00221 
00222 // ====================================================================== 
00224 // ====================================================================== 
00225 
00226 MultiVector operator/(const MultiVector& x, const double alpha);
00227 
00228 #ifndef MLAPI_LC
00229 // ====================================================================== 
00231 // ====================================================================== 
00232 
00233 BaseOperatorTimesMultiVector operator*(const BaseOperator& A, const MultiVector& x);
00234 
00235 // ====================================================================== 
00237 // ====================================================================== 
00238 
00239 BaseOperatorTimesMultiVector operator*(const BaseOperator& A, 
00240                                        const BaseLinearCombination& x);
00241 #else
00242 inline 
00243 MultiVector operator*(const BaseOperator& A, const MultiVector& x)
00244 {
00245   MultiVector res(A.GetOperatorRangeSpace(), x.GetNumVectors());
00246   A.Apply(x, res);
00247   return(res);
00248 }
00249 #endif
00250 
00251 // ====================================================================== 
00253 // ====================================================================== 
00254 
00255 double operator* (const MultiVector& x, const MultiVector& y);
00256 
00257 #ifndef MLAPI_LC
00258 double operator* (const MultiVector& x, const BaseLinearCombination& y);
00259 
00260 double operator* (const BaseLinearCombination& x, const MultiVector& y);
00261 
00262 double operator* (const BaseLinearCombination& x, const BaseLinearCombination& y);
00263 #endif
00264 
00265 } // namespace MLAPI
00266 
00267 #endif // if ML_EXPRESSIONS_H