[Trilinos-Users] Workaround for Amesos2/SuperLU_Dist Build Errors

Roberts, Nathan V. nvroberts at alcf.anl.gov
Tue Mar 31 10:55:45 MDT 2015


Dear Trilinos-Users,

We are looking to swap Amesos for Amesos2 in our framework (Camellia), which optionally supports SuperLU_Dist for global solves.  We have been running into precisely the same issue as Kris Beckwith in the thread from a few weeks ago quoted below.  I've come up with a workaround that I think will work for us, and I'm sharing in the hope that others might benefit.  (All of the below are using the public Git repository, updated today.)

>From that thread, it sounds like even SuperLU_Dist 4.0 is subject to this issue.  Our move to Amesos2 is motivated by a user who wants support for complex variables; this is part of a move from using Epetra to Tpetra.  However, he doesn't necessarily need the SuperLU_Dist support, at least for immediate purposes, so my thought is to use build options to support two combinations:

1. Amesos2 + SuperLU_Dist without complex support.
2. Amesos2 without SuperLU_Dist

I see in Amesos2_Superludist.hpp the relevant instantiations appear to be governed by the flag

HAVE_TPETRA_INST_COMPLEX_DOUBLE

which in turn is governed (in tpetra/core/CMakeLists.txt) by the flag

HAVE_COMPLEX_BLAS

which in turn is governed (in Teuchos/CMakeLists.txt) by the flag

Teuchos_ENABLE_COMPLEX

So, my approach in our Trilinos do-configure is simply to set

-D Teuchos_ENABLE_COMPLEX:BOOL=OFF

whenever SuperLU_Dist support is desired.

Now, we are also enabling support for KLU2, and there is an additional issue there: both SuperLU_Dist and KLU2 define a "CEILING" macro.  So, I renamed the one in packages/amesos2/src/SuiteSparse/KLU2/Include/klu2_version.h KLU_CEILING.

There were two more compile issues in /Users/nroberts/publicTrilinos/packages/amesos2/src/Amesos2_Superludist_def.hpp:

a) There were a couple calls to a non-existent method, getRawPtrComm(); I took the compiler's advice to replace with getRawMpiComm(), which seemed to make semantic sense in the context.
b) Line 216 involved an undeclared identifier matrixA_; I replaced with A, which seemed likely to be what was intended.

With those changes, I was able to get everything building.

Regards,
Nate

On Mar 13, 2015, at 11:26 AM, Eric Bavier <bavier at cray.com> wrote:

> No, this is the case in more recent SuperLU_DIST versions as well.  The complex and real headers both declare structures that are incompatible.  The Cray C++ compiler also throws errors when the real and complex versions are used together.
> 
> Kris, you may try to disable the complex support in Amesos2 if you do not need it.
> 
> `~Eric
> ________________________________________
> From: trilinos-users-bounces at software.sandia.gov [trilinos-users-bounces at software.sandia.gov] on behalf of Siva Rajamanickam [srajama at sandia.gov]
> Sent: Friday, March 13, 2015 10:55
> To: trilinos-users at software.sandia.gov
> Subject: Re: [Trilinos-Users] [EXTERNAL] Amesos2/SuperLUdist Build Errors on OSX
> 
> Kris
>   This looks like SuperLU_dist 2.5 has definitions that don't depend on scalar
> types (double or complex) in both *zdef and *ddef header files. I believe this
> is fixed in newer versions.
> 
> Thanks
> Siva
> 
> On 03/13/2015 07:59 AM, Kris Beckwith wrote:
>> xtern int_t pxgstrs_init(int_t, int_t, int_t, int_t,
> 
> _______________________________________________
> Trilinos-Users mailing list
> Trilinos-Users at software.sandia.gov
> https://software.sandia.gov/mailman/listinfo/trilinos-users
> _______________________________________________
> Trilinos-Users mailing list
> Trilinos-Users at software.sandia.gov
> https://software.sandia.gov/mailman/listinfo/trilinos-users



More information about the Trilinos-Users mailing list