Zoltan2
Loading...
Searching...
No Matches
BasicIdentifierInput.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// Basic testing of Zoltan2::BasicIdentifierAdapter
47
50
51#include <Teuchos_DefaultComm.hpp>
52#include <Teuchos_RCP.hpp>
53#include <Teuchos_CommHelpers.hpp>
54
55int main(int narg, char *arg[]) {
56 Tpetra::ScopeGuard tscope(&narg, &arg);
57 Teuchos::RCP<const Teuchos::Comm<int> > comm = Tpetra::getDefaultComm();
58
59 int rank = comm->getRank();
60 int nprocs = comm->getSize();
61 int fail = 0, gfail = 0;
62
63 // Create global identifiers with weights
64 zlno_t numLocalIds = 10;
65 int nWeights = 2;
66
67 zgno_t *myIds = new zgno_t[numLocalIds];
68 zscalar_t *weights = new zscalar_t [numLocalIds*nWeights];
69 zgno_t myFirstId = rank * numLocalIds * numLocalIds;
70
71 for (zlno_t i=0; i < numLocalIds; i++){
72 myIds[i] = zgno_t(myFirstId+i);
73 weights[i*nWeights] = 1.0;
74 weights[i*nWeights + 1] = (nprocs-rank) / (i+1);
75 }
76
78 std::vector<const zscalar_t *> weightValues;
79 std::vector<int> strides;
80
81 weightValues.push_back(weights);
82 weightValues.push_back(weights + 1);
83 strides.push_back(2);
84 strides.push_back(2);
85
87 weightValues, strides);
88
89 if (!fail && ia.getLocalNumIDs() != size_t(numLocalIds)){
90 fail = 4;
91 }
92 if (!fail && ia.getNumWeightsPerID() != nWeights) {
93 fail = 5;
94 }
95
96 const zgno_t *globalIdsIn;
97 zscalar_t const *weightsIn[2];
98 int weightStridesIn[2];
99
100 ia.getIDsView(globalIdsIn);
101
102 for (int w=0; !fail && w < nWeights; w++) {
103 ia.getWeightsView(weightsIn[w], weightStridesIn[w], w);
104 }
105
106 const zscalar_t *w1 = weightsIn[0];
107 const zscalar_t *w2 = weightsIn[1];
108 int incr1 = weightStridesIn[0];
109 int incr2 = weightStridesIn[1];
110
111 for (zlno_t i=0; !fail && i < numLocalIds; i++){
112 if (globalIdsIn[i] != zgno_t(myFirstId+i)) {
113 fail = 8;
114 }
115 if (!fail && w1[i*incr1] != 1.0) {
116 fail = 9;
117 }
118 if (!fail && w2[i*incr2] != weights[i*nWeights+1]) {
119 fail = 10;
120 }
121 }
122
123 delete [] myIds;
124 delete [] weights;
125
126 gfail = globalFail(*comm, fail);
127 if (gfail) {
128 printFailureCode(*comm, fail); // will exit(1)
129 }
130 if (rank == 0) {
131 std::cout << "PASS" << std::endl;
132 }
133}
134
int globalFail(const Comm< int > &comm, int fail)
void printFailureCode(const Comm< int > &comm, int fail)
Defines the BasicIdentifierAdapter class.
common code used by tests
float zscalar_t
Tpetra::Map ::local_ordinal_type zlno_t
Tpetra::Map ::global_ordinal_type zgno_t
int main()
This class represents a collection of global Identifiers and their associated weights,...
int getNumWeightsPerID() const
Returns the number of weights per object. Number of weights per object should be zero or greater....
void getWeightsView(const scalar_t *&weights, int &stride, int idx) const
void getIDsView(const gno_t *&Ids) const
Provide a pointer to this process' identifiers.
size_t getLocalNumIDs() const
Returns the number of objects on this process.
A simple class that can be the User template argument for an InputAdapter.
static const std::string fail
Zoltan2::BasicUserTypes< zscalar_t, zlno_t, zgno_t > userTypes_t
static ArrayRCP< ArrayRCP< zscalar_t > > weights