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 _GENLEVELOP_H_
00030 #define _GENLEVELOP_H_
00031
00032 #include <iostream>
00033 #include <math.h>
00034 #include <assert.h>
00035 #include <stdlib.h>
00036
00037 #include "REAL.H"
00038 #include "LevelData.H"
00039 #include "LoHiSide.H"
00040
00041 #include "GenAMRLevelMGOp.H"
00042
00044
00049 template <class T> class GenLevelOp: public GenAMRLevelMGOp<LevelData<T> >
00050 {
00051 public:
00053 GenLevelOp() {};
00054
00056 virtual ~GenLevelOp() {};
00057
00059
00062 virtual GenLevelOp* newOp() const = 0;
00063
00065
00068 virtual void setToZero(LevelData<T>& a_one);
00069
00071
00074 virtual void copy(LevelData<T>& a_one,
00075 const LevelData<T>& a_two);
00076
00078
00081 virtual void scalarMul(LevelData<T>& a_one,
00082 const Real a_scalar);
00083
00085
00088 virtual void negate(LevelData<T>& a_one);
00089
00091
00094 virtual void sum(LevelData<T>& a_one,
00095 const LevelData<T>& a_two);
00096
00098
00101 virtual void diff(LevelData<T>& a_one,
00102 const LevelData<T>& a_two);
00103
00105
00108 virtual Real dotProduct(const LevelData<T>& a_one,
00109 const LevelData<T>& a_two);
00110
00112
00115 virtual Real norm(const LevelData<T>& a_one,
00116 const int a_power);
00117
00119
00122 virtual void defineOpData(LevelData<T>& a_data);
00123
00125
00128 virtual void defineData(LevelData<T>& a_data);
00129
00131
00134 virtual void levelPreconditioner(LevelData<T>& a_phihat,
00135 const LevelData<T>& a_rhshat) = 0;
00136
00138
00142 virtual void CFInterp(LevelData<T>& a_phif,
00143 const LevelData<T>& a_phic) = 0;
00144
00146
00149 virtual void homogeneousCFInterp(LevelData<T>& a_phif) = 0;
00150
00152
00154 virtual void homogeneousCFInterp(LevelData<T>& a_phif,
00155 const DataIndex& a_datInd,
00156 int a_idir,
00157 Side::LoHiSide a_hiorlo) = 0;
00158 };
00159
00160 #include "GenLevelOpImplem.H"
00161
00162 #endif