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