Browse Source

MACRO to switch ColMajor vs RowMajor

master
Trevor Irons 6 years ago
parent
commit
6357ed5265
6 changed files with 103 additions and 64 deletions
  1. 33
    1
      CMakeLists.txt
  2. 8
    8
      examples/EMSchur3D-vtk.cpp
  3. 8
    8
      examples/EMSchur3D.cpp
  4. 34
    34
      include/EMSchur3D.h
  5. 19
    12
      include/EMSchur3DBase.h
  6. 1
    1
      src/EMSchur3DBase.cpp

+ 33
- 1
CMakeLists.txt View File

14
 	INCLUDE_DIRECTORIES(${SUPERLU_INCLUDES})
14
 	INCLUDE_DIRECTORIES(${SUPERLU_INCLUDES})
15
 endif()
15
 endif()
16
 
16
 
17
-find_package( PaSTiX )
17
+#find_package( PaSTiX )
18
+find_package( PaSTiX COMPONENTS METIS SEQ )
19
+
20
+find_path(PASTIX_pastix_nompi.h_INCLUDE_DIRS
21
+  #NAMES pastix/nompi.h
22
+  NAMES pastix_nompi.h
23
+  HINTS ${PASTIX_INCLUDE_DIRS}
24
+)
25
+if (NOT PASTIX_pastix_nompi.h_INCLUDE_DIRS)
26
+  message(STATUS "A version of Pastix has been found but pastix_nompi.h does not exist in the include directory."
27
+                 " Because Eigen tests require a version without MPI, we disable the Pastix backend.")
28
+endif()
29
+if(PASTIX_FOUND AND PASTIX_pastix_nompi.h_INCLUDE_DIRS)
30
+  add_definitions("-DEIGEN_PASTIX_SUPPORT")
31
+  include_directories(${PASTIX_INCLUDE_DIRS_DEP})
32
+  if(SCOTCH_FOUND)
33
+    include_directories(${SCOTCH_INCLUDE_DIRS})
34
+    set(PASTIX_LIBRARIES ${PASTIX_LIBRARIES} ${SCOTCH_LIBRARIES})
35
+  elseif(METIS_FOUND)
36
+    include_directories(${METIS_INCLUDE_DIRS})
37
+    set(PASTIX_LIBRARIES ${PASTIX_LIBRARIES} ${METIS_LIBRARIES})
38
+  else(SCOTCH_FOUND)
39
+#    ei_add_property(EIGEN_MISSING_BACKENDS  "PaStiX, ")
40
+  endif(SCOTCH_FOUND)
41
+  set(SPARSE_LIBS ${SPARSE_LIBS} ${PASTIX_LIBRARIES_DEP} ${ORDERING_LIBRARIES})
42
+  set(PASTIX_ALL_LIBS ${PASTIX_LIBRARIES_DEP})
43
+#  ei_add_property(EIGEN_TESTED_BACKENDS  "PaStiX, ")
44
+else()
45
+#  ei_add_property(EIGEN_MISSING_BACKENDS  "PaStiX, ")
46
+endif()
47
+
18
 if ( PASTIX_FOUND )
48
 if ( PASTIX_FOUND )
19
 	message( STATUS "PaSTiX was found" )
49
 	message( STATUS "PaSTiX was found" )
20
 	add_compile_options(-DHAVE_PASTIX)
50
 	add_compile_options(-DHAVE_PASTIX)
21
 	INCLUDE_DIRECTORIES(${PASTIX_INCLUDES})
51
 	INCLUDE_DIRECTORIES(${PASTIX_INCLUDES})
22
 endif()
52
 endif()
23
 
53
 
54
+
55
+
24
 find_package( Umfpack )
56
 find_package( Umfpack )
25
 if ( UMFPACK_FOUND )
57
 if ( UMFPACK_FOUND )
26
 	message( STATUS "Umfpack was found" )
58
 	message( STATUS "Umfpack was found" )

+ 8
- 8
examples/EMSchur3D-vtk.cpp View File

114
     // And solve
114
     // And solve
115
 
115
 
116
     // Use BiCGSTAB Diagonal preconditioner
116
     // Use BiCGSTAB Diagonal preconditioner
117
-    auto EM3D = EMSchur3D< Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::IncompleteLUT<Complex> > >::NewSP();
118
-    //auto EM3D = EMSchur3D< Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > >::NewSP();
117
+    auto EM3D = EMSchur3D< Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::IncompleteLUT<Complex> > >::NewSP();
118
+    //auto EM3D = EMSchur3D< Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, SPARSEMAJOR> > >::NewSP();
119
 
119
 
120
-    //auto EM3D = EMSchur3D< Eigen::PardisoLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > >::NewSP();
121
-    //auto EM3D = EMSchur3D< Eigen::PardisoLDLT<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Symmetric > >::NewSP();
120
+    //auto EM3D = EMSchur3D< Eigen::PardisoLU<Eigen::SparseMatrix<Complex, SPARSEMAJOR> > >::NewSP();
121
+    //auto EM3D = EMSchur3D< Eigen::PardisoLDLT<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Symmetric > >::NewSP();
122
 
122
 
123
     // LS CG
123
     // LS CG
124
-    //auto EM3D = EMSchur3D< Eigen::LeastSquaresConjugateGradient<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > >::NewSP();
124
+    //auto EM3D = EMSchur3D< Eigen::LeastSquaresConjugateGradient<Eigen::SparseMatrix<Complex, SPARSEMAJOR> > >::NewSP();
125
 
125
 
126
     // CG...dangerous
126
     // CG...dangerous
127
-    //auto EM3D = EMSchur3D< Eigen::ConjugateGradient<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Lower > >::NewSP();
128
-    //auto EM3D = EMSchur3D< Eigen::ConjugateGradient<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Lower, Eigen::IncompleteCholesky<Complex> > >::NewSP();
127
+    //auto EM3D = EMSchur3D< Eigen::ConjugateGradient<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Lower > >::NewSP();
128
+    //auto EM3D = EMSchur3D< Eigen::ConjugateGradient<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Lower, Eigen::IncompleteCholesky<Complex> > >::NewSP();
129
 
129
 
130
     // LU direct
130
     // LU direct
131
-    //auto EM3D = EMSchur3D< Eigen::SparseLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::COLAMDOrdering<int> > >::NewSP();
131
+    //auto EM3D = EMSchur3D< Eigen::SparseLU<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::COLAMDOrdering<int> > >::NewSP();
132
 
132
 
133
     EM3D->SetRectilinearGrid( gimp->GetGrid() );
133
     EM3D->SetRectilinearGrid( gimp->GetGrid() );
134
 
134
 

+ 8
- 8
examples/EMSchur3D.cpp View File

29
 int main( int argc, char** argv ) {
29
 int main( int argc, char** argv ) {
30
 
30
 
31
     // BiCGSTAB Diagonal preconditioner
31
     // BiCGSTAB Diagonal preconditioner
32
-    //auto EM3D = EMSchur3D< Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::IncompleteLUT<Complex> > >::NewSP();
32
+    //auto EM3D = EMSchur3D< Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::IncompleteLUT<Complex> > >::NewSP();
33
 
33
 
34
-    auto EM3D = EMSchur3D< Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > >::NewSP();
34
+    //auto EM3D = EMSchur3D< Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, SPARSEMAJOR> > >::NewSP();
35
 
35
 
36
     // SUPERLU
36
     // SUPERLU
37
-    //auto EM3D = EMSchur3D< Eigen::SuperLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > >::NewSP();
37
+    //auto EM3D = EMSchur3D< Eigen::SuperLU<Eigen::SparseMatrix<Complex, SPARSEMAJOR> > >::NewSP();
38
 
38
 
39
-    //auto EM3D = EMSchur3D< Eigen::PardisoLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > >::NewSP();
40
-    //auto EM3D = EMSchur3D< Eigen::PardisoLDLT<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Symmetric&Eigen::Lower > >::NewSP();
39
+    //auto EM3D = EMSchur3D< Eigen::PardisoLU<Eigen::SparseMatrix<Complex, SPARSEMAJOR> > >::NewSP();
40
+    //auto EM3D = EMSchur3D< Eigen::PardisoLDLT<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Symmetric&Eigen::Lower > >::NewSP();
41
 
41
 
42
     // Eigen built-in
42
     // Eigen built-in
43
-    //auto EM3D = EMSchur3D< Eigen::SparseLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > >::NewSP();
43
+    //auto EM3D = EMSchur3D< Eigen::SparseLU<Eigen::SparseMatrix<Complex, SPARSEMAJOR> > >::NewSP();
44
 
44
 
45
     // UmfPack
45
     // UmfPack
46
-    //auto EM3D = EMSchur3D< Eigen::UmfPackLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > >::NewSP();
46
+    auto EM3D = EMSchur3D< Eigen::UmfPackLU<Eigen::SparseMatrix<Complex, SPARSEMAJOR> > >::NewSP();
47
 
47
 
48
     // PaStiX
48
     // PaStiX
49
-    //auto EM3D = EMSchur3D< Eigen::PastixLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, true > >::NewSP();
49
+    //auto EM3D = EMSchur3D< Eigen::PastixLU<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, true > >::NewSP();
50
 
50
 
51
 
51
 
52
     if (argc < 3) {
52
     if (argc < 3) {

+ 34
- 34
include/EMSchur3D.h View File

394
 
394
 
395
 #ifdef HAVE_SUPERLU
395
 #ifdef HAVE_SUPERLU
396
     template<>
396
     template<>
397
-    void EMSchur3D< Eigen::SuperLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > >::BuildCDirectSolver() {
398
-        CSolver = new Eigen::SuperLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > [Omegas.size()];
397
+    void EMSchur3D< Eigen::SuperLU<Eigen::SparseMatrix<Complex, SPARSEMAJOR> > >::BuildCDirectSolver() {
398
+        CSolver = new Eigen::SuperLU<Eigen::SparseMatrix<Complex, SPARSEMAJOR> > [Omegas.size()];
399
 
399
 
400
         for (int iw=0; iw<Omegas.size(); ++iw) {
400
         for (int iw=0; iw<Omegas.size(); ++iw) {
401
             jsw_timer timer;
401
             jsw_timer timer;
434
 #endif
434
 #endif
435
 
435
 
436
     template<>
436
     template<>
437
-    void EMSchur3D< Eigen::SparseLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::COLAMDOrdering<int> > >::BuildCDirectSolver() {
438
-        CSolver = new Eigen::SparseLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::COLAMDOrdering<int> > [Omegas.size()];
437
+    void EMSchur3D< Eigen::SparseLU<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::COLAMDOrdering<int> > >::BuildCDirectSolver() {
438
+        CSolver = new Eigen::SparseLU<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::COLAMDOrdering<int> > [Omegas.size()];
439
         for (int iw=0; iw<Omegas.size(); ++iw) {
439
         for (int iw=0; iw<Omegas.size(); ++iw) {
440
             jsw_timer timer;
440
             jsw_timer timer;
441
             timer.begin();
441
             timer.begin();
464
 
464
 
465
 #ifdef HAVE_PARDISO
465
 #ifdef HAVE_PARDISO
466
     template<>
466
     template<>
467
-    void EMSchur3D< Eigen::PardisoLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > >::BuildCDirectSolver() {
468
-        CSolver = new Eigen::PardisoLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > [Omegas.size()];
467
+    void EMSchur3D< Eigen::PardisoLU<Eigen::SparseMatrix<Complex, SPARSEMAJOR> > >::BuildCDirectSolver() {
468
+        CSolver = new Eigen::PardisoLU<Eigen::SparseMatrix<Complex, SPARSEMAJOR> > [Omegas.size()];
469
         for (int iw=0; iw<Omegas.size(); ++iw) {
469
         for (int iw=0; iw<Omegas.size(); ++iw) {
470
             jsw_timer timer;
470
             jsw_timer timer;
471
             timer.begin();
471
             timer.begin();
488
     }
488
     }
489
 
489
 
490
     template<>
490
     template<>
491
-    void EMSchur3D< Eigen::PardisoLDLT<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Symmetric > >::BuildCDirectSolver() {
492
-        CSolver = new Eigen::PardisoLDLT<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Symmetric > [Omegas.size()];
491
+    void EMSchur3D< Eigen::PardisoLDLT<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Symmetric > >::BuildCDirectSolver() {
492
+        CSolver = new Eigen::PardisoLDLT<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Symmetric > [Omegas.size()];
493
         for (int iw=0; iw<Omegas.size(); ++iw) {
493
         for (int iw=0; iw<Omegas.size(); ++iw) {
494
             jsw_timer timer;
494
             jsw_timer timer;
495
             timer.begin();
495
             timer.begin();
518
 #ifdef HAVE_UMFPACK
518
 #ifdef HAVE_UMFPACK
519
     // Umfpack only seems to work when LOWER and UPPER are set to 1. Workarounds this have not been found.
519
     // Umfpack only seems to work when LOWER and UPPER are set to 1. Workarounds this have not been found.
520
     template<>
520
     template<>
521
-    void EMSchur3D< Eigen::UmfPackLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > >::BuildCDirectSolver() {
522
-        CSolver = new Eigen::UmfPackLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > [Omegas.size()];
521
+    void EMSchur3D< Eigen::UmfPackLU<Eigen::SparseMatrix<Complex, SPARSEMAJOR> > >::BuildCDirectSolver() {
522
+        CSolver = new Eigen::UmfPackLU<Eigen::SparseMatrix<Complex, SPARSEMAJOR> > [Omegas.size()];
523
         for (int iw=0; iw<Omegas.size(); ++iw) {
523
         for (int iw=0; iw<Omegas.size(); ++iw) {
524
             jsw_timer timer;
524
             jsw_timer timer;
525
             timer.begin();
525
             timer.begin();
549
 #endif
549
 #endif
550
 
550
 
551
 //     template<>
551
 //     template<>
552
-//     void EMSchur3D< Eigen::CholmodSupernodalLLT< Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Lower > > ::BuildCDirectSolver() {
553
-//         CSolver = new Eigen::CholmodSupernodalLLT< Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Lower > [Omegas.size()];
552
+//     void EMSchur3D< Eigen::CholmodSupernodalLLT< Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Lower > > ::BuildCDirectSolver() {
553
+//         CSolver = new Eigen::CholmodSupernodalLLT< Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Lower > [Omegas.size()];
554
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
554
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
555
 //             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
555
 //             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
556
 //             jsw_timer timer;
556
 //             jsw_timer timer;
570
 //     }
570
 //     }
571
 
571
 
572
 //     template<>
572
 //     template<>
573
-//     void EMSchur3D< Eigen::CSymSimplicialLLT< Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Lower, Eigen::NaturalOrdering<int> > > ::BuildCDirectSolver() {
574
-//         CSolver = new Eigen::CSymSimplicialLLT< Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Lower, Eigen::NaturalOrdering<int> > [Omegas.size()];
573
+//     void EMSchur3D< Eigen::CSymSimplicialLLT< Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Lower, Eigen::NaturalOrdering<int> > > ::BuildCDirectSolver() {
574
+//         CSolver = new Eigen::CSymSimplicialLLT< Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Lower, Eigen::NaturalOrdering<int> > [Omegas.size()];
575
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
575
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
576
 //             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
576
 //             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
577
 //             jsw_timer timer;
577
 //             jsw_timer timer;
591
 //     }
591
 //     }
592
 //
592
 //
593
 //     template<>
593
 //     template<>
594
-//     void EMSchur3D< Eigen::CSymSimplicialLLT< Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Lower, Eigen::AMDOrdering<int> > > ::BuildCDirectSolver() {
595
-//         CSolver = new Eigen::CSymSimplicialLLT< Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Lower, Eigen::AMDOrdering<int> > [Omegas.size()];
594
+//     void EMSchur3D< Eigen::CSymSimplicialLLT< Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Lower, Eigen::AMDOrdering<int> > > ::BuildCDirectSolver() {
595
+//         CSolver = new Eigen::CSymSimplicialLLT< Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Lower, Eigen::AMDOrdering<int> > [Omegas.size()];
596
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
596
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
597
 //             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
597
 //             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
598
 //             jsw_timer timer;
598
 //             jsw_timer timer;
612
 //     }
612
 //     }
613
 //
613
 //
614
 //     template<>
614
 //     template<>
615
-//     void EMSchur3D< Eigen::CSymSimplicialLDLT< Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Lower, Eigen::AMDOrdering<int> > > ::BuildCDirectSolver() {
616
-//         CSolver = new Eigen::CSymSimplicialLDLT< Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Lower, Eigen::AMDOrdering<int> > [Omegas.size()];
615
+//     void EMSchur3D< Eigen::CSymSimplicialLDLT< Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Lower, Eigen::AMDOrdering<int> > > ::BuildCDirectSolver() {
616
+//         CSolver = new Eigen::CSymSimplicialLDLT< Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Lower, Eigen::AMDOrdering<int> > [Omegas.size()];
617
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
617
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
618
 //             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
618
 //             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
619
 //             jsw_timer timer;
619
 //             jsw_timer timer;
634
 
634
 
635
 
635
 
636
     template<>
636
     template<>
637
-    void EMSchur3D< Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::IncompleteLUT<Complex> > > ::BuildCDirectSolver() {
638
-        CSolver = new Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::IncompleteLUT<Complex> > [Omegas.size()];
637
+    void EMSchur3D< Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::IncompleteLUT<Complex> > > ::BuildCDirectSolver() {
638
+        CSolver = new Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::IncompleteLUT<Complex> > [Omegas.size()];
639
         for (int iw=0; iw<Omegas.size(); ++iw) {
639
         for (int iw=0; iw<Omegas.size(); ++iw) {
640
             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
640
             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
641
             CSolver[iw].preconditioner().setDroptol(1e-6);       //1e-5);      // 1e-12
641
             CSolver[iw].preconditioner().setDroptol(1e-6);       //1e-5);      // 1e-12
659
     }
659
     }
660
 
660
 
661
     template<>
661
     template<>
662
-    void EMSchur3D< Eigen::BiCGSTAB< Eigen::SparseMatrix<Complex, Eigen::RowMajor> > > ::BuildCDirectSolver() {
663
-        CSolver = new Eigen::BiCGSTAB< Eigen::SparseMatrix<Complex, Eigen::RowMajor> > [Omegas.size()];
662
+    void EMSchur3D< Eigen::BiCGSTAB< Eigen::SparseMatrix<Complex, SPARSEMAJOR> > > ::BuildCDirectSolver() {
663
+        CSolver = new Eigen::BiCGSTAB< Eigen::SparseMatrix<Complex, SPARSEMAJOR> > [Omegas.size()];
664
         for (int iw=0; iw<Omegas.size(); ++iw) {
664
         for (int iw=0; iw<Omegas.size(); ++iw) {
665
             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
665
             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
666
             jsw_timer timer;
666
             jsw_timer timer;
680
     }
680
     }
681
 
681
 
682
     template<>
682
     template<>
683
-    void EMSchur3D< Eigen::LeastSquaresConjugateGradient< Eigen::SparseMatrix<Complex, Eigen::RowMajor> > > ::BuildCDirectSolver() {
684
-        CSolver = new Eigen::LeastSquaresConjugateGradient< Eigen::SparseMatrix<Complex, Eigen::RowMajor> > [Omegas.size()];
683
+    void EMSchur3D< Eigen::LeastSquaresConjugateGradient< Eigen::SparseMatrix<Complex, SPARSEMAJOR> > > ::BuildCDirectSolver() {
684
+        CSolver = new Eigen::LeastSquaresConjugateGradient< Eigen::SparseMatrix<Complex, SPARSEMAJOR> > [Omegas.size()];
685
         for (int iw=0; iw<Omegas.size(); ++iw) {
685
         for (int iw=0; iw<Omegas.size(); ++iw) {
686
             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
686
             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
687
             jsw_timer timer;
687
             jsw_timer timer;
701
     }
701
     }
702
 
702
 
703
     template<>
703
     template<>
704
-    void EMSchur3D<   Eigen::ConjugateGradient<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Lower > > ::BuildCDirectSolver() {
705
-        CSolver = new Eigen::ConjugateGradient<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Lower > [Omegas.size()];
704
+    void EMSchur3D<   Eigen::ConjugateGradient<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Lower > > ::BuildCDirectSolver() {
705
+        CSolver = new Eigen::ConjugateGradient<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Lower > [Omegas.size()];
706
         for (int iw=0; iw<Omegas.size(); ++iw) {
706
         for (int iw=0; iw<Omegas.size(); ++iw) {
707
             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
707
             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
708
             jsw_timer timer;
708
             jsw_timer timer;
722
     }
722
     }
723
 
723
 
724
     template<>
724
     template<>
725
-    void EMSchur3D<   Eigen::ConjugateGradient<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Lower, Eigen::IncompleteCholesky<Complex> > > ::BuildCDirectSolver() {
726
-        CSolver = new Eigen::ConjugateGradient<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Lower, Eigen::IncompleteCholesky<Complex> > [Omegas.size()];
725
+    void EMSchur3D<   Eigen::ConjugateGradient<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Lower, Eigen::IncompleteCholesky<Complex> > > ::BuildCDirectSolver() {
726
+        CSolver = new Eigen::ConjugateGradient<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Lower, Eigen::IncompleteCholesky<Complex> > [Omegas.size()];
727
         for (int iw=0; iw<Omegas.size(); ++iw) {
727
         for (int iw=0; iw<Omegas.size(); ++iw) {
728
             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
728
             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
729
             jsw_timer timer;
729
             jsw_timer timer;
743
     }
743
     }
744
 
744
 
745
 //     template<>
745
 //     template<>
746
-//     void EMSchur3D<   Eigen::PastixLLT<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Lower > > ::BuildCDirectSolver() {
747
-//         CSolver = new Eigen::PastixLLT<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Lower > [Omegas.size()];
746
+//     void EMSchur3D<   Eigen::PastixLLT<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Lower > > ::BuildCDirectSolver() {
747
+//         CSolver = new Eigen::PastixLLT<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Lower > [Omegas.size()];
748
 //         //MPI_Init(NULL, NULL);
748
 //         //MPI_Init(NULL, NULL);
749
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
749
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
750
 //             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
750
 //             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
765
 //     }
765
 //     }
766
 //
766
 //
767
 //     template<>
767
 //     template<>
768
-//     void EMSchur3D<   Eigen::PastixLDLT<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Lower > > ::BuildCDirectSolver() {
769
-//         CSolver = new Eigen::PastixLDLT<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::Lower > [Omegas.size()];
768
+//     void EMSchur3D<   Eigen::PastixLDLT<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Lower > > ::BuildCDirectSolver() {
769
+//         CSolver = new Eigen::PastixLDLT<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, Eigen::Lower > [Omegas.size()];
770
 //         //MPI_Init(NULL, NULL);
770
 //         //MPI_Init(NULL, NULL);
771
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
771
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
772
 //             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
772
 //             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
790
 
790
 
791
 #ifdef HAVE_PASTIX
791
 #ifdef HAVE_PASTIX
792
     template<>
792
     template<>
793
-    void EMSchur3D<   Eigen::PastixLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, true > > ::BuildCDirectSolver() {
794
-        CSolver = new Eigen::PastixLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, true > [Omegas.size()];
793
+    void EMSchur3D<   Eigen::PastixLU<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, true > > ::BuildCDirectSolver() {
794
+        CSolver = new Eigen::PastixLU<Eigen::SparseMatrix<Complex, SPARSEMAJOR>, true > [Omegas.size()];
795
 
795
 
796
         for (int iw=0; iw<Omegas.size(); ++iw) {
796
         for (int iw=0; iw<Omegas.size(); ++iw) {
797
             jsw_timer timer;
797
             jsw_timer timer;

+ 19
- 12
include/EMSchur3DBase.h View File

42
 
42
 
43
 #include "timer.h"
43
 #include "timer.h"
44
 #include <Eigen/Sparse>
44
 #include <Eigen/Sparse>
45
+
46
+//#define  SPARSEMAJOR Eigen::ColMajor
47
+#define  SPARSEMAJOR Eigen::RowMajor
48
+
49
+// SPARSEMAJOR;
50
+//typedef  Eigen::RowMajor  SPARSEMAJOR;
51
+
45
 //#include "bicgstab.h"
52
 //#include "bicgstab.h"
46
 
53
 
47
 // // Solvers
54
 // // Solvers
359
 
366
 
360
     /** Matrix objects representing discrete operators
367
     /** Matrix objects representing discrete operators
361
      */
368
      */
362
-    Eigen::SparseMatrix<Complex, Eigen::RowMajor>*                  Cvec;
363
-    Eigen::SparseMatrix<Complex, Eigen::RowMajor>                   D;
369
+    Eigen::SparseMatrix<Complex, SPARSEMAJOR>*                  Cvec;
370
+    Eigen::SparseMatrix<Complex, SPARSEMAJOR>                   D;
364
 
371
 
365
     /** Squeezed matrices for reduced phi grid
372
     /** Squeezed matrices for reduced phi grid
366
      */
373
      */
367
-    Eigen::SparseMatrix<Complex, Eigen::RowMajor>*                  Cvec_s;
368
-    Eigen::SparseMatrix<Complex, Eigen::RowMajor>                   D_s;
374
+    Eigen::SparseMatrix<Complex, SPARSEMAJOR>*                  Cvec_s;
375
+    Eigen::SparseMatrix<Complex, SPARSEMAJOR>                   D_s;
369
 
376
 
370
     /** number of cells in x, set when RectilinearGrid is attached */
377
     /** number of cells in x, set when RectilinearGrid is attached */
371
     int nx;
378
     int nx;
436
     std::vector<int> idx;
443
     std::vector<int> idx;
437
 
444
 
438
     /** Dirichlet on low X */
445
     /** Dirichlet on low X */
439
-    bool DirichletXLO = true;
440
-    //bool DirichletXLO = false;
446
+    //bool DirichletXLO = true;
447
+    bool DirichletXLO = false;
441
 
448
 
442
-    bool DirichletXHI = true;
443
-    //bool DirichletXHI = false;
449
+    //bool DirichletXHI = true;
450
+    bool DirichletXHI = false;
444
 
451
 
445
-    bool DirichletYLO = true;
446
-    //bool DirichletYLO = false;
452
+    //bool DirichletYLO = true;
453
+    bool DirichletYLO = false;
447
 
454
 
448
-    bool DirichletYHI = true;
449
-    //bool DirichletYHI = false;
455
+    //bool DirichletYHI = true;
456
+    bool DirichletYHI = false;
450
 
457
 
451
 //    bool DirichletZLO = true;
458
 //    bool DirichletZLO = true;
452
     bool DirichletZLO = false;
459
     bool DirichletZLO = false;

+ 1
- 1
src/EMSchur3DBase.cpp View File

942
         // First set up grid stuff
942
         // First set up grid stuff
943
         if (Cvec) delete [] Cvec;
943
         if (Cvec) delete [] Cvec;
944
         //if (CSolver) delete [] CSolver;
944
         //if (CSolver) delete [] CSolver;
945
-        Cvec    = new Eigen::SparseMatrix<Complex, Eigen::RowMajor> [Omegas.size()];
945
+        Cvec    = new Eigen::SparseMatrix<Complex, SPARSEMAJOR> [Omegas.size()];
946
 
946
 
947
         //#ifdef LEMMAUSEOMP
947
         //#ifdef LEMMAUSEOMP
948
         //#pragma omp parallel for schedule(static, 1)
948
         //#pragma omp parallel for schedule(static, 1)

Loading…
Cancel
Save