SundanceCellType.cpp
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 #include "SundanceCellType.hpp"
00043 #include "PlayaExceptions.hpp"
00044 
00045 using namespace Sundance;
00046 using namespace Sundance;
00047 
00048 namespace Sundance
00049 {
00050 
00051   std::string toString(const CellType& cellType)
00052   {
00053     switch(cellType)
00054       {
00055       case NullCell:
00056         return "NullCell";
00057       case PointCell:
00058         return "PointCell";
00059       case LineCell:
00060         return "LineCell";
00061       case TriangleCell:
00062         return "TriangleCell";
00063       case QuadCell:
00064         return "QuadCell";
00065       case TetCell:
00066         return "TetCell";
00067       case BrickCell:
00068         return "BrickCell";
00069       case PrismCell:
00070         return "PrismCell";
00071       }
00072     return "NullCell"; // -Wall
00073   }
00074 
00075   int dimension(const CellType& cellType)
00076   {
00077     switch(cellType)
00078       {
00079       case NullCell:
00080         return -1;
00081       case PointCell:
00082         return 0;
00083       case LineCell:
00084         return 1;
00085       case TriangleCell:
00086       case QuadCell:
00087         return 2;
00088       case TetCell:
00089       case BrickCell:
00090       case PrismCell:
00091         return 3;
00092       }
00093     return -1; // -Wall
00094   }
00095 
00096   int numFacets(const CellType& cellType, int facetDim)
00097   {
00098     int d = dimension(cellType);
00099     if (facetDim == d) return 1;
00100 
00101     TEUCHOS_TEST_FOR_EXCEPTION(facetDim > d, std::runtime_error,
00102                        "invalid facet dim " << facetDim << " for cell "
00103                        << toString(cellType));
00104 
00105     switch(cellType)
00106       {
00107       case NullCell:
00108       case PointCell:
00109         return -1;
00110       case LineCell:
00111         return 2;
00112       case TriangleCell:
00113         return 3;
00114       case TetCell:
00115         if (facetDim==0 || facetDim==2) return 4;
00116         return 6;
00117       case QuadCell:
00118         return 4;
00119       case BrickCell:
00120         if (facetDim==0) return 8;
00121         else if (facetDim==1) return 12;
00122         else return 6;
00123       case PrismCell:
00124         if (facetDim==0) return 6;
00125         else if (facetDim==1) return 9;
00126         else return 5;
00127       }
00128     return -1; // -Wall
00129   }
00130 
00131 
00132   CellType facetType(const CellType& cellType, int facetDim, int facetIndex)
00133   {
00134     int d = dimension(cellType);
00135     if (facetDim == d) return cellType;
00136     TEUCHOS_TEST_FOR_EXCEPTION(facetDim > d, std::runtime_error,
00137                        "invalid facet dim " << facetDim << " for cell "
00138                        << toString(cellType));
00139 
00140     if (facetDim==0) return PointCell;
00141     if (facetDim==1) return LineCell;
00142 
00143     switch(cellType)
00144       {
00145       case NullCell:
00146       case PointCell:
00147       case LineCell:
00148       case TriangleCell:
00149       case QuadCell:
00150         return NullCell;
00151 
00152       case TetCell:
00153         return TriangleCell;
00154       case BrickCell:
00155         return QuadCell;
00156       case PrismCell:
00157         if (facetIndex==0 || facetIndex==4) return TriangleCell;
00158         return QuadCell;
00159       }
00160     return NullCell;
00161   }
00162   
00163 }

Site Contact