| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 
 |       subroutine tranpo(nmaxi,maxdeg,ityp,vd,sm,a,ndeg,sfa,spr,spi,nj)
c!purpose
c  reactance transformation of the poles
c!
      implicit double precision (a-h,o-z)
      double precision sm (maxdeg,*)
      double precision spr(*),spi(*)
      external slamch, dlamch
      real slamch
c
      flmi=2.0d+0*dlamch('p')
      flma=2.0d+0**(int(slamch('l'))-2)
      if (ityp.eq.1) go to 90
       if (ityp.eq.3) go to 40
      do 30 i=1,nj
        qr = spr(i)
        qi = spi(i)
        qh = qr*qr + qi*qi
        if (abs(qi).gt.flmi) go to 10
        sfa = -sfa/qr
        go to 20
  10    sfa = sfa/qh
  20    qi = qi/qh
        if (abs(qi).lt.flmi) qi = 0.0d+0
        spi(i) = qi
        spr(i) = qr/qh
  30  continue
      if (ityp.eq.2) go to 90
  40  qa = 2.0d+0*a
      nn = nj
      nj = ndeg
       ndeg = 2*ndeg
      me = nj
      do 80 i=1,nn
        qr = spr(i)/qa
        qi = spi(i)/qa
        if (abs(qi).ge.flma) go to 70
        dr = qr
        di = qi
        dq = di*di
        di = di*dr*2.0d+0
        dr = dr*dr - dq - 1.0d+0
        call dsqrtc(dr, di, dr, di)
        qz = dr
        qn = di
        if (abs(qn).gt.flmi) go to 60
        jj = nj + me
        do 50 ii=me,nj
          j = jj - ii
          spr(j+1) = spr(j)
           spi(j+1) = spi(j)
  50    continue
        nj = nj + 1
        me = me + 1
  60    spr(i) = qr + qz
        spi(i) = qi + qn
        spr(me) = qr - qz
        spi(me) = qn - qi
        me = me - 1
        go to 80
  70    spr(i) = qr
        spi(i) = flma
        nj = nj + 1
        spr(nj) = qr
        spi(nj) = 0.0d+0
  80  continue
  90  do 100 i=1,nj
        spr(i) = spr(i)*vd
         spi(i) = spi(i)*vd
 100  continue
      sfa = sfa*sm(nmaxi-1,4)
      return
      end
 |