00001 #include "SundanceMeshSourceBase.hpp"
00002 #include "PlayaTabs.hpp"
00003 #include "SundanceOut.hpp"
00004 #include "SundanceBasicSimplicialMeshType.hpp"
00005 
00006 using namespace Sundance;
00007 using namespace Sundance;
00008 
00009 using namespace Teuchos;
00010 using namespace Sundance;
00011 
00012 
00013 MeshSourceBase::MeshSourceBase(const MeshType& meshType,
00014   int verbosity,
00015   const MPIComm& comm)
00016   : ObjectWithVerbosity(verbosity),
00017     cachedMesh_(),
00018     hasCachedMesh_(),
00019     meshType_(meshType),
00020     comm_(comm),
00021     elemAttributes_(rcp(new Array<Array<double> >())),
00022     nodeAttributes_(rcp(new Array<Array<double> >()))
00023 {
00024 }
00025 
00026 MeshSourceBase::MeshSourceBase(const ParameterList& params)
00027   : cachedMesh_(),
00028     hasCachedMesh_(),
00029     meshType_(new BasicSimplicialMeshType()),
00030     comm_(MPIComm::world()),
00031     elemAttributes_(rcp(new Array<Array<double> >())),
00032     nodeAttributes_(rcp(new Array<Array<double> >()))
00033 {
00034   
00035 }
00036 
00037 Mesh MeshSourceBase::getMesh() const
00038 {
00039   Tabs tabs;
00040   
00041   
00042   if (!hasCachedMesh_)
00043     {
00044       Mesh rtn =  fillMesh();
00045       if (verb() > 0)
00046         {
00047           std::cerr << tabs << "got a mesh with " << rtn.numCells(0)
00048                << " nodes and " << rtn.numCells(rtn.spatialDim())
00049                << " maximal cells" << std::endl;
00050         }
00051       return rtn;
00052     }
00053   return cachedMesh_;
00054 }
00055 
00056 void MeshSourceBase
00057 ::getAttributes(RCP<Array<Array<double> > >& nodeAttributes,
00058                 RCP<Array<Array<double> > >& elemAttributes) const
00059 {
00060   nodeAttributes = nodeAttributes_;
00061   elemAttributes = elemAttributes_;
00062 }
00063 
00064 Mesh MeshSourceBase::createMesh(int dim) const
00065 {
00066   cachedMesh_ = meshType_.createEmptyMesh(dim, comm_);
00067   cachedMesh_.ptr()->setVerb(verb());
00068   hasCachedMesh_ = true;
00069   
00070   return cachedMesh_;
00071 }