Wrong tag fixed, these tests must not be executed under Mac OS X (freeze)
[scilab.git] / scilab / modules / arnoldi / tests / unit_tests / znaupd.dia.ref
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2012 - SE - Sylvestre Ledru
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 // <-- LINUX ONLY -->
8 nx    = 10;
9 nev   = 3;
10 ncv   = 6;
11 bmat  = 'I';
12 which = 'LM';
13 // Local Arrays
14 iparam  = zeros(11, 1);
15 ipntr   = zeros(14, 1);
16 _select = zeros(ncv, 1);
17 d       = zeros(nev + 1, 1) + 0 * %i;
18 z       = zeros(nx, nev) + 0* %i;
19 resid   = zeros(nx, 1) + 0 * %i;
20 v       = zeros(nx, ncv) + 0 * %i;
21 workd   = zeros(3 * nx, 1) + 0 * %i;
22 workev  = zeros(2 * ncv, 1) + 0 * %i;
23 rwork   = zeros(ncv, 1);
24 workl   = zeros(3 * ncv * ncv + 5 *ncv, 1) + 0 * %i;
25 // Build the complex test matrix
26 A            = diag(10 * ones(nx,1) + %i * ones(nx,1));
27 A(1:$-1,2:$) = A(1:$-1,2:$) + diag(6 * ones(nx - 1,1));
28 A(2:$,1:$-1) = A(2:$,1:$-1) + diag(-6 * ones(nx - 1,1));
29 tol    = 0;
30 ido    = 0;
31 ishfts = 1;
32 maxitr = 300;
33 mode1  = 1;
34 iparam(1) = ishfts;
35 iparam(3) = maxitr;
36 iparam(7) = mode1;
37 sigma = complex(0);
38 info_znaupd = 0;
39 // M A I N   L O O P (Reverse communication)
40 while(ido <> 99)
41   // Repeatedly call the routine ZNAUPD and take actions indicated by parameter IDO until
42   // either convergence is indicated or maxitr has been exceeded.
43   [ido, resid, v, iparam, ipntr, workd, workl, rwork, info_znaupd] = znaupd(ido, bmat, nx, which, nev, tol, resid, ncv, v, iparam, ipntr, workd, workl, rwork, info_znaupd);
44   if(info_znaupd < 0)
45     printf('\nError with znaupd, info = %d\n', info_znaupd);
46     printf('Check the documentation of znaupd\n\n');
47   end
48   if(ido == -1 | ido == 1)
49     // Perform matrix vector multiplication
50     workd(ipntr(2):ipntr(2) + nx - 1) = A * workd(ipntr(1):ipntr(1) + nx - 1);
51   end
52 end
53 // Post-Process using ZNEUPD.
54 rvec    = 1;
55 howmany = 'A';
56 info_zneupd = 0;
57 [d, z, resid, iparam, ipntr, workd, workl, rwork, info_zneupd] = zneupd(rvec, howmany, _select, d, z, sigma, workev, bmat, nx, which, nev, tol, resid, ncv, v, ...
58                                                                     iparam, ipntr, workd, workl, rwork, info_zneupd);
59 assert_checkalmostequal(A * z, z * diag(d(1:3)), sqrt(%eps), 1.e-10);