Department of Scientific Computing   
Institute for Numerical Simulation   
University of Bonn   
Documentation
Download
Programming References
Bug Reports / Suggestions
FAQ
Authors
Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

LevelAdaptive.hpp

00001 //
00002 //  Main classes of non adaptive sparse grid code
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   // list of LevelAdaptiveData attached to *this
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)   ; // Copy from (*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   //  compute blending wheights
00194   void Set  (LevelAdaptiveGrid<DIM> *A) ;
00195   //  attach an instance of BlendingData to *this
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

Generated at Mon Aug 19 10:02:31 2002 for AWFD by doxygen1.2.8.1 written by Dimitri van Heesch, © 1997-2001