Zoltan2
HyperGraphModel.cpp
Go to the documentation of this file.
1 // @HEADER
2 //
3 // ***********************************************************************
4 //
5 // Zoltan2: A package of combinatorial algorithms for scientific computing
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 Karen Devine (kddevin@sandia.gov)
39 // Erik Boman (egboman@sandia.gov)
40 // Siva Rajamanickam (srajama@sandia.gov)
41 //
42 // ***********************************************************************
43 //
44 // @HEADER
45 //
46 // Testing of HyperGraphModel built from APF mesh adapters.
47 //
48 
55 #include <Zoltan2_Standards.hpp>
58 #include <Zoltan2_Environment.hpp>
59 
60 // Teuchos includes
61 #include "Teuchos_RCP.hpp"
62 #include "Teuchos_XMLParameterListHelpers.hpp"
63 
64 // SCOREC includes
65 #ifdef HAVE_ZOLTAN2_PARMA
66 #include <parma.h>
67 #include <apf.h>
68 #include <apfMesh.h>
69 #include <apfMDS.h>
70 #include <apfMesh2.h>
71 #include <PCU.h>
72 #include <gmi_mesh.h>
73 #endif
74 
75 using Teuchos::ParameterList;
76 using Teuchos::RCP;
77 
78 int main(int narg, char *arg[]) {
79 
80  Tpetra::ScopeGuard tscope(&narg, &arg);
81  Teuchos::RCP<const Teuchos::Comm<int> > CommT = Tpetra::getDefaultComm();
82 
83 #ifdef HAVE_ZOLTAN2_PARMA
84  //Setup for SCOREC
85  PCU_Comm_Init();
86 
87  // Generate mesh with MDS
88  gmi_register_mesh();
89  apf::Mesh2* m = apf::loadMdsMesh("../partition/pumiTri14/plate.dmg","../partition/pumiTri14/2/");
90 
91  typedef Zoltan2::APFMeshAdapter<apf::Mesh2*> inputAdapter_t;
92  typedef Zoltan2::MeshAdapter<apf::Mesh2*> baseMeshAdapter_t;
93  Teuchos::ParameterList params("test params");
94  params.set("timer_output_stream" , "std::cout");
95  params.set("debug_level", "verbose_detailed_status");
96  params.set("hypergraph_model_type","ghosting");
97 
98  RCP<Zoltan2::Environment> env;
99  try{
100  env = rcp(new Zoltan2::Environment(params, Tpetra::getDefaultComm()));
101  }
103 
104  RCP<const Zoltan2::Environment> envConst = Teuchos::rcp_const_cast<const Zoltan2::Environment>(env);
105 
106 
107  inputAdapter_t* ia = new inputAdapter_t(*CommT, m,"vertex","edge",false);
108  inputAdapter_t::scalar_t* arr = new inputAdapter_t::scalar_t[ia->getLocalNumOf(ia->getPrimaryEntityType())];
109  for (size_t i=0;i<ia->getLocalNumOf(ia->getPrimaryEntityType());i++) {
110  arr[i]=PCU_Comm_Self();
111  }
112  const inputAdapter_t::scalar_t* weights=arr;
113  ia->setWeights(ia->getPrimaryEntityType(),weights,1);
114 
115  const baseMeshAdapter_t *base_ia = dynamic_cast<const baseMeshAdapter_t*>(ia);
116  Zoltan2::modelFlag_t graphFlags_;
117  RCP<const baseMeshAdapter_t> baseInputAdapter_(base_ia,false);
118 
119  Zoltan2::HyperGraphModel<inputAdapter_t> model(baseInputAdapter_,envConst,CommT,
120  graphFlags_,Zoltan2::HYPEREDGE_CENTRIC);
121  ia->destroy();
122  delete ia;
123 
124  //Delete APF Mesh;
125  m->destroyNative();
126  apf::destroyMesh(m);
127  //End communications
128  PCU_Comm_Free();
129 
130 #endif
131 
132  std::cout<<"PASS\n";
133  return 0;
134 }
Z2_FORWARD_EXCEPTIONS
#define Z2_FORWARD_EXCEPTIONS
Forward an exception back through call stack.
Definition: Zoltan2_Exceptions.hpp:106
Zoltan2::APFMeshAdapter
Definition: Zoltan2_APFMeshAdapter.hpp:68
Zoltan2_HyperGraphModel.hpp
Defines the HyperGraphModel interface.
Zoltan2::MeshAdapter
MeshAdapter defines the interface for mesh input.
Definition: Zoltan2_MeshAdapter.hpp:124
Zoltan2::Environment
The user parameters, debug, timing and memory profiling output objects, and error checking methods.
Definition: Zoltan2_Environment.hpp:83
main
int main(int narg, char *arg[])
Definition: HyperGraphModel.cpp:78
Zoltan2_APFMeshAdapter.hpp
Defines the APFMeshAdapter class.
Zoltan2_Standards.hpp
Gathering definitions used in software development.
Zoltan2::HYPEREDGE_CENTRIC
Definition: Zoltan2_HyperGraphModel.hpp:75
weights
static ArrayRCP< ArrayRCP< zscalar_t > > weights
Definition: rcbPerformanceZ1.cpp:82
Zoltan2::HyperGraphModel
HyperGraphModel defines the interface required for hyper graph models.
Definition: Zoltan2_HyperGraphModel.hpp:90
Zoltan2_Environment.hpp
Defines the Environment class.
Zoltan2::modelFlag_t
std::bitset< NUM_MODEL_FLAGS > modelFlag_t
Definition: Zoltan2_Model.hpp:93