[Trilinos-Users] Two compilation problems with MultiLevelPreconditioner

Ernesto Prudencio prudenci at slac.stanford.edu
Thu Nov 29 13:14:31 MST 2007


Thank you, Jonathan and Jim. It is working now with -DHAVE_CONFIG_H.

Best,

Ernesto.

On Thu, 29 Nov 2007, Jonathan Hu wrote:

> Hi Ernesto,
>
>    The HAVE_CONFIG_H macro should be defined in the makefile compiling your 
> application.
>
> Alternatively, you could use the Makefile.export approach.   To do this, add 
> the following line to your application Makefile:
>
> include 
> /absolute/path/to/your/Trilinos/build/directory/packages/ml/Makefile.export.ml
>
> This defines two make variables, ML_INCLUDES and ML_LIBS, that encapsulate 
> all of the Trilinos headers and libraries that ML depends on.  Use these two 
> variables in your application compile and link lines, respectively. 
> Makefile.export.ml also defines the HAVE_CONFIG_H macro.
>
> Regards,
> Jonathan
>
> Ernesto Prudencio wrote:
>> 
>> Thanks, Jim.
>> 
>> In which Makefile should I use it: in some package Makefile or in the 
>> Makefile compiling my application?
>> 
>> Ernesto.
>> 
>> On Thu, 29 Nov 2007, James Willenbring wrote:
>> 
>>> Ernesto,
>>> 
>>> Did you use -DHAVE_CONFIG_H?  It looks like you might not have.  We are
>>> currently looking at lifting the requirement of defining HAVE_CONFIG_H,
>>> but for now, that may help you avoid these problems.
>>> 
>>> Jim
>>> 
>>> On Wed, 2007-11-28 at 21:58 -0800, Ernesto Prudencio wrote:
>>>> Hi. In a include file of mine, called trilinos.hpp, I have:
>>>> 
>>>> // BEGIN FILE trilinos.hpp
>>>> 
>>>> #include <Epetra_MpiComm.h>
>>>> #include <Epetra_Map.h>
>>>> #include <Epetra_Vector.h>
>>>> #include <Epetra_CrsMatrix.h>
>>>> #include <AztecOO.h> // line 14
>>>> #include <ml_include.h>
>>>> #include <ml_MultiLevelOperator.h>
>>>> #include <Teuchos_ParameterList.hpp> // line 17
>>>> #include <ml_MultiLevelPreconditioner.h>
>>>> #include <ml_epetra_utils.h>
>>>> ...
>>>> 
>>>> class trilinos {
>>>> ...
>>>> private:
>>>>    Epetra_MpiComm*       m_commForTrilinos;
>>>>    Epetra_Map*           m_mapForTrilinos;
>>>>    Epetra_CrsMatrix*     m_matrixForTrilinos;
>>>>    Epetra_LinearProblem* m_problemForTrilinos;
>>>>    AztecOO*              m_solverForTrilinos;
>>>>    Epetra_Vector*        m_rhsForTrilinos;
>>>>    Epetra_Vector*        m_dofsForTrilinos;
>>>>    ML*                                  m_mlHandle;
>>>>    ML_Aggregate*                        m_mlAggObject;
>>>>    ML_Epetra::MultiLevelOperator*       m_mlOperator;
>>>>    Teuchos::ParameterList*              m_mlList;
>>>>    ML_Epetra::MultiLevelPreconditioner* m_mlPreconditioner; // line 66
>>>>    int                                  m_nLevels;
>>>> ...
>>>> }
>>>> 
>>>> // END FILE trilinos.hpp
>>>> 
>>>> --> Compilation problem 1: duplicated defines
>>>> 
>>>> In file included from <installation>/include/Teuchos_ConfigDefs.hpp:77,
>>>>      from <installation>/include/Teuchos_ParameterListExceptions.hpp:33,
>>>>      from <installation>/include/Teuchos_ParameterList.hpp:37,
>>>>      from trilinos.hpp:17,
>>>>      from NML_ITLLinearSolver.C:13:
>>>> <installation>/include/Teuchos_config.h:14:1: warning: "F77_FUNC" 
>>>> redefined
>>>> In file included from <installation>/include/az_aztec.h:61,
>>>>      from <installation>/include/AztecOO.h:44,
>>>>      from trilinos.hpp:14,
>>>>      from NML_ITLLinearSolver.C:13:
>>>> <installation>/include/az_f77func.h:99:1: warning: this is the location 
>>>> of
>>>> the previous definition
>>>> 
>>>> In file included from <installation>/include/Teuchos_ConfigDefs.hpp:77,
>>>>      from <installation>/include/Teuchos_ParameterListExceptions.hpp:33,
>>>>      from <installation>/include/Teuchos_ParameterList.hpp:37,
>>>>      from trilinos.hpp:17,
>>>>      from NML_ITLLinearSolver.C:13:
>>>> <installation>/include/Teuchos_config.h:19:1: warning: "F77_FUNC_" 
>>>> redefined
>>>> In file included from <installation>/include/az_aztec.h:61,
>>>>      from <installation>/include/AztecOO.h:44,
>>>>      from trilinos.hpp:14,
>>>>      from NML_ITLLinearSolver.C:13:
>>>> <installation>/include/az_f77func.h:103:1: warning: this is the location
>>>> of the previous definition
>>>> 
>>>> --> How I "solved" compilation problem 1: put ifndef-endif pair around
>>>> both defines in Teuchos_config.h
>>>> 
>>>> --> Compilation problem 2:
>>>> 
>>>> trilinos.hpp:66: error: ISO C++ forbids declaration of
>>>> 'MultiLevelPreconditioner' with no type
>>>> trilinos.hpp:66: error: invalid use of '::'
>>>> trilinos.hpp:66: error: expected ';' before '*' token
>>>> 
>>>> --> How I "solved" compilation problem 2: included ml_config.h in
>>>> <installation>/include/ml_MultiLevelPreconditioner.h, so that "#if
>>>> defined(HAVE_ML_EPETRA) && defined(HAVE_ML_TEUCHOS)" would work properly.
>>>> However, such correction caused extra redefinition problems like in
>>>> problem 1, "solved" again with ifndef-endif pairs.
>>>> 
>>>> --> Once the compilation problems were solved, linking phase worked with
>>>> libraries "-laztecoo -lml -lifpack -lepetra -lteuchos -lepetraext". And
>>>> the executable worked properly as well.
>>>> 
>>>> /////////////////    Question     ////////////////////
>>>> 
>>>> --> Any ideas if this is a problem of the library or a problem of my
>>>> specific installation?
>>>> 
>>>> My script for configuration reads like this:
>>>> 
>>>> export CC=/usr/bin/mpicc
>>>> export CXX=/usr/bin/mpiCC
>>>> ./configure --prefix=$HOME/Desktop/trilinos-8.0.3/installation
>>>> --enable-mpi --enable-epetra -enable-teuchos --enable-aztecoo --enable-ml
>>>> --enable-didasko
>>>> 
>>>> Thanks in advance,
>>>> 
>>>> Ernesto.
>>>> 
>>>> 
>>>> 
>>>> _______________________________________________
>>>> Trilinos-Users mailing list
>>>> Trilinos-Users at software.sandia.gov
>>>> http://software.sandia.gov/mailman/listinfo/trilinos-users
>>> 
>>> 
>> 
>> _______________________________________________
>> Trilinos-Users mailing list
>> Trilinos-Users at software.sandia.gov
>> http://software.sandia.gov/mailman/listinfo/trilinos-users
>> 
>
>
> -- 
> Jonathan J. Hu, mailto:jhu at sandia.gov
> Postal address: Sandia National Laboratories
>               Mailstop 9159
>               PO Box 969, Livermore, CA 94551-0969
> Tel / Fax (925) 294-2931 
>
>



More information about the Trilinos-Users mailing list