[Trilinos-Users] don't understand AztecOO with multiple processors
Davood Ansari
david.ansari at gmail.com
Sun Dec 16 21:53:36 MST 2007
Hi All
I have trouble using the AztecOO solver when I use more than one process.
I think the problem originates form the fact that I don't exactly understand
the parallel.
Here is the details:
I have managed to construct my FE matrix and to impose the bc's and loads.
I have a serial code to which I compare the resulting matrix problem and the
right hand side vector.
I use Epetra's simple linearly divided maps to construct a RowMap that
divided my rows
(or simply DOF's) by the number of processes. At the same time I chose the
column map to
be a map that covers all DOFs for each process. Thus for each process is
associated with
a row block of the matrix.
In this way the range map of the matrix is also a map that covers all DOFs
for
each process.
Epetra_Map::Epetra_Map RowMap(newNoOfDOFs, 0, Comm) ;
Epetra_Map::Epetra_Map ColMap(newNoOfDOFs, newNoOfDOFs, 0, Comm) ;
int* NumNzPtr = (int*)(NumNz) ;
Epetra_CrsGraph Graph(Copy, RowMap, ColMap, NumNzPtr, true) ;
build_crs_graph (Graph, NumNz, rank, RowMap, ColMap) ;
Epetra_FECrsMatrix A(Copy, Graph, true) ;
Epetra_FEVector RHS(RowMap, true) ;
For a small example (23 DOFs only) , I did check the matrix and the RHS and
verified that they are accurate.
Now I am using the AztecOO to solve my sample problem.
Here I have to define a LHS (or the solutions) vector.
So I did the following: (A is the matrix in A . LHS = RHS)
Epetra_FEVector LHS(A.DomainMap(), false) ; // this shall contain the
solution
Epetra_LinearProblem Problem(&A, &LHS, &RHS) ;
AztecOO Solver(Problem) ;
Solver.SetAztecOption( AZ_solver, AZ_gmres) ;
Solver.SetAztecOption( AZ_precond, AZ_none) ;
Solver.Iterate(50,1E-9) ;
The code works only when I have a single process. With more than one
process, lots of
weired things happen. For example this is the result I get when I use :
cout << LHS ;
MyPID GID Value
0 0 0
0 1 0
0 2 0.411514
0 3 0
0 4 0.104817
0 5 0.835807
0 6 0
0 7 0.332329
0 8 0.987688
0 9 0
0 10 0.500903
0 11 0.649448
0 12 0
0 13 0
0 14 0
0 15 0
0 16 0
0 17 0
0 18 0
0 19 0
0 20 0
0 21 0
0 22 0
Epetra::MultiVector
1 0 0.997976
1 1 -0.239904
1 2 0
1 3 0
1 4 0.905788
1 5 -0.196422
1 6 0.482265
1 7 - 0.636227
1 8 -0.588409
1 9 0.707857
1 10 -0.282271
1 11 0
1 12 0
1 13 0
1 14 0
1 15 0
1 16 0
1 17 0
1 18 0
1 19 0
1 20 0
1 21 0
1 22 0
While the correct solution is:
0.000000
0.000000
0.411514
0.000000
0.104817
0.835807
0.000000
0.332329
0.987688
0.000000
0.500903
0.649448
0.996917
0.772527
0.000000
0.000000
0.904827
0.433849
0.481754
0.916029
-0.587785
0.707107
0.464568
The solution seems to have been build as two separate vectors both of the
global dof's size !!!!
I guess some thing is terribly wrong with my methodology.
Kindly comment.
Davood
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://software.sandia.gov/mailman/private/trilinos-users/attachments/20071217/d6f8b164/attachment-0001.html
More information about the Trilinos-Users
mailing list