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_MAPSTRUCTURE_H
00032 #define SUNDANCE_MAPSTRUCTURE_H
00033
00034
00035 #include "SundanceDefs.hpp"
00036 #include "Teuchos_Array.hpp"
00037 #include "Teuchos_RefCountPtr.hpp"
00038
00039 namespace Sundance
00040 {
00041 using namespace Teuchos;
00042
00043 class BasisDOFTopologyBase;
00044
00045
00046
00047
00048 class MapStructure
00049 {
00050 public:
00051
00052 MapStructure(int nTotalFuncs,
00053 const Array<RCP<BasisDOFTopologyBase> >& bases,
00054 const Array<Array<int> >& funcs);
00055
00056 MapStructure(int nTotalFuncs,
00057 const RCP<BasisDOFTopologyBase>& basis,
00058 const Array<Array<int> >& funcs);
00059
00060 MapStructure(int nTotalFuncs,
00061 const RCP<BasisDOFTopologyBase>& basis);
00062
00063
00064 int numBasisChunks() const {return bases_.size();}
00065
00066
00067 const RCP<BasisDOFTopologyBase>& basis(int basisChunk) const
00068 {return bases_[basisChunk];}
00069
00070
00071 int numFuncs(int basisChunk) const
00072 {return funcs_[basisChunk].size();}
00073
00074
00075 const Array<int>& funcs(int basisChunk) const
00076 {return funcs_[basisChunk];}
00077
00078
00079 int chunkForFuncID(int funcID) const ;
00080
00081
00082 int indexForFuncID(int funcID) const ;
00083
00084
00085 std::ostream& print(std::ostream& os) const ;
00086
00087 private:
00088
00089 void init(int nTotalFuncs,
00090 const Array<RCP<BasisDOFTopologyBase> >& bases,
00091 const Array<Array<int> >& funcs);
00092
00093 Array<RCP<BasisDOFTopologyBase> > bases_;
00094 Array<Array<int> > funcs_;
00095 Array<int> chunkForFuncID_;
00096 Array<int> indexForFuncID_;
00097 };
00098
00099
00100 Array<RCP<BasisDOFTopologyBase> > replicate(
00101 const RCP<BasisDOFTopologyBase>& model,
00102 int n);
00103
00104
00105
00106
00107 inline std::ostream& operator<<(std::ostream& os,
00108 const MapStructure& m)
00109 {
00110 return m.print(os);
00111 }
00112
00113 }
00114 #endif