[Trilinos-Users] Write a non-contiguous Tpetra::Vector

Heroux, Mike MHeroux at CSBSJU.EDU
Sat Nov 9 17:48:35 EST 2019


Wen Yan,

One suggestion is to turn on debug mode.  There is a final optional argument to the Tpetra Writer implementation called debug that is set to debug by default.  Setting it true could give you some insight.

Mike

> On Nov 7, 2019, at 10:44 AM, Wen Yan <wenyan4work at gmail.com> wrote:
> 
> Hi trilinos users&developers,
> 
> Could you please help me understand how Tpetra::MatrixMarket::Writer works for non-contiguous Vector?
> I have a vector partitioned like this on two ranks:
> [0,1,0,0,1,1]
> Here the entries are the ranks they belong to. Then I write the vector and map to files using:
>     Tpetra::MatrixMarket::Writer::writeMapFile( );
>     Tpetra::MatrixMarket::Writer::writeDenseFile( );
> 
> The results I get are:
> %%MatrixMarket matrix array integer general
> % Format: Version 2.0
> %
> % This file encodes a Tpetra::Map.
> % It is stored as a dense vector, with twice as many 
> % entries as the global number of GIDs (global indices).
> % (GID, PID) pairs are stored contiguously, where the PID 
> % is the rank of the process owning that GID.
> 12 1
> 0
> 0
> 2
> 0
> 3
> 0
> 1
> 1
> 4
> 1
> 5
> 1
> %%MatrixMarket matrix array real general
> 6 1
> 0.00000000000000000e+00
> 0.00000000000000000e+00
> 0.00000000000000000e+00
> 1.00000000000000000e+00
> 1.00000000000000000e+00
> 1.00000000000000000e+00
> 
> The map written to file is what I expected, but the vector written to file is not. I expect [0,1,0,0,1,1], but it seems that all entries from one rank are grouped together and written to the file.
> Is this how Tpetra::MatrixMarket::Writer::writeDenseFile( ) is designed to work, or did I do something wrong?
> The short test code is attached to this email.
> 
> Thank you very much!
> Wen Yan
> 
> // Teuchos utility
> #include <Teuchos_ArrayViewDecl.hpp>
> #include <Teuchos_GlobalMPISession.hpp>
> #include <Teuchos_SerialDenseMatrix.hpp>
> #include <Teuchos_TimeMonitor.hpp>
> #include <Teuchos_oblackholestream.hpp>
> 
> // Tpetra container
> #include <MatrixMarket_Tpetra.hpp>
> #include <Tpetra_Core.hpp>
> #include <Tpetra_CrsMatrix.hpp>
> #include <Tpetra_Map.hpp>
> #include <Tpetra_MultiVector.hpp>
> #include <Tpetra_Operator.hpp>
> #include <Tpetra_RowMatrixTransposer_decl.hpp>
> #include <Tpetra_Vector.hpp>
> #include <Tpetra_Version.hpp>
> 
> void test() {
> 
>     using TMAP = Tpetra::Map<int, int>;          ///< default Teuchos::Map type
>     using TV = Tpetra::Vector<double, int, int>; ///< default to Tpetra::Vector type
> 
>     int rank, nprocs;
>     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
>     MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
>     const int localSize1 = 1; 
>     const int localSize2 = 2; 
>     const int globalSize1 = localSize1 * nprocs;
>     const int globalSize2 = localSize2 * nprocs;
> 
>     std::vector<int> vecGlobalIndexOnLocal(localSize1 + localSize2);
>     for (int i = 0; i < localSize1; i++) {
>         vecGlobalIndexOnLocal[i] = rank * localSize1 + i;
>     }
>     for (int i = 0; i < localSize2; i++) {
>         vecGlobalIndexOnLocal[i + localSize1] = rank * localSize2 + i + globalSize1;
>     }
>     auto commRcp = Teuchos::rcp(new Teuchos::MpiComm<int>(MPI_COMM_WORLD));
>     auto map = Teuchos::rcp(
>         new TMAP(globalSize1 + globalSize2, vecGlobalIndexOnLocal.data(), localSize1 + localSize2, 0, commRcp));
> 
>     auto vec = Teuchos::rcp(new TV(map, true));
>     for (int i = 0; i < localSize1 + localSize2; i++) {
>         vec->replaceLocalValue(i, rank);
>     }
> 
>     Tpetra::MatrixMarket::Writer<TV> writer;
>     writer.writeMapFile("map.mtx", *map);
>     writer.writeDenseFile("vec.mtx", vec);
> }
> 
> int main(int argc, char **argv) {
>     MPI_Init(&argc, &argv);
> 
>     test();
> 
>     MPI_Finalize();
>     return 0;
> }
> _______________________________________________
> Trilinos-Users mailing list
> Trilinos-Users at trilinos.org
> https://urldefense.proofpoint.com/v2/url?u=https-3A__trilinos.org_mailman_listinfo_trilinos-2Dusers&d=DwICAg&c=Cvk6809QJWx44KVfpEaK-g&r=s0Cs_B6-5lnucqIc3AS5jW688PqfYiw9JNMZS0NXqtY&m=YwEC85JJCiRN-Rbfk0tI-Px_DxQPp9z1MsfBIGkfGNE&s=FvMpFg4h2lsJHHjewaJd9NTG0wsZBi6TbZtQULme-t8&e= 



More information about the Trilinos-Users mailing list