00001 #ifndef DUNE_ALUGRID_HH
00002 #define DUNE_ALUGRID_HH
00003
00004
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
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
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 ) ;
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 }
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
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 );
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 ) ;
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 }
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 ) ;
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 }
00551
00552
00553 }
00554 #endif