Zoltan2
Zoltan2_ColoringSolution.hpp
Go to the documentation of this file.
00001 // @HEADER
00002 //
00003 // ***********************************************************************
00004 //
00005 //   Zoltan2: A package of combinatorial algorithms for scientific computing
00006 //                  Copyright 2012 Sandia Corporation
00007 //
00008 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
00009 // the U.S. Government retains certain rights in this software.
00010 //
00011 // Redistribution and use in source and binary forms, with or without
00012 // modification, are permitted provided that the following conditions are
00013 // met:
00014 //
00015 // 1. Redistributions of source code must retain the above copyright
00016 // notice, this list of conditions and the following disclaimer.
00017 //
00018 // 2. Redistributions in binary form must reproduce the above copyright
00019 // notice, this list of conditions and the following disclaimer in the
00020 // documentation and/or other materials provided with the distribution.
00021 //
00022 // 3. Neither the name of the Corporation nor the names of the
00023 // contributors may be used to endorse or promote products derived from
00024 // this software without specific prior written permission.
00025 //
00026 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00027 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00028 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00029 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00030 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00031 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00032 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00033 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00034 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00035 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00036 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00037 //
00038 // Questions? Contact Karen Devine      (kddevin@sandia.gov)
00039 //                    Erik Boman        (egboman@sandia.gov)
00040 //                    Siva Rajamanickam (srajama@sandia.gov)
00041 //
00042 // ***********************************************************************
00043 //
00044 // @HEADER
00045 
00050 #ifndef _ZOLTAN2_COLORINGSOLUTION_HPP_
00051 #define _ZOLTAN2_COLORINGSOLUTION_HPP_
00052 
00053 #include <Zoltan2_Standards.hpp>
00054 #include <Zoltan2_Solution.hpp>
00055 
00056 namespace Zoltan2 {
00057 
00069 template <typename Adapter>
00070   class ColoringSolution : public Solution
00071 {
00072 private: 
00073   typedef typename Adapter::gno_t gno_t;
00074   typedef typename Adapter::scalar_t scalar_t;
00075   typedef typename Adapter::lno_t lno_t;
00076   typedef typename Adapter::zgid_t zgid_t;
00077 
00078 public:
00079 
00082   ColoringSolution(
00083     size_t length // This should be equal to nlids. TODO: Optional?
00084   )
00085   {
00086     HELLO;
00087     length_ = length;
00088     colors_  = ArrayRCP<int>(length_);
00089   }
00090 
00092   // Accessor functions, allowing algorithms to get ptrs to solution memory.
00093   // Algorithms can then load the memory.
00094   // Non-RCP versions are provided for applications to use.
00095 
00098   inline size_t getColorsSize() {return length_;}
00099 
00102   inline ArrayRCP<int>  &getColorsRCP()  {return colors_;}
00103 
00106   inline int * getColors()  {return &(*colors_);}
00107 
00111   int getNumColors()  
00112   { 
00113     int maxColor = 0;
00114     for (size_t i=0; i<length_; i++){
00115       if (colors_[i] > maxColor)
00116         maxColor = colors_[i];
00117     }
00118     return maxColor;
00119   } 
00120 
00123   //int getGlobalNumColors(); // TODO
00124  
00125 protected:
00126   // Coloring solution consists of permutation vector(s).
00127   size_t length_;
00128   ArrayRCP<int> colors_;   // zero-based local color array
00129   //int numColors_;        // Number of colors (local on this proc)
00130   //int numColorsGlobal_;  // For future distributed coloring
00131 };
00132 
00133 }
00134 
00135 #endif