@PROBLEM arpack_solver
@INCLUDE <math.h>
@FUNCTION arpack_standard_driver
@DASHI $(MPI_DIR)/include
@DASHI $(NETSOLVE_ROOT)/src/SampleNumericalSoftware/SparseSolvers/eigen
@DASHI $(NETSOLVE_ROOT)/src/SampleNumericalSoftware/SparseSolvers/sparse/aux
@INCLUDE "mpi.h"
@LIB -L$(NETSOLVE_ROOT)/lib/$(NETSOLVE_ARCH)
@LIB -lnetsolve_arpack
@LIB -lnetsolve_aux
@LIB $(ARPACK_LIB_LINK)
@LIB $(LAPACK_LIB_LINK)
@LIB $(SUPERLU_LIB_LINK)
@LIB $(BLAS_LIB_LINK)
@LIB -L$(MPI_DIR)/lib
@LIB -lmpich
@LIB $(MPICH_LIBS)
@LIB -lm


@LANGUAGE C
@MAJOR ROW
@PATH /ARPACK/
@MOVEABLE 0
@COMPLEXITY 3,2
@DESCRIPTION 
ARPACK solve using dspstev_ from SPEIG
@CUSTOMIZED ITER_SOLVE
@DESCRIPTION
netsolve iterative solve using petsc and aztec and itpack
@PARALLEL MPI


@INPUT 2
@OBJECT SPARSEMATRIX D sm
the sparse matrix
@OBJECT SCALAR I wanted_vectors
number of eigenvalues requested

@OUTPUT 3
@OBJECT VECTOR D real_ev
real part of the eigenvalue.
@OBJECT VECTOR D imag_ev
imaginary part of the eigenvalue.
@OBJECT VECTOR D final vectors
Eigenvector matrix

@CALLINGSEQUENCE
@ARG mI0, nI0
@ARG fI0
@ARG I0
@ARG iI0
@ARG pI0
@ARG I1
@ARG O0
@ARG O1
@ARG O2

@CODE
extern int arpack_standard_driver
(double *mat,int *idx,int *ptr,int size,int nwanted,
 double *real_ev,double *imag_ev,double *vectors);

int i;


  @O0@ = (double*)malloc((*@I1@+1)*sizeof(double));
  @O1@ = (double*)malloc((*@I1@+1)*sizeof(double));
  @O2@ = (double*)malloc((*@mI0@)*(*@I1@+1)*sizeof(double));

  for(i=0; i<*@fI0@; i++) @iI0@[i]++;
  for(i=0; i<*@mI0@+1; i++) @pI0@[i]++;

  arpack_standard_driver(@I0@, @iI0@, @pI0@, *@mI0@, *@I1@, @O0@,
			@O1@, @O2@);

  *@mO0@ = *@I1@+1;
  *@mO1@ = *@I1@+1;
  *@mO2@ = (*@mI0@)*(*@I1@);



@END_CODE
