Line data Source code
1 : /*
2 : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3 : SLEPc - Scalable Library for Eigenvalue Problem Computations
4 : Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain
5 :
6 : This file is part of SLEPc.
7 : SLEPc is distributed under a 2-clause BSD license (see LICENSE).
8 : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
9 : */
10 :
11 : static char help[] = "Diagonal eigenproblem.\n\n"
12 : "The command line options are:\n"
13 : " -n <n>, where <n> = matrix dimension.\n"
14 : " -seed <s>, where <s> = seed for random number generation.\n\n";
15 :
16 : #include <slepceps.h>
17 :
18 8 : int main(int argc,char **argv)
19 : {
20 8 : Mat A; /* problem matrix */
21 8 : EPS eps; /* eigenproblem solver context */
22 8 : Vec v0; /* initial vector */
23 8 : PetscRandom rand;
24 8 : PetscReal tol=PETSC_SMALL;
25 8 : PetscInt n=30,i,Istart,Iend,seed=0x12345678;
26 :
27 8 : PetscFunctionBeginUser;
28 8 : PetscCall(SlepcInitialize(&argc,&argv,NULL,help));
29 :
30 8 : PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL));
31 8 : PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\nDiagonal Eigenproblem, n=%" PetscInt_FMT "\n\n",n));
32 :
33 8 : PetscCall(MatCreate(PETSC_COMM_WORLD,&A));
34 8 : PetscCall(MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,n,n));
35 8 : PetscCall(MatSetFromOptions(A));
36 8 : PetscCall(MatGetOwnershipRange(A,&Istart,&Iend));
37 248 : for (i=Istart;i<Iend;i++) PetscCall(MatSetValue(A,i,i,i+1,INSERT_VALUES));
38 8 : PetscCall(MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY));
39 8 : PetscCall(MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY));
40 :
41 : /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
42 : Solve the eigensystem
43 : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
44 8 : PetscCall(EPSCreate(PETSC_COMM_WORLD,&eps));
45 8 : PetscCall(EPSSetOperators(eps,A,NULL));
46 8 : PetscCall(EPSSetProblemType(eps,EPS_HEP));
47 8 : PetscCall(EPSSetTolerances(eps,tol,PETSC_CURRENT));
48 8 : PetscCall(EPSSetFromOptions(eps));
49 : /* set random initial vector */
50 8 : PetscCall(MatCreateVecs(A,&v0,NULL));
51 8 : PetscCall(PetscRandomCreate(PETSC_COMM_WORLD,&rand));
52 8 : PetscCall(PetscRandomSetFromOptions(rand));
53 8 : PetscCall(PetscOptionsGetInt(NULL,NULL,"-seed",&seed,NULL));
54 8 : PetscCall(PetscRandomSetSeed(rand,seed));
55 8 : PetscCall(PetscRandomSeed(rand));
56 8 : PetscCall(VecSetRandom(v0,rand));
57 8 : PetscCall(EPSSetInitialSpace(eps,1,&v0));
58 : /* call the solver */
59 8 : PetscCall(EPSSolve(eps));
60 :
61 : /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
62 : Display solution and clean up
63 : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
64 8 : PetscCall(EPSErrorView(eps,EPS_ERROR_RELATIVE,NULL));
65 8 : PetscCall(EPSDestroy(&eps));
66 8 : PetscCall(MatDestroy(&A));
67 8 : PetscCall(VecDestroy(&v0));
68 8 : PetscCall(PetscRandomDestroy(&rand));
69 8 : PetscCall(SlepcFinalize());
70 : return 0;
71 : }
72 :
73 : /*TEST
74 :
75 : testset:
76 : args: -eps_nev 4
77 : requires: !single
78 : output_file: output/test6_1.out
79 : test:
80 : suffix: 1
81 : args: -eps_type {{krylovschur subspace arnoldi gd}}
82 : test:
83 : suffix: 1_power
84 : args: -eps_type power -eps_max_it 20000
85 : test:
86 : suffix: 1_gd2
87 : args: -eps_type gd -eps_gd_double_expansion
88 : test:
89 : suffix: 1_arpack
90 : args: -eps_type arpack
91 : requires: arpack
92 : test:
93 : suffix: 1_trlan
94 : args: -eps_type trlan
95 : requires: trlan
96 :
97 : TEST*/
|