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 }