Download laguer.eso

Back to the list

   1 : C LAGUER    SOURCE    PV        07/11/23    21:17:36     5978           
   2 :       subroutine laguer(a,m,x,its,kerre)
   3 :       IMPLICIT INTEGER(I-N)
   4 :       IMPLICIT REAL*8 (A-H,O-Z)
   5 :       dimension frac(8)
   6 :       real*8 err,abp,abm,abx,frac
   7 :       complex dx,x1,b,d,f,g,h,sq,gp,gm,g2
   8 :       complex a(m+1),x
   9 :       data frac/.5,.25,.75,.13,.38,.62,.88,1./
  10 : *      save frac
  11 : *      write(6,*) ' entree dans laguer m ',m
  12 :       epss = 2.e-7
  13 :       mr = 8
  14 :       mt=10
  15 :       maxit = mt*mr*3
  16 :       do 1 iter = 1,maxit
  17 :       its=iter
  18 :       b=a(m+1)
  19 :       err = abs(b)
  20 :       d=cmplx(0.,0.)
  21 :       f=cmplx(0.,0.) 
  22 :       abx = abs(x) 
  23 :       do 2 j=m,1,-1
  24 :           f = x*f+d
  25 :           d=x*d+b
  26 :           b=x*b+a(j)
  27 :           err=abs(b)+abx*err 
  28 :     2  continue
  29 :        err=epss*err
  30 :       if(abs(b).le.err) then
  31 :          return
  32 :       else
  33 :          g=d/b
  34 :          g2=g*g
  35 :          h=g2-2.*f/b
  36 :          sq=sqrt((m-1)*(m*h-g2))
  37 :          gp=g+sq
  38 :          gm=g-sq
  39 :          abp=abs(gp)
  40 :          abm=abs(gm)
  41 :          if(abp.lt.abm) gp=gm
  42 :          if(max(abp,abm).gt.0.) then
  43 :            dx=m/gp
  44 :          else
  45 :            dx=exp(cmplx(log(1.+abx),float(iter)))
  46 :          endif
  47 :       endif
  48 :       x1=x-dx
  49 :       if(x.eq.x1) return
  50 :       if(mod(iter,MT).ne.0) then
  51 :         x=x1
  52 :       else 
  53 :         x=x-dx*frac(iter/mt)
  54 :       endif
  55 :    1  continue
  56 :       kerre =944
  57 :       return
  58 :       end
  59 :   
  60 :  
  61 :  
  62 :  
  63 :  
  64 :  

© Cast3M 2003 - All rights reserved.
Disclaimer