COMBINATORIAL_BLAS 1.6
 
Loading...
Searching...
No Matches
trilinosMatSquare.cpp
Go to the documentation of this file.
1
2#include <cstring>
3#include <cstdio>
4#include <iostream>
5#include <fstream>
6
7#include <Epetra_ConfigDefs.h>
8
9#ifdef EPETRA_MPI
10#include <mpi.h>
11#include <Epetra_MpiComm.h>
12#endif
13
14#include <Epetra_SerialComm.h>
15#include <Epetra_Time.h>
16#include <Epetra_Import.h>
17#include <Epetra_Map.h>
18#include <Epetra_LocalMap.h>
19#include <Epetra_CrsGraph.h>
20#include <Epetra_CrsMatrix.h>
21#include <Epetra_Vector.h>
22#include <EpetraExt_MatrixMatrix.h>
23
24#include <EpetraExt_BlockMapIn.h>
25#include <EpetraExt_CrsMatrixIn.h>
26#include <EpetraExt_RowMatrixOut.h>
27
28
29int main(int argc, char** argv)
30{
31
32 if(argc!=2)
33 {
34 std::cout << "usage: ./trilinosMatSquare A.mtx\n";
35 return (-1);
36 }
37#ifdef EPETRA_MPI
38 MPI_Init(&argc,&argv);
39 Epetra_MpiComm Comm(MPI_COMM_WORLD);
40#else
41 Epetra_SerialComm Comm;
42#endif
43
44 char* A_file = argv[1];
45 int localProc = Comm.MyPID();
46
47 if (localProc == 0)
48 {
49 std::cout << "Squaring Matrix"<< A_file << std::endl;
50 }
51
52 Epetra_CrsMatrix* A = NULL;
53 Epetra_CrsMatrix* B = NULL;
54 Epetra_CrsMatrix* C = NULL;
55
56 Epetra_Map* A_row_map = NULL;
57 Epetra_Map* A_col_map = NULL;
58 Epetra_Map* A_range_map = NULL;
59 Epetra_Map* A_domain_map = NULL;
60
61
62 double tstart = MPI_Wtime();
63
64 // create maps
65 int err = EpetraExt::MatrixMarketFileToBlockMaps(A_file,
66 Comm,
67 (Epetra_BlockMap*&)A_row_map,
68 (Epetra_BlockMap*&)A_col_map,
69 (Epetra_BlockMap*&)A_range_map,
70 (Epetra_BlockMap*&)A_domain_map);
71
72 if (err != 0)
73 {
74 std::cout << "create_maps A returned err=="<<err<<std::endl;
75 return(err);
76 }
77
78 // Read the matrix
79 // do not use A_col_map in this function MatrixMarketFileToCrsMatrix
80 err = EpetraExt::MatrixMarketFileToCrsMatrix(A_file, *A_row_map, *A_range_map, *A_domain_map, A);
81 if (err != 0)
82 {
83 std::cout << "Error, MatrixMarketFileToCrsMatrix returned " << err << std::endl;
84 return(err);
85 }
86 B = new Epetra_CrsMatrix(*A);
87
88 double tio = MPI_Wtime() - tstart;
89 if (localProc == 0)
90 {
91 std::cout << "Total I/O time: " << tio << std::endl;
92 }
93
94
95 tstart = MPI_Wtime();
96 C = new Epetra_CrsMatrix(Copy, A->RowMap(), 1);
97 err = EpetraExt::MatrixMatrix::Multiply(*A, false, *B, false, *C);
98
99 if (err != 0)
100 {
101 std::cout << "err "<<err<<" from MatrixMatrix::Multiply"<<std::endl;
102 return(err);
103 }
104
105 double tmul = MPI_Wtime() - tstart;
106 if (localProc == 0)
107 {
108 std::cout << "nnz in C=AB: " << C->NumGlobalNonzeros() << std::endl;
109 std::cout << "Total multiplication time: " << tmul << std::endl;
110
111 }
112
113
114 delete C;
115 delete A;
116 delete B;
117
118 delete A_row_map;
119 delete A_col_map;
120 delete A_range_map;
121 delete A_domain_map;
122
123
124#ifdef EPETRA_MPI
125 MPI_Finalize();
126#endif
127
128
129 return(0);
130}
131
132
133
int main()
Definition Driver.cpp:12
Definition test.cpp:53
double A
double C
Definition options.h:15