00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _GENSOLVEROP_H_
00030 #define _GENSOLVEROP_H_
00031
00032 #include <iostream>
00033 #include <math.h>
00034 #include <assert.h>
00035 #include <stdlib.h>
00036
00037 #include "REAL.H"
00038
00040
00044 template <class T> class GenSolverOp
00045 {
00046 public:
00048
00051 GenSolverOp() {};
00052
00054
00057 virtual ~GenSolverOp() {};
00058
00060
00063 virtual GenSolverOp* newOp() const = 0;
00064
00066
00069 virtual void setToZero(T& a_one) = 0;
00070
00072
00075 virtual void copy(T& a_one, const T& a_two) = 0;
00076
00078
00081 virtual void scalarMul(T& a_one, const Real a_scalar) = 0;
00082
00084
00087 virtual void negate(T& a_one) = 0;
00088
00090
00093 virtual void sum(T& a_one, const T& a_two) = 0;
00094
00096
00099 virtual void diff(T& a_one, const T& a_two) = 0;
00100
00102
00105 virtual Real dotProduct(const T& a_one, const T& a_two) = 0;
00106
00108
00111 virtual Real norm(const T& a_one, const int a_power) = 0;
00112
00114
00117 virtual void defineOpData(T& a_data) = 0;
00118
00120
00123 virtual void defineData(T& a_data) = 0;
00124
00126
00129 virtual void applyOpH(T& a_LOfPhi, T& a_phi) = 0;
00130 };
00131
00132 #endif