void lis_esolver_get_evalues_f(LIS_ESOLVER_F *esolver, LIS_VECTOR v, LIS_INT *ierr) { LIS_DEBUG_FUNC_IN; *ierr = lis_esolver_get_evalues((LIS_ESOLVER)LIS_V2P(esolver),(LIS_VECTOR)LIS_V2P(v)); if( *ierr ) return; LIS_DEBUG_FUNC_OUT; return; }
LIS_INT main(LIS_INT argc, char* argv[]) { LIS_INT nprocs,my_rank; int int_nprocs,int_my_rank; LIS_INT nsol; LIS_MATRIX A,B; LIS_VECTOR x,y,z,w; LIS_SCALAR evalue0; LIS_ESOLVER esolver; LIS_REAL residual; LIS_INT iter; double time; double itime,ptime,p_c_time,p_i_time; char esolvername[128]; LIS_DEBUG_FUNC_IN; lis_initialize(&argc, &argv); #ifdef USE_MPI MPI_Comm_size(MPI_COMM_WORLD,&int_nprocs); MPI_Comm_rank(MPI_COMM_WORLD,&int_my_rank); nprocs = int_nprocs; my_rank = int_my_rank; #else nprocs = 1; my_rank = 0; #endif if( argc < 6 ) { if( my_rank==0 ) { printf("Usage: %s matrix_filename evalues_filename evectors_filename residuals_filename iters_filename [options]\n", argv[0]); } CHKERR(1); } if( my_rank==0 ) { printf("\n"); printf("number of processes = %d\n",nprocs); } #ifdef _OPENMP if( my_rank==0 ) { printf("max number of threads = %d\n",omp_get_num_procs()); printf("number of threads = %d\n",omp_get_max_threads()); } #endif /* create matrix and vectors */ lis_matrix_create(LIS_COMM_WORLD,&A); lis_input_matrix(A,argv[1]); lis_vector_duplicate(A,&x); lis_esolver_create(&esolver); lis_esolver_set_option("-e si -ss 1 -eprint mem",esolver); lis_esolver_set_optionC(esolver); lis_esolve(A, x, &evalue0, esolver); lis_esolver_get_esolver(esolver,&nsol); lis_esolver_get_esolvername(nsol,esolvername); lis_esolver_get_residualnorm(esolver, &residual); lis_esolver_get_iter(esolver, &iter); lis_esolver_get_timeex(esolver,&time,&itime,&ptime,&p_c_time,&p_i_time); if( my_rank==0 ) { printf("%s: mode number = %d\n", esolvername, 0); #ifdef _LONG__DOUBLE printf("%s: eigenvalue = %Le\n", esolvername, evalue0); #else printf("%s: eigenvalue = %e\n", esolvername, evalue0); #endif #ifdef _LONG__LONG printf("%s: number of iterations = %lld\n",esolvername, iter); #else printf("%s: number of iterations = %d\n",esolvername, iter); #endif printf("%s: elapsed time = %e sec.\n", esolvername, time); printf("%s: preconditioner = %e sec.\n", esolvername, ptime); printf("%s: matrix creation = %e sec.\n", esolvername, p_c_time); printf("%s: linear solver = %e sec.\n", esolvername, itime); #ifdef _LONG__DOUBLE printf("%s: relative residual = %Le\n\n",esolvername, residual); #else printf("%s: relative residual = %e\n\n",esolvername, residual); #endif } lis_vector_create(LIS_COMM_WORLD,&y); lis_vector_create(LIS_COMM_WORLD,&z); lis_vector_create(LIS_COMM_WORLD,&w); lis_matrix_create(LIS_COMM_WORLD,&B); lis_esolver_get_evalues(esolver,y); lis_esolver_get_residualnorms(esolver,z); lis_esolver_get_iters(esolver,w); lis_esolver_get_evectors(esolver,B); /* write eigenvalues */ lis_output_vector(y,LIS_FMT_MM,argv[2]); /* write eigenvectors */ lis_output_matrix(B,LIS_FMT_MM,argv[3]); /* write residual norms */ lis_output_vector(z,LIS_FMT_MM,argv[4]); /* write numbers of iterations */ lis_output_vector(w,LIS_FMT_MM,argv[5]); lis_esolver_destroy(esolver); lis_matrix_destroy(A); lis_vector_destroy(x); lis_matrix_destroy(B); lis_vector_destroy(y); lis_vector_destroy(z); lis_vector_destroy(w); lis_finalize(); LIS_DEBUG_FUNC_OUT; return 0; }