SundanceCellSet.hpp
Go to the documentation of this file.
00001 /* @HEADER@ */
00002 // ************************************************************************
00003 // 
00004 //                             Sundance
00005 //                 Copyright 2011 Sandia Corporation
00006 // 
00007 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
00008 // the U.S. Government retains certain rights in this software.
00009 //
00010 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are
00012 // met:
00013 //
00014 // 1. Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 //
00017 // 2. Redistributions in binary form must reproduce the above copyright
00018 // notice, this list of conditions and the following disclaimer in the
00019 // documentation and/or other materials provided with the distribution.
00020 //
00021 // 3. Neither the name of the Corporation nor the names of the
00022 // contributors may be used to endorse or promote products derived from
00023 // this software without specific prior written permission.
00024 //
00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00036 //
00037 // Questions? Contact Kevin Long (kevin.long@ttu.edu)
00038 // 
00039 
00040 /* @HEADER@ */
00041 
00042 #ifndef SUNDANCE_CELLSET_H
00043 #define SUNDANCE_CELLSET_H
00044 
00045 #include "SundanceDefs.hpp"
00046 #include "SundanceCellSetBase.hpp"
00047 #include "SundanceCellPredicate.hpp"
00048 #include "PlayaHandle.hpp"
00049 
00050 
00051 namespace Sundance
00052 {
00053 using namespace Teuchos;
00054   
00055 /** 
00056  * CellSet is, you guessed it, a set of cells in a mesh. Cells are 
00057  * represented by their LID relative to the mesh. 
00058  * 
00059  * 
00060  * @see CellFilter, CellIterator
00061  **/
00062 class CellSet : public Playa::Handle<CellSetBase>
00063 {
00064 public:
00065   /* handle boilerplate */
00066   HANDLE_CTORS(CellSet, CellSetBase);
00067 
00068   /** Construct from an explicit set of cells */
00069   CellSet(const Mesh& mesh, int cellDim,
00070     const CellType& cellType,
00071     const Set<int>& cellLIDs);
00072       
00073 
00074   /** The ID number of the mesh in which these cells exist */
00075   int meshID() const {return ptr()->meshID();}
00076       
00077   /** The mesh in which these cells exist */
00078   const Mesh& mesh() const {return ptr()->mesh();}
00079 
00080   /** Indicate whether the cells in this set are null cells */
00081   bool isNull() const {return ptr().get()==0 || ptr()->dimension() < 0;}
00082 
00083   /** The dimension of the cells contained in this set */
00084   int dimension() const {return ptr()->dimension();}
00085 
00086   /** The type of the cells contained in this set */
00087   const CellType& cellType() const {return ptr()->cellType();}
00088 
00089   /** An iterator pointing to the beginning of the set */
00090   CellIterator begin() const {return ptr()->begin();}
00091 
00092   /** An iterator pointing to the end of the set */
00093   CellIterator end() const {return ptr()->end();}
00094 
00095   /** Return a cell set that is the union of this set and another set */
00096   CellSet setUnion(const CellSet& other) const ;
00097 
00098   /** Return a cell set that is the intersection
00099    *  of this set and another set */
00100   CellSet setIntersection(const CellSet& other) const ;
00101 
00102   /** Return a cell set that is the difference
00103    *  of this set and another set */
00104   CellSet setDifference(const CellSet& other) const ;
00105 
00106   /** */
00107   CellSet subset(const RCP<CellPredicate>& test) const ;
00108 
00109 
00110   /** Determine whether all cells in this set are
00111    * facets of cells in the other set */
00112   bool areFacetsOf(const CellSet& other) const ;
00113 
00114   /** */
00115   bool operator<(const CellSet& other) const ;
00116 
00117   /** */
00118   int numCells() const ;
00119 
00120 private:
00121   void checkCompatibility(const std::string& op, const CellSet& other) const ;
00122 };
00123 
00124 
00125 }
00126 
00127 namespace std
00128 {
00129 inline ostream& operator<<(std::ostream& os, 
00130   const Sundance::CellSet& c)
00131 {
00132   c.print(os);
00133   return os;
00134 }
00135 }
00136 
00137 
00138 
00139 #endif

Site Contact