00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include "SundanceSpatiallyHomogeneousDOFMapBase.hpp"
00032 #include "PlayaTabs.hpp"
00033 #include "SundanceOut.hpp"
00034 #include "SundanceMaximalCellFilter.hpp"
00035
00036 using namespace Sundance;
00037 using namespace Teuchos;
00038
00039
00040 SpatiallyHomogeneousDOFMapBase
00041 ::SpatiallyHomogeneousDOFMapBase(const Mesh& mesh,
00042 int nTotalFuncs,
00043 int setupVerb)
00044 : DOFMapBase(mesh, setupVerb), allowedFuncs_(), funcDomains_()
00045 {
00046 RCP<Set<int> > f = rcp(new Set<int>());
00047 for (int i=0; i<nTotalFuncs; i++) f->put(i);
00048 allowedFuncs_ = f;
00049 CellFilter cf = new MaximalCellFilter();
00050 funcDomains_ = Array<CellFilter>(nTotalFuncs, cf);
00051 }
00052
00053
00054 void SpatiallyHomogeneousDOFMapBase::print(std::ostream& os) const
00055 {
00056 int myRank = mesh().comm().getRank();
00057
00058 Tabs tabs;
00059 int dim = mesh().spatialDim();
00060 RCP<const MapStructure> s = mapStruct();
00061
00062 for (int p=0; p<mesh().comm().getNProc(); p++)
00063 {
00064 mesh().comm().synchronize();
00065 mesh().comm().synchronize();
00066 if (p == myRank)
00067 {
00068 os << tabs <<
00069 "========= DOFMap on proc p=" << p << " =============" << std::endl;
00070 for (int d=dim; d>=0; d--)
00071 {
00072 Tabs tabs1;
00073 os << tabs1 << "dimension = " << d << std::endl;
00074 for (int c=0; c<mesh().numCells(d); c++)
00075 {
00076 Tabs tabs2;
00077 os << tabs2 << "Cell d=" << d << " LID=" << c << " GID="
00078 << mesh().mapLIDToGID(d, c);
00079 if (d==0)
00080 {
00081 os << " x=" << mesh().nodePosition(c) << std::endl;
00082 }
00083 else
00084 {
00085 Array<int> facetLIDs;
00086 Array<int> facetDirs;
00087 mesh().getFacetArray(d, c, 0, facetLIDs, facetDirs);
00088 Array<int> facetGIDs(facetLIDs.size());
00089 for (int v=0; v<facetLIDs.size(); v++)
00090 {
00091 facetGIDs[v] = mesh().mapLIDToGID(0, facetLIDs[v]);
00092 }
00093 os << " nodes LIDs=" << facetLIDs << " GIDs=" << facetGIDs
00094 << std::endl;
00095 }
00096 for (int b=0; b<s->numBasisChunks(); b++)
00097 {
00098 for (int f=0; f<s->funcs(b).size(); f++)
00099 {
00100 Tabs tabs3;
00101 Array<int> dofs;
00102 getDOFsForCell(d, c, s->funcs(b)[f], dofs);
00103 os << tabs3 << "f=" << s->funcs(b)[f] << " "
00104 << dofs << std::endl;
00105 if (false)
00106 {
00107 os << tabs3 << "{";
00108 for (int i=0; i<dofs.size(); i++)
00109 {
00110 if (i != 0) os << ", ";
00111 if (isLocalDOF(dofs[i])) os << "L";
00112 else os << "R";
00113 }
00114 os << "}" << std::endl;
00115 }
00116 }
00117 }
00118 }
00119 }
00120 }
00121 mesh().comm().synchronize();
00122 mesh().comm().synchronize();
00123 }
00124 }