Trevor Irons 6 лет назад
Родитель
Сommit
ac623cc71f
4 измененных файлов: 22 добавлений и 15 удалений
  1. 7
    3
      CMakeLists.txt
  2. 3
    3
      examples/EMSchur3D-vtk.cpp
  3. 3
    3
      examples/EMSchur3D.cpp
  4. 9
    6
      include/EMSchur3D.h

+ 7
- 3
CMakeLists.txt Просмотреть файл

@@ -48,11 +48,15 @@ if ( LEMMA_VTK6_SUPPORT OR LEMMA_VTK7_SUPPORT OR LEMMA_VTK8_SUPPORT AND LEMMA_MO
48 48
     	CXX_STANDARD_REQUIRED_ON
49 49
 	)
50 50
 
51
-        # No OpenMP
51
+	option ( EMSCHUR3D_ON_KINGSPEAK FALSE )
52
+	if ( EMSCHUR3D_ON_KINGSPEAK )
53
+    # No OpenMP
54
+		add_compile_options(-DHAVE_PARDISO)
52 55
 	#set (MKLLINK  "-L$MKLROOT/lib/intel64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -Wl,-rpath=$MKLROOT/lib/intel64")
53
-        # OpenMP 
56
+        # OpenMP R3
54 57
         set (MKLLINK  "-L$MKLROOT/lib/intel64 -Wl,-rpath=$MKLROOT/lib/intel64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread")
55
-	target_link_libraries(emschur3d "lemmacore" ${MKLLINK})
58
+		target_link_libraries(emschur3d "lemmacore" ${MKLLINK})
59
+	endif()
56 60
 
57 61
 	# Linking
58 62
 	target_link_libraries(emschur3d "lemmacore" "fdem1d" )

+ 3
- 3
examples/EMSchur3D-vtk.cpp Просмотреть файл

@@ -114,11 +114,11 @@ int main( int argc, char** argv ) {
114 114
     // And solve
115 115
 
116 116
     // Use BiCGSTAB Diagonal preconditioner
117
-    //auto EM3D = EMSchur3D< Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::IncompleteLUT<Complex> > >::NewSP();
117
+    auto EM3D = EMSchur3D< Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::IncompleteLUT<Complex> > >::NewSP();
118 118
     //auto EM3D = EMSchur3D< Eigen::BiCGSTAB<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > >::NewSP();
119
-    
119
+
120 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();
121
+    //auto EM3D = EMSchur3D< Eigen::PardisoLDLT<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Symmetric > >::NewSP();
122 122
 
123 123
     // LS CG
124 124
     //auto EM3D = EMSchur3D< Eigen::LeastSquaresConjugateGradient<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > >::NewSP();

+ 3
- 3
examples/EMSchur3D.cpp Просмотреть файл

@@ -34,12 +34,12 @@ int main( int argc, char** argv ) {
34 34
 
35 35
     // SUPERLU
36 36
     //auto EM3D = EMSchur3D< Eigen::SuperLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > >::NewSP();
37
-    
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::PardisoLDLT<Eigen::SparseMatrix<Complex, Eigen::ColMajor>, Eigen::Symmetric&Eigen::Lower > >::NewSP();
40 40
 
41 41
     // Eigen built-in
42
-    //auto EM3D = EMSchur3D< Eigen::SparseLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > >::NewSP();
42
+    auto EM3D = EMSchur3D< Eigen::SparseLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > >::NewSP();
43 43
 
44 44
     // UmfPack
45 45
     //auto EM3D = EMSchur3D< Eigen::UmfPackLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > >::NewSP();

+ 9
- 6
include/EMSchur3D.h Просмотреть файл

@@ -36,7 +36,9 @@
36 36
 #include <Eigen/PaStiXSupport>
37 37
 #endif
38 38
 
39
+#ifdef HAVE_PARDISO
39 40
 #include <Eigen/PardisoSupport>
41
+#endif
40 42
 
41 43
 //#include "CSymSimplicialCholesky.h"
42 44
 
@@ -449,17 +451,17 @@ namespace Lemma {
449 451
             std::cout << " done in " << timer.end() / 60. << " [m]" << std::endl;
450 452
         }
451 453
     }
452
-    
453
-// Pardiso 
454
+
455
+#ifdef HAVE_PARDISO
454 456
     template<>
455 457
     void EMSchur3D< Eigen::PardisoLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > >::BuildCDirectSolver() {
456 458
         CSolver = new Eigen::PardisoLU<Eigen::SparseMatrix<Complex, Eigen::ColMajor> > [Omegas.size()];
457 459
         for (int iw=0; iw<Omegas.size(); ++iw) {
458 460
             jsw_timer timer;
459 461
             timer.begin();
460
-        
462
+
461 463
             //CSolver[iw].pardisoParameterArray()[2] = 28; // OMP_NUM_THREADS?
462
-            
464
+
463 465
             /*  Complex system */
464 466
             std::cout << "PardisoLU pattern analyzing C_" << iw << ",";
465 467
             std::cout.flush();
@@ -481,10 +483,10 @@ namespace Lemma {
481 483
         for (int iw=0; iw<Omegas.size(); ++iw) {
482 484
             jsw_timer timer;
483 485
             timer.begin();
484
-        
486
+
485 487
             //CSolver[iw].pardisoParameterArray()[2] = 28; // OMP_NUM_THREADS?
486 488
             //Eigen::SparseMatrix<Complex> Csym = Cvec[iw].selfadjointView< Eigen::Lower >();
487
-            
489
+
488 490
             /*  Complex system */
489 491
             std::cout << "PardisoLDLT pattern analyzing C_" << iw << ",";
490 492
             std::cout.flush();
@@ -501,6 +503,7 @@ namespace Lemma {
501 503
             std::cout << " done in " << timer.end() / 60. << " [m]" << std::endl;
502 504
         }
503 505
     }
506
+#endif
504 507
 
505 508
 #ifdef HAVE_UMFPACK
506 509
     // Umfpack only seems to work when LOWER and UPPER are set to 1. Workarounds this have not been found.

Загрузка…
Отмена
Сохранить