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_INHOMOGENEOUSEDGELOCALIZEDDOFMAP_H
00032 #define SUNDANCE_INHOMOGENEOUSEDGELOCALIZEDDOFMAP_H
00033 
00034 #include "SundanceDOFMapBase.hpp"
00035 
00036 #include "SundanceDefs.hpp"
00037 #include "SundanceCellFilter.hpp"
00038 
00039 #include "SundanceSet.hpp"
00040 #include "SundanceMap.hpp"
00041 
00042 #include "Teuchos_RCP.hpp"
00043 #include "Teuchos_Array.hpp"
00044 
00045 namespace Sundance
00046 {
00047 
00048 using Teuchos::RCP;
00049 using Teuchos::Array;
00050 
00051 
00052 
00053 
00054 class InhomogeneousEdgeLocalizedDOFMap : public DOFMapBase
00055 {
00056 public:
00057 
00058   InhomogeneousEdgeLocalizedDOFMap(const Mesh& mesh, 
00059     const Array<Map<Set<int>, CellFilter> >& funcSetToDomainMap, 
00060     int setupVerb);
00061   
00062 
00063   RCP<const MapStructure> 
00064   getDOFsForCellBatch(int cellDim,
00065     const Array<int>& cellLID,
00066     const Set<int>& requestedFuncSet,
00067     Array<Array<int> >& dofs,
00068     Array<int>& nNodes,
00069     int verb) const;
00070   
00071 
00072   RCP<const Set<int> >
00073   allowedFuncsOnCellBatch(int cellDim,
00074     const Array<int>& cellLID) const;
00075   
00076 
00077   const Array<CellFilter>& funcDomains() const { return funcDomains_; }
00078   
00079 
00080   virtual void print(std::ostream& os) const ;
00081 
00082 private:
00083   Array<CellFilter> funcDomains_;
00084   Array<Array<int> > edgeDofs_;
00085 
00086   int meshDimension() const;
00087 
00088   Array<int> getEdgeLIDs(const CellFilter &filter) const;
00089   
00090   void getDOFsForEdgeBatch(const Array<int> &cellLID,
00091     const Set<int> &requestedFuncSet,
00092     Array<Array<int> > &dofs,
00093     int verb) const;
00094   
00095   RCP<Set<int> > allowedFuncsOnEdgeBatch(const Array<int> &edgeLIDs) const;
00096   RCP<Set<int> > allFuncIDs() const;
00097 };
00098 
00099 } 
00100 
00101 #endif