49#include "Kokkos_StaticCrsGraph.hpp"
50#include "Kokkos_UnorderedMap.hpp"
58#include <Teuchos_Comm.hpp>
59#include <Teuchos_CommHelpers.hpp>
60#include <Teuchos_DefaultComm.hpp>
61#include <Teuchos_ArrayView.hpp>
62#include <Teuchos_OrdinalTraits.hpp>
64#include <Tpetra_CrsMatrix.hpp>
70 const RCP<
const Comm<int> > &comm,
71 bool nodeZeroHasAll,
bool printInfo)
73 int fail = 0, gfail = 0;
76 std::cout <<
"Test: " << fname << std::endl;
77 std::cout <<
"Num Weights: " << nWeights;
78 std::cout <<
" proc 0 has all: " << nodeZeroHasAll;
79 std::cout << std::endl;
86 typedef Tpetra::MultiVector<zscalar_t, zlno_t, zgno_t, znode_t> mv_t;
88 RCP<UserInputForTests> uinput;
93 catch(std::exception &e){
102 coords = uinput->getUICoordinates();
104 catch(std::exception &e){
110 int coordDim = coords->getNumVectors();
114 const zscalar_t *x=NULL, *y=NULL, *z=NULL;
116 x = coords->getData(0).getRawPtr();
118 y = coords->getData(1).getRawPtr();
120 z = coords->getData(2).getRawPtr();
125 int nLocalIds = coords->getLocalLength();
126 ArrayView<const zgno_t> idList = coords->getMap()->getLocalElementList();
130 if (comm->getRank() > 0){
135 nGlobalIds = nLocalIds;
137 Teuchos::broadcast<int, int>(*comm, 0, &nGlobalIds);
140 nGlobalIds = coords->getGlobalLength();
143 Array<ArrayRCP<const zscalar_t> > coordWeights(nWeights);
146 for (
int wdim=0; wdim < nWeights; wdim++){
148 for (
int i=0; i < nLocalIds; i++){
149 w[i] = ((i%2) + 1) + wdim;
151 coordWeights[wdim] = Teuchos::arcp(w, 0, nLocalIds);
167 ia = rcp(
new ia_t(nLocalIds, idList.getRawPtr(), x, y, z));
169 catch(std::exception &e){
174 std::vector<const zscalar_t *> values,
weights;
175 std::vector<int> valueStrides, weightStrides;
182 for (
int wdim=0; wdim < nWeights; wdim++){
183 weights.push_back(coordWeights[wdim].getRawPtr());
187 ia = rcp(
new ia_t(nLocalIds, idList.getRawPtr(),
188 values, valueStrides,
weights, weightStrides));
190 catch(std::exception &e){
195 RCP<const base_ia_t> base_ia = Teuchos::rcp_dynamic_cast<const base_ia_t>(ia);
204 typedef std::bitset<Zoltan2::NUM_MODEL_FLAGS> modelFlags_t;
206 modelFlags_t modelFlags;
213 model = rcp(
new model_t(base_ia, env, comm, modelFlags));
215 catch (std::exception &e){
223 if (model->getCoordinateDim() != coordDim)
226 if (!
fail && model->getLocalNumCoordinates() !=
size_t(nLocalIds))
229 if (!
fail && model->getGlobalNumCoordinates() !=
size_t(nGlobalIds))
232 if (!
fail && model->getNumWeightsPerCoordinate() != nWeights)
240 ArrayView<const zgno_t> gids;
241 ArrayView<input_t> xyz;
242 ArrayView<input_t> wgts;
244 model->getCoordinates(gids, xyz, wgts);
246 if (!
fail && gids.size() != nLocalIds)
249 for (
int i=0; !
fail && i < nLocalIds; i++){
250 if (gids[i] != idList[i])
254 if (!
fail && wgts.size() != nWeights)
259 for (
int dim=0; !
fail && dim < coordDim; dim++){
260 for (
int i=0; !
fail && i < nLocalIds; i++){
261 if (xyz[dim][i] != vals[dim][i])
266 for (
int wdim=0; !
fail && wdim < nWeights; wdim++){
267 for (
int i=0; !
fail && i < nLocalIds; i++){
268 if (wgts[wdim][i] != coordWeights[wdim][i])
282 Kokkos::View<const zgno_t *, typename znode_t::device_type> gidsKokkos;
284 Kokkos::View<zscalar_t **, Kokkos::LayoutLeft, typename znode_t::device_type> xyzKokkos;
285 Kokkos::View<zscalar_t **, typename znode_t::device_type> wgtsKokkos;
287 model->getCoordinatesKokkos(gidsKokkos, xyzKokkos, wgtsKokkos);
289 if (!
fail && gidsKokkos.extent(0) !=
static_cast<size_t>(nLocalIds))
292 auto gidsKokkos_host = Kokkos::create_mirror_view(gidsKokkos);
293 Kokkos::deep_copy(gidsKokkos_host, gidsKokkos);
295 for (
int i=0; !
fail && i < nLocalIds; i++){
296 if (gidsKokkos_host(i) != idList[i])
300 if (!
fail && wgtsKokkos.extent(1) !=
static_cast<size_t>(nWeights))
303 auto xyzKokkos_host = Kokkos::create_mirror_view(xyzKokkos);
304 Kokkos::deep_copy(xyzKokkos_host, xyzKokkos);
306 for (
int dim=0; !
fail && dim < coordDim; dim++){
307 for (
int i=0; !
fail && i < nLocalIds; i++){
308 if (xyzKokkos_host(i, dim) != vals[dim][i])
313 auto wgtsKokkos_host = Kokkos::create_mirror_view(wgtsKokkos);
314 Kokkos::deep_copy(wgtsKokkos_host, wgtsKokkos);
316 for (
int wdim=0; !
fail && wdim < nWeights; wdim++){
317 for (
int i=0; !
fail && i < nLocalIds; i++){
318 if (wgtsKokkos_host(i, wdim) != coordWeights[wdim][i])
331 Tpetra::ScopeGuard tscope(&narg, &arg);
332 Teuchos::RCP<const Teuchos::Comm<int> > comm = Tpetra::getDefaultComm();
334 int rank = comm->getRank();
335 string fname(
"simple");
349 if (rank==0) std::cout <<
"PASS" << std::endl;
void testCoordinateModel(std::string &fname, int nWeights, const RCP< const Comm< int > > &comm, bool nodeZeroHasAll, bool printInfo)
int globalFail(const Comm< int > &comm, int fail)
void printFailureCode(const Comm< int > &comm, int fail)
#define TEST_FAIL_AND_EXIT(comm, ok, s, code)
Defines the BasicVectorAdapter class.
Defines the CoordinateModel classes.
common code used by tests
std::string testDataFilePath(".")
BasicVectorAdapter represents a vector (plus optional weights) supplied by the user as pointers to st...
This class provides geometric coordinates with optional weights to the Zoltan2 algorithm.
The user parameters, debug, timing and memory profiling output objects, and error checking methods.
The StridedData class manages lists of weights or coordinates.
VectorAdapter defines the interface for vector input.
static const std::string fail