C ZERNEW    SOURCE    CHAT      05/01/13    04:22:41     5004
      subroutine zernew(xr,xi,coef,m,xvr,xvi,kerre)
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)
      dimension coef(*)
* coef(1),coef(2),...coef(m+1)  sonrt les coef (reels) du polynome de
* degré m .coef(1) est le terme constant
* xr et xi sont les parties reelle et imaginaire d'une racine approchée
* et on cherche la solution excate par un newton
* en sortie xvr et xvi sont les parties reelle et imaginaire de la
* solution
      eps=1.d-10
      xvr=xr
      xvi=xi
      icou=0
 1    continue
      icou=icou+1
* evaluation du polynome et de sa dérivée
      xpor=coef(1)
      xpoi=0.d0
      xder=coef(2)
      xdei=0.d0
      xpur=xvr
      xpui=xvi
      do 10 ll=1,m-1
      xpor=xpor+xpur*coef(1+ll)
      xpoi=xpoi+xpui*coef(1+ll)
      xder=xder+xpur*coef(2+ll)*(ll+1)
      xdei=xdei+xpui*coef(2+ll)*(ll+1)
      xpurr = xpur*xvr-xpui*xvi
      xpuii=xpur*xvi+xpui*xvr
      xpur=xpurr
      xpui=xpuii
   10 continue
      xpor=xpor+xpur*coef(1+m)
      xpoi=xpoi+xpui*coef(1+m)
*      write(6,*) 'xpor,xpoi,xder,xdei',xpor,xpoi,xder,xdei
* recherche de xdr et xdi

       denom=xder*xder+xdei*xdei
      if(denom.eq.0.d0) then
*        write(6,*) 'dérivée nulle'
         kerre=22
        return
      endif
      xdr=-(xpor*xder +xpoi*xdei)/denom
      xdi= (xpor*xdei-xpoi*xder)/denom
      xvr=xvr+xdr
      xvi = xvi+xdi
       xcomp=max(abs(xvr),abs(xvi))*eps
*       write(6,*) 'denom,xdr,xdi,xvr,xvi',denom,xdr,xdi,xvr,xvi
      if(abs(xdr).le.xcomp.and.abs(xdi).le.xcomp.and.icou.ge.4)
     $      go to 2
      go to 1
    2 continue
*      write(6,*) ' icou',icou
      return
      end






