MueLu Version of the Day
Loading...
Searching...
No Matches
MueLu_AggregationExportFactory_decl.hpp
Go to the documentation of this file.
1// @HEADER
2//
3// ***********************************************************************
4//
5// MueLu: A package for multigrid based preconditioning
6// Copyright 2012 Sandia Corporation
7//
8// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9// the U.S. Government retains certain rights in this software.
10//
11// Redistribution and use in source and binary forms, with or without
12// modification, are permitted provided that the following conditions are
13// met:
14//
15// 1. Redistributions of source code must retain the above copyright
16// notice, this list of conditions and the following disclaimer.
17//
18// 2. Redistributions in binary form must reproduce the above copyright
19// notice, this list of conditions and the following disclaimer in the
20// documentation and/or other materials provided with the distribution.
21//
22// 3. Neither the name of the Corporation nor the names of the
23// contributors may be used to endorse or promote products derived from
24// this software without specific prior written permission.
25//
26// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37//
38// Questions? Contact
39// Jonathan Hu (jhu@sandia.gov)
40// Andrey Prokopenko (aprokop@sandia.gov)
41// Ray Tuminaro (rstumin@sandia.gov)
42//
43// ***********************************************************************
44//
45// @HEADER
46/*
47 * MueLu_AggregationExportFactory_decl.hpp
48 *
49 * Created on: Feb 10, 2012
50 * Author: wiesner
51 */
52
53#ifndef MUELU_AGGREGATIONEXPORTFACTORY_DECL_HPP_
54#define MUELU_AGGREGATIONEXPORTFACTORY_DECL_HPP_
55
56#include <Xpetra_Matrix_fwd.hpp>
57#include <Xpetra_CrsMatrixWrap_fwd.hpp>
58
59#include "MueLu_ConfigDefs.hpp"
61#include "MueLu_VisualizationHelpers.hpp"
64#include "MueLu_Graph_fwd.hpp"
65#include "MueLu_GraphBase.hpp"
69
70namespace MueLu {
71
72 class Level;
73
107 template <class Scalar = DefaultScalar,
110 class Node = DefaultNode>
111 class AggregationExportFactory : public TwoLevelFactoryBase, public VisualizationHelpers<Scalar, LocalOrdinal, GlobalOrdinal, Node> {
112#undef MUELU_AGGREGATIONEXPORTFACTORY_SHORT
114
115 public:
117
118
121 doFineGraphEdges_(false),
122 doCoarseGraphEdges_(false),
123 numNodes_(0),
124 numAggs_(0),
125 dims_(0),
126 myRank_(-1),
127 aggsOffset_(0)
128 { }
129
133
134 RCP<const ParameterList> GetValidParameterList() const;
135
137
138
139 void DeclareInput(Level &fineLevel, Level &coarseLevel) const;
140
142
144
145
147 void Build(Level &fineLevel, Level &coarseLevel) const;
148
150
151 private:
152 //Break different viz styles into separate functions for organization:
153 void doJacksPlus_(std::vector<int>& vertices, std::vector<int>& geomSizes) const;
154 void doConvexHulls(std::vector<int>& vertices, std::vector<int>& geomSizes) const;
155 #ifdef HAVE_MUELU_CGAL
156 void doAlphaHulls_(std::vector<int>& vertices, std::vector<int>& geomSizes) const;
157 void doAlphaHulls2D_(std::vector<int>& vertices, std::vector<int>& geomSizes) const;
158 void doAlphaHulls3D_(std::vector<int>& vertices, std::vector<int>& geomSizes) const;
159 #endif
160 void doGraphEdges_(std::ofstream& fout, Teuchos::RCP<Matrix>& A, Teuchos::RCP<GraphBase>& G, bool fine, int dofs) const; //add geometry to display node connections from a matrix. Connections in graph but not matrix have different color.
161
162 // write VTK data
163 void writeFile_(std::ofstream& fout, std::string styleName, std::vector<int>& vertices, std::vector<int>& geomSizes) const;
164 void buildColormap_() const;
165 void writePVTU_(std::ofstream& pvtu, std::string baseFname, int numProcs) const;
166
167 static const int CONTRAST_1_ = -1;
168 static const int CONTRAST_2_ = -2;
169 static const int CONTRAST_3_ = -3;
170
171 //Data that the different styles need to have available when building geometry
172 mutable Teuchos::ArrayRCP<const typename Teuchos::ScalarTraits<Scalar>::coordinateType> xCoords_; //fine local coordinates
173 mutable Teuchos::ArrayRCP<const typename Teuchos::ScalarTraits<Scalar>::coordinateType> yCoords_;
174 mutable Teuchos::ArrayRCP<const typename Teuchos::ScalarTraits<Scalar>::coordinateType> zCoords_;
175 mutable Teuchos::ArrayRCP<const typename Teuchos::ScalarTraits<Scalar>::coordinateType> cx_; //coarse local coordinates
176 mutable Teuchos::ArrayRCP<const typename Teuchos::ScalarTraits<Scalar>::coordinateType> cy_;
177 mutable Teuchos::ArrayRCP<const typename Teuchos::ScalarTraits<Scalar>::coordinateType> cz_;
178 mutable Teuchos::ArrayRCP<LocalOrdinal> vertex2AggId_;
179 mutable Teuchos::ArrayRCP<LocalOrdinal> aggSizes_;
180 mutable std::vector<bool> isRoot_;
181 mutable bool doFineGraphEdges_;
183 mutable int numNodes_;
184 mutable int numAggs_;
185 mutable int dims_;
186 mutable int myRank_;
187 mutable Teuchos::RCP<const Map> nodeMap_; //map used in A and Coordinates to map local ordinals to global ordinals. Need the whole map especially if it's not contiguous.
188 mutable Teuchos::RCP<const Map> nodeMapCoarse_; //Map for Ac
189 mutable int aggsOffset_; //in a global list of aggregates, the offset of local aggregate indices
190 }; // class AggregationExportFactory
191} // namespace MueLu
192
193#define MUELU_AGGREGATIONEXPORTFACTORY_SHORT
194
195#endif /* MUELU_AGGREGATIONEXPORTFACTORY_DECL_HPP_ */
MueLu::DefaultLocalOrdinal LocalOrdinal
MueLu::DefaultScalar Scalar
MueLu::DefaultGlobalOrdinal GlobalOrdinal
MueLu::DefaultNode Node
Factory to export aggregation info or visualize aggregates using VTK.
void doJacksPlus_(std::vector< int > &vertices, std::vector< int > &geomSizes) const
void writePVTU_(std::ofstream &pvtu, std::string baseFname, int numProcs) const
Teuchos::ArrayRCP< const typename Teuchos::ScalarTraits< Scalar >::coordinateType > cz_
Teuchos::ArrayRCP< const typename Teuchos::ScalarTraits< Scalar >::coordinateType > cx_
void doConvexHulls(std::vector< int > &vertices, std::vector< int > &geomSizes) const
void doGraphEdges_(std::ofstream &fout, Teuchos::RCP< Matrix > &A, Teuchos::RCP< GraphBase > &G, bool fine, int dofs) const
Teuchos::ArrayRCP< const typename Teuchos::ScalarTraits< Scalar >::coordinateType > yCoords_
Teuchos::ArrayRCP< const typename Teuchos::ScalarTraits< Scalar >::coordinateType > xCoords_
void doAlphaHulls_(std::vector< int > &vertices, std::vector< int > &geomSizes) const
void writeFile_(std::ofstream &fout, std::string styleName, std::vector< int > &vertices, std::vector< int > &geomSizes) const
void doAlphaHulls2D_(std::vector< int > &vertices, std::vector< int > &geomSizes) const
void Build(Level &fineLevel, Level &coarseLevel) const
Build an object with this factory.
Teuchos::ArrayRCP< const typename Teuchos::ScalarTraits< Scalar >::coordinateType > zCoords_
Teuchos::ArrayRCP< const typename Teuchos::ScalarTraits< Scalar >::coordinateType > cy_
RCP< const ParameterList > GetValidParameterList() const
Return a const parameter list of valid parameters that setParameterList() will accept.
void doAlphaHulls3D_(std::vector< int > &vertices, std::vector< int > &geomSizes) const
void DeclareInput(Level &fineLevel, Level &coarseLevel) const
Input.
Class that holds all level-specific information.
Base class for factories that use two levels (fineLevel and coarseLevel).
Base class providing routines to visualize aggregates and coarsening information.
Namespace for MueLu classes and methods.
KokkosClassic::DefaultNode::DefaultNodeType DefaultNode
Tpetra::Details::DefaultTypes::scalar_type DefaultScalar