El 14/04/2013, a las 17:11, Sonya Blade escribi?: > >If the eigenvector is complex then of course the eigenvalue is complex as > >well > >(I assume your matrix is real non-symmetric). You have to get both the real > >and >imaginary parts of the eigenvalue. > >http://www.grycap.upv.es/slepc/documentation/current/docs/manualpages/EPS/EPSGetEigenpair.html > >An alternative is to do all the computation in complex arithmetic (configure > >--with-scalar-type=complex). > >Jose > > Hi Jose, > > Probably you misunderstood my question my problem is: ierr = > EPSGetEigenvalue(eps,i,&eigen_r,&eigen_i);CHKERRQ(ierr); > returns all eigenvalues for each iteration where there is no imaginary parts > (and set to zeros in eigen_i as expected). > > I cross checked that with another algorithm which proves that all the > eigenvalues are correct (no imaginary parts),but > glitch is with trying to fetch the eigenvectors. Eigenvectors obtained from > the code below are mostly filled with zeros > and only the 11th row(Slepc returns 11 eigenvalue) has real and imaginary > part which is not possible. > > > for (j=0;j<test_int;j++) > { > ierr = EPSGetEigenvector(eps,j,&vec[0],&vec1[0]);CHKERRQ(ierr); > PetscPrintf(MPI_COMM_WORLD," %d || %4.8f || %4.8f \n",j,vec[j],vec1[j]); > } > > > I also provide you the main code and required files. > > Your help will be appreciated, > > Regards, > <main.c><IN.txt><mass.txt>
As Matt said, read the manual section on vectors. Page 43 "Basic Vector operations": "On occasion, the user needs to access the actual elements of the vector. The routine VecGetArray() returns a pointer to the elements local to the process: VecGetArray(Vec v,PetscScalar **array); When access to the array is no longer needed, the user should call VecRestoreArray(Vec v, PetscScalar **array); " Then have a look at any of the examples, for instance those listed here http://www.mcs.anl.gov/petsc/petsc-3.3/docs/manualpages/Vec/VecGetArray.html Please read the documentation. We cannot develop your code for you. Jose
