Skip to content

Commit

Permalink
Tpetra unit test for issue #9583 (#9819)
Browse files Browse the repository at this point in the history
* tpetra:  Test for #9583

* tpetra:  unit test for #9583
  • Loading branch information
kddevin authored Dec 23, 2021
1 parent 155e45e commit 908c0ab
Show file tree
Hide file tree
Showing 2 changed files with 121 additions and 0 deletions.
111 changes: 111 additions & 0 deletions packages/tpetra/core/test/MultiVector/Bug9583.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
/*
// @HEADER
// ***********************************************************************
//
// Tpetra: Templated Linear Algebra Services Package
// Copyright (2008) Sandia Corporation
//
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
// the U.S. Government retains certain rights in this software.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// 1. Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// 3. Neither the name of the Corporation nor the names of the
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Questions? Contact Michael A. Heroux ([email protected])
//
// ************************************************************************
// @HEADER
*/

#include "Tpetra_Map.hpp"
#include "Tpetra_MultiVector.hpp"
#include "Tpetra_Core.hpp"
#include "Teuchos_UnitTestHarness.hpp"
#include "TpetraCore_ETIHelperMacros.h"
#include "Teuchos_CommHelpers.hpp"

namespace { // (anonymous)

// Test for Bug #9583
TEUCHOS_UNIT_TEST_TEMPLATE_4_DECL(MultiVector, Bug9583, S, LO, GO, NODE)
{
using Teuchos::RCP;
using Teuchos::rcp;

typedef Tpetra::Map<LO, GO, NODE> map_type;
typedef Tpetra::MultiVector<S, LO, GO, NODE> vec_type;

RCP<const Teuchos::Comm<int> > comm = Tpetra::getDefaultComm ();
const int myRank = comm->getRank ();

// Create a Map which has zero rows on ranks >= gblNumRows
RCP<const map_type> rowMap;
const int gblNumRows = 3;
const GO indexBase = 0;

size_t numLocalElements = 1;
if(myRank >= gblNumRows) {
numLocalElements = 0;
}
rowMap = rcp (new map_type (gblNumRows, numLocalElements, indexBase, comm));

// Create distributed zero vectors
vec_type x (rowMap, 1, true);
vec_type y (rowMap, 1, true);

// Create a local vector z -- one entry that will be same on all ranks
const size_t numElm = 1;
RCP<const map_type > rowMapLocal =
Tpetra::createLocalMapWithNode<LO,GO,NODE>( numElm, comm);
vec_type z (rowMapLocal, 1, true);

// Fill z with a non-zero number
z.putScalar(static_cast<S>(999));

// z = x^T * y
z.multiply( Teuchos::TRANS, Teuchos::NO_TRANS, 1.0, x, y, 0.0);

// Since x and y are zero vectors, we expect z to also be zero
// With bug #9583, z has value 999 on ranks >= gblNumRows
// With fix, z has value zero on all ranks.
TEST_EQUALITY( z.getData(0)[0], static_cast<S>(0.0) )
}

//
// INSTANTIATIONS
//

#define UNIT_TEST_GROUP( SCALAR, LO, GO, NODE ) \
TEUCHOS_UNIT_TEST_TEMPLATE_4_INSTANT(MultiVector, Bug9583, SCALAR, LO, GO, NODE)

TPETRA_ETI_MANGLING_TYPEDEFS()

TPETRA_INSTANTIATE_TESTMV( UNIT_TEST_GROUP )

} // namespace (anonymous)


10 changes: 10 additions & 0 deletions packages/tpetra/core/test/MultiVector/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,16 @@ TRIBITS_ADD_EXECUTABLE_AND_TEST(
${MAXNP}
)

TRIBITS_ADD_EXECUTABLE_AND_TEST(
Bug9583
SOURCES
Bug9583
${TEUCHOS_STD_UNIT_TEST_MAIN}
COMM mpi
NUM_MPI_PROCS 4
STANDARD_PASS_OUTPUT
)

TRIBITS_ADD_EXECUTABLE_AND_TEST(
Bug7758
SOURCES
Expand Down

0 comments on commit 908c0ab

Please sign in to comment.