[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