alugrid.hh

Go to the documentation of this file.
00001 #ifndef DUNE_ALUGRID_HH
00002 #define DUNE_ALUGRID_HH
00003 
00004 // 3d version 
00005 #include "alugrid/3d/indexsets.hh"
00006 #include "alugrid/3d/iterator.hh"
00007 #include "alugrid/3d/entity.hh"
00008 #include "alugrid/3d/geometry.hh"
00009 #include "alugrid/3d/grid.hh"
00010 
00011 // 2d version 
00012 #include <dune/grid/alugrid/2d/grid.hh>
00018 namespace Dune { 
00019 
00020 
00046 template <int dim,int dimworld> class ALUCubeGrid {};
00047   
00053 template <>
00054 class ALUCubeGrid<3,3> : 
00055   public Dune::ALU3dGrid<3,3,Dune::hexa> {
00056   typedef Dune::ALU3dGrid<3,3,Dune::hexa> BaseType;
00057   enum { dim      = 3 }; 
00058   enum { dimworld = 3 }; 
00059  public:
00060 #if ALU3DGRID_PARALLEL
00065   ALUCubeGrid(const std::string macroName , MPI_Comm mpiComm = MPI_COMM_WORLD) :
00066     BaseType(macroName,mpiComm) 
00067   {
00068     if(this->comm().rank() == 0)
00069     {
00070       std::cout << "\nCreated parallel ALUCubeGrid<"<<dim<<","<<dimworld;
00071       std::cout <<"> from macro grid file '" << macroName << "'. \n\n";     
00072     }
00073   }
00075   ALUCubeGrid(MPI_Comm mpiComm = MPI_COMM_WORLD) :
00076     BaseType("",mpiComm) 
00077   {
00078     if(this->comm().rank() == 0)
00079     {
00080       std::cout << "\nCreated empty ALUCubeGrid<"<<dim<<","<<dimworld <<">. \n\n";
00081     }
00082   }
00083 #else
00088   ALUCubeGrid(const std::string macroName , int mpiComm = 0 ) :
00089     BaseType(macroName) 
00090   {
00091     std::cout << "\nCreated serial ALUCubeGrid<"<<dim<<","<<dimworld;
00092     std::cout <<"> from macro grid file '" << macroName << "'. \n\n";     
00093   }
00095   ALUCubeGrid(int myrank = -1) :
00096     BaseType("",myrank) 
00097   {
00098     std::cout << "\nCreated empty ALUCubeGrid<"<<dim<<","<<dimworld <<">. \n\n";
00099   }
00100 #endif
00101   enum {dimension=BaseType::dimension,dimensionworld=BaseType::dimensionworld};
00102   typedef BaseType::ctype ctype;
00103   typedef BaseType::GridFamily GridFamily;
00104   typedef GridFamily::Traits Traits;
00105   typedef BaseType::LocalIdSetImp LocalIdSetImp;
00106   typedef Traits :: GlobalIdSet GlobalIdSet;
00107   typedef Traits :: LocalIdSet LocalIdSet;
00108   typedef GridFamily :: LevelIndexSetImp  LevelIndexSetImp;
00109   typedef GridFamily :: LeafIndexSetImp  LeafIndexSetImp;
00110   typedef BaseType::LeafIteratorImp LeafIteratorImp;
00111   typedef Traits::Codim<0>::LeafIterator LeafIteratorType;
00112   typedef Traits::Codim<0>::LeafIterator LeafIterator;
00113 
00114   // ALUGrid only typedefs 
00115   typedef BaseType::HierarchicIteratorImp HierarchicIteratorImp;
00116   typedef BaseType::ObjectStreamType      ObjectStreamType;
00117 
00118   friend class Conversion< ALUCubeGrid<dimension,dimensionworld> , HasObjectStream > ;
00119   friend class Conversion< const ALUCubeGrid<dimension,dimensionworld> , HasObjectStream > ;
00120   
00121   friend class Conversion< ALUCubeGrid<dimension,dimensionworld> , HasHierarchicIndexSet > ;
00122   friend class Conversion< const ALUCubeGrid<dimension,dimensionworld> , HasHierarchicIndexSet > ;
00123   
00124  private: 
00126     ALUCubeGrid( const ALUCubeGrid & g ) ; // : BaseType(g) {}
00127   
00129     ALUCubeGrid<dim,dimworld>& 
00130     operator = (const ALUCubeGrid& g); 
00131 };
00132 
00133   namespace Capabilities {
00145     template<int dim,int dimw, int cdim >
00146     struct hasEntity<Dune::ALUCubeGrid<dim, dimw>, cdim >
00147     {
00148       static const bool v = true;
00149     };
00150 
00154     template<int dim,int dimw>
00155     struct isParallel<const ALUCubeGrid<dim, dimw> > {
00156       static const bool v = true;
00157     };
00158 
00162     template<int dim,int dimw>
00163     struct isLevelwiseConforming< ALUCubeGrid<dim,dimw> >
00164     {
00165       static const bool v = true;
00166     };
00167 
00171     template<int dim,int dimw>
00172     struct hasHangingNodes< ALUCubeGrid<dim,dimw> >
00173     {
00174       static const bool v = true;
00175     };
00176 
00180     template<int dim,int dimw>
00181     struct hasBackupRestoreFacilities< ALUCubeGrid<dim,dimw> >
00182     {
00183       static const bool v = true;
00184     };
00185 
00186   } // end namespace Capabilities
00187 
00188 
00217 template <int dim,int dimworld> class ALUSimplexGrid {};
00218 
00224 template <>
00225 class ALUSimplexGrid<3,3> : 
00226   public Dune::ALU3dGrid<3,3,Dune::tetra> {
00227   typedef Dune::ALU3dGrid<3,3,Dune::tetra> BaseType;
00228   enum { dim      = 3 };
00229   enum { dimworld = 3 }; 
00230  public:
00231 #if ALU3DGRID_PARALLEL
00236   ALUSimplexGrid(const std::string macroName, MPI_Comm mpiComm = MPI_COMM_WORLD) :
00237     BaseType(macroName,mpiComm) 
00238   {
00239     if(this->comm().rank() == 0)
00240     {
00241       std::cout << "\nCreated parallel ALUSimplexGrid<"<<dim<<","<<dimworld;
00242       std::cout <<"> from macro grid file '" << macroName << "'. \n\n";     
00243     }
00244   }
00246   ALUSimplexGrid(MPI_Comm mpiComm = MPI_COMM_WORLD) :
00247     BaseType("",mpiComm) 
00248   {
00249     if(this->comm().rank() == 0)
00250     {
00251       std::cout << "\nCreated empty ALUSimplexGrid<"<<dim<<","<<dimworld <<">. \n\n";
00252     }
00253   }
00254 #else
00259   ALUSimplexGrid(const std::string macroName , int mpicomm = 0) :
00260     BaseType(macroName) 
00261   {
00262     std::cout << "\nCreated serial ALUSimplexGrid<"<<dim<<","<<dimworld;
00263     std::cout <<"> from macro grid file '" << macroName << "'. \n\n";     
00264   }
00266   ALUSimplexGrid(int myrank = -1) :
00267     BaseType("",myrank) 
00268   {
00269     std::cout << "\nCreated empty ALUSimplexGrid<"<<dim<<","<<dimworld <<">. \n\n";
00270   }
00271 #endif 
00272   enum {dimension=BaseType::dimension,dimensionworld=BaseType::dimensionworld};
00273   typedef BaseType::ctype ctype;
00274   typedef BaseType::GridFamily GridFamily;
00275   typedef GridFamily::Traits Traits;
00276   typedef BaseType::LocalIdSetImp LocalIdSetImp;
00277   typedef Traits :: GlobalIdSet GlobalIdSet;
00278   typedef Traits :: LocalIdSet LocalIdSet;
00279   typedef GridFamily :: LevelIndexSetImp  LevelIndexSetImp;
00280   typedef GridFamily :: LeafIndexSetImp  LeafIndexSetImp;
00281   typedef BaseType::LeafIteratorImp LeafIteratorImp;
00282   typedef Traits::Codim<0>::LeafIterator LeafIteratorType;
00283   typedef Traits::Codim<0>::LeafIterator LeafIterator;
00284 
00285   // ALUGrid only typedefs 
00286   typedef BaseType::HierarchicIteratorImp HierarchicIteratorImp;
00287   typedef BaseType::ObjectStreamType      ObjectStreamType;
00288 
00289   friend class Conversion< ALUSimplexGrid<dimension,dimensionworld> , HasObjectStream > ;
00290   friend class Conversion< const ALUSimplexGrid<dimension,dimensionworld> , HasObjectStream > ;
00291 
00292   friend class Conversion< ALUSimplexGrid<dimension,dimensionworld> , HasHierarchicIndexSet > ;
00293   friend class Conversion< const ALUSimplexGrid<dimension,dimensionworld> , HasHierarchicIndexSet > ;
00294 
00295  private: 
00297     ALUSimplexGrid( const ALUSimplexGrid & g ); //  : BaseType(g) {}
00298   
00300     ALUSimplexGrid<dim,dimworld>& 
00301     operator = (const ALUSimplexGrid& g); 
00302   
00303 };
00304 
00310 template <>
00311 class ALUSimplexGrid<2,2> : 
00312   public Dune::ALU2dGrid<2,2> {
00313   typedef Dune::ALU2dGrid<2,2> BaseType;
00314   enum { dim      = 2 };
00315   enum { dimworld = 2 };
00316  public:
00319   ALUSimplexGrid(const std::string macroName ) 
00320     : BaseType(macroName,1) 
00321   {
00322     std::cout << "\nCreated serial ALUSimplexGrid<"<<dim<<","<<dimworld;
00323     std::cout <<"> from macro grid file '" << macroName << "'. \n\n";     
00324   }
00326   ALUSimplexGrid( ) : BaseType(1) 
00327   {
00328     std::cout << "\nCreated empty ALUSimplexGrid<"<<dim<<","<<dimworld <<">. \n\n";
00329   }
00330   enum {dimension=BaseType::dimension,dimensionworld=BaseType::dimensionworld};
00331   enum { refineStepsForHalf = 1 };
00332   typedef BaseType::ctype ctype;
00333   typedef BaseType::GridFamily GridFamily;
00334   typedef GridFamily::Traits Traits;
00335   typedef BaseType::LocalIdSetImp LocalIdSetImp;
00336   typedef Traits :: GlobalIdSet GlobalIdSet;
00337   typedef Traits :: LocalIdSet LocalIdSet;
00338   typedef GridFamily :: LevelIndexSetImp  LevelIndexSetImp;
00339   typedef GridFamily :: LeafIndexSetImp  LeafIndexSetImp;
00340   typedef BaseType::LeafIteratorImp LeafIteratorImp;
00341   typedef Traits::Codim<0>::LeafIterator LeafIteratorType;
00342   typedef Traits::Codim<0>::LeafIterator LeafIterator;
00343   typedef BaseType::HierarchicIteratorImp HierarchicIteratorImp;
00344   
00345   friend class Conversion< ALUSimplexGrid<dimension,dimensionworld> , HasObjectStream > ;
00346   friend class Conversion< const ALUSimplexGrid<dimension,dimensionworld> , HasObjectStream > ;
00347 
00348   friend class Conversion< ALUSimplexGrid<dimension,dimensionworld> , HasHierarchicIndexSet > ;
00349   friend class Conversion< const ALUSimplexGrid<dimension,dimensionworld> , HasHierarchicIndexSet > ;
00350   
00351  private:
00352   
00354     ALUSimplexGrid( const ALUSimplexGrid & g ) ; // : BaseType(g) {}
00355   
00357     ALUSimplexGrid<dim,dimworld>& 
00358     operator = (const ALUSimplexGrid& g); 
00359  };
00360 
00361   namespace Capabilities {
00373     template<int dim,int dimw, int cdim >
00374     struct hasEntity<Dune::ALUSimplexGrid<dim, dimw>, cdim >
00375     {
00376       static const bool v = true;
00377     };
00378 
00382     template<int dim,int dimw>
00383     struct isParallel<const ALUSimplexGrid<dim, dimw> > {
00384       static const bool v = false;
00385     };
00386 
00390     template<int dim,int dimw>
00391     struct isLevelwiseConforming< ALUSimplexGrid<dim,dimw> >
00392     {
00393       static const bool v = true;
00394     };
00395 
00399     template<int dim,int dimw>
00400     struct hasHangingNodes< ALUSimplexGrid<dim,dimw> >
00401     {
00402       static const bool v = true;
00403     };
00404 
00408     template<int dim,int dimw>
00409     struct hasBackupRestoreFacilities< ALUSimplexGrid<dim,dimw> >
00410     {
00411       static const bool v = true;
00412     };
00413 
00414   } // end namespace Capabilities
00415 
00439 template <int dim, int dimworld>
00440 class ALUConformGrid {};
00441 
00447 template <>
00448 class ALUConformGrid<2,2> : 
00449   public Dune::ALU2dGrid<2,2> {
00450   typedef Dune::ALU2dGrid<2,2> BaseType;
00451   enum { dim      = 2 };
00452   enum { dimworld = 2 };
00453  public:
00456   ALUConformGrid(const std::string macroName ) 
00457     : BaseType(macroName) 
00458   {
00459     std::cout << "\nCreated serial ALUConformGrid<"<<dim<<","<<dimworld;
00460     std::cout <<"> from macro grid file '" << macroName << "'. \n\n";     
00461   }
00463   ALUConformGrid( ) : BaseType(0) 
00464   {
00465     std::cout << "\nCreated empty ALUConformGrid<"<<dim<<","<<dimworld <<">. \n\n";
00466   }
00467   enum {dimension=BaseType::dimension,dimensionworld=BaseType::dimensionworld};
00468   enum { refineStepsForHalf = 2 };
00469   typedef BaseType::ctype ctype;
00470   typedef BaseType::GridFamily GridFamily;
00471   typedef GridFamily::Traits Traits;
00472   typedef BaseType::LocalIdSetImp LocalIdSetImp;
00473   typedef Traits :: GlobalIdSet GlobalIdSet;
00474   typedef Traits :: LocalIdSet LocalIdSet;
00475   typedef GridFamily :: LevelIndexSetImp  LevelIndexSetImp;
00476   typedef GridFamily :: LeafIndexSetImp  LeafIndexSetImp;
00477   typedef BaseType::LeafIteratorImp LeafIteratorImp;
00478   typedef Traits::Codim<0>::LeafIterator LeafIteratorType;
00479   typedef Traits::Codim<0>::LeafIterator LeafIterator;
00480   typedef BaseType::HierarchicIteratorImp HierarchicIteratorImp;
00481   
00482   friend class Conversion< ALUConformGrid<dimension,dimensionworld> , HasObjectStream > ;
00483   friend class Conversion< const ALUConformGrid<dimension,dimensionworld> , HasObjectStream > ;
00484 
00485   friend class Conversion< ALUConformGrid<dimension,dimensionworld> , HasHierarchicIndexSet > ;
00486   friend class Conversion< const ALUConformGrid<dimension,dimensionworld> , HasHierarchicIndexSet > ;
00487   
00488  private:
00490     ALUConformGrid( const ALUConformGrid & g ) ; // : BaseType(g) {}
00491   
00493     ALUConformGrid<dim,dimworld>& 
00494     operator = (const ALUConformGrid& g); 
00495  };
00496 
00497   namespace Capabilities {
00509     template<int dim,int dimw, int cdim >
00510     struct hasEntity<Dune::ALUConformGrid<dim, dimw>, cdim >
00511     {
00512       static const bool v = true;
00513     };
00514 
00518     template<int dim,int dimw>
00519     struct isParallel<const ALUConformGrid<dim, dimw> > {
00520       static const bool v = false;
00521     };
00522 
00526     template<int dim,int dimw>
00527     struct isLevelwiseConforming< ALUConformGrid<dim,dimw> >
00528     {
00529       static const bool v = false;
00530     };
00531 
00535     template<int dim,int dimw>
00536     struct hasHangingNodes< ALUConformGrid<dim,dimw> >
00537     {
00538       static const bool v = false;
00539     };
00540 
00544     template<int dim,int dimw>
00545     struct hasBackupRestoreFacilities< ALUConformGrid<dim,dimw> >
00546     {
00547       static const bool v = true;
00548     };
00549 
00550   } // end namespace Capabilities
00551 
00552 
00553 } //end  namespace Dune 
00554 #endif

Generated on 6 Nov 2008 with Doxygen (ver 1.5.6) [logfile].