瀏覽代碼

RowMajor

master
Trevor Irons 5 年之前
父節點
當前提交
64c90e27a3
共有 4 個文件被更改,包括 51 次插入47 次删除
  1. 10
    8
      examples/EMSchur3D.cpp
  2. 36
    34
      include/EMSchur3D.h
  3. 4
    4
      include/EMSchur3DBase.h
  4. 1
    1
      src/EMSchur3DBase.cpp

+ 10
- 8
examples/EMSchur3D.cpp 查看文件

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::ColMajor>, Eigen::IncompleteLUT<Complex> > >::NewSP();
33
-    //auto EM3D = EMSchur3D< Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > >::NewSP();
32
+    //auto EM3D = EMSchur3D< Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, Eigen::IncompleteLUT<Complex> > >::NewSP();
33
+
34
+    auto EM3D = EMSchur3D< Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > >::NewSP();
34
 
35
 
35
     // SUPERLU
36
     // SUPERLU
36
-    //auto EM3D = EMSchur3D< Eigen::SuperLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > >::NewSP();
37
+    //auto EM3D = EMSchur3D< Eigen::SuperLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > >::NewSP();
37
 
38
 
38
-    //auto EM3D = EMSchur3D< Eigen::PardisoLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > >::NewSP();
39
-    //auto EM3D = EMSchur3D< Eigen::PardisoLDLT<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Symmetric&Eigen::Lower > >::NewSP();
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();
40
 
41
 
41
     // Eigen built-in
42
     // Eigen built-in
42
-    auto EM3D = EMSchur3D< Eigen::SparseLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > >::NewSP();
43
+    //auto EM3D = EMSchur3D< Eigen::SparseLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > >::NewSP();
43
 
44
 
44
     // UmfPack
45
     // UmfPack
45
-    //auto EM3D = EMSchur3D< Eigen::UmfPackLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > >::NewSP();
46
+    //auto EM3D = EMSchur3D< Eigen::UmfPackLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > >::NewSP();
46
 
47
 
47
     // PaStiX
48
     // PaStiX
48
-    //auto EM3D = EMSchur3D< Eigen::PastixLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, true > >::NewSP();
49
+    //auto EM3D = EMSchur3D< Eigen::PastixLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor>, true > >::NewSP();
49
 
50
 
50
 
51
 
51
     if (argc < 3) {
52
     if (argc < 3) {
114
     EM3D->LoadMeshToolsConductivityModel( argv[3] );
115
     EM3D->LoadMeshToolsConductivityModel( argv[3] );
115
     EM3D->SetResFileName(argv[5]);
116
     EM3D->SetResFileName(argv[5]);
116
     //EM3D->SetCSolver( Lemma::SPARSELU ); // Lemma::BiCGSTAB );
117
     //EM3D->SetCSolver( Lemma::SPARSELU ); // Lemma::BiCGSTAB );
118
+
117
     EM3D->Solve();
119
     EM3D->Solve();
118
 
120
 
119
     exit(EXIT_SUCCESS);
121
     exit(EXIT_SUCCESS);

+ 36
- 34
include/EMSchur3D.h 查看文件

231
         /////////////////////////////////////////
231
         /////////////////////////////////////////
232
         // Solve for RHS
232
         // Solve for RHS
233
         //CSolver[iw].setMaxIterations(750);
233
         //CSolver[iw].setMaxIterations(750);
234
+    Eigen::initParallel();
235
+    std::cout << "Eigen using " << Eigen::nbThreads( ) << " threads" << std::endl;
234
         VectorXcr A = CSolver[iw].solve(Se);
236
         VectorXcr A = CSolver[iw].solve(Se);
235
 
237
 
236
 //         // Solve Real system instead
238
 //         // Solve Real system instead
392
 
394
 
393
 #ifdef HAVE_SUPERLU
395
 #ifdef HAVE_SUPERLU
394
     template<>
396
     template<>
395
-    void EMSchur3D< Eigen::SuperLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > >::BuildCDirectSolver() {
396
-        CSolver = new Eigen::SuperLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > [Omegas.size()];
397
+    void EMSchur3D< Eigen::SuperLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > >::BuildCDirectSolver() {
398
+        CSolver = new Eigen::SuperLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > [Omegas.size()];
397
 
399
 
398
         for (int iw=0; iw<Omegas.size(); ++iw) {
400
         for (int iw=0; iw<Omegas.size(); ++iw) {
399
             jsw_timer timer;
401
             jsw_timer timer;
432
 #endif
434
 #endif
433
 
435
 
434
     template<>
436
     template<>
435
-    void EMSchur3D< Eigen::SparseLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::COLAMDOrdering<int> > >::BuildCDirectSolver() {
436
-        CSolver = new Eigen::SparseLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::COLAMDOrdering<int> > [Omegas.size()];
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
         for (int iw=0; iw<Omegas.size(); ++iw) {
439
         for (int iw=0; iw<Omegas.size(); ++iw) {
438
             jsw_timer timer;
440
             jsw_timer timer;
439
             timer.begin();
441
             timer.begin();
462
 
464
 
463
 #ifdef HAVE_PARDISO
465
 #ifdef HAVE_PARDISO
464
     template<>
466
     template<>
465
-    void EMSchur3D< Eigen::PardisoLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > >::BuildCDirectSolver() {
466
-        CSolver = new Eigen::PardisoLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > [Omegas.size()];
467
+    void EMSchur3D< Eigen::PardisoLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > >::BuildCDirectSolver() {
468
+        CSolver = new Eigen::PardisoLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > [Omegas.size()];
467
         for (int iw=0; iw<Omegas.size(); ++iw) {
469
         for (int iw=0; iw<Omegas.size(); ++iw) {
468
             jsw_timer timer;
470
             jsw_timer timer;
469
             timer.begin();
471
             timer.begin();
486
     }
488
     }
487
 
489
 
488
     template<>
490
     template<>
489
-    void EMSchur3D< Eigen::PardisoLDLT<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Symmetric > >::BuildCDirectSolver() {
490
-        CSolver = new Eigen::PardisoLDLT<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Symmetric > [Omegas.size()];
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
         for (int iw=0; iw<Omegas.size(); ++iw) {
493
         for (int iw=0; iw<Omegas.size(); ++iw) {
492
             jsw_timer timer;
494
             jsw_timer timer;
493
             timer.begin();
495
             timer.begin();
516
 #ifdef HAVE_UMFPACK
518
 #ifdef HAVE_UMFPACK
517
     // 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.
518
     template<>
520
     template<>
519
-    void EMSchur3D< Eigen::UmfPackLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > >::BuildCDirectSolver() {
520
-        CSolver = new Eigen::UmfPackLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > [Omegas.size()];
521
+    void EMSchur3D< Eigen::UmfPackLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > >::BuildCDirectSolver() {
522
+        CSolver = new Eigen::UmfPackLU<Eigen::SparseMatrix<Complex, Eigen::RowMajor> > [Omegas.size()];
521
         for (int iw=0; iw<Omegas.size(); ++iw) {
523
         for (int iw=0; iw<Omegas.size(); ++iw) {
522
             jsw_timer timer;
524
             jsw_timer timer;
523
             timer.begin();
525
             timer.begin();
547
 #endif
549
 #endif
548
 
550
 
549
 //     template<>
551
 //     template<>
550
-//     void EMSchur3D< Eigen::CholmodSupernodalLLT< Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Lower > > ::BuildCDirectSolver() {
551
-//         CSolver = new Eigen::CholmodSupernodalLLT< Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Lower > [Omegas.size()];
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
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
554
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
553
 //             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
555
 //             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
554
 //             jsw_timer timer;
556
 //             jsw_timer timer;
568
 //     }
570
 //     }
569
 
571
 
570
 //     template<>
572
 //     template<>
571
-//     void EMSchur3D< Eigen::CSymSimplicialLLT< Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Lower, Eigen::NaturalOrdering<int> > > ::BuildCDirectSolver() {
572
-//         CSolver = new Eigen::CSymSimplicialLLT< Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Lower, Eigen::NaturalOrdering<int> > [Omegas.size()];
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
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
575
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
574
 //             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
576
 //             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
575
 //             jsw_timer timer;
577
 //             jsw_timer timer;
589
 //     }
591
 //     }
590
 //
592
 //
591
 //     template<>
593
 //     template<>
592
-//     void EMSchur3D< Eigen::CSymSimplicialLLT< Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Lower, Eigen::AMDOrdering<int> > > ::BuildCDirectSolver() {
593
-//         CSolver = new Eigen::CSymSimplicialLLT< Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Lower, Eigen::AMDOrdering<int> > [Omegas.size()];
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
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
596
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
595
 //             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
597
 //             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
596
 //             jsw_timer timer;
598
 //             jsw_timer timer;
610
 //     }
612
 //     }
611
 //
613
 //
612
 //     template<>
614
 //     template<>
613
-//     void EMSchur3D< Eigen::CSymSimplicialLDLT< Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Lower, Eigen::AMDOrdering<int> > > ::BuildCDirectSolver() {
614
-//         CSolver = new Eigen::CSymSimplicialLDLT< Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Lower, Eigen::AMDOrdering<int> > [Omegas.size()];
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
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
617
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
616
 //             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
618
 //             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
617
 //             jsw_timer timer;
619
 //             jsw_timer timer;
632
 
634
 
633
 
635
 
634
     template<>
636
     template<>
635
-    void EMSchur3D< Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::IncompleteLUT<Complex> > > ::BuildCDirectSolver() {
636
-        CSolver = new Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::IncompleteLUT<Complex> > [Omegas.size()];
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
         for (int iw=0; iw<Omegas.size(); ++iw) {
639
         for (int iw=0; iw<Omegas.size(); ++iw) {
638
             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
640
             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
639
             CSolver[iw].preconditioner().setDroptol(1e-6);       //1e-5);      // 1e-12
641
             CSolver[iw].preconditioner().setDroptol(1e-6);       //1e-5);      // 1e-12
657
     }
659
     }
658
 
660
 
659
     template<>
661
     template<>
660
-    void EMSchur3D< Eigen::BiCGSTAB< Eigen::SparseMatrix<Complex, Eigen::ColMajor> > > ::BuildCDirectSolver() {
661
-        CSolver = new Eigen::BiCGSTAB< Eigen::SparseMatrix<Complex, Eigen::ColMajor> > [Omegas.size()];
662
+    void EMSchur3D< Eigen::BiCGSTAB< Eigen::SparseMatrix<Complex, Eigen::RowMajor> > > ::BuildCDirectSolver() {
663
+        CSolver = new Eigen::BiCGSTAB< Eigen::SparseMatrix<Complex, Eigen::RowMajor> > [Omegas.size()];
662
         for (int iw=0; iw<Omegas.size(); ++iw) {
664
         for (int iw=0; iw<Omegas.size(); ++iw) {
663
             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
665
             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
664
             jsw_timer timer;
666
             jsw_timer timer;
678
     }
680
     }
679
 
681
 
680
     template<>
682
     template<>
681
-    void EMSchur3D< Eigen::LeastSquaresConjugateGradient< Eigen::SparseMatrix<Complex, Eigen::ColMajor> > > ::BuildCDirectSolver() {
682
-        CSolver = new Eigen::LeastSquaresConjugateGradient< Eigen::SparseMatrix<Complex, Eigen::ColMajor> > [Omegas.size()];
683
+    void EMSchur3D< Eigen::LeastSquaresConjugateGradient< Eigen::SparseMatrix<Complex, Eigen::RowMajor> > > ::BuildCDirectSolver() {
684
+        CSolver = new Eigen::LeastSquaresConjugateGradient< Eigen::SparseMatrix<Complex, Eigen::RowMajor> > [Omegas.size()];
683
         for (int iw=0; iw<Omegas.size(); ++iw) {
685
         for (int iw=0; iw<Omegas.size(); ++iw) {
684
             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
686
             Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
685
             jsw_timer timer;
687
             jsw_timer timer;
699
     }
701
     }
700
 
702
 
701
     template<>
703
     template<>
702
-    void EMSchur3D<   Eigen::ConjugateGradient<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Lower > > ::BuildCDirectSolver() {
703
-        CSolver = new Eigen::ConjugateGradient<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Lower > [Omegas.size()];
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
         for (int iw=0; iw<Omegas.size(); ++iw) {
706
         for (int iw=0; iw<Omegas.size(); ++iw) {
705
             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
707
             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
706
             jsw_timer timer;
708
             jsw_timer timer;
720
     }
722
     }
721
 
723
 
722
     template<>
724
     template<>
723
-    void EMSchur3D<   Eigen::ConjugateGradient<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Lower, Eigen::IncompleteCholesky<Complex> > > ::BuildCDirectSolver() {
724
-        CSolver = new Eigen::ConjugateGradient<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Lower, Eigen::IncompleteCholesky<Complex> > [Omegas.size()];
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
         for (int iw=0; iw<Omegas.size(); ++iw) {
727
         for (int iw=0; iw<Omegas.size(); ++iw) {
726
             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
728
             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
727
             jsw_timer timer;
729
             jsw_timer timer;
741
     }
743
     }
742
 
744
 
743
 //     template<>
745
 //     template<>
744
-//     void EMSchur3D<   Eigen::PastixLLT<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Lower > > ::BuildCDirectSolver() {
745
-//         CSolver = new Eigen::PastixLLT<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Lower > [Omegas.size()];
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
 //         //MPI_Init(NULL, NULL);
748
 //         //MPI_Init(NULL, NULL);
747
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
749
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
748
 //             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
750
 //             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
763
 //     }
765
 //     }
764
 //
766
 //
765
 //     template<>
767
 //     template<>
766
-//     void EMSchur3D<   Eigen::PastixLDLT<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Lower > > ::BuildCDirectSolver() {
767
-//         CSolver = new Eigen::PastixLDLT<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Lower > [Omegas.size()];
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
 //         //MPI_Init(NULL, NULL);
770
 //         //MPI_Init(NULL, NULL);
769
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
771
 //         for (int iw=0; iw<Omegas.size(); ++iw) {
770
 //             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
772
 //             //Csym = Cvec[iw].selfadjointView<Eigen::Lower>();
788
 
790
 
789
 #ifdef HAVE_PASTIX
791
 #ifdef HAVE_PASTIX
790
     template<>
792
     template<>
791
-    void EMSchur3D<   Eigen::PastixLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, true > > ::BuildCDirectSolver() {
792
-        CSolver = new Eigen::PastixLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, true > [Omegas.size()];
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
 
795
 
794
         for (int iw=0; iw<Omegas.size(); ++iw) {
796
         for (int iw=0; iw<Omegas.size(); ++iw) {
795
             jsw_timer timer;
797
             jsw_timer timer;

+ 4
- 4
include/EMSchur3DBase.h 查看文件

359
 
359
 
360
     /** Matrix objects representing discrete operators
360
     /** Matrix objects representing discrete operators
361
      */
361
      */
362
-    Eigen::SparseMatrix<Complex, Eigen::ColMajor>*                  Cvec;
363
-    Eigen::SparseMatrix<Complex, Eigen::ColMajor>                   D;
362
+    Eigen::SparseMatrix<Complex, Eigen::RowMajor>*                  Cvec;
363
+    Eigen::SparseMatrix<Complex, Eigen::RowMajor>                   D;
364
 
364
 
365
     /** Squeezed matrices for reduced phi grid
365
     /** Squeezed matrices for reduced phi grid
366
      */
366
      */
367
-    Eigen::SparseMatrix<Complex, Eigen::ColMajor>*                  Cvec_s;
368
-    Eigen::SparseMatrix<Complex, Eigen::ColMajor>                   D_s;
367
+    Eigen::SparseMatrix<Complex, Eigen::RowMajor>*                  Cvec_s;
368
+    Eigen::SparseMatrix<Complex, Eigen::RowMajor>                   D_s;
369
 
369
 
370
     /** number of cells in x, set when RectilinearGrid is attached */
370
     /** number of cells in x, set when RectilinearGrid is attached */
371
     int nx;
371
     int nx;

+ 1
- 1
src/EMSchur3DBase.cpp 查看文件

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::ColMajor> [Omegas.size()];
945
+        Cvec    = new Eigen::SparseMatrix<Complex, Eigen::RowMajor> [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…
取消
儲存