00001
00002
00003
00004
00005 #ifndef _LEVELADAPTIVE_
00006 # define _LEVELADAPTIVE_
00007
00008 #include "UniformData.hpp"
00009
00010
00011 template<int DIM>
00012 struct LevelAdaptiveData;
00013
00014 template<int DIM>
00015 class BlendingData ;
00016
00017 template<int DIM>
00018 struct BlendingWeights;
00019
00020
00023 template<int DIM>
00024 class LevelAdaptiveGrid {
00025 public:
00027 LevelAdaptiveGrid() ;
00029 LevelAdaptiveGrid(int *L0, int *L, Wavelets *W) ;
00030 ~LevelAdaptiveGrid() ;
00031
00033 void Init (int *L0, int *L, Wavelets *W) ;
00035 void Clear() ;
00037 void Set (Function *F , double c) ;
00039 void Print() ;
00041 size_t Size() ;
00042
00043 void Attach(LevelAdaptiveData<DIM> *D) ;
00044 void Attach(BlendingWeights<DIM> *B) ;
00045
00047 Matrix<bool,DIM> *a ;
00048 int Level0[DIM],L[DIM] ;
00049 Wavelets *W ;
00050
00051 int nLAD,nBW ;
00052 LevelAdaptiveData<DIM> *LAD[2000] ;
00053 BlendingWeights<DIM> *BW [2000] ;
00054 } ;
00055
00056
00057
00059 template<int DIM>
00060 class LevelAdaptiveData {
00061 public:
00063 LevelAdaptiveData() ;
00065 LevelAdaptiveData(LevelAdaptiveGrid<DIM> *AG) ;
00066 ~LevelAdaptiveData() ;
00067
00069 void Init (LevelAdaptiveGrid<DIM> *AG) ;
00070 void Allocate() ;
00071 void Clear() ;
00073 size_t Size() ;
00074
00076 void SetBoundaryConditions(int BCs[DIM][2]) ;
00078 void SetBoundaryConditions(LevelAdaptiveData<DIM> *S) ;
00079 void CheckBC(int BC0[DIM][2] , int BC1[DIM][2]) ;
00080
00081 void Compatible(LevelAdaptiveData<DIM> *S) ;
00082 void Compatible(LevelAdaptiveData<DIM> *S0,LevelAdaptiveData<DIM> *S1) ;
00083 void Compatible(LevelAdaptiveData<DIM> *S0,LevelAdaptiveData<DIM> *S1,LevelAdaptiveData<DIM> *S2) ;
00084 void Compatible(LevelAdaptiveData<DIM> *S0,LevelAdaptiveData<DIM> *S1,LevelAdaptiveData<DIM> *S2,LevelAdaptiveData<DIM> *S3) ;
00085 void Compatible(LevelAdaptiveData<DIM> *S0,LevelAdaptiveData<DIM> *S1,LevelAdaptiveData<DIM> *S2,LevelAdaptiveData<DIM> *S3,LevelAdaptiveData<DIM> *S4) ;
00086
00087 void CopyExtensions(LevelAdaptiveData<DIM> *S) ;
00088
00090 void Blend (BlendingData<DIM> *B) ;
00091
00094 void PPlus(const double c0,LevelAdaptiveData<DIM> *S0) ;
00096 void Add(const double c0,LevelAdaptiveData<DIM> *S0 , const double c1,LevelAdaptiveData<DIM> *S1) ;
00098 void Add(const double c0,LevelAdaptiveData<DIM> *S0 , const double c1,LevelAdaptiveData<DIM> *S1 , const double c2,LevelAdaptiveData<DIM> *S2) ;
00100 void Add(const double c0,LevelAdaptiveData<DIM> *S0 , const double c1,LevelAdaptiveData<DIM> *S1 , const double c2,LevelAdaptiveData<DIM> *S2 ,
00101 const double c3,LevelAdaptiveData<DIM> *S3) ;
00103 void Sub(LevelAdaptiveData<DIM> *S0 , LevelAdaptiveData<DIM> *S1) ;
00105 void Mul(double f) ;
00107 double InnerProd(LevelAdaptiveData<DIM> *S) ;
00109 double Max() ;
00111 double Min() ;
00113 double MaxAbs() ;
00114
00116 void Copy(LevelAdaptiveData<DIM> *From) ;
00117 void Set(const double c) ;
00118
00120 void ToUniform (UniformData<DIM> *M) ;
00121 void ToUniform (Matrix<double,DIM> *M) ;
00123 void FromUniform(UniformData<DIM> *M) ;
00124 void FromUniform(Matrix<double,DIM> *M) ;
00125
00128 void Multiply(LevelAdaptiveData<2*DIM> *K , LevelAdaptiveData<DIM> *S) ;
00151 void ApplyOp (int *BCT , LevelAdaptiveData<DIM> *X , int dir , unsigned int op) ;
00153 void ApplyOp ( LevelAdaptiveData<DIM> *X , int dir , unsigned int op) ;
00154
00160 void WriteUDF(const char *name, UniformData<DIM> *M, LevelAdaptiveData<DIM> *Tmp=NULL, bool CastToFloat=false) ;
00162 void WriteUDF(const char *name, int *L, LevelAdaptiveData<DIM> *Tmp=NULL, bool CastToFloat=false) ;
00164 void WriteUDF(const char *name, int L, LevelAdaptiveData<DIM> *Tmp=NULL, bool CastToFloat=false) ;
00165
00167 Matrix< Matrix<double,DIM>* , DIM> *a ;
00169 LevelAdaptiveGrid<DIM> *G ;
00171 Extensions<DIM> Ext ;
00172 } ;
00173
00174
00176 template<int DIM>
00177 class BlendingWeights{
00178 public:
00180 BlendingWeights() ;
00182 BlendingWeights(LevelAdaptiveGrid<DIM> *G) ;
00183 ~BlendingWeights() ;
00184
00186 void Init (LevelAdaptiveGrid<DIM> *G) ;
00188 void Clear() ;
00190 void Print(int all = 3) ;
00192 size_t Size() ;
00193
00194 void Set (LevelAdaptiveGrid<DIM> *A) ;
00195
00196 void Attach(BlendingData<DIM> *B) ;
00197
00199 Matrix<int , DIM> *a ;
00200 LevelAdaptiveGrid<DIM> *G ;
00201
00202 int nBD ;
00203 BlendingData<DIM> *BD[2000] ;
00204 } ;
00205
00206
00208 template<int DIM>
00209 class BlendingData {
00210 public:
00212 BlendingData() ;
00214 BlendingData(BlendingWeights<DIM> *A) ;
00215 ~BlendingData() ;
00216
00218 void Init (BlendingWeights<DIM> *A) ;
00219 void Clear() ;
00220 void Print() ;
00221 void Allocate() ;
00222
00224 void SetBoundaryConditions(int BCs[DIM][2]) ;
00225 void CheckBC(int BC0[DIM][2] , int BC1[DIM][2]) ;
00226
00227 void Compatible(BlendingData<DIM> *S) ;
00228 void Compatible(BlendingData<DIM> *S0, BlendingData<DIM> *S1) ;
00229 void Compatible(BlendingData<DIM> *S0, BlendingData<DIM> *S1, BlendingData<DIM> *S2) ;
00230 void Compatible(BlendingData<DIM> *S0, BlendingData<DIM> *S1, BlendingData<DIM> *S2, BlendingData<DIM> *S3) ;
00231
00232 void CopyExtensions(BlendingData<DIM> *S) ;
00233
00235 void Get(LevelAdaptiveData<DIM> *S) ;
00238 void SetFunction(Function *F) ;
00240 void Set(const double c) ;
00241
00243 void Add(const double c0,BlendingData<DIM> *S0 , const double c1,BlendingData<DIM> *S1) ;
00245 void Add(const double c0,BlendingData<DIM> *S0 , const double c1,BlendingData<DIM> *S1 ,
00246 const double c2,BlendingData<DIM> *S2) ;
00248 void Add(const double c0,BlendingData<DIM> *S0 , const double c1,BlendingData<DIM> *S1 ,
00249 const double c2,BlendingData<DIM> *S2 , const double c3,BlendingData<DIM> *S3) ;
00250
00252 void Sub(BlendingData<DIM> *S0 , BlendingData<DIM> *S1) ;
00254 double Max() ;
00256 double Min() ;
00258 double MaxAbs() ;
00259
00261 void ApplyOp(int *BCT , BlendingData<DIM> *S , int dir , unsigned int op) ;
00262
00264 Matrix<Matrix<double,DIM> * , DIM> *a ;
00266 BlendingWeights<DIM> *A ;
00268 Extensions<DIM> Ext ;
00269 } ;
00270
00271
00272 # include "LevelAdaptiveGrid.hpp"
00273 # include "BlendingWeights.hpp"
00274 # include "LevelAdaptiveData.hpp"
00275 # include "BlendingData.hpp"
00276 #endif