[Trilinos-Users] Error: "AZ_extract_comm_info: Received elements must be stored after all local elements"
Henian Xia
xiahenian at gmail.com
Wed Mar 30 14:57:11 MDT 2011
Hi Mike,
Thank you very much for your reply. I will follow your suggestions.
Thanks,
Henian
On Wed, Mar 30, 2011 at 3:56 PM, Heroux, Michael A <maherou at sandia.gov>wrote:
> Henian,
>
> Given the difficulties you are having, you might consider going back to
> your original approach of using Copy mode. Only this time, insert a whole
> row of values at once, not just one at a time. This would reduce your
> construction cost a lot.
>
> View mode is great, but we recommend using it as an ‘expert mode’
> optimization, after you gain some experience with Epetra.
>
> From your original post, you would replace:
>
> for( j = Matrix_ia[ i ] ; j < Matrix_ia[ i + 1 ] ; j ++ ) {
> (*equA).InsertGlobalValues( GlobalRow , 1 , Matrix_a +
> j , Matrix_ja + j );
>
> With something like this:
>
> int numEntries = Matrix_ia[i+1] - Matrix_ia[i];
> (*equA).InsertGlobalValues (GlobalRow, numEntries,
> Matrix_a+Matrix_ia[i], Matrix_ja+Matrix_ia[i];
>
> This should greatly improve the fill performance. Once you have that
> debugged you can look at optimizing with View mode.
>
> Mike
>
>
>
> On 3/30/11 2:29 PM, "Alan Williams" <william at sandia.gov> wrote:
>
> It may be possible that in “View” mode, A->FillComplete() is changing the
> indices in your Matrix_ia structure. If that’s the case, then those indices
> are wrong when the second call happens and A->FillComplete() is called
> again.
>
> I think your options are to either not call FillComplete on the second time
> (only call it during the first call), or alternatively only use “Copy” mode.
>
> Alan
>
>
>
> *From:* trilinos-users-bounces at software.sandia.gov [
> mailto:trilinos-users-bounces at software.sandia.gov<trilinos-users-bounces at software.sandia.gov>]
> *On Behalf Of *Henian Xia
> *Sent:* Wednesday, March 30, 2011 11:53 AM
> *To:* Williams, Alan B
> *Cc:* trilinos-users
> *Subject:* Re: [Trilinos-Users] Error: "AZ_extract_comm_info: Received
> elements must be stored after all local elements"
>
> Hi Alan,
> Thank you. If that's the case, do you have any suggestions please? Also I'm
> confused that since I have already released the memory for A in the end of
> the first call, why should the second call be affected?
>
> Thank you,
> Henian
>
> On Wed, Mar 30, 2011 at 1:26 PM, Williams, Alan B <william at sandia.gov>
> wrote:
>
> If it works correctly in “Copy” mode but not in “View” mode, then perhaps
> the call to A->FillComplete() is messing with the indices in your Matrix_ia
> structure, causing them to be wrong for the second call. Mike Heroux might
> know whether that could be the case.
> Alan
>
>
>
> *From:* Henian Xia [mailto:xiahenian at gmail.com <xiahenian at gmail.com>]
> *Sent:* Wednesday, March 30, 2011 11:17 AM
> *To:* Williams, Alan B
> *Cc:* trilinos-users
> *Subject:* Re: [Trilinos-Users] Error: "AZ_extract_comm_info: Received
> elements must be stored after all local elements"
>
>
> Hi,
> Thank you very much for your reply. I created A by "A = new
> Epetra_CrsMatrix(View, *Map, 3);". It's in a function called solveEqu() as
> following. When I call solveEqu() at the first time, it works, but when I
> call the function again, it reports that error. The objects "solver", "A",
> "x", and "b" are all defined inside the function solveEqu() and are deleted
> before returning from the function. So it's very strange that it works at
> the first time while doesn't work later. In addition, if I use "Copy" mode,
> it works perfectly.
>
> void solveEqu() {
> Epetra_CrsMatrix * A;
> A = new Epetra_CrsMatrix(View, *Map, 3);
> for( i = 0 ; i < NumMyElementsForTRILI ; i++ )
> {
> (*A).InsertGlobalValues( (*A).GRID( i ) , Matrix_ia[ i + 1 ] -
> Matrix_ia[ i ] ,
> Matrix_a + Matrix_ia[ i ] , Matrix_ja +
> Matrix_ia[ i ] );
> }
> (*A).FillComplete();
> AztecOO * solver;
> Epetra_Vector * x = new Epetra_Vector(*Map);
> Epetra_Vector * b = new Epetra_Vector(*Map);
> for( i = 0 ; i < 4 * localNodesNumber ; i ++ ) (*b)[i] = 1;
> solver = new AztecOO(A, x, b);
> (*solver).SetAztecOption(AZ_precond, AZ_Jacobi);
> (*solver).Iterate(1000, 1.0E-8);
> delete solver;
> delete b;
> delete x;
> delete A;
> }
>
> Thank you very much,
> Henian
>
> On Wed, Mar 30, 2011 at 1:04 PM, Williams, Alan B <william at sandia.gov>
> wrote:
>
> It is referring to elements of the matrix ‘A’.
> How did you create A?
> Aaln
>
>
>
> *From:* trilinos-users-bounces at software.sandia.gov [
> mailto:trilinos-users-bounces at software.sandia.gov<trilinos-users-bounces at software.sandia.gov>]
> *On Behalf Of *Henian Xia
> *Sent:* Wednesday, March 30, 2011 10:56 AM
> *To:* trilinos-users
> *Subject:* [Trilinos-Users] Error: "AZ_extract_comm_info: Received
> elements must be stored after all local elements"
>
>
> Hi everyone,
> I encountered this error "AZ_extract_comm_info: Received elements must be
> stored after all local elements" when I call the method "solver = new
> AztecOO(A, x, b);". Does anyone know what this means please?
>
> Thank you very much,
> Henian
>
>
--
Henian Xia
Graduate Research Assistant
Department of MABE
University of Tennessee, Knoxville
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://software.sandia.gov/pipermail/trilinos-users/attachments/20110330/87f9cfc9/attachment.html
More information about the Trilinos-Users
mailing list