[Trilinos-Users] Teuchos link error with Xcode

Hoemmen, Mark mhoemme at sandia.gov
Fri Jul 17 19:17:38 EDT 2015


On 7/17/15, 9:48 AM, "trilinos-users-request at trilinos.org"
<trilinos-users-request at trilinos.org> wrote:
>Message: 1
>Date: Tue, 14 Jul 2015 14:11:44 +0200
>From: Sensei <senseiwa at gmail.com>
>To: trilinos-users at trilinos.org
>Subject: Re: [Trilinos-Users] Teuchos link error with Xcode
>Message-ID: <55A4FC80.8040005 at gmail.com>
>Content-Type: text/plain; charset=utf-8; format=flowed
>
>An addition to the problem.
>
>It seems I cannot create an Epetra_Map correctly. In addition to the
>code I've posted, which cannot be linked for some missing identifiers,
>I've found a weird error.
>
>If I create a map, be either with RCP or standalone, it crashes.
>
>Take a look at this code, crashing when accessing a map:
>
>...
>int main(int argc, char * argv[])
>{
>     int rank = 0;
>
>#ifdef EPETRA_MPI
>     // Initialize MPI
>     MPI_Init(&argc,&argv);
>     Epetra_MpiComm Comm(MPI_COMM_WORLD);
>     rank = Comm.MyPID();
>#else
>     Epetra_SerialComm Comm;
>#endif
>
>     typedef double                            ST;
>     typedef Teuchos::ScalarTraits<ST>        SCT;
>     typedef SCT::magnitudeType                MT;
>     typedef Epetra_MultiVector                MV;
>     typedef Epetra_Operator                   OP;
>     typedef Belos::MultiVecTraits<ST,MV>     MVT;
>     typedef Belos::OperatorTraits<ST,MV,OP>  OPT;
>     using Teuchos::ParameterList;
>     using Teuchos::RCP;
>     using Teuchos::rcp;
>
>     RCP<Epetra_Map> Map;//(new Epetra_Map(20, 0, Comm)); // LINK ERROR
>IF CONSTRUCTED WITH new Epetra_Map
>     RCP<Epetra_CrsMatrix> A;
>     RCP<Epetra_MultiVector> B, X;
>
>     Epetra_Map m(200, 0, Comm); // RUNTIME ERROR
>
>     if (rank == 0) {
>         std::cout << "Communicator size " << Comm.NumProc() << std::endl;
>         int willCrash = 1;
>         switch (willCrash) {
>             case 1:  // CRASH WITH MAP
>                 std::cout << "MAP " << rank << " #global " <<
>m.NumGlobalElements() << " #local " << m.NumMyElements() << std::endl;
>                 break;
>
>             case 2:  // CRASH WITH RCP
>                 std::cout << "RCP " << rank << " #global " <<
>Map->NumGlobalElements() << " #local " << Map->NumMyElements() <<
>std::endl;
>                 break;
>
>             default: // NO CRASH
>                 std::cout << rank << std::endl;
>                 break;
>         }
>     }
>
>#ifdef EPETRA_MPI
>     MPI_Finalize();
>#endif
>     return 0;
>}
>
>The error at runtime is the following:
>
>Communicator size 4
>MAP 0 #global libc++abi.dylib: terminating with uncaught exception of
>type char const*
>...
>Why is Epetra_BlockMap::NumGlobalElements crashing? Am I doing something
>really stupid?


Epetra actually does throw exceptions of type "char const*, which are
error messages.  A first step to figuring out what's going on might be to
catch and print them.  I don't think Epetra necessarily promises parallel
consistency, so you'll have to use std::cerr to print them out on each
process.

I think the only place where Epetra_BlockMap::NumGlobalElements could
throw is line 549 of Epetra_BlockMap.h.  Furthermore, the only way it can
throw is if GlobalIndicesInt() returns false.  That's a little bit weird,
given that you are passing in an int as the global size, rather than a
long long.  Of course Epetra_Map's constructor shouldn't be throwing here
-- I think your code is OK.


mfh







More information about the Trilinos-Users mailing list