[Trilinos-Users] [EXTERNAL] Re: Ifpack2: GlobalMPISession Error
V M Krushnarao Kotteda
kvmkrao at gmail.com
Sun Jul 31 22:46:04 EDT 2016
Hi All,
I am using the code to solve the Tri-diagonal system of equations resulting
from two overlapping sub-domains. Each sub-domain contains 10
nodes/equations
including two overlapping nodes.
Proc # 0 (sub-domain # 1)
lglob[1] = 1; lglob[2] = 2; lglob[3] = 3;
lglob[4] = 4; lglob[5] = 5;
lglob[6] = 10; lglob[7] = 11; lglob[8] = 12;
lglob[9] = 13; lglob[10] = 14;
Proc # 1 (sub-domain # 2)
lglob[1] = 5; lglob[2] = 6; lglob[3] = 7;
lglob[4] = 8; lglob[5] = 9;
lglob[6] = 14; lglob[7] = 15; lglob[8] = 16;
lglob[9] = 17; lglob[10] = 18;
lglob array gives the global node number corresponding to a local node.
lglob[] represents the over-lapping nodes.
The following code arranges the linear system of equations on each
processor and
solves the equations for 18 unknowns.
The local map (Tpetra) has only 9 nodes on a processor. Therefore, I get
solution at only 9 nodes. The global equation number corresponds to the
local node is different from values shown above. Please see the output
from the code.
Is there a way to get the solution x[[lglob[i]] at all 10 nodes in a
sub-domain.
*code:*
int main ()
{
.......
const global_size_t numGlobalElements = 18;
RCP<const map_type> map (new map_type (numGlobalElements, 0, comm));
const size_t numMyElements = 10;
ArrayRCP<size_t> myGlobalElements = arcp<size_t> (numMyElements);
for(int i = 0; i < numMyElements; ++i) {
myGlobalElements[i] = glob[i]-1;
}
sparse_mat_type A (map, 0);
for (size_t i = 0; i < numMyElements; ++i) {
.........
A.insertGlobalValues (myGlobalElements[i],
tuple<GO> (myGlobalElements[i]-1,
myGlobalElements[i], myGlobalElements[i]+1),
tuple<ST> (negOne, two, negOne));
........
}
A.fillComplete ();
multivector_type b (map, 1);
b.putScalar (STS::one ());
multivector_type x (map, 1, true);
x.putScalar (STS::zero ());
try {
Ifpack2::Test::solve (A, b, x, 1, 1, 100, 1000, 1.0e-8, false, "RILUK");
}
catch (std::exception& e) {
lclSuccess = 0;
errStrm << e.what ();
}
ArrayRCP<ST> view;
int size = x.getLocalLength ();
Array<ST> copy1(numMyElements);
view = x.get1dViewNonConst();
x.get1dCopy(copy1(),numMyElements);
for(int i=0; i < numMyElements; i ++) {
std::cout << myRank << " " << i <<" " <<copy1[i] << std::endl;
}
.....
}
*Output :*
Tpetra::CrsMatrix (Kokkos refactor):
Template parameters:
Scalar: double
LocalOrdinal: int
GlobalOrdinal: int
Node: Kokkos::Compat::KokkosDeviceWrapperNode<Kokkos::Serial,
Kokkos::HostSpace>
isFillComplete: true
Global dimensions: [18, 18]
Global number of entries: 52
Global number of diagonal entries: 18
Global max number of entries in a row: 3
Row Map:
"Tpetra::Map":
Template parameters:
LocalOrdinal: int
GlobalOrdinal: int
Node: Kokkos::Compat::KokkosDeviceWrapperNode<Kokkos::Serial,
Kokkos::HostSpace>
Global number of entries: 18
Minimum global index: 0
Maximum global index: 17
Index base: 0
Number of processes: 2
Uniform: true
Contiguous: true
Distributed: true
Process 0 of 2:
My number of entries: 9
My minimum global index: 0
My maximum global index: 8
My global indices: [0, 1, 2, 3, 4, 5, 6, 7, 8]
Process 1 of 2:
My number of entries: 9
My minimum global index: 9
My maximum global index: 17
My global indices: [9, 10, 11, 12, 13, 14, 15, 16, 17]
Column Map:
"Tpetra::Map":
Template parameters:
LocalOrdinal: int
GlobalOrdinal: int
Node: Kokkos::Compat::KokkosDeviceWrapperNode<Kokkos::Serial,
Kokkos::HostSpace>
Global number of entries: 20
Minimum global index: 0
Maximum global index: 17
Index base: 0
Number of processes: 2
Uniform: false
Contiguous: false
Distributed: true
Process 0 of 2:
My number of entries: 10
My minimum global index: 0
My maximum global index: 9
My global indices: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Process 1 of 2:
My number of entries: 10
My minimum global index: 8
My maximum global index: 17
My global indices: [9, 10, 11, 12, 13, 14, 15, 16, 17, 8]
Domain Map: same as row Map
Range Map: same as domain Map
Process rank: 0
Number of allocated entries: 26
Number of entries: 26
Number of diagonal entries: 9
Max number of entries per row: 3
Process rank: 1
Number of allocated entries: 26
Number of entries: 26
Number of diagonal entries: 9
Max number of entries per row: 3
Proc Rank Global Row Num Entries(Index,Value)
0 0 2 (0, 2) (1, -1)
0 1 3 (0, -1) (1, 2) (2, -1)
0 2 3 (1, -1) (2, 2) (3, -1)
0 3 3 (2, -1) (3, 2) (4, -1)
0 4 3 (3, -2) (4, 4) (5, -2)
0 5 3 (4, -1) (5, 2) (6, -1)
0 6 3 (5, -1) (6, 2) (7, -1)
0 7 3 (6, -1) (7, 2) (8, -1)
0 8 3 (7, -1) (8, 2) (9, -1)
Proc Rank Global Row Num Entries(Index,Value)
1 9 3 (9, 2) (10, -1) (8, -1)
1 10 3 (9, -1) (10, 2) (11, -1)
1 11 3 (10, -1) (11, 2) (12, -1)
1 12 3 (11, -1) (12, 2) (13, -1)
1 13 3 (12, -2) (13, 4) (14, -2)
1 14 3 (13, -1) (14, 2) (15, -1)
1 15 3 (14, -1) (15, 2) (16, -1)
1 16 3 (15, -1) (16, 2) (17, -1)
1 17 2 (16, -1) (17, 2)
"Tpetra::MultiVector":
Template parameters:
Scalar: double
LocalOrdinal: int
GlobalOrdinal: int
Node: Serial/Wrapper
Global number of rows: 18
Number of columns: 1
Process 0 of 2:
Local number of rows: 9
Column stride: 9
Values:
[8.5; 16; 22.5; 28; 32.5; 36.5; 39.5; 41.5; 42.5]
Process 1 of 2:
Local number of rows: 9
Column stride: 9
Values:
[42.5; 41.5; 39.5; 36.5; 32.5; 28; 22.5; 16; 8.5]
The Belos solve took 4 iterations to converge.
It achieved a tolerance of: 0
Proc # node# x[node#]
0 1 8.5000000000000053
0 2 16.000000000000011
0 3 22.500000000000014
0 4 28.000000000000021
0 5 32.500000000000028
0 6 36.500000000000036
0 7 39.500000000000036
0 8 41.500000000000043
0 9 42.500000000000043
0 10 0.0000000000000000
1 1 42.500000000000043
1 2 41.500000000000043
1 3 39.500000000000036
1 4 36.500000000000036
1 5 32.500000000000036
1 6 28.000000000000036
1 7 22.500000000000025
1 8 16.000000000000014
1 9 8.5000000000000089
1 10 0.0000000000000000
Thanks.
On Tue, Jul 26, 2016 at 11:58 AM, Hoemmen, Mark <mhoemme at sandia.gov> wrote:
> On 7/26/16, 11:04 AM, "V M Krushnarao Kotteda" <kvmkrao at gmail.com> wrote:
> > Ifpack2 provides various solvers and pre-conditioners.
> > Please let me know if there is a way to choose proper pre-conditioner
> and solver for the given system of equations?
>
> There are too many different kinds of linear systems for us to try to
> choose a preconditioner and solver automatically. I can only recommend
> reading standard textbooks on numerical linear algebra.
>
Thank you, Mark.
> mfh
>
>
>
Best regards,
V M Krushnarao Kotteda
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://trilinos.org/pipermail/trilinos-users/attachments/20160731/e08f5766/attachment.html>
More information about the Trilinos-Users
mailing list