Skip to content
Snippets Groups Projects

Feature/fs1519 suitesparse ldl spqr

Merged Christoph Grüninger requested to merge feature/FS1519-suitesparse-ldl-spqr into master

Tested with fixed openSuse package, now SPQR works for me, too.

Merge request reports

Loading
Loading

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
dune/istl/ldl.hh 0 → 100644
154 */
155 void apply(T* x, T* b)
156 {
157 const int dimMat(ldlMatrix_.N());
158 ldl_perm(dimMat, Y_, b, P_);
159 ldl_lsolve(dimMat, Y_, Lp_, Li_, Lx_);
160 ldl_dsolve(dimMat, Y_, D_);
161 ldl_ltsolve(dimMat, Y_, Lp_, Li_, Lx_);
162 ldl_permt(dimMat, x, Y_, P_);
163 }
164
165 void setOption(unsigned int option, double value)
166 {
167 DUNE_UNUSED_PARAMETER(option);
168 DUNE_UNUSED_PARAMETER(value);
169 }
  • What is the reason to have this no-op method? Is there some value to gain from having all suitesparse wrappers fulfill the same interface? Is there an ldl control array and it is just not implemented?

  • Hi @dominic . Are you referring to setOption? If so, I added it in order to have exactly the same methods of umfpack. I think it is necessary because you can change the solver in your code with only a typedef without the need of commenting out any methods. I don't think there is a ldl control array but I can take a look again to see if I have missed it.

  • @marco.agnese istl does not have any type of parameter interface. To some extent this is what we want to achieve in the feature/istl-ini branch, where all components will get an additional interface to configure via a ParameterTree

  • @christi I don't get your comment. setOption is already used by UMFPack bindings. How is ParameterTree related to Marco's code?

  • dune/istl/spqr.hh 0 → 100644
    159 std::cout<<"Rank Estimate: "<<cc_->SPQR_istat[4]<<std::endl<<std::endl;
    160 }
    161 }
    162
    163 /** \copydoc InverseOperator::apply(X&,Y&,double,InverseOperatorResult&) */
    164 virtual void apply (domain_type& x, range_type& b, double reduction, InverseOperatorResult& res)
    165 {
    166 DUNE_UNUSED_PARAMETER(reduction);
    167 apply(x, b, res);
    168 }
    169
    170 void setOption(unsigned int option, double value)
    171 {
    172 DUNE_UNUSED_PARAMETER(option);
    173 DUNE_UNUSED_PARAMETER(value);
    174 }
  • Those additional solvers use ColCompMatrix as internal matrix structure and set the StoresColumnCompressed capability to true. I would conclude, that it is possible without further adjustments to plug them into the overlapping schwarz code. It would be nice if this could be tested. The guard in https://gitlab.dune-project.org/core/dune-istl/blob/master/dune/istl/overlappingschwarz.hh#L313 has to be changed for that though (btw I think this guarding could be safely deleted!)

  • Yes, I can remove the guard and add a preprocessor variable into https://gitlab.dune-project.org/core/dune-istl/blob/master/dune/istl/test/overlappingschwarztest.cc in order to choose the direct solver in the test. What do you think?

  • Yes, it would be very nice if that works out of the box.

  • @dominic Since I cannot push any change to the branch do you want to do the change yourself or how it works?

  • @marco.agnese I have given you developer status, which allows you to push to feature branches.

  • Marco Agnese Added 9 commits:

    Added 9 commits:

    • 4a0f4cdb...f8774757 - 8 commits from branch master
    • 6105a90a - Merge branch 'master' into feature/FS1519-suitesparse-ldl-spqr
  • Marco Agnese Added 1 commit:

    Added 1 commit:

    • be1c8442 - test overlappingschwartz also with SPQR and LDL
  • @dominic I have implemented the change but I have trouble testing it since the build-system found SuperLU but it seems that there are some missing headers so it fails to compile the test. May you test it?

  • I have tested your branch. There seems to be some problem in SPQR:

    /home/dominic/dune/dune-istl/dune/istl/spqr.hh: In member function ‘virtual void Dune::SPQR<Dune::BCRSMatrix<Dune::FieldMatrix<K, n, p>, TA> >::apply(Dune::SPQR<Dune::BCRSMatrix<Dune::FieldMatrix<K, n, p>, TA> >::domain_type&, Dune::SPQR<Dune::BCRSMatrix<Dune::FieldMatrix<K, n, p>, TA> >::range_type&, Dune::InverseOperatorResult&)’:
    /home/dominic/dune/dune-istl/dune/istl/spqr.hh:154:42: error: ‘cholmod_common’ has no member named ‘SPQR_flopcount’
             std::cout<<"Flops Taken: "<<cc_->SPQR_flopcount<<std::endl;
                                              ^
    /home/dominic/dune/dune-istl/dune/istl/spqr.hh:155:44: error: ‘cholmod_common’ has no member named ‘SPQR_analyze_time’
             std::cout<<"Analysis Time: "<<cc_->SPQR_analyze_time<<" s"<<std::endl;
                                                ^
    /home/dominic/dune/dune-istl/dune/istl/spqr.hh:156:45: error: ‘cholmod_common’ has no member named ‘SPQR_factorize_time’
             std::cout<<"Factorize Time: "<<cc_->SPQR_factorize_time<<" s"<<std::endl;
                                                 ^
    /home/dominic/dune/dune-istl/dune/istl/spqr.hh:157:45: error: ‘cholmod_common’ has no member named ‘SPQR_solve_time’
             std::cout<<"Backsolve Time: "<<cc_->SPQR_solve_time<<" s"<<std::endl;
  • I have also problem with spqrtest. At linking stage I have these errors:

    /usr/local_machine/suitesparse-4.4.0/lib/libspqr.a(spqr_larftb.o): In function `void spqr_larftb<double>(int, long, long, long, long, long, double*, double*, double*, double*, cholmod_common_struct*)':
    spqr_larftb.cpp:(.text._Z11spqr_larftbIdEvilllllPT_S1_S1_S1_P21cholmod_common_struct[_Z11spqr_larftbIdEvilllllPT_S1_S1_S1_P21cholmod_common_struct]+0x2c3): undefined reference to `dlarfb_'
    spqr_larftb.cpp:(.text._Z11spqr_larftbIdEvilllllPT_S1_S1_S1_P21cholmod_common_struct[_Z11spqr_larftbIdEvilllllPT_S1_S1_S1_P21cholmod_common_struct]+0x3b9): undefined reference to `dlarft_'
    spqr_larftb.cpp:(.text._Z11spqr_larftbIdEvilllllPT_S1_S1_S1_P21cholmod_common_struct[_Z11spqr_larftbIdEvilllllPT_S1_S1_S1_P21cholmod_common_struct]+0x673): undefined reference to `dlarft_'
    spqr_larftb.cpp:(.text._Z11spqr_larftbIdEvilllllPT_S1_S1_S1_P21cholmod_common_struct[_Z11spqr_larftbIdEvilllllPT_S1_S1_S1_P21cholmod_common_struct]+0x711): undefined reference to `dlarft_'
    spqr_larftb.cpp:(.text._Z11spqr_larftbIdEvilllllPT_S1_S1_S1_P21cholmod_common_struct[_Z11spqr_larftbIdEvilllllPT_S1_S1_S1_P21cholmod_common_struct]+0x7a8): undefined reference to `dlarft_'
    /usr/local_machine/suitesparse-4.4.0/lib/libspqr.a(spqr_larftb.o): In function `void spqr_larftb<std::complex<double> >(int, long, long, long, long, long, std::complex<double>*, std::complex<double>*, std::complex<double>*, std::complex<double>*, cholmod_common_struct*)':
    spqr_larftb.cpp:(.text._Z11spqr_larftbISt7complexIdEEvilllllPT_S3_S3_S3_P21cholmod_common_struct[_Z11spqr_larftbISt7complexIdEEvilllllPT_S3_S3_S3_P21cholmod_common_struct]+0x2c3): undefined reference to `zlarfb_'
    spqr_larftb.cpp:(.text._Z11spqr_larftbISt7complexIdEEvilllllPT_S3_S3_S3_P21cholmod_common_struct[_Z11spqr_larftbISt7complexIdEEvilllllPT_S3_S3_S3_P21cholmod_common_struct]+0x3b9): undefined reference to `zlarft_'
    spqr_larftb.cpp:(.text._Z11spqr_larftbISt7complexIdEEvilllllPT_S3_S3_S3_P21cholmod_common_struct[_Z11spqr_larftbISt7complexIdEEvilllllPT_S3_S3_S3_P21cholmod_common_struct]+0x673): undefined reference to `zlarft_'
    spqr_larftb.cpp:(.text._Z11spqr_larftbISt7complexIdEEvilllllPT_S3_S3_S3_P21cholmod_common_struct[_Z11spqr_larftbISt7complexIdEEvilllllPT_S3_S3_S3_P21cholmod_common_struct]+0x711): undefined reference to `zlarft_'
    spqr_larftb.cpp:(.text._Z11spqr_larftbISt7complexIdEEvilllllPT_S3_S3_S3_P21cholmod_common_struct[_Z11spqr_larftbISt7complexIdEEvilllllPT_S3_S3_S3_P21cholmod_common_struct]+0x7a8): undefined reference to `zlarft_'
    /usr/local_machine/suitesparse-4.4.0/lib/libspqr.a(spqr_front.o): In function `long spqr_front<double>(long, long, long, double, long, long, double*, long*, char*, double*, double*, double*, double*, cholmod_common_struct*)':
    spqr_front.cpp:(.text._Z10spqr_frontIdElllldllPT_PlPcS1_S1_PdS4_P21cholmod_common_struct[_Z10spqr_frontIdElllldllPT_PlPcS1_S1_PdS4_P21cholmod_common_struct]+0x656): undefined reference to `dlarfg_'
    spqr_front.cpp:(.text._Z10spqr_frontIdElllldllPT_PlPcS1_S1_PdS4_P21cholmod_common_struct[_Z10spqr_frontIdElllldllPT_PlPcS1_S1_PdS4_P21cholmod_common_struct]+0x936): undefined reference to `dlarf_'
    /usr/local_machine/suitesparse-4.4.0/lib/libspqr.a(spqr_front.o): In function `long spqr_front<std::complex<double> >(long, long, long, double, long, long, std::complex<double>*, long*, char*, std::complex<double>*, std::complex<double>*, double*, double*, cholmod_common_struct*)':
    spqr_front.cpp:(.text._Z10spqr_frontISt7complexIdEElllldllPT_PlPcS3_S3_PdS6_P21cholmod_common_struct[_Z10spqr_frontISt7complexIdEElllldllPT_PlPcS3_S3_PdS6_P21cholmod_common_struct]+0x67e): undefined reference to `zlarfg_'
    spqr_front.cpp:(.text._Z10spqr_frontISt7complexIdEElllldllPT_PlPcS3_S3_PdS6_P21cholmod_common_struct[_Z10spqr_frontISt7complexIdEElllldllPT_PlPcS3_S3_PdS6_P21cholmod_common_struct]+0x9c2): undefined reference to `zlarf_'

    Do you experience something similar?

    Edited by Dominic Kempf
  • Does spqrtest work for you both? It works for be, but I get the following compiler error:

    [  0%] Building CXX object dune/istl/test/CMakeFiles/overlappingschwarztest.dir/overlappingschwarztest.cc.o
    In file included from /temp/gruenich/dune/complete/dune-istl/dune/istl/test/overlappingschwarztest.cc:12:
    /temp/gruenich/dune/complete/dune-istl/dune/istl/overlappingschwarz.hh:1248:18: error: no matching member function for call to 'apply'
            sdsolver.apply(assigner.lhs(), assigner.rhs());
            ~~~~~~~~~^~~~~
    /temp/gruenich/dune/complete/dune-istl/dune/istl/overlappingschwarz.hh:662:19: note: in instantiation of function template specialization 'Dune::SeqOverlappingSchwarz<Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > >,
          Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::AdditiveSchwarzMode, Dune::SPQR<Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > > >,
          std::allocator<Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > > > >::apply<true>' requested here
          sm.template apply<true>(v, b);
                      ^
    /temp/gruenich/dune/complete/dune-istl/dune/istl/overlappingschwarz.hh:1217:58: note: in instantiation of member function 'Dune::SeqOverlappingSchwarzApplier<Dune::SeqOverlappingSchwarz<Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>,
          std::allocator<Dune::FieldMatrix<double, 1, 1> > >, Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::AdditiveSchwarzMode, Dune::SPQR<Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>,
          std::allocator<Dune::FieldMatrix<double, 1, 1> > > >, std::allocator<Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > > > > >::apply' requested here
        SeqOverlappingSchwarzApplier<SeqOverlappingSchwarz>::apply(*this, x, b);
                                                             ^
    /temp/gruenich/dune/complete/dune-istl/dune/istl/test/overlappingschwarztest.cc:176:29: note: in instantiation of member function 'Dune::SeqOverlappingSchwarz<Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > >,
          Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::AdditiveSchwarzMode, Dune::SPQR<Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > > >,
          std::allocator<Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > > > >::apply' requested here
          Dune::SPQR<BCRSMat> > spqr_prec0(mat, domains, 1);
                                ^
    /temp/gruenich/dune/complete/dune-istl/dune/istl/spqr.hh:134:18: note: candidate function not viable: requires 3 arguments, but 2 were provided
        virtual void apply(domain_type& x, range_type& b, InverseOperatorResult& res)
                     ^
    /temp/gruenich/dune/complete/dune-istl/dune/istl/spqr.hh:164:18: note: candidate function not viable: requires 4 arguments, but 2 were provided
        virtual void apply (domain_type& x, range_type& b, double reduction, InverseOperatorResult& res)
                     ^
    1 error generated.
    Edited by Dominic Kempf
  • @gruenich it compiles but it does NOT link, see my previous message. Do you have any clue what is wrong? I am using SPQR in DUNE-FEM and I don't have any linking issue so FindSuiteSparse seems perfectly working.

  • I edited your comments to use ``` around the copied error messages, its so hard to read otherwise.

  • Wow, 3 testers, 3 different errors. I have SuiteSparse 4.2.1, Marcos has 4.4.0. This might be a problem source.

    Concerning Marcos error, I guess that the Suitesparse check does not gather the correct set of libraries to link for SPQR.

    Mine, I have no clue.

    Christophs, I think, revealed the hidden assumption of the overlapping schwarz code, that the solver has an apply method taking to plain c arrays (no idea why that is so).

  • @dominic When I implemented the wrappers I was using SuiteSparse 4.2.1 therefore I am pretty sure that cc_->SPQR_flopcount and the other members are available also in that version

  • Christoph Grüninger Title changed from Feature/fs1519 suitesparse ldl spqr to [WIP] Feature/fs1519 suitesparse ldl spqr

    Title changed from Feature/fs1519 suitesparse ldl spqr to [WIP] Feature/fs1519 suitesparse ldl spqr

  • Marco Agnese Added 15 commits:

    Added 15 commits:

    • be1c8442...f9aede6e - 13 commits from branch master
    • 4bac91be - Merge branch 'master' into feature/FS1519-suitesparse-ldl-spqr
    • ab1d4887 - Merge branch 'master' into feature/FS1519-suitesparse-ldl-spqr
  • Marco Agnese Added 1 commit:

    Added 1 commit:

    • 4c9e6cf4 - fix includes, remove useless preprocessor variables and use std::exceptions
  • Marco Agnese Added 1 commit:

    Added 1 commit:

    • 1c4164a5 - fix include config
  • Marco Agnese Added 11 commits:

    Added 11 commits:

    • 3a5c3d6a - [bugfix] Produce a linker error when pardiso lib is not found
    • 8fa53e4b - [fixup] correctly nest namespace and ifdef directive
    • 05561591 - [pardiso] update the Pardiso preconditioner to current Dune and Pardiso versions
    • a3ae2c23 - Typo
    • ca6e0ddb - bvector: Fix NaN behaviour of infinity_norm()
    • ef237c59 - bcrsmatrix: Fix NaN behaviour of infinity_norm()
    • 56be52b3 - matrix: Fix NaN behaviour of infinity_norm()
    • 349df800 - Test complex for floating point T only
    • 8d58bc2d - [bugfix] fix broken assertion.
    • 033153ea - fix includes, remove useless preprocessor variables and use std::exceptions
    • 37ac9466 - Merge branch 'feature/FS1519-suitesparse-ldl-spqr' of ssh://gitlab.dune-project.…
  • According to Tim Davis (the developer of SuiteSparse) to fix my linking error: "You have to link SPQR to LAPACK". I tried to edit manually the CMake cache but it didn't work. What do I have to change into FindSuiteSparse in order to link lapack to SPQR? I tried different things but the error was always there.

  • You have to execute find_package(LAPACK). After that you can use the variables exported, which are listed in cmake --help-module FindLAPACK.

  • Marco, please give dune-common's feature/fs1519-add-lapack-to-suitesparse a try. It is not properly tested by myself, as I have a broken SuiteSparse package on this computer.

  • Hi @gruenich, thank you for your help. This was exactly what I tried. It add the lapack flag to the linker but the error is still present and it is exactly the same. Maybe a problem of flag ordering?

    The fun part is that the wrapper for SPQR which I wrote inside dune-fem links correctly. How is this possible since it uses FindSuiteSparse of dune-common?

  • Have you deleted the build directory of both common and istl? What code from dune-fem are you referring to? I could not find an executable including SPQR when I had a quick look into fem's repository.
    You can compare how the linker was invoked with make yourtarget VERBOSE=true and then compare or post both here.

  • Yes I have delete the build directory of both common and istl. In dune-fem there are only the wrappers but there aren't any tests yet. I am using SPQR in one of my codes which are based on dune-fem. If I compile spqrtest the linking flags are

    /usr/bin/c++   -O3 -Wall -funroll-loops -finline-functions -fomit-frame-pointer -ffast-math -mfpmath=sse -msse3 -std=c++11     -Wl,-no-as-needed -pthread CMakeFiles/spqrtest.dir/spqrtest.cc.o  -o spqrtest -rdynamic /usr/local_machine/dune-trunk/build/dune-common/lib/libdunecommon.a /usr/local_machine/suitesparse-4.4.0/lib/libumfpack.a /usr/local_machine/suitesparse-4.4.0/lib/libcholmod.a /usr/local_machine/suitesparse-4.4.0/lib/libamd.a /usr/local_machine/suitesparse-4.4.0/lib/libcamd.a /usr/local_machine/suitesparse-4.4.0/lib/libcolamd.a /usr/local_machine/suitesparse-4.4.0/lib/libccolamd.a /usr/local_machine/suitesparse-4.4.0/lib/libldl.a /usr/local_machine/suitesparse-4.4.0/lib/libspqr.a /usr/local_machine/suitesparse-4.4.0/lib/libsuitesparseconfig.a /usr/local_machine/suitesparse-4.4.0/lib/libumfpack.a /usr/local_machine/suitesparse-4.4.0/lib/libcholmod.a /usr/local_machine/suitesparse-4.4.0/lib/libamd.a /usr/local_machine/suitesparse-4.4.0/lib/libcamd.a /usr/local_machine/suitesparse-4.4.0/lib/libcolamd.a /usr/local_machine/suitesparse-4.4.0/lib/libccolamd.a /usr/local_machine/suitesparse-4.4.0/lib/libsuitesparseconfig.a -lsuperlu /usr/lib/libf77blas.so.3gf /usr/lib/libatlas.so.3gf /usr/local_machine/parmetis-4.0.3/lib/libparmetis.a /usr/local_machine/parmetis-4.0.3/lib/libmetis.a -lm -pthread /usr/local_machine/openmpi-1.8.4/lib/libmpi.so /usr/local_machine/parmetis-4.0.3/lib/libmetis.a -lm -lgmp -lgmpxx -pthread /usr/local_machine/openmpi-1.8.4/lib/libmpi.so /usr/local_machine/suitesparse-4.4.0/lib/libldl.a /usr/local_machine/suitesparse-4.4.0/lib/libspqr.a -lsuperlu /usr/lib/libf77blas.so.3gf /usr/lib/libatlas.so.3gf /usr/local_machine/parmetis-4.0.3/lib/libparmetis.a /usr/local_machine/parmetis-4.0.3/lib/libmetis.a -lm /usr/local_machine/openmpi-1.8.4/lib/libmpi.so -lgmp -lgmpxx /usr/local_machine/parmetis-4.0.3/lib/libmetis.a -lm /usr/local_machine/openmpi-1.8.4/lib/libmpi.so -lgmp -lgmpxx -Wl,-rpath,/usr/local_machine/openmpi-1.8.4/lib 

    while with dune-fem are

    /usr/bin/c++   -O3 -Wall -funroll-loops -finline-functions -fomit-frame-pointer -ffast-math -mfpmath=sse -msse3 -std=c++11     -Wl,-no-as-needed -pthread CMakeFiles/dune-navier-stokes.dir/dune-navier-stokes.cc.o  -o dune-navier-stokes -rdynamic /usr/local_machine/dune-trunk/build/dune-fem/lib/libdunefem.a /usr/local_machine/dune-trunk/build/dune-alugrid/lib/libdunealugrid.a /usr/local_machine/dune-trunk/build/dune-grid/lib/libdunealbertagrid_3d.a /usr/local_machine/dune-trunk/build/dune-grid/lib/libdunealbertagrid_2d.a /usr/local_machine/dune-trunk/build/dune-grid/lib/libdunealbertagrid_1d.a /usr/local_machine/dune-trunk/build/dune-grid/lib/libdunegrid.a /usr/local_machine/dune-trunk/build/dune-geometry/lib/libdunegeometry.a /usr/local_machine/dune-trunk/build/dune-common/lib/libdunecommon.a /usr/local_machine/suitesparse-4.4.0/lib/libumfpack.a /usr/local_machine/suitesparse-4.4.0/lib/libspqr.a /usr/local_machine/suitesparse-4.4.0/lib/libldl.a /usr/local_machine/suitesparse-4.4.0/lib/libcholmod.a /usr/local_machine/suitesparse-4.4.0/lib/libamd.a /usr/local_machine/suitesparse-4.4.0/lib/libcamd.a /usr/local_machine/suitesparse-4.4.0/lib/libcolamd.a /usr/local_machine/suitesparse-4.4.0/lib/libccolamd.a /usr/local_machine/suitesparse-4.4.0/lib/libsuitesparseconfig.a /usr/local_machine/petsc-3.5.3/lib/libpetsc.so /usr/local_machine/petsc-3.5.3/lib/libHYPRE.a /usr/local_machine/petsc-3.5.3/lib/libsuperlu_dist_3.3.a -llapack -lblas /usr/local_machine/parmetis-4.0.3/lib/libparmetis.a /usr/local_machine/parmetis-4.0.3/lib/libmetis.a -lX11 -lssl -lcrypto /usr/local_machine/openmpi-1.8.4/lib/libmpi_usempi.so /usr/local_machine/openmpi-1.8.4/lib/libmpi_mpifh.so -lgfortran -lquadmath -lm /usr/local_machine/openmpi-1.8.4/lib/libmpi_cxx.so -lstdc++ /usr/local_machine/openmpi-1.8.4/lib/libmpi.so -lgcc_s -lpthread -ldl /usr/local_machine/zoltan-3.8/lib/libzoltan.a /usr/local_machine/parmetis-4.0.3/lib/libparmetis.a /usr/local_machine/parmetis-4.0.3/lib/libmetis.a -lm -pthread /usr/local_machine/openmpi-1.8.4/lib/libmpi.so -pthread /usr/local_machine/openmpi-1.8.4/lib/libmpi.so -lz /usr/local_machine/suitesparse-4.4.0/lib/libumfpack.a /usr/local_machine/suitesparse-4.4.0/lib/libcholmod.a /usr/local_machine/suitesparse-4.4.0/lib/libamd.a /usr/local_machine/suitesparse-4.4.0/lib/libcamd.a /usr/local_machine/suitesparse-4.4.0/lib/libcolamd.a /usr/local_machine/suitesparse-4.4.0/lib/libccolamd.a /usr/local_machine/suitesparse-4.4.0/lib/libldl.a /usr/local_machine/suitesparse-4.4.0/lib/libspqr.a /usr/local_machine/suitesparse-4.4.0/lib/libsuitesparseconfig.a /usr/local_machine/suitesparse-4.4.0/lib/libumfpack.a /usr/local_machine/suitesparse-4.4.0/lib/libcholmod.a /usr/local_machine/suitesparse-4.4.0/lib/libamd.a /usr/local_machine/suitesparse-4.4.0/lib/libcamd.a /usr/local_machine/suitesparse-4.4.0/lib/libcolamd.a /usr/local_machine/suitesparse-4.4.0/lib/libccolamd.a /usr/local_machine/suitesparse-4.4.0/lib/libsuitesparseconfig.a -lsuperlu /usr/lib/libf77blas.so.3gf /usr/lib/libatlas.so.3gf /usr/local_machine/parmetis-4.0.3/lib/libparmetis.a /usr/local_machine/parmetis-4.0.3/lib/libmetis.a -lm -pthread /usr/local_machine/openmpi-1.8.4/lib/libmpi.so /usr/local_machine/parmetis-4.0.3/lib/libmetis.a -lm -lm /usr/local_machine/dune-trunk/build/dune-grid/lib/libdunegrid.a /usr/local_machine/ug-3.11.0/lib/libugS2.a /usr/local_machine/ug-3.11.0/lib/libugS3.a /usr/local_machine/ug-3.11.0/lib/libdevS.a /usr/local_machine/dune-trunk/build/dune-geometry/lib/libdunegeometry.a /usr/local_machine/dune-trunk/build/dune-common/lib/libdunecommon.a /usr/local_machine/parmetis-4.0.3/lib/libparmetis.a /usr/local_machine/parmetis-4.0.3/lib/libmetis.a -lm -pthread /usr/local_machine/openmpi-1.8.4/lib/libmpi.so /usr/local_machine/parmetis-4.0.3/lib/libmetis.a -lm -lgmp -lgmpxx -pthread /usr/local_machine/openmpi-1.8.4/lib/libmpi.so /usr/local_machine/petsc-3.5.3/lib/libpetsc.so /usr/local_machine/petsc-3.5.3/lib/libHYPRE.a /usr/local_machine/petsc-3.5.3/lib/libsuperlu_dist_3.3.a -llapack -lblas /usr/local_machine/parmetis-4.0.3/lib/libparmetis.a /usr/local_machine/parmetis-4.0.3/lib/libmetis.a -lX11 -lssl -lcrypto /usr/local_machine/openmpi-1.8.4/lib/libmpi_usempi.so /usr/local_machine/openmpi-1.8.4/lib/libmpi_mpifh.so -lgfortran -lquadmath -lm /usr/local_machine/openmpi-1.8.4/lib/libmpi_cxx.so -lstdc++ /usr/local_machine/openmpi-1.8.4/lib/libmpi.so -lgcc_s -lpthread -ldl /usr/local_machine/dune-trunk/build/dune-fem/lib/libdunefem.a /usr/local_machine/dune-trunk/build/dune-alugrid/lib/libdunealugrid.a /usr/local_machine/dune-trunk/build/dune-grid/lib/libdunealbertagrid_3d.a /usr/local_machine/dune-trunk/build/dune-grid/lib/libdunealbertagrid_2d.a /usr/local_machine/dune-trunk/build/dune-grid/lib/libdunealbertagrid_1d.a /usr/local_machine/dune-trunk/build/dune-grid/lib/libdunegrid.a /usr/local_machine/dune-trunk/build/dune-geometry/lib/libdunegeometry.a /usr/local_machine/dune-trunk/build/dune-common/lib/libdunecommon.a /usr/local_machine/dune-trunk/build/dune-grid/lib/libdunealbertagrid_2d.a /usr/local_machine/alberta-3.0.0/lib/libalberta_2d.so /usr/local_machine/dune-trunk/build/dune-grid/lib/libdunegrid.a /usr/local_machine/dune-trunk/build/dune-fem/lib/libdunefem.a /usr/local_machine/dune-trunk/build/dune-alugrid/lib/libdunealugrid.a /usr/local_machine/dune-trunk/build/dune-grid/lib/libdunealbertagrid_3d.a /usr/local_machine/dune-trunk/build/dune-grid/lib/libdunealbertagrid_2d.a /usr/local_machine/dune-trunk/build/dune-grid/lib/libdunealbertagrid_1d.a /usr/local_machine/dune-trunk/build/dune-grid/lib/libdunegrid.a /usr/local_machine/dune-trunk/build/dune-geometry/lib/libdunegeometry.a /usr/local_machine/dune-trunk/build/dune-common/lib/libdunecommon.a /usr/local_machine/alberta-3.0.0/lib/libalberta_utilities.so -lm -lltdl /usr/lib/libf77blas.so.3gf /usr/lib/libatlas.so.3gf /usr/local_machine/suitesparse-4.4.0/lib/libumfpack.a /usr/local_machine/suitesparse-4.4.0/lib/libcholmod.a /usr/local_machine/suitesparse-4.4.0/lib/libamd.a /usr/local_machine/suitesparse-4.4.0/lib/libcamd.a /usr/local_machine/suitesparse-4.4.0/lib/libcolamd.a /usr/local_machine/suitesparse-4.4.0/lib/libccolamd.a /usr/local_machine/suitesparse-4.4.0/lib/libsuitesparseconfig.a /usr/local_machine/suitesparse-4.4.0/lib/libspqr.a /usr/local_machine/suitesparse-4.4.0/lib/libldl.a /usr/local_machine/petsc-3.5.3/lib/libpetsc.so /usr/local_machine/petsc-3.5.3/lib/libHYPRE.a /usr/local_machine/petsc-3.5.3/lib/libsuperlu_dist_3.3.a -llapack -lblas /usr/local_machine/parmetis-4.0.3/lib/libparmetis.a /usr/local_machine/parmetis-4.0.3/lib/libmetis.a -lX11 -lssl -lcrypto /usr/local_machine/openmpi-1.8.4/lib/libmpi_usempi.so /usr/local_machine/openmpi-1.8.4/lib/libmpi_mpifh.so -lgfortran -lquadmath -lm /usr/local_machine/openmpi-1.8.4/lib/libmpi_cxx.so -lstdc++ /usr/local_machine/openmpi-1.8.4/lib/libmpi.so -lgcc_s -lpthread -ldl /usr/local_machine/zoltan-3.8/lib/libzoltan.a -lm -lsuperlu /usr/local_machine/ug-3.11.0/lib/libugS2.a /usr/local_machine/ug-3.11.0/lib/libugS3.a /usr/local_machine/ug-3.11.0/lib/libdevS.a -lgmp -lgmpxx /usr/local_machine/alberta-3.0.0/lib/libalberta_2d.so /usr/local_machine/alberta-3.0.0/lib/libalberta_utilities.so -lm -lltdl -lz -Wl,-rpath,/usr/local_machine/petsc-3.5.3/lib:/usr/local_machine/openmpi-1.8.4/lib:/usr/local_machine/alberta-3.0.0/lib 
    /usr/bin/ld: warning: libblas.so.3gf, needed by /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libsuperlu.so, may conflict with libblas.so.3
    /usr/bin/ld: warning: libblas.so.3gf, needed by /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libsuperlu.so, may conflict with libblas.so.3
    /usr/bin/ld: warning: libblas.so.3gf, needed by /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libsuperlu.so, may conflict with libblas.so.3

    The second one works, but it is crazy long so could be difficult to compare against the first one.

    PS It is truncated because is too long; if you edit it, you can see the full line!

    Edited by Marco Agnese
  • Can you try my branch with reversed order of the libraries? From ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES} ${SuiteSparse_LIBRARIES} change to ${SuiteSparse_LIBRARIES} ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES}

  • Always the same error :(

  • Marco Agnese Added 14 commits:

    Added 14 commits:

    • 37ac9466...35c9a1bf - 13 commits from branch master
    • 7c3bea4d - Merge branch 'master' into feature/FS1519-suitesparse-ldl-spqr
  • Marco Agnese Added 22 commits:

    Added 22 commits:

    • b250bf60 - Adjust Doxygen comments.
    • 7a4c7de8 - [suitesparse] Create test for SPQR
    • 673d1a60 - [suitesparse] Create wrapper for SPQR solver
    • a34d685c - [suitesparse] Create wrapper for LDL linear solver
    • e9986a89 - [umfpack] Factorization extraction, make colcomp public
    • 8394a69a - [suitesparse] Cleanup of SPQR wrapper
    • 7846d481 - [suitesparse] Fixed segmentation fault in SPQR
    • a973fabb - [suitesparse] LDL wrapper derived from Dune::InverseOperator
    • 2e74d580 - [suitesparse][cleanup] Remove useless parantheses
    • 69b9d30c - [suitesparse] Activate SPQR test
    • f1d7c040 - [suitesparse] Add test for LDL wrapper
    • aa96d622 - [suitesparse] Add setOption to LDL wrapper for compatibility
    • 0fec2806 - [suitesparse][cleanup] Remove useless class variable in SPQR wrapper
    • f229b274 - [suitesparse][cleanup] Format includes, white space changes.
    • 9ec8cbf8 - [CMake][suitesparse] Add ldltest and spqr test to build system
    • 7102ea6e - [SuiteSparse] Enable CMake checks for LDL and SPQR
    • fe80c39a - test overlappingschwartz also with SPQR and LDL
    • 9e953de2 - fix includes, remove useless preprocessor variables and use std::exceptions
    • c623d17d - fix include config
    • 844e2c06 - [bugfix] Produce a linker error when pardiso lib is not found
    • bf9378c7 - [fixup] correctly nest namespace and ifdef directive
    • ca3de931 - [pardiso] update the Pardiso preconditioner to current Dune and Pardiso versions
  • Added 19 commits:

    • 4edb4d52 - Adjust Doxygen comments.
    • 3fdfba90 - [suitesparse] Create test for SPQR
    • 858d1c9e - [suitesparse] Create wrapper for SPQR solver
    • 6f037b8a - [suitesparse] Create wrapper for LDL linear solver
    • a2b8e1d2 - [umfpack] Factorization extraction, make colcomp public
    • 51ab8358 - [suitesparse] Cleanup of SPQR wrapper
    • 3f6f3457 - [suitesparse] Fixed segmentation fault in SPQR
    • 6868b618 - [suitesparse] LDL wrapper derived from Dune::InverseOperator
    • 334aafe0 - [suitesparse][cleanup] Remove useless parantheses
    • 6193b962 - [suitesparse] Activate SPQR test
    • ea1ad1bb - [suitesparse] Add test for LDL wrapper
    • c5d21c89 - [suitesparse] Add setOption to LDL wrapper for compatibility
    • bd1e6c44 - [suitesparse][cleanup] Remove useless class variable in SPQR wrapper
    • 253b29b0 - [suitesparse][cleanup] Format includes, white space changes.
    • 69baaf8f - [CMake][suitesparse] Add ldltest and spqr test to build system
    • 6fa91d76 - [SuiteSparse] Enable CMake checks for LDL and SPQR
    • 7f30864f - test overlappingschwartz also with SPQR and LDL
    • 3db040a0 - fix includes, remove useless preprocessor variables and use std::exceptions
    • 6a47c649 - fix include config
  • I rebased the branch again and removed the unrelated commits from Bernd and Dominic.
    I am inclined to remove the last three commits of Marco. The overlapping Schwartz does no work and we can have this as a new branch. ldltest and spqrtest work for all of us, so why wait?

  • @gruenich Yes I agree with you. My issue with spqrtest is a linking issue caused by FindSuiteSparse. I am going to open an issue in dune-common. The only commit that I would remove from the merge is 7f30864f. Please do the merge.

  • Hi @gruenich, can we merge this?

  • Added 29 commits:

    • 6a47c649...6b890e74 - 13 commits from branch master
    • 9ddfaccb - Adjust Doxygen comments.
    • a39bd5a8 - [suitesparse] Create test for SPQR
    • 36a20860 - [suitesparse] Create wrapper for SPQR solver
    • 10c05e6f - [suitesparse] Create wrapper for LDL linear solver
    • 7f1f5934 - [umfpack] Factorization extraction, make colcomp public
    • 9d25e1af - [suitesparse] Cleanup of SPQR wrapper
    • 1edf9bda - [suitesparse] Fixed segmentation fault in SPQR
    • 28e812ee - [suitesparse] LDL wrapper derived from Dune::InverseOperator
    • 94acdc9c - [suitesparse][cleanup] Remove useless parantheses
    • 8a0fba38 - [suitesparse] Activate SPQR test
    • 8ff42cf9 - [suitesparse] Add test for LDL wrapper
    • 9efd2742 - [suitesparse] Add setOption to LDL wrapper for compatibility
    • b0d1e24f - [suitesparse][cleanup] Remove useless class variable in SPQR wrapper
    • 4bb59d9a - [suitesparse][cleanup] Format includes, white space changes.
    • 823a76c5 - [CMake][suitesparse] Add ldltest and spqr test to build system
    • d0b42794 - [SuiteSparse] Enable CMake checks for LDL and SPQR
  • Christoph Grüninger Title changed from [WIP] Feature/fs1519 suitesparse ldl spqr to Feature/fs1519 suitesparse ldl spqr

    Title changed from [WIP] Feature/fs1519 suitesparse ldl spqr to Feature/fs1519 suitesparse ldl spqr

  • mentioned in commit ea087758

  • Christoph Grüninger Status changed to merged

    Status changed to merged

  • Marco, thanks again for your patches!

  • Thank you for the merge!

  • Felix Gruber mentioned in merge request !20 (merged)

    mentioned in merge request !20 (merged)

  • Dominic Kempf mentioned in commit a6f130c0

    mentioned in commit a6f130c0

  • @gruenich I was a bit slow to react here. Your assumption that spqrtest works for everybody was wrong. My above error is alive and kickin:

    /home/dominic/dune/dune-istl/dune/istl/spqr.hh: In member function ‘virtual void Dune::SPQR<Dune::BCRSMatrix<Dune::FieldMatrix<K, n, p>, TA> >::apply(Dune::SPQR<Dune::BCRSMatrix<Dune::FieldMatrix<K, n, p>, TA> >::domain_type&, Dune::SPQR<Dune::BCRSMatrix<Dune::FieldMatrix<K, n, p>, TA> >::range_type&, Dune::InverseOperatorResult&)’:
    /home/dominic/dune/dune-istl/dune/istl/spqr.hh:154:42: error: ‘cholmod_common’ has no member named ‘SPQR_flopcount’
             std::cout<<"Flops Taken: "<<cc_->SPQR_flopcount<<std::endl;
                                              ^
    /home/dominic/dune/dune-istl/dune/istl/spqr.hh:155:44: error: ‘cholmod_common’ has no member named ‘SPQR_analyze_time’
             std::cout<<"Analysis Time: "<<cc_->SPQR_analyze_time<<" s"<<std::endl;
                                                ^
    /home/dominic/dune/dune-istl/dune/istl/spqr.hh:156:45: error: ‘cholmod_common’ has no member named ‘SPQR_factorize_time’
             std::cout<<"Factorize Time: "<<cc_->SPQR_factorize_time<<" s"<<std::endl;
                                                 ^
    /home/dominic/dune/dune-istl/dune/istl/spqr.hh:157:45: error: ‘cholmod_common’ has no member named ‘SPQR_solve_time’
             std::cout<<"Backsolve Time: "<<cc_->SPQR_solve_time<<" s"<<std::endl;

    To be honest, I have no idea, why it would work for you. Why should cholmod_common have a SPQR-related methods? I use libsuitesparse-dev from Debian 8.2 in version 4.2.1.

  • @dominic With SuiteSparse 4.4.0 I don't experience the error. But, also with SuiteSparse 4.2.1 everything worked. I have always compiled SuiteSparse from the source, that is the only difference which I can see.

  • mentioned in issue #5 (closed)

  • See #5 (closed) from now on.

  • Please register or sign in to reply
    Loading