Go to the documentation of this file.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
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef SUNDANCE_INHOMOGENEOUSNODALDOFMAP_H
00043 #define SUNDANCE_INHOMOGENEOUSNODALDOFMAP_H
00044
00045 #include "SundanceDefs.hpp"
00046 #include "SundanceDOFMapBase.hpp"
00047 #include "SundanceCellSet.hpp"
00048 #include "SundanceCellFilter.hpp"
00049 #include "SundanceBasisFamily.hpp"
00050 #include "SundanceObjectWithVerbosity.hpp"
00051
00052
00053 namespace Sundance
00054 {
00055 using namespace Teuchos;
00056
00057
00058
00059
00060 class InhomogeneousNodalDOFMap : public DOFMapBase
00061 {
00062 public:
00063
00064 InhomogeneousNodalDOFMap(const Mesh& mesh,
00065 const Array<Map<Set<int>, CellFilter> >& funcSetToDomainMap,
00066 int setupVerb);
00067
00068
00069 virtual ~InhomogeneousNodalDOFMap(){;}
00070
00071
00072 RCP<const MapStructure>
00073 getDOFsForCellBatch(int cellDim,
00074 const Array<int>& cellLID,
00075 const Set<int>& requestedFuncSet,
00076 Array<Array<int> >& dofs,
00077 Array<int>& nNodes,
00078 int verb) const ;
00079
00080 protected:
00081
00082 void getFunctionDofs(int cellDim,
00083 const Array<int>& cellLID,
00084 const Array<int>& facetLID,
00085 const Array<int>& funcs,
00086 Array<Array<int> >& dofs) const ;
00087
00088 public:
00089
00090 RCP<const Set<int> >
00091 allowedFuncsOnCellBatch(int cellDim,
00092 const Array<int>& cellLID) const ;
00093
00094
00095 const Array<CellFilter>& funcDomains() const {return funcDomains_;}
00096
00097
00098 virtual void print(std::ostream& os) const ;
00099
00100
00101 protected:
00102
00103
00104 Array<int> dofsOnCell(int cellDim, int cellLID, const Set<int>& reqFuncs) const ;
00105
00106
00107 void init();
00108
00109 void computeOffsets(int localCount) ;
00110
00111 void shareRemoteDOFs(const Array<Array<int> >& remoteNodes);
00112
00113 void assignNode(int fLID,
00114 int funcComboIndex,
00115 int dofOffset,
00116 int nFuncs,
00117 Array<Array<int> >& remoteNodes,
00118 Array<int>& hasProcessedCell,
00119 int& nextDOF) ;
00120
00121 int dim_;
00122 RCP<BasisDOFTopologyBase> basis_;
00123 int nTotalFuncs_;
00124 Array<CellFilter> funcDomains_;
00125
00126 Array<Array<int> > nodeDofs_;
00127 Array<Array<int> > elemDofs_;
00128 Array<int> nodeToFuncSetIndexMap_;
00129 Array<int> elemToFuncSetIndexMap_;
00130 Array<Set<int> > elemFuncSets_;
00131 Array<Set<int> > nodalFuncSets_;
00132 Array<int> nodeToOffsetMap_;
00133 Array<int> elemToOffsetMap_;
00134
00135 Array<Array<int> > funcIndexWithinNodeFuncSet_;
00136
00137 Array<RCP<const MapStructure> > elemStructure_;
00138 Array<RCP<const MapStructure> > nodeStructure_;
00139 };
00140 }
00141
00142
00143 #endif