program test
use lattice_class
use solver_class
implicit none
integer, parameter :: NN=2
complex(DP) :: AA(NN,NN),b(NN),x(NN)
type(cg_alg) :: solver
integer :: istat
AA(1,1)=Z1
AA(1,2)=3*Z1 - Zi
AA(2,1)=3*Z1 + Zi
AA(2,2)=3*Z1
b(1) = Z1+Zi
b(2) = 2*Z1-2*Zi
x(1) = Z0
x(2) = Z0
write(*,'("b=",4E24.15)')b
write(*,'("x=",4E24.15)')x
call new(solver,NSITE=2,max_iter=2,guess=1,tol=1.E-10_DP)
solver%src_vec(:) = b(:)
solver%dst_vec(:) = x(:)
do
call solve(solver)
istat = get_status(solver)
select case(get_status(solver))
case (OP_NOP)
cycle
case (OP_DO_MATVEC)
solver%dst_vec(:) = MATMUL(AA(:,:),solver%src_vec(:))
case (OP_CONVERGED)
write(*,'(I3,E24.15)')get_current_iteration(solver),get_residual_norm(solver)
exit
case (OP_PRINT_STATUS)
write(*,'(I3,E24.15)')get_current_iteration(solver),get_residual_norm(solver)
end select
enddo
x(:) = solver%dst_vec(:)
write(*,'("x=",4E24.15)')x
call delete(solver)
stop
end program