[Trilinos-Users] [EXTERNAL] vectors on overlapped maps

erhan turan turane at gmail.com
Sat Jun 30 10:23:19 MDT 2012


Hi Mike,

Thanks for your advice. You're right, I forgot to check the return value of
Norm2().  Let me think something that can be performed for non-trivial
distribution. Maybe I can figure something out.

Erhan

On Fri, Jun 29, 2012 at 10:35 PM, Heroux, Michael A <maherou at sandia.gov>wrote:

>  Erhan,
>
>  The reason you are getting a result of zero is that the Norm2 method is
> checking if the global IDs in the vector map are unique.  This is the first
> line of executable code:
>
>
>    if (!Map().UniqueGIDs()) {EPETRA_CHK_ERR(-1);}
>
>  Because this check fails, the method returns with a error code of -1.
>  If you were to check the return value of the method call, you should see
> -1 returned.
>
>  The bigger question of trying to compute norms of vectors with
> overlapped elements is supported in some situations.  In particular, if you
> create an overlap map such that shared global IDs are at the end of the
> global ID list on each processor, you can create an additional map with
> non-overlap IDs and two Epetra vectors where the non-overlap is a sub
> vector of the overlapped vector.
>
>  The following code (adapted from your code) is approximately correct.
>
>  I hope this helps.
>
>  Mike
>
>    int NumGlobalElements = 4; // global dimension of the problem
>
>
>    int NumMyElements; // local nodes
>
>   Epetra_IntSerialDenseVector MyGlobalElements;
>
>
>    if( Comm.MyPID() == 0 ) {
>
>     NumMyElements = 3;
>
>     MyGlobalElements.Size(NumMyElements);
>
>     MyGlobalElements[0] = 0;
>
>     MyGlobalElements[1] = 1;
>
>     MyGlobalElements[2] = 2;
>
>   } else {
>
>     NumMyElements = 3;
>
>     MyGlobalElements.Size(NumMyElements);
>
>     MyGlobalElements[0] = 2;
>
>     MyGlobalElements[1] = 3;
>
>     MyGlobalElements[2] = 1;
>
>   }
>
>
>    // create a overlap map
>
>   Epetra_Map Map_overlap(-1,MyGlobalElements.Length(),
>
> MyGlobalElements.Values(),0, Comm);
>
>
>    // create a non-overlap map
>
>   Epetra_Map Map_unique(-1,MyGlobalElements.Length()-1,
>
>  MyGlobalElements.Values(),0, Comm);
>
>
>    // Create importer to handle data replication
>
>   Epetra_Import x_unique_to_overlap(Map_overlap, Map_unique);
>
>
>    // create a vector based on overlap map
>
>   Epetra_Vector x_overlap(Map_overlap);
>
>
>    // create a vector based on non-overlap map
>
>   // Passing in the pointer to the first element of x_overlap
>
>   // means that x_unique and x_overlap share space
>
>   Epetra_Vector x_unique(View, Map_unique,&x_overlap[0]);
>
>
>    // Now set values in x_unique (trivial in this example, but generally
> not)
>
>   x_unique.PutScalar(1.0);
>
>
>    // Now copy replicated values to overlap vector
>
>   x_overlap.Import(x_unique, x_unique_to_overlap, Insert);
>
>
>    double myNorm;
>
>
>    assert(x_overlap.Norm2(&myNorm)==-1);
>
>
>    x_unique.Norm2(&myNorm);
>
>
>
>  cout<<"norm is ="<<myNorm<< " over " << x_unique.GlobalLength()<< "
> elements"<<endl;
>
>
>
>   From: erhan turan <turane at gmail.com>
> Date: Friday, June 29, 2012 10:38 AM
> To: "trilinos-users at software.sandia.gov" <
> trilinos-users at software.sandia.gov>
> Subject: [EXTERNAL] [Trilinos-Users] vectors on overlapped maps
>
>  Hello everyone,
>
>  I have a question regarding to vector overlapped maps. Attached code is
> a modification of example 9 in didasko/epetra folder. A vector is created
> with an overlapping map.
>
>  What to expect as a norm value on two cores is 2. what you get is 0 ! Of
> course, this was an example on Import and Export methods - there you are
> also playing win Epetra_CombineMode.
>
>  My question is, why is "0" the result?  And also, should we always use
> Export and Import methods to deal overlapped maps? So, it is not safe to
> use such a naive approach even if the map is created carefully.
>
>  Regards,
>
>  Erhan Turan
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://software.sandia.gov/pipermail/trilinos-users/attachments/20120630/86411f31/attachment.html 


More information about the Trilinos-Users mailing list