SundanceMapStructure.hpp
Go to the documentation of this file.
00001 /* @HEADER@ */
00002 // ************************************************************************
00003 // 
00004 //                              Sundance
00005 //                 Copyright (2005) Sandia Corporation
00006 // 
00007 // Copyright (year first published) Sandia Corporation.  Under the terms 
00008 // of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government 
00009 // retains certain rights in this software.
00010 // 
00011 // This library is free software; you can redistribute it and/or modify
00012 // it under the terms of the GNU Lesser General Public License as
00013 // published by the Free Software Foundation; either version 2.1 of the
00014 // License, or (at your option) any later version.
00015 //  
00016 // This library is distributed in the hope that it will be useful, but
00017 // WITHOUT ANY WARRANTY; without even the implied warranty of
00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00019 // Lesser General Public License for more details.
00020 //                                                                                 
00021 // You should have received a copy of the GNU Lesser General Public
00022 // License along with this library; if not, write to the Free Software
00023 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00024 // USA                                                                                
00025 // Questions? Contact Kevin Long (krlong@sandia.gov), 
00026 // Sandia National Laboratories, Livermore, California, USA
00027 // 
00028 // ************************************************************************
00029 /* @HEADER@ */
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 /** \relates BasisDOFTopologyBase */
00100 Array<RCP<BasisDOFTopologyBase> > replicate(
00101   const RCP<BasisDOFTopologyBase>& model,
00102   int n);
00103 
00104 
00105 
00106 /** \relates MapStructure */
00107 inline std::ostream& operator<<(std::ostream& os,
00108   const MapStructure& m)
00109 {
00110   return m.print(os);
00111 }
00112 
00113 }
00114 #endif

Site Contact