From 8588901da462b8b3f97636046564187f1f89645e Mon Sep 17 00:00:00 2001 From: "Irina K. Tezaur" Date: Mon, 16 Dec 2019 14:05:32 -0800 Subject: [PATCH] Teko: more generic fixes to handle case where GO=unsigned long. --- packages/teko/src/Teko_Utilities.cpp | 2 +- .../teko/src/Tpetra/Teko_BlockingTpetra.cpp | 6 +++--- .../src/Tpetra/tTpetraThyraConverter.cpp | 9 +++++---- .../tDiagonallyScaledPreconditioner.cpp | 20 ++++++++++++++----- 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/packages/teko/src/Teko_Utilities.cpp b/packages/teko/src/Teko_Utilities.cpp index 53bea1221edb..663cc2a93e13 100644 --- a/packages/teko/src/Teko_Utilities.cpp +++ b/packages/teko/src/Teko_Utilities.cpp @@ -248,7 +248,7 @@ RCP > buildGraphLaplacian(int dim,ST * coords,con // extract a copy of this row...put it in rowData, rowIndicies stencil.getGlobalRowCopy(row,Teuchos::ArrayView(rowInd),Teuchos::ArrayView(rowData),rowSz); // loop over elements of row - for(GO i=0;i > buildSubBlock(int i,int j,const RCP::invalid()) continue; // in contiguous row numOwnedCols++; } nEntriesPerRow[localRow] = numOwnedCols; @@ -295,7 +295,7 @@ RCP > buildSubBlock(int i,int j,const RCP::invalid()) continue; // in contiguous row colIndices[numOwnedCols] = gid; colValues[numOwnedCols] = values[localCol]; @@ -364,7 +364,7 @@ void rebuildSubBlock(int i,int j,const RCP // if global id is not owned by this column GO gid = local2ContigGIDs.getData()[indices[localCol]]; - if(gid==-1) continue; // in contiguous row + if(gid==Teuchos::OrdinalTraits::invalid()) continue; // in contiguous row colIndices[numOwnedCols] = gid; colValues[numOwnedCols] = values[localCol]; diff --git a/packages/teko/tests/src/Tpetra/tTpetraThyraConverter.cpp b/packages/teko/tests/src/Tpetra/tTpetraThyraConverter.cpp index 81b8e160695b..fbdd74b784e8 100644 --- a/packages/teko/tests/src/Tpetra/tTpetraThyraConverter.cpp +++ b/packages/teko/tests/src/Tpetra/tTpetraThyraConverter.cpp @@ -87,14 +87,15 @@ double compareTpetraMVToThyra(const Tpetra_MultiVector & eX, int indexStart=-1,int indexEnd=-1); */ double compareTpetraMVToThyra(const Tpetra::MultiVector & eX, const Teuchos::RCP > & tX, - int verbosity,std::ostream & os,int indexStart=-1,GO indexEnd=-1); + int verbosity,std::ostream & os,GO indexStart=Teuchos::OrdinalTraits::invalid(), + GO indexEnd=Teuchos::OrdinalTraits::invalid()); double compareTpetraMVToThyra(const Tpetra::MultiVector & eX, const Teuchos::RCP > & tX, - int verbosity,std::ostream & os,int indexStart,GO indexEnd) + int verbosity,std::ostream & os,GO indexStart,GO indexEnd) { using Teuchos::outArg; - if(indexStart<0) { + if(indexStart==Teuchos::OrdinalTraits::invalid()) { indexStart = 0; indexEnd = eX.getGlobalLength(); } @@ -151,7 +152,7 @@ double compareTpetraMVToThyra(const Tpetra::MultiVector & eX, GO gid = map.getGlobalElement(i); // this is not in the range of vector elements we are interested in - if(gid=indexEnd) continue; + if(gid=indexEnd || gid==Teuchos::OrdinalTraits::invalid()) continue; // these values should be equal for(int j=0;j > buildSystem(const Epetra_Comm & comm,int RCP mat = rcp(new Epetra_CrsMatrix(Copy,map,0)); double values[] = { -1.0, 2.0, -1.0}; - int iTemp[] = {-1,0,1}, indices[3]; + GO iTemp[] = {Teuchos::OrdinalTraits::invalid(),0,1}; + int indices[3]; double * vPtr; int * iPtr; @@ -105,7 +106,12 @@ const RCP > buildSystem(const Epetra_Comm & comm,int vPtr = values; iPtr = indices; - indices[0] = gid+iTemp[0]; + if (iTemp[0] == Teuchos::OrdinalTraits::invalid()) { + indices[0] = gid -1; + } + else { + indices[0] = gid+iTemp[0]; + } indices[1] = gid+iTemp[1]; indices[2] = gid+iTemp[2]; @@ -132,7 +138,7 @@ const RCP > buildSystem(const Teuchos::RCP > mat = Tpetra::createCrsMatrix(map,3); ST values[] = { -1.0, 2.0, -1.0}; - int iTemp[] = {-1,0,1}; + GO iTemp[] = {Teuchos::OrdinalTraits::invalid(),0,1}; GO indices[3]; ST * vPtr; GO * iPtr; @@ -142,8 +148,12 @@ const RCP > buildSystem(const Teuchos::RCP::invalid()) { + indices[0] = gid-1; + } + else { + indices[0] = gid+iTemp[0]; + } indices[1] = gid+iTemp[1]; indices[2] = gid+iTemp[2];