Teuchos - Trilinos Tools Package Version of the Day
Loading...
Searching...
No Matches
Teuchos_MatrixMarket_SymmetrizingGraphAdder.hpp
1// @HEADER
2// ***********************************************************************
3//
4// Tpetra: Templated Linear Algebra Services Package
5// Copyright (2008) Sandia Corporation
6//
7// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8// the U.S. Government retains certain rights in this software.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions are
12// met:
13//
14// 1. Redistributions of source code must retain the above copyright
15// notice, this list of conditions and the following disclaimer.
16//
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// 3. Neither the name of the Corporation nor the names of the
22// contributors may be used to endorse or promote products derived from
23// this software without specific prior written permission.
24//
25// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36//
37// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38//
39// ************************************************************************
40// @HEADER
41
42#ifndef __Teuchos_MatrixMarket_SymmetrizingGraphAdder_hpp
43#define __Teuchos_MatrixMarket_SymmetrizingGraphAdder_hpp
44
45#include <Teuchos_as.hpp>
47#include <string>
48
49
50// Macro that marks a function as "possibly unused," in order to
51// suppress build warnings.
52#if ! defined(TRILINOS_UNUSED_FUNCTION)
53# if defined(__GNUC__) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
54# define TRILINOS_UNUSED_FUNCTION __attribute__((__unused__))
55# elif defined(__clang__)
56# if __has_attribute(unused)
57# define TRILINOS_UNUSED_FUNCTION __attribute__((__unused__))
58# else
59# define TRILINOS_UNUSED_FUNCTION
60# endif // Clang has 'unused' attribute
61# elif defined(__IBMCPP__)
62// IBM's C++ compiler for Blue Gene/Q (V12.1) implements 'used' but not 'unused'.
63//
64// http://pic.dhe.ibm.com/infocenter/compbg/v121v141/index.jsp
65# define TRILINOS_UNUSED_FUNCTION
66# else // some other compiler
67# define TRILINOS_UNUSED_FUNCTION
68# endif
69#endif // ! defined(TRILINOS_UNUSED_FUNCTION)
70
71
72namespace Teuchos {
73 namespace MatrixMarket {
74
94 template<class AdderType>
96 public:
98 typedef typename AdderType::index_type index_type;
99
107 const std::string& symmType) :
108 adder_ (adder),
109 symmetrize_ (needsSymmetrization (symmType)),
110 skew_ (isSkew (symmType))
111 {}
112
114 void
116 const index_type j)
117 {
118 AdderType& theAdder = *adder_;
119
120 theAdder (i, j);
121 if (symmetrize_ && i != j) {
122 // The optional third argument (which defaults to true)
123 // specifies whether or not to count the entry against the
124 // total expected number of entries. We don't want to count
125 // this entry because it wasn't part of the original data;
126 // we inserted it because the caller doesn't want symmetric
127 // storage. The original data's total expected number of
128 // entries only counts the entries that are in the original
129 // data, not those that we insert.
130 theAdder (j, i, false);
131 }
132 }
133
138 return adder_;
139 }
140
141 private:
145 bool symmetrize_;
147 bool skew_;
148 };
149
150 } // namespace MatrixMarket
151} // namespace Teuchos
152
153#endif // __Teuchos_MatrixMarket_SymmetrizingGraphAdder_hpp
Defines basic traits for the scalar field type.
Definition of Teuchos::as, for conversions between types.
Adds entries with optional symmetry to a sparse graph.
void operator()(const index_type i, const index_type j)
Add entry (i,j), and optionally symmetrize.
SymmetrizingGraphAdder(const Teuchos::RCP< AdderType > &adder, const std::string &symmType)
Constructor.
AdderType::index_type index_type
The type of indices of the sparse graph.
Teuchos::RCP< AdderType > getAdder() const
Persisting non-const view of the underlying adder object.
Smart reference counting pointer class for automatic garbage collection.
Matrix Market file utilities.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...