C     PROGRAM NEC(INPUT,TAPE5=INPUT,OUTPUT,TAPE11,TAPE12,TAPE13,TAPE14,
C    1TAPE15,TAPE16,TAPE20,TAPE21)
C
C     NUMERICAL ELECTROMAGNETICS CODE (NEC2)  DEVELOPED AT LAWRENCE
C     LIVERMORE LAB., LIVERMORE, CA.  (CONTACT G. BURKE AT 415-422-8414
C     FOR PROBLEMS WITH THE NEC CODE.  FOR PROBLEMS WITH THE VAX IMPLEM-
C     ENTATION, CONTACT J. BREAKALL AT 415-422-8196 OR E. DOMNING AT 415
C     422-5936)
C     FILE CREATED 4/11/80.
C
C                ***********NOTICE**********
C     THIS COMPUTER CODE MATERIAL WAS PREPARED AS AN ACCOUNT OF WORK
C     SPONSORED BY THE UNITED STATES GOVERNMENT.  NEITHER THE UNITED
C     STATES NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
C     THEIR EMPLOYEES, NOR ANY OF THEIR CONTRACTORS, SUBCONTRACTORS, OR
C     THEIR EMPLOYEES, MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR
C     ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY,
C     COMPLETENESS OR USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT
C     OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT
C     INFRINGE PRIVATELY-OWNED RIGHTS.
C
C***
C ***
C     DOUBLE PRECISION 6/4/85
C
C ***
     IMPLICIT REAL (A-H,O-Z)
     CHARACTER   AIN*2, ATST*2, INFILE*80, OTFILE*80
C***
     PARAMETER ( NM=600, N2M=800, N3M=1000)
C     INTEGER  AIN,ATST,PNET,HPOL
     REALHPOL,PNET
     COMPLEX  CM, FJ, VSANT, ETH, EPH, ZRATI, CUR, CURI, ZARRAY,
    &ZRATI2
     COMPLEX  EX, EY, EZ, ZPED, VQD, VQDS, T1, Y11A, Y12A, EPSC, U,
    & U2, XX1, XX2
     COMPLEX  AR1, AR2, AR3, EPSCF, FRATI
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /CMB/ CM(90000)
     COMMON  /MATPAR/ ICASE, NBLOKS, NPBLK, NLAST, NBLSYM, NPSYM,
    &NLSYM, IMAT, ICASX, NBBX, NPBX, NLBX, NBBL, NPBL, NLBL
     COMMON  /SAVE/ IP( N2M), KCOM, COM(19,5), EPSR, SIG, SCRWLT,
    &SCRWRT, FMHZ
     COMMON  /CRNT/ AIR( NM), AII( NM), BIR( NM), BII( NM), CIR( NM),
    &CII( NM), CUR( N3M)
     COMMON  /GND/ ZRATI, ZRATI2, FRATI, CL, CH, SCRWL, SCRWR, NRADL,
    &KSYMP, IFAR, IPERF, T1, T2
     COMMON  /ZLOAD/ ZARRAY( NM), NLOAD, NLODF
     COMMON  /YPARM/ NCOUP, ICOUP, NCTAG(5), NCSEG(5), Y11A(5), Y12A(
    &20)
     COMMON  /SEGJ/ AX(30), BX(30), CX(30), JCO(30), JSNO, ISCON(50),
    &NSCON, IPCON(10), NPCON
     COMMON  /VSORC/ VQD(30), VSANT(30), VQDS(30), IVQD(30), ISANT(30)
    &, IQDS(30), NVQD, NSANT, NQDS
     COMMON  /NETCX/ ZPED, PIN, PNLS, NEQ, NPEQ, NEQ2, NONET, NTSOL,
    &NPRINT, MASYM, ISEG1(150), ISEG2(150), X11R(150), X11I(150),
    &X12R(150), X12I(150), X22R(150), X22I(150), NTYP(150)
     COMMON  /FPAT/ NTH, NPH, IPD, IAVP, INOR, IAX, THETS, PHIS, DTH,
    &DPH, RFLD, GNOR, CLT, CHT, EPSR2, SIG2, IXTYP, XPR6, PINR, PNLR,
    &PLOSS, NEAR, NFEH, NRX, NRY, NRZ, XNR, YNR, ZNR, DXNR, DYNR, DZNR
    &
     COMMON  /GGRID/ AR1(11,10,4), AR2(17,5,4), AR3(9,8,4), EPSCF, DXA
    &(3), DYA(3), XSA(3), YSA(3), NXA(3), NYA(3)
C***
     COMMON  /GWAV/ U, U2, XX1, XX2, R1, R2, ZMH, ZPH
C***
     COMMON  /PLOT/ IPLP1, IPLP2, IPLP3, IPLP4
     DIMENSION  CAB(1), SAB(1), X2(1), Y2(1), Z2(1)
     DIMENSION  LDTYP(200), LDTAG(200), LDTAGF(200), LDTAGT(200),
    & ZLR(200), ZLI(200), ZLC(200)
     DIMENSION  ATST(22), PNET(6), HPOL(3), IX( N2M)
     DIMENSION  FNORM(200)
C***
     DIMENSION  T1X(1), T1Y(1), T1Z(1), T2X(1), T2Y(1), T2Z(1)
     DIMENSION  XTEMP( NM), YTEMP( NM), ZTEMP( NM), SITEMP( NM),
    &BITEMP( NM)
     EQUIVALENCE(CAB,ALP),(SAB,BET),(X2,SI),(Y2,ALP),(Z2,BET)
     EQUIVALENCE(T1X,SI),(T1Y,ALP),(T1Z,BET),(T2X,ICON1),(T2Y,ICON2),(
    &T2Z,ITAG)
     DATA   ATST/'CE','FR','LD','GN','EX','NT','XQ','NE','GD','RP',
    &'CM','NX','EN','TL','PT','KH','NH','PQ','EK','WG','CP','PL'/
     DATA   HPOL/6HLINEAR,5HRIGHT,4HLEFT/
     DATA   PNET/6H      ,2H  ,6HSTRAIG,2HHT,6HCROSSE,1HD/
     DATA   TA/1.745329252D-02/, CVEL/299.8/
C***
     DATA   LOADMX, NSMAX, NETMX/200,150,150/, NORMF/200/
 706 CONTINUE
     PRINT700
 700 FORMAT('$ENTER DATA INPUT FILENAME [HIT RETURN FOR TERMINAL',
    &' INPUT] : ',/,'$     >')
 701 FORMAT(A)
     READ( *,701,ERR=702)  INFILE
     CALL STR0PC( INFILE, INFILE)
C      OPEN (UNIT=5,FILE=INFILE,STATUS='OLD',READONLY,ERR=702)
     IF( INFILE.NE.' ') THEN
     OPEN ( UNIT=5,FILE=INFILE,STATUS='OLD',ERR=702)
     ENDIF
 707 CONTINUE
     PRINT703
 703 FORMAT('$ENTER DATA OUTPUT FILENAME [HIT RETURN FOR TERMINAL',
    &' OUTPUT] : ',/,'$     >')
     READ( *,701,ERR=704)  OTFILE
     CALL STR0PC( OTFILE, OTFILE)
     IF( OTFILE.NE.' ') THEN
     OPEN ( UNIT=6,FILE=OTFILE,STATUS='NEW',ERR=704)
     ENDIF
     GOTO 705
 702 CALL ERROR
     GOTO 706
 704 CALL ERROR
     GOTO 707
C***
 705 CONTINUE
     CALL SECNDS(EXTIM)
     FJ=(0.,1.)
     LD=600
     NXA(1)=0
     IRESRV=90000
C***
   1 KCOM=0
     IFRTMW=0
C***
     IFRTMP=0
   2 KCOM= KCOM+1
     IF( KCOM.GT.5) KCOM=5
C***
     READ( 5,125)  AIN,( COM( I, KCOM), I=1,19)
C***
     CALL STR0PC( AIN, AIN)
     IF( KCOM.GT.1) GOTO 3
     WRITE( 6,126)
     WRITE( 6,127)
     WRITE( 6,128)
   3 WRITE( 6,129) ( COM( I, KCOM), I=1,19)
     IF( AIN.EQ. ATST(11)) GOTO 2
     IF( AIN.EQ. ATST(1)) GOTO 4
     WRITE( 6,130)
     STOP
   4 CONTINUE
     DO 5  I=1, LD
   5 ZARRAY( I)=(0.,0.)
     MPCNT=0
C
C     SET UP GEOMETRY DATA IN SUBROUTINE DATAGN
C
     IMAT=0
     CALL DATAGN
     IFLOW=1
C
C     CORE ALLOCATION FOR ARRAYS B, C, AND D FOR N.G.F. SOLUTION
C
     IF( IMAT.EQ.0) GOTO 326
     NEQ= N1+2* M1
     NEQ2= N- N1+2*( M- M1)+ NSCON+2* NPCON
     CALL FBNGF( NEQ, NEQ2, IRESRV, IB11, IC11, ID11, IX11)
     GOTO 6
 326 NEQ= N+2* M
     NEQ2=0
     IB11=1
     IC11=1
     ID11=1
     IX11=1
     ICASX=0
   6 NPEQ= NP+2* MP
C
C     DEFAULT VALUES FOR INPUT PARAMETERS AND FLAGS
C
C***
     WRITE( 6,135)
     IPLP1=0
     IPLP2=0
     IPLP3=0
C***
     IPLP4=0
     IGO=1
     FMHZS= CVEL
     NFRQ=1
     RKH=1.
     IEXK=0
     IXTYP=0
     NLOAD=0
     NONET=0
     NEAR=-1
     IPTFLG=-2
     IPTFLQ=-1
     IFAR=-1
     ZRATI=(1.,0.)
     IPED=0
     IRNGF=0
     NCOUP=0
     ICOUP=0
     IF( ICASX.GT.0) GOTO 14
     FMHZ= CVEL
     NLODF=0
     KSYMP=1
     NRADL=0
C
C     MAIN INPUT SECTION - STANDARD READ STATEMENT - JUMPS TO APPRO-
C     PRIATE SECTION FOR SPECIFIC PARAMETER SET UP
C
C14    READ(5,136)AIN,ITMP1,ITMP2,ITMP3,ITMP4,TMP1,TMP2,TMP3,TMP4,TMP5,
C     1TMP6
C***
     IPERF=0
C***
  14 CALL READMN( AIN, ITMP1, ITMP2, ITMP3, ITMP4, TMP1, TMP2, TMP3,
    &TMP4, TMP5, TMP6)
     MPCNT= MPCNT+1
     WRITE( 6,137)  MPCNT, AIN, ITMP1, ITMP2, ITMP3, ITMP4, TMP1, TMP2
    &, TMP3, TMP4, TMP5, TMP6
     IF( AIN.EQ. ATST(2)) GOTO 16
     IF( AIN.EQ. ATST(3)) GOTO 17
     IF( AIN.EQ. ATST(4)) GOTO 21
     IF( AIN.EQ. ATST(5)) GOTO 24
     IF( AIN.EQ. ATST(6)) GOTO 28
     IF( AIN.EQ. ATST(14)) GOTO 28
     IF( AIN.EQ. ATST(15)) GOTO 31
     IF( AIN.EQ. ATST(18)) GOTO 319
     IF( AIN.EQ. ATST(7)) GOTO 37
     IF( AIN.EQ. ATST(8)) GOTO 32
     IF( AIN.EQ. ATST(17)) GOTO 208
     IF( AIN.EQ. ATST(9)) GOTO 34
     IF( AIN.EQ. ATST(10)) GOTO 36
     IF( AIN.EQ. ATST(16)) GOTO 305
     IF( AIN.EQ. ATST(19)) GOTO 320
     IF( AIN.EQ. ATST(12)) GOTO 1
     IF( AIN.EQ. ATST(20)) GOTO 322
C***
     IF( AIN.EQ. ATST(21)) GOTO 304
C***
     IF( AIN.EQ. ATST(22)) GOTO 330
     IF( AIN.NE. ATST(13)) GOTO 15
     CALL SECNDS( TMP1)
     TMP1= TMP1- EXTIM
     WRITE( 6,201)  TMP1
     STOP
  15 WRITE( 6,138)
C
C     FREQUENCY PARAMETERS
C
     STOP
  16 IFRQ= ITMP1
     IF( ICASX.EQ.0) GOTO 8
     WRITE( 6,303)  AIN
     STOP
   8 NFRQ= ITMP2
     IF( NFRQ.EQ.0) NFRQ=1
     FMHZ= TMP1
     DELFRQ= TMP2
     IF( IPED.EQ.1) ZPNORM=0.
     IGO=1
     IFLOW=1
C
C     MATRIX INTEGRATION LIMIT
C
     GOTO 14
 305 RKH= TMP1
     IF( IGO.GT.2) IGO=2
     IFLOW=1
C
C     EXTENDED THIN WIRE KERNEL OPTION
C
     GOTO 14
 320 IEXK=1
     IF( ITMP1.EQ.-1) IEXK=0
     IF( IGO.GT.2) IGO=2
     IFLOW=1
C
C     MAXIMUM COUPLING BETWEEN ANTENNAS
C
     GOTO 14
 304 IF( IFLOW.NE.2) NCOUP=0
     ICOUP=0
     IFLOW=2
     IF( ITMP2.EQ.0) GOTO 14
     NCOUP= NCOUP+1
     IF( NCOUP.GT.5) GOTO 312
     NCTAG( NCOUP)= ITMP1
     NCSEG( NCOUP)= ITMP2
     IF( ITMP4.EQ.0) GOTO 14
     NCOUP= NCOUP+1
     IF( NCOUP.GT.5) GOTO 312
     NCTAG( NCOUP)= ITMP3
     NCSEG( NCOUP)= ITMP4
     GOTO 14
 312 WRITE( 6,313)
C
C     LOADING PARAMETERS
C
     STOP
  17 IF( IFLOW.EQ.3) GOTO 18
     NLOAD=0
     IFLOW=3
     IF( IGO.GT.2) IGO=2
     IF( ITMP1.EQ.(-1)) GOTO 14
  18 NLOAD= NLOAD+1
     IF( NLOAD.LE. LOADMX) GOTO 19
     WRITE( 6,139)
     STOP
  19 LDTYP( NLOAD)= ITMP1
     LDTAG( NLOAD)= ITMP2
     IF( ITMP4.EQ.0) ITMP4= ITMP3
     LDTAGF( NLOAD)= ITMP3
     LDTAGT( NLOAD)= ITMP4
     IF( ITMP4.GE. ITMP3) GOTO 20
     WRITE( 6,140)  NLOAD, ITMP3, ITMP4
     STOP
  20 ZLR( NLOAD)= TMP1
     ZLI( NLOAD)= TMP2
     ZLC( NLOAD)= TMP3
C
C     GROUND PARAMETERS UNDER THE ANTENNA
C
     GOTO 14
  21 IFLOW=4
     IF( ICASX.EQ.0) GOTO 10
     WRITE( 6,303)  AIN
     STOP
  10 IF( IGO.GT.2) IGO=2
     IF( ITMP1.NE.(-1)) GOTO 22
     KSYMP=1
     NRADL=0
     IPERF=0
     GOTO 14
  22 IPERF= ITMP1
     NRADL= ITMP2
     KSYMP=2
     EPSR= TMP1
     SIG= TMP2
     IF( NRADL.EQ.0) GOTO 23
     IF( IPERF.NE.2) GOTO 314
     WRITE( 6,390)
     STOP
 314 SCRWLT= TMP3
     SCRWRT= TMP4
     GOTO 14
  23 EPSR2= TMP3
     SIG2= TMP4
     CLT= TMP5
     CHT= TMP6
C
C     EXCITATION PARAMETERS
C
     GOTO 14
  24 IF( IFLOW.EQ.5) GOTO 25
     NSANT=0
     NVQD=0
     IPED=0
     IFLOW=5
     IF( IGO.GT.3) IGO=3
  25 MASYM= ITMP4/10
     IF( ITMP1.GT.0.AND. ITMP1.NE.5) GOTO 27
     IXTYP= ITMP1
     NTSOL=0
     IF( IXTYP.EQ.0) GOTO 205
     NVQD= NVQD+1
     IF( NVQD.GT. NSMAX) GOTO 206
     IVQD( NVQD)= ISEGNO( ITMP2, ITMP3)
     VQD( NVQD)= CMPLX( TMP1, TMP2)
     IF( ABS( VQD( NVQD)).LT.1.D-20) VQD( NVQD)=(1.,0.)
     GOTO 207
 205 NSANT= NSANT+1
     IF( NSANT.LE. NSMAX) GOTO 26
 206 WRITE( 6,141)
     STOP
  26 ISANT( NSANT)= ISEGNO( ITMP2, ITMP3)
     VSANT( NSANT)= CMPLX( TMP1, TMP2)
     IF( ABS( VSANT( NSANT)).LT.1.D-20) VSANT( NSANT)=(1.,0.)
 207 IPED= ITMP4- MASYM*10
     ZPNORM= TMP3
     IF( IPED.EQ.1.AND. ZPNORM.GT.0) IPED=2
     GOTO 14
  27 IF( IXTYP.EQ.0.OR. IXTYP.EQ.5) NTSOL=0
     IXTYP= ITMP1
     NTHI= ITMP2
     NPHI= ITMP3
     XPR1= TMP1
     XPR2= TMP2
     XPR3= TMP3
     XPR4= TMP4
     XPR5= TMP5
     XPR6= TMP6
     NSANT=0
     NVQD=0
     THETIS= XPR1
     PHISS= XPR2
C
C     NETWORK PARAMETERS
C
     GOTO 14
  28 IF( IFLOW.EQ.6) GOTO 29
     NONET=0
     NTSOL=0
     IFLOW=6
     IF( IGO.GT.3) IGO=3
     IF( ITMP2.EQ.(-1)) GOTO 14
  29 NONET= NONET+1
     IF( NONET.LE. NETMX) GOTO 30
     WRITE( 6,142)
     STOP
  30 NTYP( NONET)=2
     IF( AIN.EQ. ATST(6)) NTYP( NONET)=1
     ISEG1( NONET)= ISEGNO( ITMP1, ITMP2)
     ISEG2( NONET)= ISEGNO( ITMP3, ITMP4)
     X11R( NONET)= TMP1
     X11I( NONET)= TMP2
     X12R( NONET)= TMP3
     X12I( NONET)= TMP4
     X22R( NONET)= TMP5
     X22I( NONET)= TMP6
     IF( NTYP( NONET).EQ.1.OR. TMP1.GT.0.) GOTO 14
     NTYP( NONET)=3
C***
C
C     PLOT FLAGS
C
     X11R( NONET)=- TMP1
 330 IPLP1= ITMP1
     IPLP2= ITMP2
     IPLP3= ITMP3
C***
     IPLP4= ITMP4
C
C     PRINT CONTROL FOR CURRENT
C
     GOTO 14
  31 IPTFLG= ITMP1
     IPTAG= ITMP2
     IPTAGF= ITMP3
     IPTAGT= ITMP4
     IF( ITMP3.EQ.0.AND. IPTFLG.NE.-1) IPTFLG=-2
     IF( ITMP4.EQ.0) IPTAGT= IPTAGF
C
C     WRITE CONTROL FOR CHARGE
C
     GOTO 14
 319 IPTFLQ= ITMP1
     IPTAQ= ITMP2
     IPTAQF= ITMP3
     IPTAQT= ITMP4
     IF( ITMP3.EQ.0.AND. IPTFLQ.NE.-1) IPTFLQ=-2
     IF( ITMP4.EQ.0) IPTAQT= IPTAQF
C
C     NEAR FIELD CALCULATION PARAMETERS
C
     GOTO 14
 208 NFEH=1
     GOTO 209
  32 NFEH=0
 209 IF(.NOT.( IFLOW.EQ.8.AND. NFRQ.NE.1)) GOTO 33
     WRITE( 6,143)
  33 NEAR= ITMP1
     NRX= ITMP2
     NRY= ITMP3
     NRZ= ITMP4
     XNR= TMP1
     YNR= TMP2
     ZNR= TMP3
     DXNR= TMP4
     DYNR= TMP5
     DZNR= TMP6
     IFLOW=8
     IF( NFRQ.NE.1) GOTO 14
C
C     GROUND REPRESENTATION
C
     GOTO (41,46,53,71,72), IGO
  34 EPSR2= TMP1
     SIG2= TMP2
     CLT= TMP3
     CHT= TMP4
     IFLOW=9
C
C     STANDARD OBSERVATION ANGLE PARAMETERS
C
     GOTO 14
  36 IFAR= ITMP1
     NTH= ITMP2
     NPH= ITMP3
     IF( NTH.EQ.0) NTH=1
     IF( NPH.EQ.0) NPH=1
     IPD= ITMP4/10
     IAVP= ITMP4- IPD*10
     INOR= IPD/10
     IPD= IPD- INOR*10
     IAX= INOR/10
     INOR= INOR- IAX*10
     IF( IAX.NE.0) IAX=1
     IF( IPD.NE.0) IPD=1
     IF( NTH.LT.2.OR. NPH.LT.2) IAVP=0
     IF( IFAR.EQ.1) IAVP=0
     THETS= TMP1
     PHIS= TMP2
     DTH= TMP3
     DPH= TMP4
     RFLD= TMP5
     GNOR= TMP6
     IFLOW=10
C
C     WRITE NUMERICAL GREEN'S FUNCTION TAPE
C
     GOTO (41,46,53,71,78), IGO
 322 IFLOW=12
     IF( ICASX.EQ.0) GOTO 301
     WRITE( 6,302)
     STOP
 301 IRNGF= IRESRV/2
C
C     EXECUTE CARD  -  CALC. INCLUDING RADIATED FIELDS
C
     GOTO (41,46,52,52,52), IGO
  37 IF( IFLOW.EQ.10.AND. ITMP1.EQ.0) GOTO 14
     IF( NFRQ.EQ.1.AND. ITMP1.EQ.0.AND. IFLOW.GT.7) GOTO 14
     IF( ITMP1.NE.0) GOTO 39
     IF( IFLOW.GT.7) GOTO 38
     IFLOW=7
     GOTO 40
  38 IFLOW=11
     GOTO 40
  39 IFAR=0
     RFLD=0.
     IPD=0
     IAVP=0
     INOR=0
     IAX=0
     NTH=91
     NPH=1
     THETS=0.
     PHIS=0.
     DTH=1.0
     DPH=0.
     IF( ITMP1.EQ.2) PHIS=90.
     IF( ITMP1.NE.3) GOTO 40
     NPH=2
     DPH=90.
C
C     END OF THE MAIN INPUT SECTION
C
C     BEGINNING OF THE FREQUENCY DO LOOP
C
  40 GOTO (41,46,53,71,78), IGO
C***
  41 MHZ=1
     IF( N.EQ.0.OR. IFRTMW.EQ.1) GOTO 406
     IFRTMW=1
     DO 445  I=1, N
     XTEMP( I)= X( I)
     YTEMP( I)= Y( I)
     ZTEMP( I)= Z( I)
     SITEMP( I)= SI( I)
     BITEMP( I)= BI( I)
 445 CONTINUE
 406 IF( M.EQ.0.OR. IFRTMP.EQ.1) GOTO 407
     IFRTMP=1
     J= LD+1
     DO 545  I=1, M
     J= J-1
     XTEMP( J)= X( J)
     YTEMP( J)= Y( J)
     ZTEMP( J)= Z( J)
     BITEMP( J)= BI( J)
 545 CONTINUE
 407 CONTINUE
C***
C     CORE ALLOCATION FOR PRIMARY INTERACTON MATRIX.  (A)
     FMHZ1= FMHZ
     IF( IMAT.EQ.0) CALL FBLOCK( NPEQ, NEQ, IRESRV, IRNGF, IPSYM)
  42 IF( MHZ.EQ.1) GOTO 44
C      FMHZ=FMHZ+DELFRQ
C***
     IF( IFRQ.EQ.1) GOTO 43
     FMHZ= FMHZ1+( MHZ-1)* DELFRQ
     GOTO 44
  43 FMHZ= FMHZ* DELFRQ
C***
  44 FR= FMHZ/ CVEL
     WLAM= CVEL/ FMHZ
     WRITE( 6,145)  FMHZ, WLAM
     WRITE( 6,196)  RKH
C     FREQUENCY SCALING OF GEOMETRIC PARAMETERS
C***      FMHZS=FMHZ
     IF( IEXK.EQ.1) WRITE( 6,321)
     IF( N.EQ.0) GOTO 306
C***
     DO 45  I=1, N
     X( I)= XTEMP( I)* FR
     Y( I)= YTEMP( I)* FR
     Z( I)= ZTEMP( I)* FR
     SI( I)= SITEMP( I)* FR
C***
  45 BI( I)= BITEMP( I)* FR
 306 IF( M.EQ.0) GOTO 307
     FR2= FR* FR
     J= LD+1
     DO 245  I=1, M
C***
     J= J-1
     X( J)= XTEMP( J)* FR
     Y( J)= YTEMP( J)* FR
     Z( J)= ZTEMP( J)* FR
C***
 245 BI( J)= BITEMP( J)* FR2
C     STRUCTURE SEGMENT LOADING
 307 IGO=2
  46 WRITE( 6,146)
     IF( NLOAD.NE.0) CALL LOAD( LDTYP, LDTAG, LDTAGF, LDTAGT, ZLR, ZLI
    &, ZLC)
     IF( NLOAD.EQ.0.AND. NLODF.EQ.0) WRITE( 6,147)
C     GROUND PARAMETER
     IF( NLOAD.EQ.0.AND. NLODF.NE.0) WRITE( 6,327)
     WRITE( 6,148)
     IF( KSYMP.EQ.1) GOTO 49
     FRATI=(1.,0.)
     IF( IPERF.EQ.1) GOTO 48
     IF( SIG.LT.0.) SIG=- SIG/(59.96* WLAM)
     EPSC= CMPLX( EPSR,- SIG* WLAM*59.96)
     ZRATI=1./ SQRT( EPSC)
     U= ZRATI
     U2= U* U
     IF( NRADL.EQ.0) GOTO 47
     SCRWL= SCRWLT/ WLAM
     SCRWR= SCRWRT/ WLAM
     T1= FJ*2367.067D+0/ DFLOAT( NRADL)
     T2= SCRWR* DFLOAT( NRADL)
     WRITE( 6,170)  NRADL, SCRWLT, SCRWRT
     WRITE( 6,149)
  47 IF( IPERF.EQ.2) GOTO 328
     WRITE( 6,391)
     GOTO 329
 328 IF( NXA(1).EQ.0) READ( 21)  AR1, AR2, AR3, EPSCF, DXA, DYA, XSA,
    &YSA, NXA, NYA
     FRATI=( EPSC-1.)/( EPSC+1.)
     IF( ABS(( EPSCF- EPSC)/ EPSC).LT.1.D-3) GOTO 400
     WRITE( 6,393)  EPSCF, EPSC
     STOP
 400 WRITE( 6,392)
 329 WRITE( 6,150)  EPSR, SIG, EPSC
     GOTO 50
  48 WRITE( 6,151)
     GOTO 50
  49 WRITE( 6,152)
C * * *
C     FILL AND FACTOR PRIMARY INTERACTION MATRIX
C
  50 CONTINUE
     CALL SECNDS( TIM1)
     IF( ICASX.NE.0) GOTO 324
     CALL CMSET( NEQ, CM, RKH, IEXK)
     CALL SECNDS( TIM2)
     TIM= TIM2- TIM1
     CALL FACTRS( NPEQ, NEQ, CM, IP, IX,11,12,13,14)
C
C     N.G.F. - FILL B, C, AND D AND FACTOR D-C(INV(A)B)
C
C ****
     GOTO 323
C ****
 324 IF( NEQ2.EQ.0) GOTO 333
     CALL CMNGF( CM( IB11), CM( IC11), CM( ID11), NPBX, NEQ, NEQ2, RKH
    &, IEXK)
     CALL SECNDS( TIM2)
     TIM= TIM2- TIM1
     CALL FACGF( CM, CM( IB11), CM( IC11), CM( ID11), CM( IX11), IP,
    &IX, NP, N1, MP, M1, NEQ, NEQ2)
 323 CALL SECNDS( TIM1)
     TIM2= TIM1- TIM2
     WRITE( 6,153)  TIM, TIM2
 333 IGO=3
     NTSOL=0
C     WRITE N.G.F. FILE
     IF( IFLOW.NE.12) GOTO 53
  52 CALL GFOUT
C
C     EXCITATION SET UP (RIGHT HAND SIDE, -E INC.)
C
     GOTO 14
  53 NTHIC=1
     NPHIC=1
     INC=1
     NPRINT=0
  54 IF( IXTYP.EQ.0.OR. IXTYP.EQ.5) GOTO 56
     IF( IPTFLG.LE.0.OR. IXTYP.EQ.4) WRITE( 6,154)
     TMP5= TA* XPR5
     TMP4= TA* XPR4
     IF( IXTYP.NE.4) GOTO 55
     TMP1= XPR1/ WLAM
     TMP2= XPR2/ WLAM
     TMP3= XPR3/ WLAM
     TMP6= XPR6/( WLAM* WLAM)
     WRITE( 6,156)  XPR1, XPR2, XPR3, XPR4, XPR5, XPR6
     GOTO 56
  55 TMP1= TA* XPR1
     TMP2= TA* XPR2
     TMP3= TA* XPR3
     TMP6= XPR6
     IF( IPTFLG.LE.0) WRITE( 6,155)  XPR1, XPR2, XPR3, HPOL( IXTYP),
    &XPR6
C
C     MATRIX SOLVING  (NETWK CALLS SOLVES)
C
  56 CALL ETMNS( TMP1, TMP2, TMP3, TMP4, TMP5, TMP6, IXTYP, CUR)
     IF( NONET.EQ.0.OR. INC.GT.1) GOTO 60
     WRITE( 6,158)
     ITMP3=0
     ITMP1= NTYP(1)
     DO 59  I=1,2
     IF( ITMP1.EQ.3) ITMP1=2
     IF( ITMP1.EQ.2) WRITE( 6,159)
     IF( ITMP1.EQ.1) WRITE( 6,160)
     DO 58  J=1, NONET
     ITMP2= NTYP( J)
     IF(( ITMP2/ ITMP1).EQ.1) GOTO 57
     ITMP3= ITMP2
     GOTO 58
  57 ITMP4= ISEG1( J)
     ITMP5= ISEG2( J)
     IF( ITMP2.GE.2.AND. X11I( J).LE.0.) X11I( J)= WLAM* SQRT(( X(
    &ITMP5)- X( ITMP4))**2+( Y( ITMP5)- Y( ITMP4))**2+( Z( ITMP5)- Z(
    &ITMP4))**2)
     WRITE( 6,157)  ITAG( ITMP4), ITMP4, ITAG( ITMP5), ITMP5, X11R( J)
    &, X11I( J), X12R( J), X12I( J), X22R( J), X22I( J), PNET(2* ITMP2
    &-1), PNET(2* ITMP2)
  58 CONTINUE
     IF( ITMP3.EQ.0) GOTO 60
     ITMP1= ITMP3
  59 CONTINUE
  60 CONTINUE
     IF( INC.GT.1.AND. IPTFLG.GT.0) NPRINT=1
     CALL NETWK( CM, CM( IB11), CM( IC11), CM( ID11), IP, CUR)
     NTSOL=1
     IF( IPED.EQ.0) GOTO 61
     ITMP1= MHZ+4*( MHZ-1)
     IF( ITMP1.GT.( NORMF-3)) GOTO 61
     FNORM( ITMP1)= REAL( ZPED)
     FNORM( ITMP1+1)= AIMAG( ZPED)
     FNORM( ITMP1+2)= ABS( ZPED)
     FNORM( ITMP1+3)= CANG( ZPED)
     IF( IPED.EQ.2) GOTO 61
     IF( FNORM( ITMP1+2).GT. ZPNORM) ZPNORM= FNORM( ITMP1+2)
C
C     PRINTING STRUCTURE CURRENTS
C
  61 CONTINUE
     IF( N.EQ.0) GOTO 308
     IF( IPTFLG.EQ.(-1)) GOTO 63
     IF( IPTFLG.GT.0) GOTO 62
     WRITE( 6,161)
     WRITE( 6,162)
     GOTO 63
  62 IF( IPTFLG.EQ.3.OR. INC.GT.1) GOTO 63
     WRITE( 6,163)  XPR3, HPOL( IXTYP), XPR6
  63 PLOSS=0.
     ITMP1=0
     JUMP= IPTFLG+1
     DO 69  I=1, N
     CURI= CUR( I)* WLAM
     CMAG= ABS( CURI)
     PH= CANG( CURI)
     IF( NLOAD.EQ.0.AND. NLODF.EQ.0) GOTO 64
     IF( ABS( REAL( ZARRAY( I))).LT.1.D-20) GOTO 64
     PLOSS= PLOSS+.5* CMAG* CMAG* REAL( ZARRAY( I))* SI( I)
  64 IF( JUMP) 68,69,65
  65 IF( IPTAG.EQ.0) GOTO 66
     IF( ITAG( I).NE. IPTAG) GOTO 69
  66 ITMP1= ITMP1+1
     IF( ITMP1.LT. IPTAGF.OR. ITMP1.GT. IPTAGT) GOTO 69
     IF( IPTFLG.EQ.0) GOTO 68
     IF( IPTFLG.LT.2.OR. INC.GT. NORMF) GOTO 67
     FNORM( INC)= CMAG
     ISAVE= I
  67 IF( IPTFLG.NE.3) WRITE( 6,164)  XPR1, XPR2, CMAG, PH, I
     GOTO 69
C***
  68 WRITE( 6,165)  I, ITAG( I), X( I), Y( I), Z( I), SI( I), CURI,
    &CMAG, PH
     IF( IPLP1.NE.1) GOTO 69
     IF( IPLP2.EQ.1) WRITE( 8,*)  CURI
C***
     IF( IPLP2.EQ.2) WRITE( 8,*)  CMAG, PH
  69 CONTINUE
     IF( IPTFLQ.EQ.(-1)) GOTO 308
     WRITE( 6,315)
     ITMP1=0
     FR=1.D-6/ FMHZ
     DO 316  I=1, N
     IF( IPTFLQ.EQ.(-2)) GOTO 318
     IF( IPTAQ.EQ.0) GOTO 317
     IF( ITAG( I).NE. IPTAQ) GOTO 316
 317 ITMP1= ITMP1+1
     IF( ITMP1.LT. IPTAQF.OR. ITMP1.GT. IPTAQT) GOTO 316
 318 CURI= FR* CMPLX(- BII( I), BIR( I))
     CMAG= ABS( CURI)
     PH= CANG( CURI)
     WRITE( 6,165)  I, ITAG( I), X( I), Y( I), Z( I), SI( I), CURI,
    &CMAG, PH
 316 CONTINUE
 308 IF( M.EQ.0) GOTO 310
     WRITE( 6,197)
     J= N-2
     ITMP1= LD+1
     DO 309  I=1, M
     J= J+3
     ITMP1= ITMP1-1
     EX= CUR( J)
     EY= CUR( J+1)
     EZ= CUR( J+2)
     ETH= EX* T1X( ITMP1)+ EY* T1Y( ITMP1)+ EZ* T1Z( ITMP1)
     EPH= EX* T2X( ITMP1)+ EY* T2Y( ITMP1)+ EZ* T2Z( ITMP1)
     ETHM= ABS( ETH)
     ETHA= CANG( ETH)
     EPHM= ABS( EPH)
C309   WRITE(6,198) I,X(ITMP1),Y(ITMP1),Z(ITMP1),ETHM,ETHA,EPHM,EPHA,E
C     1X,EY, EZ
C***
     EPHA= CANG( EPH)
     WRITE( 6,198)  I, X( ITMP1), Y( ITMP1), Z( ITMP1), ETHM, ETHA,
    &EPHM, EPHA, EX, EY, EZ
     IF( IPLP1.NE.1) GOTO 309
     IF( IPLP3.EQ.1) WRITE( 8,*)  EX
     IF( IPLP3.EQ.2) WRITE( 8,*)  EY
     IF( IPLP3.EQ.3) WRITE( 8,*)  EZ
     IF( IPLP3.EQ.4) WRITE( 8,*)  EX, EY, EZ
C***
 309 CONTINUE
 310 IF( IXTYP.NE.0.AND. IXTYP.NE.5) GOTO 70
     TMP1= PIN- PNLS- PLOSS
     TMP2=100.* TMP1/ PIN
     WRITE( 6,166)  PIN, TMP1, PLOSS, PNLS, TMP2
  70 CONTINUE
     IGO=4
     IF( NCOUP.GT.0) CALL COUPLE( CUR, WLAM)
     IF( IFLOW.NE.7) GOTO 71
     IF( IXTYP.GT.0.AND. IXTYP.LT.4) GOTO 113
     IF( NFRQ.NE.1) GOTO 120
     WRITE( 6,135)
     GOTO 14
C
C     NEAR FIELD CALCULATION
C
  71 IGO=5
  72 IF( NEAR.EQ.(-1)) GOTO 78
     CALL NFPAT
     IF( MHZ.EQ. NFRQ) NEAR=-1
     IF( NFRQ.NE.1) GOTO 78
     WRITE( 6,135)
C
C     STANDARD FAR FIELD CALCULATION
C
     GOTO 14
  78 IF( IFAR.EQ.-1) GOTO 113
     PINR= PIN
     PNLR= PNLS
     CALL RDPAT
 113 IF( IXTYP.EQ.0.OR. IXTYP.GE.4) GOTO 119
     NTHIC= NTHIC+1
     INC= INC+1
     XPR1= XPR1+ XPR4
     IF( NTHIC.LE. NTHI) GOTO 54
     NTHIC=1
     XPR1= THETIS
     XPR2= XPR2+ XPR5
     NPHIC= NPHIC+1
     IF( NPHIC.LE. NPHI) GOTO 54
     NPHIC=1
     XPR2= PHISS
C     NORMALIZED RECEIVING PATTERN PRINTED
     IF( IPTFLG.LT.2) GOTO 119
     ITMP1= NTHI* NPHI
     IF( ITMP1.LE. NORMF) GOTO 114
     ITMP1= NORMF
     WRITE( 6,181)
 114 TMP1= FNORM(1)
     DO 115  J=2, ITMP1
     IF( FNORM( J).GT. TMP1) TMP1= FNORM( J)
 115 CONTINUE
     WRITE( 6,182)  TMP1, XPR3, HPOL( IXTYP), XPR6, ISAVE
     DO 118  J=1, NPHI
     ITMP2= NTHI*( J-1)
     DO 116  I=1, NTHI
     ITMP3= I+ ITMP2
     IF( ITMP3.GT. ITMP1) GOTO 117
     TMP2= FNORM( ITMP3)/ TMP1
     TMP3= DB20( TMP2)
     WRITE( 6,183)  XPR1, XPR2, TMP3, TMP2
     XPR1= XPR1+ XPR4
 116 CONTINUE
 117 XPR1= THETIS
     XPR2= XPR2+ XPR5
 118 CONTINUE
     XPR2= PHISS
 119 IF( MHZ.EQ. NFRQ) IFAR=-1
     IF( NFRQ.NE.1) GOTO 120
     WRITE( 6,135)
     GOTO 14
 120 MHZ= MHZ+1
     IF( MHZ.LE. NFRQ) GOTO 42
     IF( IPED.EQ.0) GOTO 123
     IF( NVQD.LT.1) GOTO 199
     WRITE( 6,184)  IVQD( NVQD), ZPNORM
     GOTO 204
 199 WRITE( 6,184)  ISANT( NSANT), ZPNORM
 204 ITMP1= NFRQ
     IF( ITMP1.LE.( NORMF/4)) GOTO 121
     ITMP1= NORMF/4
     WRITE( 6,185)
 121 IF( IFRQ.EQ.0) TMP1= FMHZ-( NFRQ-1)* DELFRQ
     IF( IFRQ.EQ.1) TMP1= FMHZ/( DELFRQ**( NFRQ-1))
     DO 122  I=1, ITMP1
     ITMP2= I+4*( I-1)
     TMP2= FNORM( ITMP2)/ ZPNORM
     TMP3= FNORM( ITMP2+1)/ ZPNORM
     TMP4= FNORM( ITMP2+2)/ ZPNORM
     TMP5= FNORM( ITMP2+3)
     WRITE( 6,186)  TMP1, FNORM( ITMP2), FNORM( ITMP2+1), FNORM( ITMP2
    &+2), FNORM( ITMP2+3), TMP2, TMP3, TMP4, TMP5
     IF( IFRQ.EQ.0) TMP1= TMP1+ DELFRQ
     IF( IFRQ.EQ.1) TMP1= TMP1* DELFRQ
 122 CONTINUE
     WRITE( 6,135)
 123 CONTINUE
     NFRQ=1
     MHZ=1
     GOTO 14
 125 FORMAT(A2,19A4)
 126 FORMAT('1')
 127 FORMAT(///,33X,'************************************',//,36X,
    &'NUMERICAL ELECTROMAGNETICS CODE',//,33X,
    &'************************************')
 128 FORMAT(////,37X,'- - - - COMMENTS - - - -',//)
 129 FORMAT(25X,20A4)
 130 FORMAT(///,10X,'INCORRECT LABEL FOR A COMMENT CARD')
 135 FORMAT(/////)
 136 FORMAT(A2,I3,3I5,6E10.3)
 137 FORMAT(1X,'***** DATA CARD NO.',I3,3X,A2,1X,I3,3(1X,I5),6(1X,1P,E
    &12.5))
 138 FORMAT(///,10X,'FAULTY DATA CARD LABEL AFTER GEOMETRY SECTION')
 139 FORMAT(///,10X,'NUMBER OF LOADING CARDS EXCEEDS STORAGE ALLOTTED'
    &)
 140 FORMAT(///,10X,'DATA FAULT ON LOADING CARD NO.=',I5,5X,'ITAG S',
    &'TEP1=',I5,'  IS GREATER THAN ITAG STEP2=',I5)
 141 FORMAT(///,10X,'NUMBER OF EXCITATION CARDS EXCEEDS STORAGE ALLO',
    &'TTED')
 142 FORMAT(///,10X,'NUMBER OF NETWORK CARDS EXCEEDS STORAGE ALLOTTED'
    &)
 143 FORMAT(///,10X,'WHEN MULTIPLE FREQUENCIES ARE REQUESTED, ONLY ONE
    & NEAR FIELD CARD CAN BE USED -',/,10X,'LAST CARD READ IS USED')
 145 FORMAT(////,33X,'- - - - - - FREQUENCY - - - - - -',//,36X,'FR',
    &'EQUENCY=',1P,E11.4,' MHZ',/,36X,'WAVELENGTH=',E11.4,' METERS')
 146 FORMAT(///,30X,' - - - STRUCTURE IMPEDANCE LOADING - - -')
 147 FORMAT(/,35X,'THIS STRUCTURE IS NOT LOADED')
 148 FORMAT(///,34X,'- - - ANTENNA ENVIRONMENT - - -',/)
 149 FORMAT(40X,'MEDIUM UNDER SCREEN -')
 150 FORMAT(40X,'RELATIVE DIELECTRIC CONST.=',F7.3,/,40X,'CONDUCTIV',
    &'ITY=',1P,E10.3,' MHOS/METER',/,40X,
    &'COMPLEX DIELECTRIC CONSTANT=',2E12.5)
 151 FORMAT(42X,'PERFECT GROUND')
 152 FORMAT(44X,'FREE SPACE')
 153 FORMAT(///,32X,'- - - MATRIX TIMING - - -',//,24X,'FILL=',F9.3,
    &' SEC.,  FACTOR=',F9.3,' SEC.')
 154 FORMAT(///,40X,'- - - EXCITATION - - -')
 155 FORMAT(/,4X,'PLANE WAVE',4X,'THETA=',F7.2,' DEG,  PHI=',F7.2,
    &' DEG,  ETA=',F7.2,' DEG,  TYPE -',A6,'=  AXIAL RATIO=',F6.3)
 156 FORMAT(/,31X,'POSITION (METERS)',14X,'ORIENTATION (DEG)=/',28X,
    &'X',12X,'Y',12X,'Z',10X,'ALPHA',5X,'BETA',4X,'DIPOLE MOMENT',//,4
    &X,'CURRENT SOURCE',1X,3(3X,F10.5),1X,2(3X,F7.2),4X,F8.3)
 157 FORMAT(4X,4(I5,1X),1P,6(3X,E11.4),3X,A6,A2)
 158 FORMAT(///,44X,'- - - NETWORK DATA - - -')
 159 FORMAT(/,6X,'- FROM -    - TO -',11X,'TRANSMISSION LINE',15X,
    &'-  -  SHUNT ADMITTANCES (MHOS)  -  -',14X,'LINE',/,6X,
    &'TAG  SEG.','   TAG  SEG.',6X,'IMPEDANCE',6X,'LENGTH',12X,
    &'- END ONE -',17X,'- END TWO -',12X,'TYPE',/,6X,
    &'NO.   NO.   NO.   NO.',9X,'OHM''S',8X,'METERS',9X,'REAL',10X,
    &'IMAG.',9X,'REAL',10X,'IMAG.')
 160 FORMAT(/,6X,'- FROM -',4X,'- TO -',26X,'-  -  ADMITTANCE MATRIX',
    &' ELEMENTS (MHOS)  -  -',/,6X,'TAG  SEG.   TAG  SEG.',13X,'(ON',
    &'E,ONE)',19X,'(ONE,TWO)',19X,'(TWO,TWO)',/,6X,'NO.   NO.   NO.',
    &'   NO.',8X,'REAL',10X,'IMAG.',9X,'REAL',10X,'IMAG.',9X,'REAL',10
    &X,'IMAG.')
 161 FORMAT(///,29X,'- - - CURRENTS AND LOCATION - - -',//,33X,'DIS',
    &'TANCES IN WAVELENGTHS')
 162 FORMAT(//,2X,'SEG.',2X,'TAG',4X,'COORD. OF SEG. CENTER',5X,'SEG.'
    &,12X,'- - - CURRENT (AMPS) - - -',/,2X,'NO.',3X,'NO.',5X,'X',8X,
    &'Y',8X,'Z',6X,'LENGTH',5X,'REAL',8X,'IMAG.',7X,'MAG.',8X,'PHASE')
 163 FORMAT(///,33X,'- - - RECEIVING PATTERN PARAMETERS - - -',/,43X,
    &'ETA=',F7.2,' DEGREES',/,43X,'TYPE -',A6,/,43X,'AXIAL RATIO=',F6.
    &3,//,11X,'THETA',6X,'PHI',10X,'-  CURRENT  -',9X,'SEG',/,11X,
    &'(DEG)',5X,'(DEG)',7X,'MAGNITUDE',4X,'PHASE',6X,'NO.',/)
 164 FORMAT(10X,2(F7.2,3X),1X,1P,E11.4,3X,0P,F7.2,4X,I5)
 165 FORMAT(1X,2I5,3F9.4,F9.5,1X,1P,3E12.4,0P,F9.3)
 166 FORMAT(///,40X,'- - - POWER BUDGET - - -',//,43X,'INPUT PO',
    &'WER   =',1P,E11.4,' WATTS',/,43X,'RADIATED POWER=',E11.4,
    &' WATTS',/,43X,'STRUCTURE LOSS=',E11.4,' WATTS',/,43X,
    &'NETWORK LOSS  =',E11.4,' WATTS',/,43X,'EFFICIENCY    =',0P,F7.2,
    &' PERCENT')
 170 FORMAT(40X,'RADIAL WIRE GROUND SCREEN',/,40X,I5,' WIRES',/,40X,
    &'WIRE LENGTH=',F8.2,' METERS',/,40X,'WIRE RADIUS=',1P,E10.3,
    &' METERS')
 181 FORMAT(///,4X,'RECEIVING PATTERN STORAGE TOO SMALL,ARRAY TRUNCA',
    &'TED')
 182 FORMAT(///,32X,'- - - NORMALIZED RECEIVING PATTERN - - -',/,41X,
    &'NORMALIZATION FACTOR=',1P,E11.4,/,41X,'ETA=',0P,F7.2,' DEGREES',
    &/,41X,'TYPE -',A6,/,41X,'AXIAL RATIO=',F6.3,/,41X,'SEGMENT NO.=',
    &I5,//,21X,'THETA',6X,'PHI',9X,'-  PATTERN  -',/,21X,'(DEG)',5X,
    &'(DEG)',8X,'DB',8X,'MAGNITUDE',/)
 183 FORMAT(20X,2(F7.2,3X),1X,F7.2,4X,1P,E11.4)
 184 FORMAT(///,36X,'- - - INPUT IMPEDANCE DATA - - -',/,45X,'SO',
    &'URCE SEGMENT NO.',I4,/,45X,'NORMALIZATION FACTOR=',1P,E12.5,//,7
    &X,'FREQ.',13X,'-  -  UNNORMALIZED IMPEDANCE  -  -',21X,'-'
    &' -  NORMALIZED IMPEDANCE  -  -',/,19X,'RESISTANCE',4X,'REACTA',
    &'NCE',6X,'MAGNITUDE',4X,'PHASE',7X,'RESISTANCE',4X,'REACTANCE',6X
    &,'MAGNITUDE',4X,'PHASE',/,8X,'MHZ',11X,'OHMS',10X,'OHMS',11X,
    &'OHMS',5X,'DEGREES',47X,'DEGREES',/)
 185 FORMAT(///,4X,'STORAGE FOR IMPEDANCE NORMALIZATION TOO SMALL, A',
    &'RRAY TRUNCATED')
 186 FORMAT(3X,F9.3,2X,1P,2(2X,E12.5),3X,E12.5,2X,0P,F7.2,2X,1P,2(2X,E
    &12.5),3X,E12.5,2X,0P,F7.2)
 196 FORMAT(////,20X,'APPROXIMATE INTEGRATION EMPLOYED FOR SEGMENT',
    &'S MORE THAN',F8.3,' WAVELENGTHS APART')
 197 FORMAT(////,41X,'- - - - SURFACE PATCH CURRENTS - - - -',//,50X,
    &'DISTANCE IN WAVELENGTHS',/,50X,'CURRENT IN AMPS/METER',//,28X,
    &'- - SURFACE COMPONENTS - -',19X,'- - - RECTANGULAR COM',
    &'PONENTS - - -',/,6X,'PATCH CENTER',6X,'TANGENT VECTOR 1',3X,
    &'TANGENT VECTOR 2',11X,'X',19X,'Y',19X,'Z',/,5X,'X',6X,'Y',6X,'Z'
    &,5X,'MAG.',7X,'PHASE',3X,'MAG.',7X,'PHASE',3(4X,'REAL',6X,'IMAG.'
    &))
 198 FORMAT(1X,I4,/,1X,3F7.3,2(1P,E11.4,0P,F8.2),1P,6E10.2)
 201 FORMAT(/,' RUN TIME =',F10.3)
 315 FORMAT(///,34X,'- - - CHARGE DENSITIES - - -',//,36X,
    &'DISTANCES IN WAVELENGTHS',///,2X,'SEG.',2X,'TAG',4X,
    &'COORD. OF SEG. CENTER',5X,'SEG.',10X,
    &'CHARGE DENSITY (COULOMBS/METER)',/,2X,'NO.',3X,'NO.',5X,'X',8X,
    &'Y',8X,'Z',6X,'LENGTH',5X,'REAL',8X,'IMAG.',7X,'MAG.',8X,'PHASE')
    &
 321 FORMAT(/,20X,'THE EXTENDED THIN WIRE KERNEL WILL BE USED')
 303 FORMAT(/,' ERROR - ',A2,' CARD IS NOT ALLOWED WITH N.G.F.')
 327 FORMAT(/,35X,' LOADING ONLY IN N.G.F. SECTION')
 302 FORMAT(' ERROR - N.G.F. IN USE.  CANNOT WRITE NEW N.G.F.')
 313 FORMAT(/,' NUMBER OF SEGMENTS IN COUPLING CALCULATION (CP) EXCEE'
    &,'DS LIMIT')
 390 FORMAT(' RADIAL WIRE G. S. APPROXIMATION MAY NOT BE USED WITH SO'
    &,'MMERFELD GROUND OPTION')
 391 FORMAT(40X,'FINITE GROUND.  REFLECTION COEFFICIENT APPROXIMATION'
    &)
 392 FORMAT(40X,'FINITE GROUND.  SOMMERFELD SOLUTION')
 393 FORMAT(/,' ERROR IN GROUND PARAMETERS -',/,' COMPLEX DIELECTRIC',
    &' CONSTANT FROM FILE IS',1P,2E12.5,/,32X,'REQUESTED',2E12.5)
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE ARC( ITG, NS, RADA, ANG1, ANG2, RAD)
C ***
C
C     ARC GENERATES SEGMENT GEOMETRY DATA FOR AN ARC OF NS SEGMENTS
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     DIMENSION  X2(1), Y2(1), Z2(1)
     EQUIVALENCE(X2,SI),(Y2,ALP),(Z2,BET)
     DATA   TA/.01745329252D+0/
     IST= N+1
     N= N+ NS
     NP= N
     MP= M
     IPSYM=0
     IF( NS.LT.1) RETURN
     IF( ABS( ANG2- ANG1).LT.360.00001D+0) GOTO 1
     WRITE( 6,3)
     STOP
   1 ANG= ANG1* TA
     DANG=( ANG2- ANG1)* TA/ NS
     XS1= RADA* COS( ANG)
     ZS1= RADA* SIN( ANG)
     DO 2  I= IST, N
     ANG= ANG+ DANG
     XS2= RADA* COS( ANG)
     ZS2= RADA* SIN( ANG)
     X( I)= XS1
     Y( I)=0.
     Z( I)= ZS1
     X2( I)= XS2
     Y2( I)=0.
     Z2( I)= ZS2
     XS1= XS2
     ZS1= ZS2
     BI( I)= RAD
   2 ITAG( I)= ITG
C
     RETURN
   3 FORMAT(' ERROR -- ARC ANGLE EXCEEDS 360. DEGREES')
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     FUNCTION ATGN2( X, Y)
C ***
C
C     ATGN2 IS ARCTANGENT FUNCTION MODIFIED TO RETURN 0. WHEN X=Y=0.
C
     IMPLICIT REAL (A-H,O-Z)
     IF( X) 3,1,3
   1 IF( Y) 3,2,3
   2 ATGN2=0.
     RETURN
   3 ATGN2= ATAN2( X, Y)
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE BLCKOT( AR, NUNIT, IX1, IX2, NBLKS, NEOF)
C ***
C
C     BLCKOT CONTROLS THE READING AND WRITING OF MATRIX BLOCKS ON FILES
C     FOR THE OUT-OF-CORE MATRIX SOLUTION.
C
     IMPLICIT REAL (A-H,O-Z)
     LOGICAL  ENF
     COMPLEX  AR
     DIMENSION  AR(1000)
     I1=( IX1+1)/2
     I2=( IX2+1)/2
   1 WRITE( NUNIT) ( AR( J), J= I1, I2)
     RETURN
     ENTRY BLCKIN( AR, NUNIT, IX1, IX2, NBLKS, NEOF)
     I1=( IX1+1)/2
     I2=( IX2+1)/2
     DO 2  I=1, NBLKS
C     IF (ENF(NUNIT)) GO TO 3
     READ( NUNIT,END=3) ( AR( J), J= I1, I2)
   2 CONTINUE
     RETURN
   3 WRITE( 6,4)  NUNIT, NBLKS, NEOF
     IF( NEOF.NE.777) STOP
     NEOF=0
C
     RETURN
   4 FORMAT('  EOF ON UNIT',I3,'  NBLKS= ',I3,'  NEOF= ',I5)
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE CABC( CURX)
C ***
C
C     CABC COMPUTES COEFFICIENTS OF THE CONSTANT (A), SINE (B), AND
C     COSINE (C) TERMS IN THE CURRENT INTERPOLATION FUNCTIONS FOR THE
C     CURRENT VECTOR CUR.
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  CUR, CURX, VQDS, CURD, CCJ, VSANT, VQD, CS1, CS2
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /CRNT/ AIR( NM), AII( NM), BIR( NM), BII( NM), CIR( NM),
    &CII( NM), CUR( N3M)
     COMMON  /SEGJ/ AX(30), BX(30), CX(30), JCO(30), JSNO, ISCON(50),
    &NSCON, IPCON(10), NPCON
     COMMON  /VSORC/ VQD(30), VSANT(30), VQDS(30), IVQD(30), ISANT(30)
    &, IQDS(30), NVQD, NSANT, NQDS
     COMMON  /ANGL/ SALP( NM)
     DIMENSION  T1X(1), T1Y(1), T1Z(1), T2X(1), T2Y(1), T2Z(1)
     DIMENSION  CURX(1), CCJX(2)
     EQUIVALENCE(T1X,SI),(T1Y,ALP),(T1Z,BET),(T2X,ICON1),(T2Y,ICON2),(
    &T2Z,ITAG)
     EQUIVALENCE(CCJ,CCJX)
     DATA   TP/6.283185308D+0/, CCJX/0.,-0.01666666667D+0/
     IF( N.EQ.0) GOTO 6
     DO 1  I=1, N
     AIR( I)=0.
     AII( I)=0.
     BIR( I)=0.
     BII( I)=0.
     CIR( I)=0.
   1 CII( I)=0.
     DO 2  I=1, N
     AR= REAL( CURX( I))
     AI= AIMAG( CURX( I))
     CALL TBF( I,1)
     DO 2  JX=1, JSNO
     J= JCO( JX)
     AIR( J)= AIR( J)+ AX( JX)* AR
     AII( J)= AII( J)+ AX( JX)* AI
     BIR( J)= BIR( J)+ BX( JX)* AR
     BII( J)= BII( J)+ BX( JX)* AI
     CIR( J)= CIR( J)+ CX( JX)* AR
   2 CII( J)= CII( J)+ CX( JX)* AI
     IF( NQDS.EQ.0) GOTO 4
     DO 3  IS=1, NQDS
     I= IQDS( IS)
     JX= ICON1( I)
     ICON1( I)=0
     CALL TBF( I,0)
     ICON1( I)= JX
     SH= SI( I)*.5
     CURD= CCJ* VQDS( IS)/(( LOG(2.* SH/ BI( I))-1.)*( BX( JSNO)* COS(
    & TP* SH)+ CX( JSNO)* SIN( TP* SH))* WLAM)
     AR= REAL( CURD)
     AI= AIMAG( CURD)
     DO 3  JX=1, JSNO
     J= JCO( JX)
     AIR( J)= AIR( J)+ AX( JX)* AR
     AII( J)= AII( J)+ AX( JX)* AI
     BIR( J)= BIR( J)+ BX( JX)* AR
     BII( J)= BII( J)+ BX( JX)* AI
     CIR( J)= CIR( J)+ CX( JX)* AR
   3 CII( J)= CII( J)+ CX( JX)* AI
   4 DO 5  I=1, N
   5 CURX( I)= CMPLX( AIR( I)+ CIR( I), AII( I)+ CII( I))
C     CONVERT SURFACE CURRENTS FROM T1,T2 COMPONENTS TO X,Y,Z COMPONENTS
   6 IF( M.EQ.0) RETURN
     K= LD- M
     JCO1= N+2* M+1
     JCO2= JCO1+ M
     DO 7  I=1, M
     K= K+1
     JCO1= JCO1-2
     JCO2= JCO2-3
     CS1= CURX( JCO1)
     CS2= CURX( JCO1+1)
     CURX( JCO2)= CS1* T1X( K)+ CS2* T2X( K)
     CURX( JCO2+1)= CS1* T1Y( K)+ CS2* T2Y( K)
   7 CURX( JCO2+2)= CS1* T1Z( K)+ CS2* T2Z( K)
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     FUNCTION CANG( Z)
C ***
C
C     CANG RETURNS THE PHASE ANGLE OF A COMPLEX NUMBER IN DEGREES.
C
     IMPLICIT REAL (A-H,O-Z)
     COMPLEX  Z
     CANG= ATGN2( AIMAG( Z), REAL( Z))*57.29577951D+0
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE CMNGF( CB, CC, CD, NB, NC, ND, RKHX, IEXKX)
C ***
     IMPLICIT REAL (A-H,O-Z)
C     CMNGF FILLS INTERACTION MATRICIES B, C, AND D FOR N.G.F. SOLUTION
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  CB, CC, CD, ZARRAY, EXK, EYK, EZK, EXS, EYS, EZS, EXC
    &, EYC, EZC
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /ZLOAD/ ZARRAY( NM), NLOAD, NLODF
     COMMON  /SEGJ/ AX(30), BX(30), CX(30), JCO(30), JSNO, ISCON(50),
    &NSCON, IPCON(10), NPCON
     COMMON  /DATAJ/ S, B, XJ, YJ, ZJ, CABJ, SABJ, SALPJ, EXK, EYK,
    &EZK, EXS, EYS, EZS, EXC, EYC, EZC, RKH, IEXK, IND1, INDD1, IND2,
    &INDD2, IPGND
     COMMON  /MATPAR/ ICASE, NBLOKS, NPBLK, NLAST, NBLSYM, NPSYM,
    &NLSYM, IMAT, ICASX, NBBX, NPBX, NLBX, NBBL, NPBL, NLBL
     DIMENSION  CB( NB,1), CC( NC,1), CD( ND,1)
     RKH= RKHX
     IEXK= IEXKX
     M1EQ=2* M1
     M2EQ= M1EQ+1
     MEQ=2* M
     NEQP= ND- NPCON*2
     NEQS= NEQP- NSCON
     NEQSP= NEQS+ NC
     NEQN= NC+ N- N1
     ITX=1
     IF( NSCON.GT.0) ITX=2
     IF( ICASX.EQ.1) GOTO 1
     REWIND 12
     REWIND 14
     REWIND 15
     IF( ICASX.GT.2) GOTO 5
   1 DO 4  J=1, ND
     DO 2  I=1, ND
   2 CD( I, J)=(0.,0.)
     DO 3  I=1, NB
     CB( I, J)=(0.,0.)
   3 CC( I, J)=(0.,0.)
   4 CONTINUE
   5 IST= N- N1+1
     IT= NPBX
C     LOOP THRU 24 FILLS B.  FOR ICASX=1 OR 2 ALSO FILLS D(WW), D(WS)
     ISV=- NPBX
     DO 24  IBLK=1, NBBX
     ISV= ISV+ NPBX
     IF( IBLK.EQ. NBBX) IT= NLBX
     IF( ICASX.LT.3) GOTO 7
     DO 6  J=1, ND
     DO 6  I=1, IT
   6 CB( I, J)=(0.,0.)
   7 I1= ISV+1
     I2= ISV+ IT
     IN2= I2
     IF( IN2.GT. N1) IN2= N1
     IM1= I1- N1
     IM2= I2- N1
     IF( IM1.LT.1) IM1=1
     IMX=1
     IF( I1.LE. N1) IMX= N1- I1+2
C     FILL B(WW),B(WS).  FOR ICASX=1,2 FILL D(WW),D(WS)
     IF( N2.GT. N) GOTO 12
     DO 11  J= N2, N
     CALL TRIO( J)
     DO 9  I=1, JSNO
     JSS= JCO( I)
C     SET JCO WHEN SOURCE IS NEW BASIS FUNCTION ON NEW SEGMENT
     IF( JSS.LT. N2) GOTO 8
     JCO( I)= JSS- N1
C     SOURCE IS PORTION OF MODIFIED BASIS FUNCTION ON NEW SEGMENT
     GOTO 9
   8 JCO( I)= NEQS+ ICONX( JSS)
   9 CONTINUE
     IF( I1.LE. IN2) CALL CMWW( J, I1, IN2, CB, NB, CB, NB,0)
     IF( IM1.LE. IM2) CALL CMWS( J, IM1, IM2, CB( IMX,1), NB, CB, NB,0
    &)
     IF( ICASX.GT.2) GOTO 11
     CALL CMWW( J, N2, N, CD, ND, CD, ND,1)
C     LOADING IN D(WW)
     IF( M2.LE. M) CALL CMWS( J, M2EQ, MEQ, CD(1, IST), ND, CD, ND,1)
     IF( NLOAD.EQ.0) GOTO 11
     IR= J- N1
     EXK= ZARRAY( J)
     DO 10  I=1, JSNO
     JSS= JCO( I)
  10 CD( JSS, IR)= CD( JSS, IR)-( AX( I)+ CX( I))* EXK
  11 CONTINUE
C     FILL B(WW)PRIME
  12 IF( NSCON.EQ.0) GOTO 20
     DO 19  I=1, NSCON
C     SOURCES ARE NEW OR MODIFIED BASIS FUNCTIONS ON OLD SEGMENTS WHICH
C     CONNECT TO NEW SEGMENTS
     J= ISCON( I)
     CALL TRIO( J)
     JSS=0
     DO 15  IX=1, JSNO
     IR= JCO( IX)
     IF( IR.LT. N2) GOTO 13
     IR= IR- N1
     GOTO 14
  13 IR= ICONX( IR)
     IF( IR.EQ.0) GOTO 15
     IR= NEQS+ IR
  14 JSS= JSS+1
     JCO( JSS)= IR
     AX( JSS)= AX( IX)
     BX( JSS)= BX( IX)
     CX( JSS)= CX( IX)
  15 CONTINUE
     JSNO= JSS
     IF( I1.LE. IN2) CALL CMWW( J, I1, IN2, CB, NB, CB, NB,0)
C     SOURCE IS SINGULAR COMPONENT OF PATCH CURRENT THAT IS PART OF
C     MODIFIED BASIS FUNCTION FOR OLD SEGMENT THAT CONNECTS TO A NEW
C     SEGMENT ON END OPPOSITE PATCH.
     IF( IM1.LE. IM2) CALL CMWS( J, IM1, IM2, CB( IMX,1), NB, CB, NB,0
    &)
     IF( I1.LE. IN2) CALL CMSW( J, I, I1, IN2, CB, CB,0, NB,-1)
     IF( NLODF.EQ.0) GOTO 17
     JX= J- ISV
     IF( JX.LT.1.OR. JX.GT. IT) GOTO 17
     EXK= ZARRAY( J)
     DO 16  IX=1, JSNO
     JSS= JCO( IX)
C     SOURCES ARE PORTIONS OF MODIFIED BASIS FUNCTION J ON OLD SEGMENTS
C     EXCLUDING OLD SEGMENTS THAT DIRECTLY CONNECT TO NEW SEGMENTS.
  16 CB( JX, JSS)= CB( JX, JSS)-( AX( IX)+ CX( IX))* EXK
  17 CALL TBF( J,1)
     JSX= JSNO
     JSNO=1
     IR= JCO(1)
     JCO(1)= NEQS+ I
     DO 19  IX=1, JSX
     IF( IX.EQ.1) GOTO 18
     IR= JCO( IX)
     AX(1)= AX( IX)
     BX(1)= BX( IX)
     CX(1)= CX( IX)
  18 IF( IR.GT. N1) GOTO 19
     IF( ICONX( IR).NE.0) GOTO 19
     IF( I1.LE. IN2) CALL CMWW( IR, I1, IN2, CB, NB, CB, NB,0)
C     LOADING FOR B(WW)PRIME
     IF( IM1.LE. IM2) CALL CMWS( IR, IM1, IM2, CB( IMX,1), NB, CB, NB,
    &0)
     IF( NLODF.EQ.0) GOTO 19
     JX= IR- ISV
     IF( JX.LT.1.OR. JX.GT. IT) GOTO 19
     EXK= ZARRAY( IR)
     JSS= JCO(1)
     CB( JX, JSS)= CB( JX, JSS)-( AX(1)+ CX(1))* EXK
  19 CONTINUE
  20 IF( NPCON.EQ.0) GOTO 22
C     FILL B(SS)PRIME TO SET OLD PATCH BASIS FUNCTIONS TO ZERO FOR
C     PATCHES THAT CONNECT TO NEW SEGMENTS
     JSS= NEQP
     DO 21  I=1, NPCON
     IX= IPCON( I)*2+ N1- ISV
     IR= IX-1
     JSS= JSS+1
     IF( IR.GT.0.AND. IR.LE. IT) CB( IR, JSS)=(1.,0.)
     JSS= JSS+1
     IF( IX.GT.0.AND. IX.LE. IT) CB( IX, JSS)=(1.,0.)
  21 CONTINUE
C     FILL B(SW) AND B(SS)
  22 IF( M2.GT. M) GOTO 23
     IF( I1.LE. IN2) CALL CMSW( M2, M, I1, IN2, CB(1, IST), CB, N1, NB
    &,0)
     IF( IM1.LE. IM2) CALL CMSS( M2, M, IM1, IM2, CB( IMX, IST), NB,0)
    &
  23 IF( ICASX.EQ.1) GOTO 24
     WRITE( 14) (( CB( I, J), I=1, IT), J=1, ND)
C     FILLING B COMPLETE.  START ON C AND D
  24 CONTINUE
     IT= NPBL
     ISV=- NPBL
     DO 43  IBLK=1, NBBL
     ISV= ISV+ NPBL
     ISVV= ISV+ NC
     IF( IBLK.EQ. NBBL) IT= NLBL
     IF( ICASX.LT.3) GOTO 27
     DO 26  J=1, IT
     DO 25  I=1, NC
  25 CC( I, J)=(0.,0.)
     DO 26  I=1, ND
  26 CD( I, J)=(0.,0.)
  27 I1= ISVV+1
     I2= ISVV+ IT
     IN1= I1- M1EQ
     IN2= I2- M1EQ
     IF( IN2.GT. N) IN2= N
     IM1= I1- N
     IM2= I2- N
     IF( IM1.LT. M2EQ) IM1= M2EQ
     IF( IM2.GT. MEQ) IM2= MEQ
     IMX=1
     IF( IN1.LE. IN2) IMX= NEQN- I1+2
     IF( ICASX.LT.3) GOTO 32
C     SAME AS DO 24 LOOP TO FILL D(WW) FOR ICASX GREATER THAN 2
     IF( N2.GT. N) GOTO 32
     DO 31  J= N2, N
     CALL TRIO( J)
     DO 29  I=1, JSNO
     JSS= JCO( I)
     IF( JSS.LT. N2) GOTO 28
     JCO( I)= JSS- N1
     GOTO 29
  28 JCO( I)= NEQS+ ICONX( JSS)
  29 CONTINUE
     IF( IN1.LE. IN2) CALL CMWW( J, IN1, IN2, CD, ND, CD, ND,1)
     IF( IM1.LE. IM2) CALL CMWS( J, IM1, IM2, CD(1, IMX), ND, CD, ND,1
    &)
     IF( NLOAD.EQ.0) GOTO 31
     IR= J- N1- ISV
     IF( IR.LT.1.OR. IR.GT. IT) GOTO 31
     EXK= ZARRAY( J)
     DO 30  I=1, JSNO
     JSS= JCO( I)
  30 CD( JSS, IR)= CD( JSS, IR)-( AX( I)+ CX( I))* EXK
  31 CONTINUE
C     FILL D(SW) AND D(SS)
  32 IF( M2.GT. M) GOTO 33
     IF( IN1.LE. IN2) CALL CMSW( M2, M, IN1, IN2, CD( IST,1), CD, N1,
    &ND,1)
     IF( IM1.LE. IM2) CALL CMSS( M2, M, IM1, IM2, CD( IST, IMX), ND,1)
    &
C     FILL C(WW),C(WS), D(WW)PRIME, AND D(WS)PRIME.
  33 IF( N1.LT.1) GOTO 39
     DO 37  J=1, N1
     CALL TRIO( J)
     IF( NSCON.EQ.0) GOTO 36
     DO 35  IX=1, JSNO
     JSS= JCO( IX)
     IF( JSS.LT. N2) GOTO 34
     JCO( IX)= JSS+ M1EQ
     GOTO 35
  34 IR= ICONX( JSS)
     IF( IR.NE.0) JCO( IX)= NEQSP+ IR
  35 CONTINUE
  36 IF( IN1.LE. IN2) CALL CMWW( J, IN1, IN2, CC, NC, CD, ND, ITX)
     IF( IM1.LE. IM2) CALL CMWS( J, IM1, IM2, CC(1, IMX), NC, CD(1,
    &IMX), ND, ITX)
  37 CONTINUE
C     FILL C(WW)PRIME
     IF( NSCON.EQ.0) GOTO 39
     DO 38  IX=1, NSCON
     IR= ISCON( IX)
     JSS= NEQS+ IX- ISV
     IF( JSS.GT.0.AND. JSS.LE. IT) CC( IR, JSS)=(1.,0.)
  38 CONTINUE
  39 IF( NPCON.EQ.0) GOTO 41
C     FILL C(SS)PRIME
     JSS= NEQP- ISV
     DO 40  I=1, NPCON
     IX= IPCON( I)*2+ N1
     IR= IX-1
     JSS= JSS+1
     IF( JSS.GT.0.AND. JSS.LE. IT) CC( IR, JSS)=(1.,0.)
     JSS= JSS+1
     IF( JSS.GT.0.AND. JSS.LE. IT) CC( IX, JSS)=(1.,0.)
  40 CONTINUE
C     FILL C(SW) AND C(SS)
  41 IF( M1.LT.1) GOTO 42
     IF( IN1.LE. IN2) CALL CMSW(1, M1, IN1, IN2, CC( N2,1), CC,0, NC,1
    &)
     IF( IM1.LE. IM2) CALL CMSS(1, M1, IM1, IM2, CC( N2, IMX), NC,1)
  42 CONTINUE
     IF( ICASX.EQ.1) GOTO 43
     WRITE( 12) (( CD( J, I), J=1, ND), I=1, IT)
     WRITE( 15) (( CC( J, I), J=1, NC), I=1, IT)
  43 CONTINUE
     IF( ICASX.EQ.1) RETURN
     REWIND 12
     REWIND 14
     REWIND 15
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE CMSET( NROW, CM, RKHX, IEXKX)
C ***
     IMPLICIT REAL (A-H,O-Z)
C
C     CMSET SETS UP THE COMPLEX STRUCTURE MATRIX IN THE ARRAY CM
C
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  CM, ZARRAY, ZAJ, ETK, ETS, ETC, EXK, EYK, EZK, EXS,
    &EYS, EZS, EXC, EYC, EZC, SSX, D, DETER
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /MATPAR/ ICASE, NBLOKS, NPBLK, NLAST, NBLSYM, NPSYM,
    &NLSYM, IMAT, ICASX, NBBX, NPBX, NLBX, NBBL, NPBL, NLBL
     COMMON  /SMAT/ SSX(16,16)
     COMMON  /SCRATM/ D( N2M)
     COMMON  /ZLOAD/ ZARRAY( NM), NLOAD, NLODF
     COMMON  /SEGJ/ AX(30), BX(30), CX(30), JCO(30), JSNO, ISCON(50),
    &NSCON, IPCON(10), NPCON
     COMMON  /DATAJ/ S, B, XJ, YJ, ZJ, CABJ, SABJ, SALPJ, EXK, EYK,
    &EZK, EXS, EYS, EZS, EXC, EYC, EZC, RKH, IEXK, IND1, INDD1, IND2,
    &INDD2, IPGND
     DIMENSION  CM( NROW,1)
     MP2=2* MP
     NPEQ= NP+ MP2
     NEQ= N+2* M
     NOP= NEQ/ NPEQ
     IF( ICASE.GT.2) REWIND 11
     RKH= RKHX
     IEXK= IEXKX
     IOUT=2* NPBLK* NROW
C
C     CYCLE OVER MATRIX BLOCKS
C
     IT= NPBLK
     DO 13  IXBLK1=1, NBLOKS
     ISV=( IXBLK1-1)* NPBLK
     IF( IXBLK1.EQ. NBLOKS) IT= NLAST
     DO 1  I=1, NROW
     DO 1  J=1, IT
   1 CM( I, J)=(0.,0.)
     I1= ISV+1
     I2= ISV+ IT
     IN2= I2
     IF( IN2.GT. NP) IN2= NP
     IM1= I1- NP
     IM2= I2- NP
     IF( IM1.LT.1) IM1=1
     IST=1
     IF( I1.LE. NP) IST= NP- I1+2
C
C     WIRE SOURCE LOOP
C
     IF( N.EQ.0) GOTO 5
     DO 4  J=1, N
     CALL TRIO( J)
     DO 2  I=1, JSNO
     IJ= JCO( I)
   2 JCO( I)=(( IJ-1)/ NP)* MP2+ IJ
     IF( I1.LE. IN2) CALL CMWW( J, I1, IN2, CM, NROW, CM, NROW,1)
     IF( IM1.LE. IM2) CALL CMWS( J, IM1, IM2, CM(1, IST), NROW, CM,
    &NROW,1)
C
C     MATRIX ELEMENTS MODIFIED BY LOADING
C
     IF( NLOAD.EQ.0) GOTO 4
     IF( J.GT. NP) GOTO 4
     IPR= J- ISV
     IF( IPR.LT.1.OR. IPR.GT. IT) GOTO 4
     ZAJ= ZARRAY( J)
     DO 3  I=1, JSNO
     JSS= JCO( I)
   3 CM( JSS, IPR)= CM( JSS, IPR)-( AX( I)+ CX( I))* ZAJ
   4 CONTINUE
C     MATRIX ELEMENTS FOR PATCH CURRENT SOURCES
   5 IF( M.EQ.0) GOTO 7
     JM1=1- MP
     JM2=0
     JST=1- MP2
     DO 6  I=1, NOP
     JM1= JM1+ MP
     JM2= JM2+ MP
     JST= JST+ NPEQ
     IF( I1.LE. IN2) CALL CMSW( JM1, JM2, I1, IN2, CM( JST,1), CM,0,
    &NROW,1)
     IF( IM1.LE. IM2) CALL CMSS( JM1, JM2, IM1, IM2, CM( JST, IST),
    &NROW,1)
   6 CONTINUE
   7 IF( ICASE.EQ.1) GOTO 13
C     COMBINE ELEMENTS FOR SYMMETRY MODES
     IF( ICASE.EQ.3) GOTO 12
     DO 11  I=1, IT
     DO 11  J=1, NPEQ
     DO 8  K=1, NOP
     KA= J+( K-1)* NPEQ
   8 D( K)= CM( KA, I)
     DETER= D(1)
     DO 9  KK=2, NOP
   9 DETER= DETER+ D( KK)
     CM( J, I)= DETER
     DO 11  K=2, NOP
     KA= J+( K-1)* NPEQ
     DETER= D(1)
     DO 10  KK=2, NOP
  10 DETER= DETER+ D( KK)* SSX( K, KK)
     CM( KA, I)= DETER
  11 CONTINUE
C     WRITE BLOCK FOR OUT-OF-CORE CASES.
     IF( ICASE.LT.3) GOTO 13
  12 CALL BLCKOT( CM,11,1, IOUT,1,31)
  13 CONTINUE
     IF( ICASE.GT.2) REWIND 11
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE CMSS( J1, J2, IM1, IM2, CM, NROW, ITRP)
C ***
     IMPLICIT REAL (A-H,O-Z)
C     CMSS COMPUTES MATRIX ELEMENTS FOR SURFACE-SURFACE INTERACTIONS.
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  G11, G12, G21, G22, CM, EXK, EYK, EZK, EXS, EYS, EZS,
    & EXC, EYC, EZC
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /ANGL/ SALP( NM)
     COMMON  /DATAJ/ S, B, XJ, YJ, ZJ, CABJ, SABJ, SALPJ, EXK, EYK,
    &EZK, EXS, EYS, EZS, EXC, EYC, EZC, RKH, IEXK, IND1, INDD1, IND2,
    &INDD2, IPGND
     DIMENSION  CM( NROW,1)
     DIMENSION  T1X(1), T1Y(1), T1Z(1), T2X(1), T2Y(1), T2Z(1)
     EQUIVALENCE(T1X,SI),(T1Y,ALP),(T1Z,BET),(T2X,ICON1),(T2Y,ICON2),(
    &T2Z,ITAG)
     EQUIVALENCE(T1XJ,CABJ),(T1YJ,SABJ),(T1ZJ,SALPJ),(T2XJ,B),(T2YJ,
    &IND1),(T2ZJ,IND2)
     LDP= LD+1
     I1=( IM1+1)/2
     I2=( IM2+1)/2
     ICOMP= I1*2-3
     II1=-1
C     LOOP OVER OBSERVATION PATCHES
     IF( ICOMP+2.LT. IM1) II1=-2
     DO 5  I= I1, I2
     IL= LDP- I
     ICOMP= ICOMP+2
     II1= II1+2
     II2= II1+1
     T1XI= T1X( IL)* SALP( IL)
     T1YI= T1Y( IL)* SALP( IL)
     T1ZI= T1Z( IL)* SALP( IL)
     T2XI= T2X( IL)* SALP( IL)
     T2YI= T2Y( IL)* SALP( IL)
     T2ZI= T2Z( IL)* SALP( IL)
     XI= X( IL)
     YI= Y( IL)
     ZI= Z( IL)
C     LOOP OVER SOURCE PATCHES
     JJ1=-1
     DO 5  J= J1, J2
     JL= LDP- J
     JJ1= JJ1+2
     JJ2= JJ1+1
     S= BI( JL)
     XJ= X( JL)
     YJ= Y( JL)
     ZJ= Z( JL)
     T1XJ= T1X( JL)
     T1YJ= T1Y( JL)
     T1ZJ= T1Z( JL)
     T2XJ= T2X( JL)
     T2YJ= T2Y( JL)
     T2ZJ= T2Z( JL)
     CALL HINTG( XI, YI, ZI)
     G11=-( T2XI* EXK+ T2YI* EYK+ T2ZI* EZK)
     G12=-( T2XI* EXS+ T2YI* EYS+ T2ZI* EZS)
     G21=-( T1XI* EXK+ T1YI* EYK+ T1ZI* EZK)
     G22=-( T1XI* EXS+ T1YI* EYS+ T1ZI* EZS)
     IF( I.NE. J) GOTO 1
     G11= G11-.5
     G22= G22+.5
C     NORMAL FILL
   1 IF( ITRP.NE.0) GOTO 3
     IF( ICOMP.LT. IM1) GOTO 2
     CM( II1, JJ1)= G11
     CM( II1, JJ2)= G12
   2 IF( ICOMP.GE. IM2) GOTO 5
     CM( II2, JJ1)= G21
     CM( II2, JJ2)= G22
C     TRANSPOSED FILL
     GOTO 5
   3 IF( ICOMP.LT. IM1) GOTO 4
     CM( JJ1, II1)= G11
     CM( JJ2, II1)= G12
   4 IF( ICOMP.GE. IM2) GOTO 5
     CM( JJ1, II2)= G21
     CM( JJ2, II2)= G22
   5 CONTINUE
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE CMSW( J1, J2, I1, I2, CM, CW, NCW, NROW, ITRP)
C ***
     IMPLICIT REAL (A-H,O-Z)
C     COMPUTES MATRIX ELEMENTS FOR E ALONG WIRES DUE TO PATCH CURRENT
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  CM, ZRATI, ZRATI2, T1, EXK, EYK, EZK, EXS, EYS, EZS,
    &EXC, EYC, EZC, EMEL, CW, FRATI
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /ANGL/ SALP( NM)
     COMMON  /GND/ ZRATI, ZRATI2, FRATI, CL, CH, SCRWL, SCRWR, NRADL,
    &KSYMP, IFAR, IPERF, T1, T2
     COMMON  /DATAJ/ S, B, XJ, YJ, ZJ, CABJ, SABJ, SALPJ, EXK, EYK,
    &EZK, EXS, EYS, EZS, EXC, EYC, EZC, RKH, IEXK, IND1, INDD1, IND2,
    &INDD2, IPGND
     COMMON  /SEGJ/ AX(30), BX(30), CX(30), JCO(30), JSNO, ISCON(50),
    &NSCON, IPCON(10), NPCON
     DIMENSION  CAB(1), SAB(1), CM( NROW,1), CW( NROW,1)
     DIMENSION  T1X(1), T1Y(1), T1Z(1), T2X(1), T2Y(1), T2Z(1), EMEL(9
    &)
     EQUIVALENCE(T1X,SI),(T1Y,ALP),(T1Z,BET),(T2X,ICON1),(T2Y,ICON2),(
    &T2Z,ITAG),(CAB,ALP),(SAB,BET)
     EQUIVALENCE(T1XJ,CABJ),(T1YJ,SABJ),(T1ZJ,SALPJ),(T2XJ,B),(T2YJ,
    &IND1),(T2ZJ,IND2)
     DATA   PI/3.141592654D+0/
     LDP= LD+1
     NEQS= N- N1+2*( M- M1)
     IF( ITRP.LT.0) GOTO 13
     K=0
C     OBSERVATION LOOP
     ICGO=1
     DO 12  I= I1, I2
     K= K+1
     XI= X( I)
     YI= Y( I)
     ZI= Z( I)
     CABI= CAB( I)
     SABI= SAB( I)
     SALPI= SALP( I)
     IPCH=0
     IF( ICON1( I).LT.10000) GOTO 1
     IPCH= ICON1( I)-10000
     FSIGN=-1.
   1 IF( ICON2( I).LT.10000) GOTO 2
     IPCH= ICON2( I)-10000
     FSIGN=1.
C     SOURCE LOOP
   2 JL=0
     DO 12  J= J1, J2
     JS= LDP- J
     JL= JL+2
     T1XJ= T1X( JS)
     T1YJ= T1Y( JS)
     T1ZJ= T1Z( JS)
     T2XJ= T2X( JS)
     T2YJ= T2Y( JS)
     T2ZJ= T2Z( JS)
     XJ= X( JS)
     YJ= Y( JS)
     ZJ= Z( JS)
C     GROUND LOOP
     S= BI( JS)
     DO 12  IP=1, KSYMP
     IPGND= IP
     IF( IPCH.NE. J.AND. ICGO.EQ.1) GOTO 9
     IF( IP.EQ.2) GOTO 9
     IF( ICGO.GT.1) GOTO 6
     CALL PCINT( XI, YI, ZI, CABI, SABI, SALPI, EMEL)
     PY= PI* SI( I)* FSIGN
     PX= SIN( PY)
     PY= COS( PY)
     EXC= EMEL(9)* FSIGN
     CALL TRIO( I)
     IF( I.GT. N1) GOTO 3
     IL= NEQS+ ICONX( I)
     GOTO 4
   3 IL= I- NCW
     IF( I.LE. NP) IL=(( IL-1)/ NP)*2* MP+ IL
   4 IF( ITRP.NE.0) GOTO 5
     CW( K, IL)= CW( K, IL)+ EXC*( AX( JSNO)+ BX( JSNO)* PX+ CX( JSNO)
    &* PY)
     GOTO 6
   5 CW( IL, K)= CW( IL, K)+ EXC*( AX( JSNO)+ BX( JSNO)* PX+ CX( JSNO)
    &* PY)
   6 IF( ITRP.NE.0) GOTO 7
     CM( K, JL-1)= EMEL( ICGO)
     CM( K, JL)= EMEL( ICGO+4)
     GOTO 8
   7 CM( JL-1, K)= EMEL( ICGO)
     CM( JL, K)= EMEL( ICGO+4)
   8 ICGO= ICGO+1
     IF( ICGO.EQ.5) ICGO=1
     GOTO 11
   9 CALL UNERE( XI, YI, ZI)
C     NORMAL FILL
     IF( ITRP.NE.0) GOTO 10
     CM( K, JL-1)= CM( K, JL-1)+ EXK* CABI+ EYK* SABI+ EZK* SALPI
     CM( K, JL)= CM( K, JL)+ EXS* CABI+ EYS* SABI+ EZS* SALPI
C     TRANSPOSED FILL
     GOTO 11
  10 CM( JL-1, K)= CM( JL-1, K)+ EXK* CABI+ EYK* SABI+ EZK* SALPI
     CM( JL, K)= CM( JL, K)+ EXS* CABI+ EYS* SABI+ EZS* SALPI
  11 CONTINUE
  12 CONTINUE
C     FOR OLD SEG. CONNECTING TO OLD PATCH ON ONE END AND NEW SEG. ON
C     OTHER END INTEGRATE SINGULAR COMPONENT (9) OF SURFACE CURRENT ONLY
     RETURN
  13 IF( J1.LT. I1.OR. J1.GT. I2) GOTO 16
     IPCH= ICON1( J1)
     IF( IPCH.LT.10000) GOTO 14
     IPCH= IPCH-10000
     FSIGN=-1.
     GOTO 15
  14 IPCH= ICON2( J1)
     IF( IPCH.LT.10000) GOTO 16
     IPCH= IPCH-10000
     FSIGN=1.
  15 IF( IPCH.GT. M1) GOTO 16
     JS= LDP- IPCH
     IPGND=1
     T1XJ= T1X( JS)
     T1YJ= T1Y( JS)
     T1ZJ= T1Z( JS)
     T2XJ= T2X( JS)
     T2YJ= T2Y( JS)
     T2ZJ= T2Z( JS)
     XJ= X( JS)
     YJ= Y( JS)
     ZJ= Z( JS)
     S= BI( JS)
     XI= X( J1)
     YI= Y( J1)
     ZI= Z( J1)
     CABI= CAB( J1)
     SABI= SAB( J1)
     SALPI= SALP( J1)
     CALL PCINT( XI, YI, ZI, CABI, SABI, SALPI, EMEL)
     PY= PI* SI( J1)* FSIGN
     PX= SIN( PY)
     PY= COS( PY)
     EXC= EMEL(9)* FSIGN
     IL= JCO( JSNO)
     K= J1- I1+1
     CW( K, IL)= CW( K, IL)+ EXC*( AX( JSNO)+ BX( JSNO)* PX+ CX( JSNO)
    &* PY)
  16 RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE CMWS( J, I1, I2, CM, NR, CW, NW, ITRP)
C ***
C
C     CMWS COMPUTES MATRIX ELEMENTS FOR WIRE-SURFACE INTERACTIONS
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  CM, CW, ETK, ETS, ETC, EXK, EYK, EZK, EXS, EYS, EZS,
    &EXC, EYC, EZC
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /ANGL/ SALP( NM)
     COMMON  /SEGJ/ AX(30), BX(30), CX(30), JCO(30), JSNO, ISCON(50),
    &NSCON, IPCON(10), NPCON
     COMMON  /DATAJ/ S, B, XJ, YJ, ZJ, CABJ, SABJ, SALPJ, EXK, EYK,
    &EZK, EXS, EYS, EZS, EXC, EYC, EZC, RKH, IEXK, IND1, INDD1, IND2,
    &INDD2, IPGND
     DIMENSION  CM( NR,1), CW( NW,1), CAB(1), SAB(1)
     DIMENSION  T1X(1), T1Y(1), T1Z(1), T2X(1), T2Y(1), T2Z(1)
     EQUIVALENCE(CAB,ALP),(SAB,BET),(T1X,SI),(T1Y,ALP),(T1Z,BET)
     EQUIVALENCE(T2X,ICON1),(T2Y,ICON2),(T2Z,ITAG)
     LDP= LD+1
     S= SI( J)
     B= BI( J)
     XJ= X( J)
     YJ= Y( J)
     ZJ= Z( J)
     CABJ= CAB( J)
     SABJ= SAB( J)
C
C     OBSERVATION LOOP
C
     SALPJ= SALP( J)
     IPR=0
     DO 9  I= I1, I2
     IPR= IPR+1
     IPATCH=( I+1)/2
     IK= I-( I/2)*2
     IF( IK.EQ.0.AND. IPR.NE.1) GOTO 1
     JS= LDP- IPATCH
     XI= X( JS)
     YI= Y( JS)
     ZI= Z( JS)
     CALL HSFLD( XI, YI, ZI,0.)
     IF( IK.EQ.0) GOTO 1
     TX= T2X( JS)
     TY= T2Y( JS)
     TZ= T2Z( JS)
     GOTO 2
   1 TX= T1X( JS)
     TY= T1Y( JS)
     TZ= T1Z( JS)
   2 ETK=-( EXK* TX+ EYK* TY+ EZK* TZ)* SALP( JS)
     ETS=-( EXS* TX+ EYS* TY+ EZS* TZ)* SALP( JS)
C
C     FILL MATRIX ELEMENTS.  ELEMENT LOCATIONS DETERMINED BY CONNECTION
C     DATA.
C
     ETC=-( EXC* TX+ EYC* TY+ EZC* TZ)* SALP( JS)
C     NORMAL FILL
     IF( ITRP.NE.0) GOTO 4
     DO 3  IJ=1, JSNO
     JX= JCO( IJ)
   3 CM( IPR, JX)= CM( IPR, JX)+ ETK* AX( IJ)+ ETS* BX( IJ)+ ETC* CX(
    &IJ)
     GOTO 9
C     TRANSPOSED FILL
   4 IF( ITRP.EQ.2) GOTO 6
     DO 5  IJ=1, JSNO
     JX= JCO( IJ)
   5 CM( JX, IPR)= CM( JX, IPR)+ ETK* AX( IJ)+ ETS* BX( IJ)+ ETC* CX(
    &IJ)
C     TRANSPOSED FILL - C(WS) AND D(WS)PRIME (=CW)
     GOTO 9
   6 DO 8  IJ=1, JSNO
     JX= JCO( IJ)
     IF( JX.GT. NR) GOTO 7
     CM( JX, IPR)= CM( JX, IPR)+ ETK* AX( IJ)+ ETS* BX( IJ)+ ETC* CX(
    &IJ)
     GOTO 8
   7 JX= JX- NR
     CW( JX, IPR)= CW( JX, IPR)+ ETK* AX( IJ)+ ETS* BX( IJ)+ ETC* CX(
    &IJ)
   8 CONTINUE
   9 CONTINUE
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE CMWW( J, I1, I2, CM, NR, CW, NW, ITRP)
C ***
     IMPLICIT REAL (A-H,O-Z)
C
C     CMWW COMPUTES MATRIX ELEMENTS FOR WIRE-WIRE INTERACTIONS
C
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  CM, CW, ETK, ETS, ETC, EXK, EYK, EZK, EXS, EYS, EZS,
    &EXC, EYC, EZC
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /ANGL/ SALP( NM)
     COMMON  /SEGJ/ AX(30), BX(30), CX(30), JCO(30), JSNO, ISCON(50),
    &NSCON, IPCON(10), NPCON
     COMMON  /DATAJ/ S, B, XJ, YJ, ZJ, CABJ, SABJ, SALPJ, EXK, EYK,
    &EZK, EXS, EYS, EZS, EXC, EYC, EZC, RKH, IEXK, IND1, INDD1, IND2,
    &INDD2, IPGND
     DIMENSION  CM( NR,1), CW( NW,1), CAB(1), SAB(1)
C     SET SOURCE SEGMENT PARAMETERS
     EQUIVALENCE(CAB,ALP),(SAB,BET)
     S= SI( J)
     B= BI( J)
     XJ= X( J)
     YJ= Y( J)
     ZJ= Z( J)
     CABJ= CAB( J)
     SABJ= SAB( J)
     SALPJ= SALP( J)
C     DECIDE WETHER EXT. T.W. APPROX. CAN BE USED
     IF( IEXK.EQ.0) GOTO 16
     IPR= ICON1( J)
     IF( IPR) 1,6,2
   1 IPR=- IPR
     IF(- ICON1( IPR).NE. J) GOTO 7
     GOTO 4
   2 IF( IPR.NE. J) GOTO 3
     IF( CABJ* CABJ+ SABJ* SABJ.GT.1.D-8) GOTO 7
     GOTO 5
   3 IF( ICON2( IPR).NE. J) GOTO 7
   4 XI= ABS( CABJ* CAB( IPR)+ SABJ* SAB( IPR)+ SALPJ* SALP( IPR))
     IF( XI.LT.0.999999D+0) GOTO 7
     IF( ABS( BI( IPR)/ B-1.).GT.1.D-6) GOTO 7
   5 IND1=0
     GOTO 8
   6 IND1=1
     GOTO 8
   7 IND1=2
   8 IPR= ICON2( J)
     IF( IPR) 9,14,10
   9 IPR=- IPR
     IF(- ICON2( IPR).NE. J) GOTO 15
     GOTO 12
  10 IF( IPR.NE. J) GOTO 11
     IF( CABJ* CABJ+ SABJ* SABJ.GT.1.D-8) GOTO 15
     GOTO 13
  11 IF( ICON1( IPR).NE. J) GOTO 15
  12 XI= ABS( CABJ* CAB( IPR)+ SABJ* SAB( IPR)+ SALPJ* SALP( IPR))
     IF( XI.LT.0.999999D+0) GOTO 15
     IF( ABS( BI( IPR)/ B-1.).GT.1.D-6) GOTO 15
  13 IND2=0
     GOTO 16
  14 IND2=1
     GOTO 16
  15 IND2=2
C
C     OBSERVATION LOOP
C
  16 CONTINUE
     IPR=0
     DO 23  I= I1, I2
     IPR= IPR+1
     IJ= I- J
     XI= X( I)
     YI= Y( I)
     ZI= Z( I)
     AI= BI( I)
     CABI= CAB( I)
     SABI= SAB( I)
     SALPI= SALP( I)
     CALL EFLD( XI, YI, ZI, AI, IJ)
     ETK= EXK* CABI+ EYK* SABI+ EZK* SALPI
     ETS= EXS* CABI+ EYS* SABI+ EZS* SALPI
C
C     FILL MATRIX ELEMENTS.  ELEMENT LOCATIONS DETERMINED BY CONNECTION
C     DATA.
C
     ETC= EXC* CABI+ EYC* SABI+ EZC* SALPI
C     NORMAL FILL
     IF( ITRP.NE.0) GOTO 18
     DO 17  IJ=1, JSNO
     JX= JCO( IJ)
  17 CM( IPR, JX)= CM( IPR, JX)+ ETK* AX( IJ)+ ETS* BX( IJ)+ ETC* CX(
    &IJ)
     GOTO 23
C     TRANSPOSED FILL
  18 IF( ITRP.EQ.2) GOTO 20
     DO 19  IJ=1, JSNO
     JX= JCO( IJ)
  19 CM( JX, IPR)= CM( JX, IPR)+ ETK* AX( IJ)+ ETS* BX( IJ)+ ETC* CX(
    &IJ)
C     TRANS. FILL FOR C(WW) - TEST FOR ELEMENTS FOR D(WW)PRIME.  (=CW)
     GOTO 23
  20 DO 22  IJ=1, JSNO
     JX= JCO( IJ)
     IF( JX.GT. NR) GOTO 21
     CM( JX, IPR)= CM( JX, IPR)+ ETK* AX( IJ)+ ETS* BX( IJ)+ ETC* CX(
    &IJ)
     GOTO 22
  21 JX= JX- NR
     CW( JX, IPR)= CW( JX, IPR)+ ETK* AX( IJ)+ ETS* BX( IJ)+ ETC* CX(
    &IJ)
  22 CONTINUE
  23 CONTINUE
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE CONECT( IGND)
C ***
     IMPLICIT REAL (A-H,O-Z)
C
C     CONNECT SETS UP SEGMENT CONNECTION DATA IN ARRAYS ICON1 AND ICON2
C     BY SEARCHING FOR SEGMENT ENDS THAT ARE IN CONTACT.
C
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /SEGJ/ AX(30), BX(30), CX(30), JCO(30), JSNO, ISCON(50),
    &NSCON, IPCON(10), NPCON
     DIMENSION  X2(1), Y2(1), Z2(1)
     EQUIVALENCE(X2,SI),(Y2,ALP),(Z2,BET)
     DATA   JMAX/30/, SMIN/1.D-3/, NSMAX/50/, NPMAX/10/
     NSCON=0
     NPCON=0
     IF( IGND.EQ.0) GOTO 3
     WRITE( 6,54)
     IF( IGND.GT.0) WRITE( 6,55)
     IF( IPSYM.NE.2) GOTO 1
     NP=2* NP
     MP=2* MP
   1 IF( IABS( IPSYM).LE.2) GOTO 2
     NP= N
     MP= M
   2 IF( NP.GT. N) STOP
     IF( NP.EQ. N.AND. MP.EQ. M) IPSYM=0
   3 IF( N.EQ.0) GOTO 26
     DO 15  I=1, N
     ICONX( I)=0
     XI1= X( I)
     YI1= Y( I)
     ZI1= Z( I)
     XI2= X2( I)
     YI2= Y2( I)
     ZI2= Z2( I)
C
C     DETERMINE CONNECTION DATA FOR END 1 OF SEGMENT.
C
     SLEN= SQRT(( XI2- XI1)**2+( YI2- YI1)**2+( ZI2- ZI1)**2)* SMIN
     IF( IGND.LT.1) GOTO 5
     IF( ZI1.GT.- SLEN) GOTO 4
     WRITE( 6,56)  I
     STOP
   4 IF( ZI1.GT. SLEN) GOTO 5
     ICON1( I)= I
     Z( I)=0.
     GOTO 9
   5 IC= I
     DO 7  J=2, N
     IC= IC+1
     IF( IC.GT. N) IC=1
     SEP= ABS( XI1- X( IC))+ ABS( YI1- Y( IC))+ ABS( ZI1- Z( IC))
     IF( SEP.GT. SLEN) GOTO 6
     ICON1( I)=- IC
     GOTO 8
   6 SEP= ABS( XI1- X2( IC))+ ABS( YI1- Y2( IC))+ ABS( ZI1- Z2( IC))
     IF( SEP.GT. SLEN) GOTO 7
     ICON1( I)= IC
     GOTO 8
   7 CONTINUE
     IF( I.LT. N2.AND. ICON1( I).GT.10000) GOTO 8
C
C     DETERMINE CONNECTION DATA FOR END 2 OF SEGMENT.
C
     ICON1( I)=0
   8 IF( IGND.LT.1) GOTO 12
   9 IF( ZI2.GT.- SLEN) GOTO 10
     WRITE( 6,56)  I
     STOP
  10 IF( ZI2.GT. SLEN) GOTO 12
     IF( ICON1( I).NE. I) GOTO 11
     WRITE( 6,57)  I
     STOP
  11 ICON2( I)= I
     Z2( I)=0.
     GOTO 15
  12 IC= I
     DO 14  J=2, N
     IC= IC+1
     IF( IC.GT. N) IC=1
     SEP= ABS( XI2- X( IC))+ ABS( YI2- Y( IC))+ ABS( ZI2- Z( IC))
     IF( SEP.GT. SLEN) GOTO 13
     ICON2( I)= IC
     GOTO 15
  13 SEP= ABS( XI2- X2( IC))+ ABS( YI2- Y2( IC))+ ABS( ZI2- Z2( IC))
     IF( SEP.GT. SLEN) GOTO 14
     ICON2( I)=- IC
     GOTO 15
  14 CONTINUE
     IF( I.LT. N2.AND. ICON2( I).GT.10000) GOTO 15
     ICON2( I)=0
  15 CONTINUE
C     FIND WIRE-SURFACE CONNECTIONS FOR NEW PATCHES
     IF( M.EQ.0) GOTO 26
     IX= LD+1- M1
     I= M2
  16 IF( I.GT. M) GOTO 20
     IX= IX-1
     XS= X( IX)
     YS= Y( IX)
     ZS= Z( IX)
     DO 18  ISEG=1, N
     XI1= X( ISEG)
     YI1= Y( ISEG)
     ZI1= Z( ISEG)
     XI2= X2( ISEG)
     YI2= Y2( ISEG)
     ZI2= Z2( ISEG)
C     FOR FIRST END OF SEGMENT
     SLEN=( ABS( XI2- XI1)+ ABS( YI2- YI1)+ ABS( ZI2- ZI1))* SMIN
     SEP= ABS( XI1- XS)+ ABS( YI1- YS)+ ABS( ZI1- ZS)
C     CONNECTION - DIVIDE PATCH INTO 4 PATCHES AT PRESENT ARRAY LOC.
     IF( SEP.GT. SLEN) GOTO 17
     ICON1( ISEG)=10000+ I
     IC=0
     CALL SUBPH( I, IC, XI1, YI1, ZI1, XI2, YI2, ZI2, XA, YA, ZA, XS,
    &YS, ZS)
     GOTO 19
  17 SEP= ABS( XI2- XS)+ ABS( YI2- YS)+ ABS( ZI2- ZS)
     IF( SEP.GT. SLEN) GOTO 18
     ICON2( ISEG)=10000+ I
     IC=0
     CALL SUBPH( I, IC, XI1, YI1, ZI1, XI2, YI2, ZI2, XA, YA, ZA, XS,
    &YS, ZS)
     GOTO 19
  18 CONTINUE
  19 I= I+1
C     REPEAT SEARCH FOR NEW SEGMENTS CONNECTED TO NGF PATCHES.
     GOTO 16
  20 IF( M1.EQ.0.OR. N2.GT. N) GOTO 26
     IX= LD+1
     I=1
  21 IF( I.GT. M1) GOTO 25
     IX= IX-1
     XS= X( IX)
     YS= Y( IX)
     ZS= Z( IX)
     DO 23  ISEG= N2, N
     XI1= X( ISEG)
     YI1= Y( ISEG)
     ZI1= Z( ISEG)
     XI2= X2( ISEG)
     YI2= Y2( ISEG)
     ZI2= Z2( ISEG)
     SLEN=( ABS( XI2- XI1)+ ABS( YI2- YI1)+ ABS( ZI2- ZI1))* SMIN
     SEP= ABS( XI1- XS)+ ABS( YI1- YS)+ ABS( ZI1- ZS)
     IF( SEP.GT. SLEN) GOTO 22
     ICON1( ISEG)=10001+ M
     IC=1
     NPCON= NPCON+1
     IPCON( NPCON)= I
     CALL SUBPH( I, IC, XI1, YI1, ZI1, XI2, YI2, ZI2, XA, YA, ZA, XS,
    &YS, ZS)
     GOTO 24
  22 SEP= ABS( XI2- XS)+ ABS( YI2- YS)+ ABS( ZI2- ZS)
     IF( SEP.GT. SLEN) GOTO 23
     ICON2( ISEG)=10001+ M
     IC=1
     NPCON= NPCON+1
     IPCON( NPCON)= I
     CALL SUBPH( I, IC, XI1, YI1, ZI1, XI2, YI2, ZI2, XA, YA, ZA, XS,
    &YS, ZS)
     GOTO 24
  23 CONTINUE
  24 I= I+1
     GOTO 21
  25 IF( NPCON.LE. NPMAX) GOTO 26
     WRITE( 6,62)  NPMAX
     STOP
  26 WRITE( 6,58)  N, NP, IPSYM
     IF( M.GT.0) WRITE( 6,61)  M, MP
     ISEG=( N+ M)/( NP+ MP)
     IF( ISEG.EQ.1) GOTO 30
     IF( IPSYM) 28,27,29
  27 STOP
  28 WRITE( 6,59)  ISEG
     GOTO 30
  29 IC= ISEG/2
     IF( ISEG.EQ.8) IC=3
     WRITE( 6,60)  IC
  30 IF( N.EQ.0) GOTO 48
     WRITE( 6,50)
C     ADJUST CONNECTED SEG. ENDS TO EXACTLY COINCIDE.  PRINT JUNCTIONS
C     OF 3 OR MORE SEG.  ALSO FIND OLD SEG. CONNECTING TO NEW SEG.
     ISEG=0
     DO 44  J=1, N
     IEND=-1
     JEND=-1
     IX= ICON1( J)
     IC=1
     JCO(1)=- J
     XA= X( J)
     YA= Y( J)
     ZA= Z( J)
  31 IF( IX.EQ.0) GOTO 43
     IF( IX.EQ. J) GOTO 43
     IF( IX.GT.10000) GOTO 43
     NSFLG=0
  32 IF( IX) 33,49,34
  33 IX=- IX
     GOTO 35
  34 JEND=- JEND
  35 IF( IX.EQ. J) GOTO 37
     IF( IX.LT. J) GOTO 43
     IC= IC+1
     IF( IC.GT. JMAX) GOTO 49
     JCO( IC)= IX* JEND
     IF( IX.GT. N1) NSFLG=1
     IF( JEND.EQ.1) GOTO 36
     XA= XA+ X( IX)
     YA= YA+ Y( IX)
     ZA= ZA+ Z( IX)
     IX= ICON1( IX)
     GOTO 32
  36 XA= XA+ X2( IX)
     YA= YA+ Y2( IX)
     ZA= ZA+ Z2( IX)
     IX= ICON2( IX)
     GOTO 32
  37 SEP= IC
     XA= XA/ SEP
     YA= YA/ SEP
     ZA= ZA/ SEP
     DO 39  I=1, IC
     IX= JCO( I)
     IF( IX.GT.0) GOTO 38
     IX=- IX
     X( IX)= XA
     Y( IX)= YA
     Z( IX)= ZA
     GOTO 39
  38 X2( IX)= XA
     Y2( IX)= YA
     Z2( IX)= ZA
  39 CONTINUE
     IF( N1.EQ.0) GOTO 42
     IF( NSFLG.EQ.0) GOTO 42
     DO 41  I=1, IC
     IX= IABS( JCO( I))
     IF( IX.GT. N1) GOTO 41
     IF( ICONX( IX).NE.0) GOTO 41
     NSCON= NSCON+1
     IF( NSCON.LE. NSMAX) GOTO 40
     WRITE( 6,62)  NSMAX
     STOP
  40 ISCON( NSCON)= IX
     ICONX( IX)= NSCON
  41 CONTINUE
  42 IF( IC.LT.3) GOTO 43
     ISEG= ISEG+1
     WRITE( 6,51)  ISEG,( JCO( I), I=1, IC)
  43 IF( IEND.EQ.1) GOTO 44
     IEND=1
     JEND=1
     IX= ICON2( J)
     IC=1
     JCO(1)= J
     XA= X2( J)
     YA= Y2( J)
     ZA= Z2( J)
     GOTO 31
  44 CONTINUE
     IF( ISEG.EQ.0) WRITE( 6,52)
C     FIND OLD SEGMENTS THAT CONNECT TO NEW PATCHES
     IF( N1.EQ.0.OR. M1.EQ. M) GOTO 48
     DO 47  J=1, N1
     IX= ICON1( J)
     IF( IX.LT.10000) GOTO 45
     IX= IX-10000
     IF( IX.GT. M1) GOTO 46
  45 IX= ICON2( J)
     IF( IX.LT.10000) GOTO 47
     IX= IX-10000
     IF( IX.LT. M2) GOTO 47
  46 IF( ICONX( J).NE.0) GOTO 47
     NSCON= NSCON+1
     ISCON( NSCON)= J
     ICONX( J)= NSCON
  47 CONTINUE
  48 CONTINUE
     RETURN
  49 WRITE( 6,53)  IX
C
     STOP
  50 FORMAT(//,9X,'- MULTIPLE WIRE JUNCTIONS -',/,1X,'JUNCTION',4X,
    &'SEGMENTS  (- FOR END 1, + FOR END 2)')
  51 FORMAT(1X,I5,5X,20I5,/,(11X,20I5))
  52 FORMAT(2X,'NONE')
  53 FORMAT(' CONNECT - SEGMENT CONNECTION ERROR FOR SEGMENT',I5)
  54 FORMAT(/,3X,'GROUND PLANE SPECIFIED.')
  55 FORMAT(/,3X,'WHERE WIRE ENDS TOUCH GROUND, CURRENT WILL BE ',
    &'INTERPOLATED TO IMAGE IN GROUND PLANE.',/)
  56 FORMAT(' GEOMETRY DATA ERROR-- SEGMENT',I5,' EXTENDS BELOW GRO',
    &'UND')
  57 FORMAT(' GEOMETRY DATA ERROR--SEGMENT',I5,' LIES IN GROUND ',
    &'PLANE.')
  58 FORMAT(/,3X,'TOTAL SEGMENTS USED=',I5,5X,'NO. SEG. IN ','A SY',
    &'MMETRIC CELL=',I5,5X,'SYMMETRY FLAG=',I3)
  59 FORMAT(' STRUCTURE HAS',I4,' FOLD ROTATIONAL SYMMETRY',/)
  60 FORMAT(' STRUCTURE HAS',I2,' PLANES OF SYMMETRY',/)
  61 FORMAT(3X,'TOTAL PATCHES USED=',I5,6X,'NO. PATCHES IN A SYMMET',
    &'RIC CELL=',I5)
  62 FORMAT(' ERROR - NO. NEW SEGMENTS CONNECTED TO N.G.F. SEGMENTS',
    &'OR PATCHES EXCEEDS LIMIT OF',I5)
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE COUPLE( CUR, WLAM)
C ***
     IMPLICIT REAL (A-H,O-Z)
C
C     COUPLE COMPUTES THE MAXIMUM COUPLING BETWEEN PAIRS OF SEGMENTS.
C
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  Y11A, Y12A, CUR, Y11, Y12, Y22, YL, YIN, ZL, ZIN, RHO
    &, VQD, VSANT, VQDS
     COMMON  /YPARM/ NCOUP, ICOUP, NCTAG(5), NCSEG(5), Y11A(5), Y12A(
    &20)
     COMMON  /VSORC/ VQD(30), VSANT(30), VQDS(30), IVQD(30), ISANT(30)
    &, IQDS(30), NVQD, NSANT, NQDS
     DIMENSION  CUR(1)
     IF( NSANT.NE.1.OR. NVQD.NE.0) RETURN
     J= ISEGNO( NCTAG( ICOUP+1), NCSEG( ICOUP+1))
     IF( J.NE. ISANT(1)) RETURN
     ICOUP= ICOUP+1
     ZIN= VSANT(1)
     Y11A( ICOUP)= CUR( J)* WLAM/ ZIN
     L1=( ICOUP-1)*( NCOUP-1)
     DO 1  I=1, NCOUP
     IF( I.EQ. ICOUP) GOTO 1
     K= ISEGNO( NCTAG( I), NCSEG( I))
     L1= L1+1
     Y12A( L1)= CUR( K)* WLAM/ ZIN
   1 CONTINUE
     IF( ICOUP.LT. NCOUP) RETURN
     WRITE( 6,6)
     NPM1= NCOUP-1
     DO 5  I=1, NPM1
     ITT1= NCTAG( I)
     ITS1= NCSEG( I)
     ISG1= ISEGNO( ITT1, ITS1)
     L1= I+1
     DO 5  J= L1, NCOUP
     ITT2= NCTAG( J)
     ITS2= NCSEG( J)
     ISG2= ISEGNO( ITT2, ITS2)
     J1= J+( I-1)* NPM1-1
     J2= I+( J-1)* NPM1
     Y11= Y11A( I)
     Y22= Y11A( J)
     Y12=.5*( Y12A( J1)+ Y12A( J2))
     YIN= Y12* Y12
     DBC= ABS( YIN)
     C= DBC/(2.* REAL( Y11)* REAL( Y22)- REAL( YIN))
     IF( C.LT.0..OR. C.GT.1.) GOTO 4
     IF( C.LT..01) GOTO 2
     GMAX=(1.- SQRT(1.- C* C))/ C
     GOTO 3
   2 GMAX=.5*( C+.25* C* C* C)
   3 RHO= GMAX* CONJG( YIN)/ DBC
     YL=((1.- RHO)/(1.+ RHO)+1.)* REAL( Y22)- Y22
     ZL=1./ YL
     YIN= Y11- YIN/( Y22+ YL)
     ZIN=1./ YIN
     DBC= DB10( GMAX)
     WRITE( 6,7)  ITT1, ITS1, ISG1, ITT2, ITS2, ISG2, DBC, ZL, ZIN
     GOTO 5
   4 WRITE( 6,8)  ITT1, ITS1, ISG1, ITT2, ITS2, ISG2, C
   5 CONTINUE
C
     RETURN
   6 FORMAT(///,36X,'- - - ISOLATION DATA - - -',//,6X,'- - COUPLIN',
    &'G BETWEEN - -',8X,'MAXIMUM',15X,'- - - FOR MAXIMUM COUPLING - ',
    &'- -',/,12X,'SEG.',14X,'SEG.',3X,'COUPLING',4X,'LOAD IMPEDANCE ',
    &'(2ND SEG.)',7X,'INPUT IMPEDANCE',/,2X,'TAG/SEG.',3X,'NO.',4X,
    &'TAG/''SEG.',3X,'NO.',6X,'(DB)',8X,'REAL',9X,'IMAG.',9X,'REAL',9X
    &,'IMAG.')
   7 FORMAT(2(1X,I4,1X,I4,1X,I5,2X),F9.3,2X,1P,2(2X,E12.5,1X,E12.5))
   8 FORMAT(2(1X,I4,1X,I4,1X,I5,2X),'**ERROR** COUPLING IS NOT BETWE',
    &'EN 0 AND 1. (=',1P,E12.5,')')
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE DATAGN
C ***
     IMPLICIT REAL (A-H,O-Z)
C
C     DATAGN IS THE MAIN ROUTINE FOR INPUT OF GEOMETRY DATA.
C
C***
     PARAMETER ( NM=600, N2M=800, N3M=1000)
C***
     CHARACTER *2  GM, ATST
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
C***
     COMMON  /ANGL/ SALP( NM)
C***
     COMMON  /PLOT/ IPLP1, IPLP2, IPLP3, IPLP4
     DIMENSION  X2(1), Y2(1), Z2(1), T1X(1), T1Y(1), T1Z(1), T2X(1),
    &T2Y(1), T2Z(1), ATST(13), IFX(2), IFY(2), IFZ(2), CAB(1), SAB(1),
    & IPT(4)
C***
     EQUIVALENCE(T1X,SI),(T1Y,ALP),(T1Z,BET),(T2X,ICON1),(T2Y,ICON2),(
    &T2Z,ITAG),(X2,SI),(Y2,ALP),(Z2,BET),(CAB,ALP),(SAB,BET)
C***
     data atst/'GW','GX','GR','GS','GE','GM','SP','SM','GF','GA',
    $          'SC','GC','GH'/
*      DATA   ATST/2HGW,2HGX,2HGR,2HGS,2HGE,2HGM,2HSP,2HSM,2HGF,2HGA,
*     &2HSC,2HGC,2HGH/
     DATA   IFX/1H ,1HX/, IFY/1H ,1HY/, IFZ/1H ,1HZ/
     DATA   TA/0.01745329252D+0/, TD/57.29577951D+0/, IPT/1HP,1HR,1HT,
    &1HQ/
     IPSYM=0
     NWIRE=0
     N=0
     NP=0
     M=0
     MP=0
     N1=0
     N2=1
     M1=0
     M2=1
     ISCT=0
C
C     READ GEOMETRY DATA CARD AND BRANCH TO SECTION FOR OPERATION
C     REQUESTED
C
C***
C 1     READ (5,42) GM,ITG,NS,XW1,YW1,ZW1,XW2,YW2,ZW2,RAD
     IPHD=0
C***
   1 CALL READGM( GM, ITG, NS, XW1, YW1, ZW1, XW2, YW2, ZW2, RAD)
     IF( N+ M.GT. LD) GOTO 37
     IF( GM.EQ. ATST(9)) GOTO 27
     IF( IPHD.EQ.1) GOTO 2
     WRITE( 6,40)
     WRITE( 6,41)
     IPHD=1
   2 IF( GM.EQ. ATST(11)) GOTO 10
     ISCT=0
     IF( GM.EQ. ATST(1)) GOTO 3
     IF( GM.EQ. ATST(2)) GOTO 18
     IF( GM.EQ. ATST(3)) GOTO 19
     IF( GM.EQ. ATST(4)) GOTO 21
     IF( GM.EQ. ATST(7)) GOTO 9
     IF( GM.EQ. ATST(8)) GOTO 13
     IF( GM.EQ. ATST(5)) GOTO 29
     IF( GM.EQ. ATST(6)) GOTO 26
C***
     IF( GM.EQ. ATST(10)) GOTO 8
C***
     IF( GM.EQ. ATST(13)) GOTO 123
C
C     GENERATE SEGMENT DATA FOR STRAIGHT WIRE.
C
     GOTO 36
   3 NWIRE= NWIRE+1
     I1= N+1
     I2= N+ NS
     WRITE( 6,43)  NWIRE, XW1, YW1, ZW1, XW2, YW2, ZW2, RAD, NS, I1,
    &I2, ITG
     IF( RAD.EQ.0) GOTO 4
     XS1=1.
     YS1=1.
C***
     GOTO 7
C 4     READ (5,42) GM,IX,IY,XS1,YS1,ZS1
C***
   4 CALL READGM( GM, IX, IY, XS1, YS1, ZS1, DUMMY, DUMMY, DUMMY,
    &DUMMY)
     IF( GM.EQ. ATST(12)) GOTO 6
   5 WRITE( 6,48)
     STOP
   6 WRITE( 6,61)  XS1, YS1, ZS1
     IF( YS1.EQ.0.OR. ZS1.EQ.0) GOTO 5
     RAD= YS1
     YS1=( ZS1/ YS1)**(1./( NS-1.))
   7 CALL WIRE( XW1, YW1, ZW1, XW2, YW2, ZW2, RAD, XS1, YS1, NS, ITG)
C
C     GENERATE SEGMENT DATA FOR WIRE ARC
C
     GOTO 1
   8 NWIRE= NWIRE+1
     I1= N+1
     I2= N+ NS
     WRITE( 6,38)  NWIRE, XW1, YW1, ZW1, XW2, NS, I1, I2, ITG
     CALL ARC( ITG, NS, XW1, YW1, ZW1, XW2)
C***
C
C     GENERATE HELIX
C
     GOTO 1
 123 NWIRE= NWIRE+1
     I1= N+1
     I2= N+ NS
     WRITE( 6,124)  XW1, YW1, NWIRE, ZW1, XW2, YW2, ZW2, RAD, NS, I1,
    &I2, ITG
     CALL HELIX( XW1, YW1, ZW1, XW2, YW2, ZW2, RAD, NS, ITG)
C
     GOTO 1
C***
C
C     GENERATE SINGLE NEW PATCH
C
 124 FORMAT(5X,'HELIX STRUCTURE-   AXIAL SPACING BETWEEN TURNS =',F8.3
    &,' TOTAL AXIAL LENGTH =',F8.3/1X,I5,2X,'RADIUS OF HELIX =',4(2X,F
    &8.3),7X,F11.5,I8,4X,I5,1X,I5,3X,I5)
   9 I1= M+1
     NS= NS+1
     IF( ITG.NE.0) GOTO 17
     WRITE( 6,51)  I1, IPT( NS), XW1, YW1, ZW1, XW2, YW2, ZW2
     IF( NS.EQ.2.OR. NS.EQ.4) ISCT=1
     IF( NS.GT.1) GOTO 14
     XW2= XW2* TA
     YW2= YW2* TA
     GOTO 16
  10 IF( ISCT.EQ.0) GOTO 17
     I1= M+1
     NS= NS+1
     IF( ITG.NE.0) GOTO 17
     IF( NS.NE.2.AND. NS.NE.4) GOTO 17
     XS1= X4
     YS1= Y4
     ZS1= Z4
     XS2= X3
     YS2= Y3
     ZS2= Z3
     X3= XW1
     Y3= YW1
     Z3= ZW1
     IF( NS.NE.4) GOTO 11
     X4= XW2
     Y4= YW2
     Z4= ZW2
  11 XW1= XS1
     YW1= YS1
     ZW1= ZS1
     XW2= XS2
     YW2= YS2
     ZW2= ZS2
     IF( NS.EQ.4) GOTO 12
     X4= XW1+ X3- XW2
     Y4= YW1+ Y3- YW2
     Z4= ZW1+ Z3- ZW2
  12 WRITE( 6,51)  I1, IPT( NS), XW1, YW1, ZW1, XW2, YW2, ZW2
     WRITE( 6,39)  X3, Y3, Z3, X4, Y4, Z4
C
C     GENERATE MULTIPLE-PATCH SURFACE
C
     GOTO 16
  13 I1= M+1
     WRITE( 6,59)  I1, IPT(2), XW1, YW1, ZW1, XW2, YW2, ZW2, ITG, NS
C***
     IF( ITG.LT.1.OR. NS.LT.1) GOTO 17
C 14    READ (5,42) GM,IX,IY,X3,Y3,Z3,X4,Y4,Z4
C***
  14 CALL READGM( GM, IX, IY, X3, Y3, Z3, X4, Y4, Z4, DUMMY)
     IF( NS.NE.2.AND. ITG.LT.1) GOTO 15
     X4= XW1+ X3- XW2
     Y4= YW1+ Y3- YW2
     Z4= ZW1+ Z3- ZW2
  15 WRITE( 6,39)  X3, Y3, Z3, X4, Y4, Z4
     IF( GM.NE. ATST(11)) GOTO 17
  16 CALL PATCH( ITG, NS, XW1, YW1, ZW1, XW2, YW2, ZW2, X3, Y3, Z3, X4
    &, Y4, Z4)
     GOTO 1
  17 WRITE( 6,60)
C
C     REFLECT STRUCTURE ALONG X,Y, OR Z AXES OR ROTATE TO FORM CYLINDER.
C
     STOP
  18 IY= NS/10
     IZ= NS- IY*10
     IX= IY/10
     IY= IY- IX*10
     IF( IX.NE.0) IX=1
     IF( IY.NE.0) IY=1
     IF( IZ.NE.0) IZ=1
     WRITE( 6,44)  IFX( IX+1), IFY( IY+1), IFZ( IZ+1), ITG
     GOTO 20
  19 WRITE( 6,45)  NS, ITG
     IX=-1
  20 CALL REFLC( IX, IY, IZ, ITG, NS)
C
C     SCALE STRUCTURE DIMENSIONS BY FACTOR XW1.
C
     GOTO 1
  21 IF( N.LT. N2) GOTO 23
     DO 22  I= N2, N
     X( I)= X( I)* XW1
     Y( I)= Y( I)* XW1
     Z( I)= Z( I)* XW1
     X2( I)= X2( I)* XW1
     Y2( I)= Y2( I)* XW1
     Z2( I)= Z2( I)* XW1
  22 BI( I)= BI( I)* XW1
  23 IF( M.LT. M2) GOTO 25
     YW1= XW1* XW1
     IX= LD+1- M
     IY= LD- M1
     DO 24  I= IX, IY
     X( I)= X( I)* XW1
     Y( I)= Y( I)* XW1
     Z( I)= Z( I)* XW1
  24 BI( I)= BI( I)* YW1
  25 WRITE( 6,46)  XW1
C
C     MOVE STRUCTURE OR REPRODUCE ORIGINAL STRUCTURE IN NEW POSITIONS.
C
     GOTO 1
  26 WRITE( 6,47)  ITG, NS, XW1, YW1, ZW1, XW2, YW2, ZW2, RAD
     XW1= XW1* TA
     YW1= YW1* TA
     ZW1= ZW1* TA
     CALL MOVE( XW1, YW1, ZW1, XW2, YW2, ZW2, INT( RAD+.5), NS, ITG)
C
C     READ NUMERICAL GREEN'S FUNCTION TAPE
C
     GOTO 1
  27 IF( N+ M.EQ.0) GOTO 28
     WRITE( 6,52)
     STOP
  28 CALL GFIL( ITG)
     NPSAV= NP
     MPSAV= MP
     IPSAV= IPSYM
C
C     TERMINATE STRUCTURE GEOMETRY INPUT.
C
C***
     GOTO 1
  29 IF( NS.EQ.0) GOTO 290
     IPLP1=1
     IPLP2=1
C***
 290 IX= N1+ M1
     IF( IX.EQ.0) GOTO 30
     NP= N
     MP= M
     IPSYM=0
  30 CALL CONECT( ITG)
     IF( IX.EQ.0) GOTO 31
     NP= NPSAV
     MP= MPSAV
     IPSYM= IPSAV
  31 IF( N+ M.GT. LD) GOTO 37
     IF( N.EQ.0) GOTO 33
     WRITE( 6,53)
     WRITE( 6,54)
     DO 32  I=1, N
     XW1= X2( I)- X( I)
     YW1= Y2( I)- Y( I)
     ZW1= Z2( I)- Z( I)
     X( I)=( X( I)+ X2( I))*.5
     Y( I)=( Y( I)+ Y2( I))*.5
     Z( I)=( Z( I)+ Z2( I))*.5
     XW2= XW1* XW1+ YW1* YW1+ ZW1* ZW1
     YW2= SQRT( XW2)
     YW2=( XW2/ YW2+ YW2)*.5
     SI( I)= YW2
     CAB( I)= XW1/ YW2
     SAB( I)= YW1/ YW2
     XW2= ZW1/ YW2
     IF( XW2.GT.1.) XW2=1.
     IF( XW2.LT.-1.) XW2=-1.
     SALP( I)= XW2
     XW2= ASIN( XW2)* TD
     YW2= ATGN2( YW1, XW1)* TD
C***
     WRITE( 6,55)  I, X( I), Y( I), Z( I), SI( I), XW2, YW2, BI( I),
    &ICON1( I), I, ICON2( I), ITAG( I)
     IF( IPLP1.NE.1) GOTO 320
     WRITE( 8,*)  X( I), Y( I), Z( I), SI( I), XW2, YW2, BI( I), ICON1
    &( I), I, ICON2( I)
C***
 320 CONTINUE
     IF( SI( I).GT.1.D-20.AND. BI( I).GT.0.) GOTO 32
     WRITE( 6,56)
     STOP
  32 CONTINUE
  33 IF( M.EQ.0) GOTO 35
     WRITE( 6,57)
     J= LD+1
     DO 34  I=1, M
     J= J-1
     XW1=( T1Y( J)* T2Z( J)- T1Z( J)* T2Y( J))* SALP( J)
     YW1=( T1Z( J)* T2X( J)- T1X( J)* T2Z( J))* SALP( J)
     ZW1=( T1X( J)* T2Y( J)- T1Y( J)* T2X( J))* SALP( J)
     WRITE( 6,58)  I, X( J), Y( J), Z( J), XW1, YW1, ZW1, BI( J), T1X(
    & J), T1Y( J), T1Z( J), T2X( J), T2Y( J), T2Z( J)
  34 CONTINUE
  35 RETURN
  36 WRITE( 6,48)
     WRITE( 6,49)  GM, ITG, NS, XW1, YW1, ZW1, XW2, YW2, ZW2, RAD
     STOP
  37 WRITE( 6,50)
C
     STOP
  38 FORMAT(1X,I5,2X,'ARC RADIUS =',F9.5,2X,'FROM',F8.3,' TO',F8.3,
    &' DEGREES',11X,F11.5,2X,I5,4X,I5,1X,I5,3X,I5)
  39 FORMAT(6X,3F11.5,1X,3F11.5)
  40 FORMAT(////,33X,'- - - STRUCTURE SPECIFICATION - - -',//,37X,
    &'COORDINATES MUST BE INPUT IN',/,37X,
    &'METERS OR BE SCALED TO METERS',/,37X,
    &'BEFORE STRUCTURE INPUT IS ENDED',//)
  41 FORMAT(2X,'WIRE',79X,'NO. OF',4X,'FIRST',2X,'LAST',5X,'TAG',/,2X,
    &'NO.',8X,'X1',9X,'Y1',9X,'Z1',10X,'X2',9X,'Y2',9X,'Z2',6X,
    &'RADIUS',3X,'SEG.',5X,'SEG.',3X,'SEG.',5X,'NO.')
  42 FORMAT(A2, I3, I5, 7F10.5)
  43 FORMAT(1X,I5,3F11.5,1X,4F11.5,2X,I5,4X,I5,1X,I5,3X,I5)
  44 FORMAT(6X,'STRUCTURE REFLECTED ALONG THE AXES',3(1X,A1),'.  TA',
    &'GS INCREMENTED BY',I5)
  45 FORMAT(6X,'STRUCTURE ROTATED ABOUT Z-AXIS',I3,' TIMES.  LABELS',
    &' INCREMENTED BY',I5)
  46 FORMAT(6X,'STRUCTURE SCALED BY FACTOR',F10.5)
  47 FORMAT(6X,'THE STRUCTURE HAS BEEN MOVED, MOVE DATA CARD IS -/6X',
    &I3,I5,7F10.5)
  48 FORMAT(' GEOMETRY DATA CARD ERROR')
  49 FORMAT(1X,A2,I3,I5,7F10.5)
  50 FORMAT(' NUMBER OF WIRE SEGMENTS AND SURFACE PATCHES EXCEEDS DI',
    &'MENSION LIMIT.')
  51 FORMAT(1X,I5,A1,F10.5,2F11.5,1X,3F11.5)
  52 FORMAT(' ERROR - GF MUST BE FIRST GEOMETRY DATA CARD')
  53 FORMAT(////33X,'- - - - SEGMENTATION DATA - - - -',//,40X,'COO',
    &'RDINATES IN METERS',//,25X,
    &'I+ AND I- INDICATE THE SEGMENTS BEFORE AND AFTER I',//)
  54 FORMAT(2X,'SEG.',3X,'COORDINATES OF SEG. CENTER',5X,'SEG.',5X,
    &'ORIENTATION ANGLES',4X,'WIRE',4X,'CONNECTION DATA',3X,'TAG',/,2X
    &,'NO.',7X,'X',9X,'Y',9X,'Z',7X,'LENGTH',5X,'ALPHA',5X,'BETA',6X,
    &'RADIUS',4X,'I-',3X,'I',4X,'I+',4X,'NO.')
  55 FORMAT(1X,I5,4F10.5,1X,3F10.5,1X,3I5,2X,I5)
  56 FORMAT(' SEGMENT DATA ERROR')
  57 FORMAT(////,44X,'- - - SURFACE PATCH DATA - - -',//,49X,'COORD',
    &'INATES IN METERS',//,1X,'PATCH',5X,'COORD. OF PATCH CENTER',7X,
    &'UNIT NORMAL VECTOR',6X,'PATCH',12X,
    &'COMPONENTS OF UNIT TANGENT V''ECTORS',/,2X,'NO.',6X,'X',9X,'Y',9
    &X,'Z',9X,'X',7X,'Y',7X,'Z',7X,'AREA',7X,'X1',6X,'Y1',6X,'Z1',7X,
    &'X2',6X,'Y2',6X,'Z2')
  58 FORMAT(1X,I4,3F10.5,1X,3F8.4,F10.5,1X,3F8.4,1X,3F8.4)
  59 FORMAT(1X,I5,A1,F10.5,2F11.5,1X,3F11.5,5X,'SURFACE -',I4,' BY',I3
    &,' PATCHES')
  60 FORMAT(' PATCH DATA ERROR')
  61 FORMAT(9X,'ABOVE WIRE IS TAPERED.  SEG. LENGTH RATIO =',F9.5,/,33
    &X,'RADIUS FROM',F9.5,' TO',F9.5)
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     FUNCTION DB10( X)
C ***
C
C     FUNCTION DB-- RETURNS DB FOR MAGNITUDE (FIELD) OR MAG**2 (POWER) I
C
     IMPLICIT REAL (A-H,O-Z)
     F=10.
     GOTO 1
     ENTRY DB20 (x)
     F=20.
   1 IF( X.LT.1.D-20) GOTO 2
     DB10= F* LOG10( X)
     RETURN
   2 DB10=-999.99
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE EFLD( XI, YI, ZI, AI, IJ)
C ***
     IMPLICIT REAL (A-H,O-Z)
C
C     COMPUTE NEAR E FIELDS OF A SEGMENT WITH SINE, COSINE, AND
C     CONSTANT CURRENTS.  GROUND EFFECT INCLUDED.
C
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  TXK, TYK, TZK, TXS, TYS, TZS, TXC, TYC, TZC, EXK, EYK
    &, EZK, EXS, EYS, EZS, EXC, EYC, EZC, EPX, EPY, ZRATI, REFS, REFPS
    &, ZRSIN, ZRATX, T1, ZSCRN, ZRATI2, TEZS, TERS, TEZC, TERC, TEZK,
    &TERK, EGND, FRATI
     COMMON  /DATAJ/ S, B, XJ, YJ, ZJ, CABJ, SABJ, SALPJ, EXK, EYK,
    &EZK, EXS, EYS, EZS, EXC, EYC, EZC, RKH, IEXK, IND1, INDD1, IND2,
    &INDD2, IPGND
     COMMON  /GND/ ZRATI, ZRATI2, FRATI, CL, CH, SCRWL, SCRWR, NRADL,
    &KSYMP, IFAR, IPERF, T1, T2
     COMMON  /INCOM/ XO, YO, ZO, SN, XSN, YSN, ISNOR
     DIMENSION  EGND(9)
     EQUIVALENCE(EGND(1),TXK),(EGND(2),TYK),(EGND(3),TZK),(EGND(4),TXS
    &),(EGND(5),TYS),(EGND(6),TZS),(EGND(7),TXC),(EGND(8),TYC),(EGND(9
    &),TZC)
     DATA   ETA/376.73/, PI/3.141592654D+0/, TP/6.283185308D+0/
     XIJ= XI- XJ
     YIJ= YI- YJ
     IJX= IJ
     RFL=-1.
     DO 12  IP=1, KSYMP
     IF( IP.EQ.2) IJX=1
     RFL=- RFL
     SALPR= SALPJ* RFL
     ZIJ= ZI- RFL* ZJ
     ZP= XIJ* CABJ+ YIJ* SABJ+ ZIJ* SALPR
     RHOX= XIJ- CABJ* ZP
     RHOY= YIJ- SABJ* ZP
     RHOZ= ZIJ- SALPR* ZP
     RH= SQRT( RHOX* RHOX+ RHOY* RHOY+ RHOZ* RHOZ+ AI* AI)
     IF( RH.GT.1.D-10) GOTO 1
     RHOX=0.
     RHOY=0.
     RHOZ=0.
     GOTO 2
   1 RHOX= RHOX/ RH
     RHOY= RHOY/ RH
     RHOZ= RHOZ/ RH
   2 R= SQRT( ZP* ZP+ RH* RH)
C
C     LUMPED CURRENT ELEMENT APPROX. FOR LARGE SEPARATIONS
C
     IF( R.LT. RKH) GOTO 3
     RMAG= TP* R
     CTH= ZP/ R
     PX= RH/ R
     TXK= CMPLX( COS( RMAG),- SIN( RMAG))
     PY= TP* R* R
     TYK= ETA* CTH* TXK* CMPLX(1.D+0,-1.D+0/ RMAG)/ PY
     TZK= ETA* PX* TXK* CMPLX(1.D+0, RMAG-1.D+0/ RMAG)/(2.* PY)
     TEZK= TYK* CTH- TZK* PX
     TERK= TYK* PX+ TZK* CTH
     RMAG= SIN( PI* S)/ PI
     TEZC= TEZK* RMAG
     TERC= TERK* RMAG
     TEZK= TEZK* S
     TERK= TERK* S
     TXS=(0.,0.)
     TYS=(0.,0.)
     TZS=(0.,0.)
     GOTO 6
C
C     EKSC FOR THIN WIRE APPROX. OR EKSCX FOR EXTENDED T.W. APPROX.
C
   3 IF( IEXK.EQ.1) GOTO 4
     CALL EKSC( S, ZP, RH, TP, IJX, TEZS, TERS, TEZC, TERC, TEZK, TERK
    &)
     GOTO 5
   4 CALL EKSCX( B, S, ZP, RH, TP, IJX, IND1, IND2, TEZS, TERS, TEZC,
    &TERC, TEZK, TERK)
   5 TXS= TEZS* CABJ+ TERS* RHOX
     TYS= TEZS* SABJ+ TERS* RHOY
     TZS= TEZS* SALPR+ TERS* RHOZ
   6 TXK= TEZK* CABJ+ TERK* RHOX
     TYK= TEZK* SABJ+ TERK* RHOY
     TZK= TEZK* SALPR+ TERK* RHOZ
     TXC= TEZC* CABJ+ TERC* RHOX
     TYC= TEZC* SABJ+ TERC* RHOY
     TZC= TEZC* SALPR+ TERC* RHOZ
     IF( IP.NE.2) GOTO 11
     IF( IPERF.GT.0) GOTO 10
     ZRATX= ZRATI
     RMAG= R
C
C     SET PARAMETERS FOR RADIAL WIRE GROUND SCREEN.
C
     XYMAG= SQRT( XIJ* XIJ+ YIJ* YIJ)
     IF( NRADL.EQ.0) GOTO 7
     XSPEC=( XI* ZJ+ ZI* XJ)/( ZI+ ZJ)
     YSPEC=( YI* ZJ+ ZI* YJ)/( ZI+ ZJ)
     RHOSPC= SQRT( XSPEC* XSPEC+ YSPEC* YSPEC+ T2* T2)
     IF( RHOSPC.GT. SCRWL) GOTO 7
     ZSCRN= T1* RHOSPC* LOG( RHOSPC/ T2)
     ZRATX=( ZSCRN* ZRATI)/( ETA* ZRATI+ ZSCRN)
C
C     CALCULATION OF REFLECTION COEFFICIENTS WHEN GROUND IS SPECIFIED.
C
   7 IF( XYMAG.GT.1.D-6) GOTO 8
     PX=0.
     PY=0.
     CTH=1.
     ZRSIN=(1.,0.)
     GOTO 9
   8 PX=- YIJ/ XYMAG
     PY= XIJ/ XYMAG
     CTH= ZIJ/ RMAG
     ZRSIN= SQRT(1.- ZRATX* ZRATX*(1.- CTH* CTH))
   9 REFS=( CTH- ZRATX* ZRSIN)/( CTH+ ZRATX* ZRSIN)
     REFPS=-( ZRATX* CTH- ZRSIN)/( ZRATX* CTH+ ZRSIN)
     REFPS= REFPS- REFS
     EPY= PX* TXK+ PY* TYK
     EPX= PX* EPY
     EPY= PY* EPY
     TXK= REFS* TXK+ REFPS* EPX
     TYK= REFS* TYK+ REFPS* EPY
     TZK= REFS* TZK
     EPY= PX* TXS+ PY* TYS
     EPX= PX* EPY
     EPY= PY* EPY
     TXS= REFS* TXS+ REFPS* EPX
     TYS= REFS* TYS+ REFPS* EPY
     TZS= REFS* TZS
     EPY= PX* TXC+ PY* TYC
     EPX= PX* EPY
     EPY= PY* EPY
     TXC= REFS* TXC+ REFPS* EPX
     TYC= REFS* TYC+ REFPS* EPY
     TZC= REFS* TZC
  10 EXK= EXK- TXK* FRATI
     EYK= EYK- TYK* FRATI
     EZK= EZK- TZK* FRATI
     EXS= EXS- TXS* FRATI
     EYS= EYS- TYS* FRATI
     EZS= EZS- TZS* FRATI
     EXC= EXC- TXC* FRATI
     EYC= EYC- TYC* FRATI
     EZC= EZC- TZC* FRATI
     GOTO 12
  11 EXK= TXK
     EYK= TYK
     EZK= TZK
     EXS= TXS
     EYS= TYS
     EZS= TZS
     EXC= TXC
     EYC= TYC
     EZC= TZC
  12 CONTINUE
     IF( IPERF.EQ.2) GOTO 13
C
C     FIELD DUE TO GROUND USING SOMMERFELD/NORTON
C
     RETURN
  13 SN= SQRT( CABJ* CABJ+ SABJ* SABJ)
     IF( SN.LT.1.D-5) GOTO 14
     XSN= CABJ/ SN
     YSN= SABJ/ SN
     GOTO 15
  14 SN=0.
     XSN=1.
C
C     DISPLACE OBSERVATION POINT FOR THIN WIRE APPROXIMATION
C
     YSN=0.
  15 ZIJ= ZI+ ZJ
     SALPR=- SALPJ
     RHOX= SABJ* ZIJ- SALPR* YIJ
     RHOY= SALPR* XIJ- CABJ* ZIJ
     RHOZ= CABJ* YIJ- SABJ* XIJ
     RH= RHOX* RHOX+ RHOY* RHOY+ RHOZ* RHOZ
     IF( RH.GT.1.D-10) GOTO 16
     XO= XI- AI* YSN
     YO= YI+ AI* XSN
     ZO= ZI
     GOTO 17
  16 RH= AI/ SQRT( RH)
     IF( RHOZ.LT.0.) RH=- RH
     XO= XI+ RH* RHOX
     YO= YI+ RH* RHOY
     ZO= ZI+ RH* RHOZ
  17 R= XIJ* XIJ+ YIJ* YIJ+ ZIJ* ZIJ
C
C     FIELD FROM INTERPOLATION IS INTEGRATED OVER SEGMENT
C
     IF( R.GT..95) GOTO 18
     ISNOR=1
     DMIN= EXK* CONJG( EXK)+ EYK* CONJG( EYK)+ EZK* CONJG( EZK)
     DMIN=.01* SQRT( DMIN)
     SHAF=.5* S
     CALL ROM2(- SHAF, SHAF, EGND, DMIN)
C
C     NORTON FIELD EQUATIONS AND LUMPED CURRENT ELEMENT APPROXIMATION
C
     GOTO 19
  18 ISNOR=2
     CALL SFLDS(0., EGND)
     GOTO 22
  19 ZP= XIJ* CABJ+ YIJ* SABJ+ ZIJ* SALPR
     RH= R- ZP* ZP
     IF( RH.GT.1.D-10) GOTO 20
     DMIN=0.
     GOTO 21
  20 DMIN= SQRT( RH/( RH+ AI* AI))
  21 IF( DMIN.GT..95) GOTO 22
     PX=1.- DMIN
     TERK=( TXK* CABJ+ TYK* SABJ+ TZK* SALPR)* PX
     TXK= DMIN* TXK+ TERK* CABJ
     TYK= DMIN* TYK+ TERK* SABJ
     TZK= DMIN* TZK+ TERK* SALPR
     TERS=( TXS* CABJ+ TYS* SABJ+ TZS* SALPR)* PX
     TXS= DMIN* TXS+ TERS* CABJ
     TYS= DMIN* TYS+ TERS* SABJ
     TZS= DMIN* TZS+ TERS* SALPR
     TERC=( TXC* CABJ+ TYC* SABJ+ TZC* SALPR)* PX
     TXC= DMIN* TXC+ TERC* CABJ
     TYC= DMIN* TYC+ TERC* SABJ
     TZC= DMIN* TZC+ TERC* SALPR
  22 EXK= EXK+ TXK
     EYK= EYK+ TYK
     EZK= EZK+ TZK
     EXS= EXS+ TXS
     EYS= EYS+ TYS
     EZS= EZS+ TZS
     EXC= EXC+ TXC
     EYC= EYC+ TYC
     EZC= EZC+ TZC
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE EKSC( S, Z, RH, XK, IJ, EZS, ERS, EZC, ERC, EZK, ERK)
C ***
     IMPLICIT REAL (A-H,O-Z)
C     COMPUTE E FIELD OF SINE, COSINE, AND CONSTANT CURRENT FILAMENTS BY
C     THIN WIRE APPROXIMATION.
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  CON, GZ1, GZ2, GP1, GP2, GZP1, GZP2, EZS, ERS, EZC,
    &ERC, EZK, ERK
     COMMON  /TMI/ ZPK, RKB2, IJX
     DIMENSION  CONX(2)
     EQUIVALENCE(CONX,CON)
     DATA   CONX/0.,4.771341189D+0/
     IJX= IJ
     ZPK= XK* Z
     RHK= XK* RH
     RKB2= RHK* RHK
     SH=.5* S
     SHK= XK* SH
     SS= SIN( SHK)
     CS= COS( SHK)
     Z2= SH- Z
     Z1=-( SH+ Z)
     CALL GX( Z1, RH, XK, GZ1, GP1)
     CALL GX( Z2, RH, XK, GZ2, GP2)
     GZP1= GP1* Z1
     GZP2= GP2* Z2
     EZS= CON*(( GZ2- GZ1)* CS* XK-( GZP2+ GZP1)* SS)
     EZC=- CON*(( GZ2+ GZ1)* SS* XK+( GZP2- GZP1)* CS)
     ERK= CON*( GP2- GP1)* RH
     CALL INTX(- SHK, SHK, RHK, IJ, CINT, SINT)
     EZK=- CON*( GZP2- GZP1+ XK* XK* CMPLX( CINT,- SINT))
     GZP1= GZP1* Z1
     GZP2= GZP2* Z2
     IF( RH.LT.1.D-10) GOTO 1
     ERS=- CON*(( GZP2+ GZP1+ GZ2+ GZ1)* SS-( Z2* GZ2- Z1* GZ1)* CS*
    &XK)/ RH
     ERC=- CON*(( GZP2- GZP1+ GZ2- GZ1)* CS+( Z2* GZ2+ Z1* GZ1)* SS*
    &XK)/ RH
     RETURN
   1 ERS=(0.,0.)
     ERC=(0.,0.)
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE EKSCX( BX, S, Z, RHX, XK, IJ, INX1, INX2, EZS, ERS,
    &EZC, ERC, EZK, ERK)
C ***
C     COMPUTE E FIELD OF SINE, COSINE, AND CONSTANT CURRENT FILAMENTS BY
C     EXTENDED THIN WIRE APPROXIMATION.
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  CON, GZ1, GZ2, GZP1, GZP2, GR1, GR2, GRP1, GRP2, EZS,
    & EZC, ERS, ERC, GRK1, GRK2, EZK, ERK, GZZ1, GZZ2
     COMMON  /TMI/ ZPK, RKB2, IJX
     DIMENSION  CONX(2)
     EQUIVALENCE(CONX,CON)
     DATA   CONX/0.,4.771341189D+0/
     IF( RHX.LT. BX) GOTO 1
     RH= RHX
     B= BX
     IRA=0
     GOTO 2
   1 RH= BX
     B= RHX
     IRA=1
   2 SH=.5* S
     IJX= IJ
     ZPK= XK* Z
     RHK= XK* RH
     RKB2= RHK* RHK
     SHK= XK* SH
     SS= SIN( SHK)
     CS= COS( SHK)
     Z2= SH- Z
     Z1=-( SH+ Z)
     A2= B* B
     IF( INX1.EQ.2) GOTO 3
     CALL GXX( Z1, RH, B, A2, XK, IRA, GZ1, GZP1, GR1, GRP1, GRK1,
    &GZZ1)
     GOTO 4
   3 CALL GX( Z1, RHX, XK, GZ1, GRK1)
     GZP1= GRK1* Z1
     GR1= GZ1/ RHX
     GRP1= GZP1/ RHX
     GRK1= GRK1* RHX
     GZZ1=(0.,0.)
   4 IF( INX2.EQ.2) GOTO 5
     CALL GXX( Z2, RH, B, A2, XK, IRA, GZ2, GZP2, GR2, GRP2, GRK2,
    &GZZ2)
     GOTO 6
   5 CALL GX( Z2, RHX, XK, GZ2, GRK2)
     GZP2= GRK2* Z2
     GR2= GZ2/ RHX
     GRP2= GZP2/ RHX
     GRK2= GRK2* RHX
     GZZ2=(0.,0.)
   6 EZS= CON*(( GZ2- GZ1)* CS* XK-( GZP2+ GZP1)* SS)
     EZC=- CON*(( GZ2+ GZ1)* SS* XK+( GZP2- GZP1)* CS)
     ERS=- CON*(( Z2* GRP2+ Z1* GRP1+ GR2+ GR1)* SS-( Z2* GR2- Z1* GR1
    &)* CS* XK)
     ERC=- CON*(( Z2* GRP2- Z1* GRP1+ GR2- GR1)* CS+( Z2* GR2+ Z1* GR1
    &)* SS* XK)
     ERK= CON*( GRK2- GRK1)
     CALL INTX(- SHK, SHK, RHK, IJ, CINT, SINT)
     BK= B* XK
     BK2= BK* BK*.25
     EZK=- CON*( GZP2- GZP1+ XK* XK*(1.- BK2)* CMPLX( CINT,- SINT)-
    &BK2*( GZZ2- GZZ1))
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     LOGICAL FUNCTION ENF( NUNIT)
C ***
C*********** THIS ROUTINE NOT USED ON VAX **************
C     IF (EOF,NUNIT) 1,2
     IMPLICIT REAL (A-H,O-Z)
   1 ENF=.TRUE.
     RETURN
   2 ENF=.FALSE.
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
C     IMPLICIT REAL(A-H,O-Z)
C ***
     SUBROUTINE ERROR
     IMPLICIT INTEGER (A-Z)
     CHARACTER   MSG*80
C      CALL SYS$GETMSG(%VAL(RMSSTS),MSGLEN,MSG,,,)
C      CALL ERRSNS( FNUM, RMSSTS, RMSSTV, IUNIT, CNDVAL)
     CALL STR0PC( MSG, MSG)
     IND= INDEX( MSG,',')
     PRINT1 , MSG( IND+2: MSGLEN)
   1 FORMAT(//,'  ****  ERROR  ****   ',//,5X,A,//)
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE ETMNS( P1, P2, P3, P4, P5, P6, IPR, E)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
C ***
C
C     ETMNS FILLS THE ARRAY E WITH THE NEGATIVE OF THE ELECTRIC FIELD
C     INCIDENT ON THE STRUCTURE.  E IS THE RIGHT HAND SIDE OF THE MATRIX
C     EQUATION.
C
     IMPLICIT REAL (A-H,O-Z)
     COMPLEX  E, CX, CY, CZ, VSANT, TX1, TX2, ER, ET, EZH, ERH, VQD
    &, VQDS, ZRATI, ZRATI2, RRV, RRH, T1, TT1, TT2, FRATI
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /ANGL/ SALP( NM)
     COMMON  /VSORC/ VQD(30), VSANT(30), VQDS(30), IVQD(30), ISANT(30)
    &, IQDS(30), NVQD, NSANT, NQDS
     COMMON  /GND/ ZRATI, ZRATI2, FRATI, CL, CH, SCRWL, SCRWR, NRADL,
    &KSYMP, IFAR, IPERF, T1, T2
     DIMENSION  CAB(1), SAB(1), E( N2M)
     DIMENSION  T1X(1), T1Y(1), T1Z(1), T2X(1), T2Y(1), T2Z(1)
     EQUIVALENCE(CAB,ALP),(SAB,BET)
     EQUIVALENCE(T1X,SI),(T1Y,ALP),(T1Z,BET),(T2X,ICON1),(T2Y,ICON2),(
    &T2Z,ITAG)
     DATA   TP/6.283185308D+0/, RETA/2.654420938D-3/
     NEQ= N+2* M
     NQDS=0
C
C     APPLIED FIELD OF VOLTAGE SOURCES FOR TRANSMITTING CASE
C
     IF( IPR.GT.0.AND. IPR.NE.5) GOTO 5
     DO 1  I=1, NEQ
   1 E( I)=(0.,0.)
     IF( NSANT.EQ.0) GOTO 3
     DO 2  I=1, NSANT
     IS= ISANT( I)
   2 E( IS)=- VSANT( I)/( SI( IS)* WLAM)
   3 IF( NVQD.EQ.0) RETURN
     DO 4  I=1, NVQD
     IS= IVQD( I)
   4 CALL QDSRC( IS, VQD( I), E)
     RETURN
C
C     INCIDENT PLANE WAVE, LINEARLY POLARIZED.
C
   5 IF( IPR.GT.3) GOTO 19
     CTH= COS( P1)
     STH= SIN( P1)
     CPH= COS( P2)
     SPH= SIN( P2)
     CET= COS( P3)
     SET= SIN( P3)
     PX= CTH* CPH* CET- SPH* SET
     PY= CTH* SPH* CET+ CPH* SET
     PZ=- STH* CET
     WX=- STH* CPH
     WY=- STH* SPH
     WZ=- CTH
     QX= WY* PZ- WZ* PY
     QY= WZ* PX- WX* PZ
     QZ= WX* PY- WY* PX
     IF( KSYMP.EQ.1) GOTO 7
     IF( IPERF.EQ.1) GOTO 6
     RRV= SQRT(1.- ZRATI* ZRATI* STH* STH)
     RRH= ZRATI* CTH
     RRH=( RRH- RRV)/( RRH+ RRV)
     RRV= ZRATI* RRV
     RRV=-( CTH- RRV)/( CTH+ RRV)
     GOTO 7
   6 RRV=-(1.,0.)
     RRH=-(1.,0.)
   7 IF( IPR.GT.1) GOTO 13
     IF( N.EQ.0) GOTO 10
     DO 8  I=1, N
     ARG=- TP*( WX* X( I)+ WY* Y( I)+ WZ* Z( I))
   8 E( I)=-( PX* CAB( I)+ PY* SAB( I)+ PZ* SALP( I))* CMPLX( COS( ARG
    &), SIN( ARG))
     IF( KSYMP.EQ.1) GOTO 10
     TT1=( PY* CPH- PX* SPH)*( RRH- RRV)
     CX= RRV* PX- TT1* SPH
     CY= RRV* PY+ TT1* CPH
     CZ=- RRV* PZ
     DO 9  I=1, N
     ARG=- TP*( WX* X( I)+ WY* Y( I)- WZ* Z( I))
   9 E( I)= E( I)-( CX* CAB( I)+ CY* SAB( I)+ CZ* SALP( I))* CMPLX(
    &COS( ARG), SIN( ARG))
  10 IF( M.EQ.0) RETURN
     I= LD+1
     I1= N-1
     DO 11  IS=1, M
     I= I-1
     I1= I1+2
     I2= I1+1
     ARG=- TP*( WX* X( I)+ WY* Y( I)+ WZ* Z( I))
     TT1= CMPLX( COS( ARG), SIN( ARG))* SALP( I)* RETA
     E( I2)=( QX* T1X( I)+ QY* T1Y( I)+ QZ* T1Z( I))* TT1
  11 E( I1)=( QX* T2X( I)+ QY* T2Y( I)+ QZ* T2Z( I))* TT1
     IF( KSYMP.EQ.1) RETURN
     TT1=( QY* CPH- QX* SPH)*( RRV- RRH)
     CX=-( RRH* QX- TT1* SPH)
     CY=-( RRH* QY+ TT1* CPH)
     CZ= RRH* QZ
     I= LD+1
     I1= N-1
     DO 12  IS=1, M
     I= I-1
     I1= I1+2
     I2= I1+1
     ARG=- TP*( WX* X( I)+ WY* Y( I)- WZ* Z( I))
     TT1= CMPLX( COS( ARG), SIN( ARG))* SALP( I)* RETA
     E( I2)= E( I2)+( CX* T1X( I)+ CY* T1Y( I)+ CZ* T1Z( I))* TT1
  12 E( I1)= E( I1)+( CX* T2X( I)+ CY* T2Y( I)+ CZ* T2Z( I))* TT1
C
C     INCIDENT PLANE WAVE, ELLIPTIC POLARIZATION.
C
     RETURN
  13 TT1=-(0.,1.)* P6
     IF( IPR.EQ.3) TT1=- TT1
     IF( N.EQ.0) GOTO 16
     CX= PX+ TT1* QX
     CY= PY+ TT1* QY
     CZ= PZ+ TT1* QZ
     DO 14  I=1, N
     ARG=- TP*( WX* X( I)+ WY* Y( I)+ WZ* Z( I))
  14 E( I)=-( CX* CAB( I)+ CY* SAB( I)+ CZ* SALP( I))* CMPLX( COS( ARG
    &), SIN( ARG))
     IF( KSYMP.EQ.1) GOTO 16
     TT2=( CY* CPH- CX* SPH)*( RRH- RRV)
     CX= RRV* CX- TT2* SPH
     CY= RRV* CY+ TT2* CPH
     CZ=- RRV* CZ
     DO 15  I=1, N
     ARG=- TP*( WX* X( I)+ WY* Y( I)- WZ* Z( I))
  15 E( I)= E( I)-( CX* CAB( I)+ CY* SAB( I)+ CZ* SALP( I))* CMPLX(
    &COS( ARG), SIN( ARG))
  16 IF( M.EQ.0) RETURN
     CX= QX- TT1* PX
     CY= QY- TT1* PY
     CZ= QZ- TT1* PZ
     I= LD+1
     I1= N-1
     DO 17  IS=1, M
     I= I-1
     I1= I1+2
     I2= I1+1
     ARG=- TP*( WX* X( I)+ WY* Y( I)+ WZ* Z( I))
     TT2= CMPLX( COS( ARG), SIN( ARG))* SALP( I)* RETA
     E( I2)=( CX* T1X( I)+ CY* T1Y( I)+ CZ* T1Z( I))* TT2
  17 E( I1)=( CX* T2X( I)+ CY* T2Y( I)+ CZ* T2Z( I))* TT2
     IF( KSYMP.EQ.1) RETURN
     TT1=( CY* CPH- CX* SPH)*( RRV- RRH)
     CX=-( RRH* CX- TT1* SPH)
     CY=-( RRH* CY+ TT1* CPH)
     CZ= RRH* CZ
     I= LD+1
     I1= N-1
     DO 18  IS=1, M
     I= I-1
     I1= I1+2
     I2= I1+1
     ARG=- TP*( WX* X( I)+ WY* Y( I)- WZ* Z( I))
     TT1= CMPLX( COS( ARG), SIN( ARG))* SALP( I)* RETA
     E( I2)= E( I2)+( CX* T1X( I)+ CY* T1Y( I)+ CZ* T1Z( I))* TT1
  18 E( I1)= E( I1)+( CX* T2X( I)+ CY* T2Y( I)+ CZ* T2Z( I))* TT1
C
C     INCIDENT FIELD OF AN ELEMENTARY CURRENT SOURCE.
C
     RETURN
  19 WZ= COS( P4)
     WX= WZ* COS( P5)
     WY= WZ* SIN( P5)
     WZ= SIN( P4)
     DS= P6*59.958
     DSH= P6/(2.* TP)
     NPM= N+ M
     IS= LD+1
     I1= N-1
     DO 24  I=1, NPM
     II= I
     IF( I.LE. N) GOTO 20
     IS= IS-1
     II= IS
     I1= I1+2
     I2= I1+1
  20 PX= X( II)- P1
     PY= Y( II)- P2
     PZ= Z( II)- P3
     RS= PX* PX+ PY* PY+ PZ* PZ
     IF( RS.LT.1.D-30) GOTO 24
     R= SQRT( RS)
     PX= PX/ R
     PY= PY/ R
     PZ= PZ/ R
     CTH= PX* WX+ PY* WY+ PZ* WZ
     STH= SQRT(1.- CTH* CTH)
     QX= PX- WX* CTH
     QY= PY- WY* CTH
     QZ= PZ- WZ* CTH
     ARG= SQRT( QX* QX+ QY* QY+ QZ* QZ)
     IF( ARG.LT.1.D-30) GOTO 21
     QX= QX/ ARG
     QY= QY/ ARG
     QZ= QZ/ ARG
     GOTO 22
  21 QX=1.
     QY=0.
     QZ=0.
  22 ARG=- TP* R
     TT1= CMPLX( COS( ARG), SIN( ARG))
     IF( I.GT. N) GOTO 23
     TT2= CMPLX(1.D+0,-1.D+0/( R* TP))/ RS
     ER= DS* TT1* TT2* CTH
     ET=.5* DS* TT1*((0.,1.)* TP/ R+ TT2)* STH
     EZH= ER* CTH- ET* STH
     ERH= ER* STH+ ET* CTH
     CX= EZH* WX+ ERH* QX
     CY= EZH* WY+ ERH* QY
     CZ= EZH* WZ+ ERH* QZ
     E( I)=-( CX* CAB( I)+ CY* SAB( I)+ CZ* SALP( I))
     GOTO 24
  23 PX= WY* QZ- WZ* QY
     PY= WZ* QX- WX* QZ
     PZ= WX* QY- WY* QX
     TT2= DSH* TT1* CMPLX(1./ R, TP)/ R* STH* SALP( II)
     CX= TT2* PX
     CY= TT2* PY
     CZ= TT2* PZ
     E( I2)= CX* T1X( II)+ CY* T1Y( II)+ CZ* T1Z( II)
     E( I1)= CX* T2X( II)+ CY* T2Y( II)+ CZ* T2Z( II)
  24 CONTINUE
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE FACGF( A, B, C, D, BX, IP, IX, NP, N1, MP, M1, N1C,
    &N2C)
C ***
C     FACGF COMPUTES AND FACTORS D-C(INV(A)B).
     IMPLICIT REAL (A-H,O-Z)
     COMPLEX  A, B, C, D, BX, SUM
     COMMON  /MATPAR/ ICASE, NBLOKS, NPBLK, NLAST, NBLSYM, NPSYM,
    &NLSYM, IMAT, ICASX, NBBX, NPBX, NLBX, NBBL, NPBL, NLBL
     DIMENSION  A(1), B( N1C,1), C( N1C,1), D( N2C,1), BX( N1C,1), IP(
    &1), IX(1)
     IF( N2C.EQ.0) RETURN
     IBFL=14
C     CONVERT B FROM BLOCKS OF ROWS ON T14 TO BLOCKS OF COL. ON T16
     IF( ICASX.LT.3) GOTO 1
     CALL REBLK( B, C, N1C, NPBX, N2C)
     IBFL=16
   1 NPB= NPBL
C     COMPUTE INV(A)B AND WRITE ON TAPE14
     IF( ICASX.EQ.2) REWIND 14
     DO 2  IB=1, NBBL
     IF( IB.EQ. NBBL) NPB= NLBL
     IF( ICASX.GT.1) READ( IBFL) (( BX( I, J), I=1, N1C), J=1, NPB)
     CALL SOLVES( A, IP, BX, N1C, NPB, NP, N1, MP, M1,13,13)
     IF( ICASX.EQ.2) REWIND 14
     IF( ICASX.GT.1) WRITE( 14) (( BX( I, J), I=1, N1C), J=1, NPB)
   2 CONTINUE
     IF( ICASX.EQ.1) GOTO 3
     REWIND 11
     REWIND 12
     REWIND 15
     REWIND IBFL
C     COMPUTE D-C(INV(A)B) AND WRITE ON TAPE11
   3 NPC= NPBL
     DO 8  IC=1, NBBL
     IF( IC.EQ. NBBL) NPC= NLBL
     IF( ICASX.EQ.1) GOTO 4
     READ( 15) (( C( I, J), I=1, N1C), J=1, NPC)
     READ( 12) (( D( I, J), I=1, N2C), J=1, NPC)
     REWIND 14
   4 NPB= NPBL
     NIC=0
     DO 7  IB=1, NBBL
     IF( IB.EQ. NBBL) NPB= NLBL
     IF( ICASX.GT.1) READ( 14) (( B( I, J), I=1, N1C), J=1, NPB)
     DO 6  I=1, NPB
     II= I+ NIC
     DO 6  J=1, NPC
     SUM=(0.,0.)
     DO 5  K=1, N1C
   5 SUM= SUM+ B( K, I)* C( K, J)
   6 D( II, J)= D( II, J)- SUM
   7 NIC= NIC+ NPBL
     IF( ICASX.GT.1) WRITE( 11) (( D( I, J), I=1, N2C), J=1, NPBL)
   8 CONTINUE
     IF( ICASX.EQ.1) GOTO 9
     REWIND 11
     REWIND 12
     REWIND 14
     REWIND 15
C     FACTOR D-C(INV(A)B)
   9 N1CP= N1C+1
     IF( ICASX.GT.1) GOTO 10
     CALL FACTR( N2C, D, IP( N1CP), N2C)
     GOTO 13
  10 IF( ICASX.EQ.4) GOTO 12
     NPB= NPBL
     IC=0
     DO 11  IB=1, NBBL
     IF( IB.EQ. NBBL) NPB= NLBL
     II= IC+1
     IC= IC+ N2C* NPB
  11 READ( 11) ( B( I,1), I= II, IC)
     REWIND 11
     CALL FACTR( N2C, B, IP( N1CP), N2C)
     NIC= N2C* N2C
     WRITE( 11) ( B( I,1), I=1, NIC)
     REWIND 11
     GOTO 13
  12 NBLSYS= NBLSYM
     NPSYS= NPSYM
     NLSYS= NLSYM
     ICASS= ICASE
     NBLSYM= NBBL
     NPSYM= NPBL
     NLSYM= NLBL
     ICASE=3
     CALL FACIO( B, N2C,1, IX( N1CP),11,12,16,11)
     CALL LUNSCR( B, N2C,1, IP( N1CP), IX( N1CP),12,11,16)
     NBLSYM= NBLSYS
     NPSYM= NPSYS
     NLSYM= NLSYS
     ICASE= ICASS
  13 RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE FACIO( A, NROW, NOP, IP, IU1, IU2, IU3, IU4)
C ***
C
C     FACIO CONTROLS I/O FOR OUT-OF-CORE FACTORIZATION
C
     IMPLICIT REAL (A-H,O-Z)
     COMPLEX  A
     COMMON  /MATPAR/ ICASE, NBLOKS, NPBLK, NLAST, NBLSYM, NPSYM,
    &NLSYM, IMAT, ICASX, NBBX, NPBX, NLBX, NBBL, NPBL, NLBL
     DIMENSION  A( NROW,1), IP( NROW)
     IT=2* NPSYM* NROW
     NBM= NBLSYM-1
     I1=1
     I2= IT
     I3= I2+1
     I4=2* IT
     TIME=0.
     REWIND IU1
     REWIND IU2
     DO 3  KK=1, NOP
     KA=( KK-1)* NROW+1
     IFILE3= IU1
     IFILE4= IU3
     DO 2  IXBLK1=1, NBM
     REWIND IU3
     REWIND IU4
     CALL BLCKIN( A, IFILE3, I1, I2,1,17)
     IXBP= IXBLK1+1
     DO 1  IXBLK2= IXBP, NBLSYM
     CALL BLCKIN( A, IFILE3, I3, I4,1,18)
     CALL SECNDS( T1)
     CALL LFACTR( A, NROW, IXBLK1, IXBLK2, IP( KA))
     CALL SECNDS( T2)
     TIME= TIME+ T2- T1
     IF( IXBLK2.EQ. IXBP) CALL BLCKOT( A, IU2, I1, I2,1,19)
     IF( IXBLK1.EQ. NBM.AND. IXBLK2.EQ. NBLSYM) IFILE4= IU2
     CALL BLCKOT( A, IFILE4, I3, I4,1,20)
   1 CONTINUE
     IFILE3= IU3
     IFILE4= IU4
     IF(( IXBLK1/2)*2.NE. IXBLK1) GOTO 2
     IFILE3= IU4
     IFILE4= IU3
   2 CONTINUE
   3 CONTINUE
     REWIND IU1
     REWIND IU2
     REWIND IU3
     REWIND IU4
     WRITE( 6,4)  TIME
C
     RETURN
   4 FORMAT(' CP TIME TAKEN FOR FACTORIZATION = ',1P,E12.5)
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE FACTR( N, A, IP, NDIM)
C ***
C
C     SUBROUTINE TO FACTOR A MATRIX INTO A UNIT LOWER TRIANGULAR MATRIX
C     AND AN UPPER TRIANGULAR MATRIX USING THE GAUSS-DOOLITTLE ALGORITHM
C     PRESENTED ON PAGES 411-416 OF A. RALSTON--A FIRST COURSE IN
C     NUMERICAL ANALYSIS.  COMMENTS BELOW REFER TO COMMENTS IN RALSTONS
C     TEXT.    (MATRIX TRANSPOSED.
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  A, D, ARJ
     DIMENSION  A( NDIM, NDIM), IP( NDIM)
     COMMON  /SCRATM/ D( N2M)
     INTEGER  R, RM1, RP1, PJ, PR
     IFLG=0
C
C     STEP 1
C
     DO 9  R=1, N
     DO 1  K=1, N
     D( K)= A( R, K)
C
C     STEPS 2 AND 3
C
   1 CONTINUE
     RM1= R-1
     IF( RM1.LT.1) GOTO 4
     DO 3  J=1, RM1
     PJ= IP( J)
     ARJ= D( PJ)
     A( R, J)= ARJ
     D( PJ)= D( J)
     JP1= J+1
     DO 2  I= JP1, N
     D( I)= D( I)- A( J, I)* ARJ
   2 CONTINUE
   3 CONTINUE
C
C     STEP 4
C
   4 CONTINUE
     DMAX= REAL( D( R)* CONJG( D( R)))
     IP( R)= R
     RP1= R+1
     IF( RP1.GT. N) GOTO 6
     DO 5  I= RP1, N
     ELMAG= REAL( D( I)* CONJG( D( I)))
     IF( ELMAG.LT. DMAX) GOTO 5
     DMAX= ELMAG
     IP( R)= I
   5 CONTINUE
   6 CONTINUE
     IF( DMAX.LT.1.D-10) IFLG=1
     PR= IP( R)
     A( R, R)= D( PR)
C
C     STEP 5
C
     D( PR)= D( R)
     IF( RP1.GT. N) GOTO 8
     ARJ=1./ A( R, R)
     DO 7  I= RP1, N
     A( R, I)= D( I)* ARJ
   7 CONTINUE
   8 CONTINUE
     IF( IFLG.EQ.0) GOTO 9
     WRITE( 6,10)  R, DMAX
     IFLG=0
   9 CONTINUE
C
     RETURN
  10 FORMAT(1H ,'PIVOT(',I3,')=',1P,E16.8)
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE FACTRS( NP, NROW, A, IP, IX, IU1, IU2, IU3, IU4)
C ***
C
C     FACTRS, FOR SYMMETRIC STRUCTURE, TRANSFORMS SUBMATRICIES TO FORM
C     MATRICIES OF THE SYMMETRIC MODES AND CALLS ROUTINE TO FACTOR
C     MATRICIES.  IF NO SYMMETRY, THE ROUTINE IS CALLED TO FACTOR THE
C     COMPLETE MATRIX.
C
     IMPLICIT REAL (A-H,O-Z)
     COMPLEX  A
     COMMON  /MATPAR/ ICASE, NBLOKS, NPBLK, NLAST, NBLSYM, NPSYM,
    &NLSYM, IMAT, ICASX, NBBX, NPBX, NLBX, NBBL, NPBL, NLBL
     DIMENSION  A(1), IP( NROW), IX( NROW)
     NOP= NROW/ NP
     IF( ICASE.GT.2) GOTO 2
     DO 1  KK=1, NOP
     KA=( KK-1)* NP+1
   1 CALL FACTR( NP, A( KA), IP( KA), NROW)
     RETURN
C
C     FACTOR SUBMATRICIES, OR FACTOR COMPLETE MATRIX IF NO SYMMETRY
C     EXISTS.
C
   2 IF( ICASE.GT.3) GOTO 3
     CALL FACIO( A, NROW, NOP, IX, IU1, IU2, IU3, IU4)
     CALL LUNSCR( A, NROW, NOP, IP, IX, IU2, IU3, IU4)
C
C     REWRITE THE MATRICES BY COLUMNS ON TAPE 13
C
     RETURN
   3 I2=2* NPBLK* NROW
     REWIND IU2
     DO 5  K=1, NOP
     REWIND IU1
     ICOLS= NPBLK
     IR2= K* NP
     IR1= IR2- NP+1
     DO 5  L=1, NBLOKS
     IF( NBLOKS.EQ.1.AND. K.GT.1) GOTO 4
     CALL BLCKIN( A, IU1,1, I2,1,602)
     IF( L.EQ. NBLOKS) ICOLS= NLAST
   4 IRR1= IR1
     IRR2= IR2
     DO 5  ICOLDX=1, ICOLS
     WRITE( IU2) ( A( I), I= IRR1, IRR2)
     IRR1= IRR1+ NROW
     IRR2= IRR2+ NROW
   5 CONTINUE
     REWIND IU1
     REWIND IU2
     IF( ICASE.EQ.5) GOTO 8
     REWIND IU3
     IRR1= NP* NP
     DO 7  KK=1, NOP
     IR1=1- NP
     IR2=0
     DO 6  I=1, NP
     IR1= IR1+ NP
     IR2= IR2+ NP
   6 READ( IU2) ( A( J), J= IR1, IR2)
     KA=( KK-1)* NP+1
     CALL FACTR( NP, A, IP( KA), NP)
     WRITE( IU3) ( A( I), I=1, IRR1)
   7 CONTINUE
     REWIND IU2
     REWIND IU3
     RETURN
   8 I2=2* NPSYM* NP
     DO 10  KK=1, NOP
     J2= NPSYM
     DO 10  L=1, NBLSYM
     IF( L.EQ. NBLSYM) J2= NLSYM
     IR1=1- NP
     IR2=0
     DO 9  J=1, J2
     IR1= IR1+ NP
     IR2= IR2+ NP
   9 READ( IU2) ( A( I), I= IR1, IR2)
  10 CALL BLCKOT( A, IU1,1, I2,1,193)
     REWIND IU1
     CALL FACIO( A, NP, NOP, IX, IU1, IU2, IU3, IU4)
     CALL LUNSCR( A, NP, NOP, IP, IX, IU2, IU3, IU4)
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
C      COMPLEX FUNCTION FBAR( P)
     FUNCTION FBAR( P)
C ***
C
C     FBAR IS SOMMERFELD ATTENUATION FUNCTION FOR NUMERICAL DISTANCE P
C
C      IMPLICIT REAL (A-H,O-Z)
     COMPLEX  Z, ZS, SUM, POW, TERM, P, FJ, FBAR
     DIMENSION  FJX(2)
     EQUIVALENCE(FJ,FJX)
     DATA   TOSP/1.128379167D+0/, ACCS/1.D-12/, SP/1.772453851D+0/,
    &FJX/0.,1./
     Z= FJ* SQRT( P)
C
C     SERIES EXPANSION
C
     IF( ABS( Z).GT.3.) GOTO 3
     ZS= Z* Z
     SUM= Z
     POW= Z
     DO 1  I=1,100
     POW=- POW* ZS/ DFLOAT( I)
     TERM= POW/(2.* I+1.)
     SUM= SUM+ TERM
     TMS= REAL( TERM* CONJG( TERM))
     SMS= REAL( SUM* CONJG( SUM))
     IF( TMS/ SMS.LT. ACCS) GOTO 2
   1 CONTINUE
   2 FBAR=1.-(1.- SUM* TOSP)* Z* EXP( ZS)* SP
C
C     ASYMPTOTIC EXPANSION
C
     RETURN
   3 IF( REAL( Z).GE.0.) GOTO 4
     MINUS=1
     Z=- Z
     GOTO 5
   4 MINUS=0
   5 ZS=.5/( Z* Z)
     SUM=(0.,0.)
     TERM=(1.,0.)
     DO 6  I=1,6
     TERM=- TERM*(2.* I-1.)* ZS
   6 SUM= SUM+ TERM
     IF( MINUS.EQ.1) SUM= SUM-2.* SP* Z* EXP( Z* Z)
     FBAR=- SUM
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE FBLOCK( NROW, NCOL, IMAX, IRNGF, IPSYM)
C ***
C     FBLOCK SETS PARAMETERS FOR OUT-OF-CORE SOLUTION FOR THE PRIMARY
C     MATRIX (A)
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  SSX, DETER
     COMMON  /MATPAR/ ICASE, NBLOKS, NPBLK, NLAST, NBLSYM, NPSYM,
    &NLSYM, IMAT, ICASX, NBBX, NPBX, NLBX, NBBL, NPBL, NLBL
     COMMON  /SMAT/ SSX(16,16)
     IMX1= IMAX- IRNGF
     IF( NROW* NCOL.GT. IMX1) GOTO 2
     NBLOKS=1
     NPBLK= NROW
     NLAST= NROW
     IMAT= NROW* NCOL
     IF( NROW.NE. NCOL) GOTO 1
     ICASE=1
     RETURN
   1 ICASE=2
     GOTO 5
   2 IF( NROW.NE. NCOL) GOTO 3
     ICASE=3
     NPBLK= IMAX/(2* NCOL)
     NPSYM= IMX1/ NCOL
     IF( NPSYM.LT. NPBLK) NPBLK= NPSYM
     IF( NPBLK.LT.1) GOTO 12
     NBLOKS=( NROW-1)/ NPBLK
     NLAST= NROW- NBLOKS* NPBLK
     NBLOKS= NBLOKS+1
     NBLSYM= NBLOKS
     NPSYM= NPBLK
     NLSYM= NLAST
     IMAT= NPBLK* NCOL
     WRITE( 6,14)  NBLOKS, NPBLK, NLAST
     GOTO 11
   3 NPBLK= IMAX/ NCOL
     IF( NPBLK.LT.1) GOTO 12
     IF( NPBLK.GT. NROW) NPBLK= NROW
     NBLOKS=( NROW-1)/ NPBLK
     NLAST= NROW- NBLOKS* NPBLK
     NBLOKS= NBLOKS+1
     WRITE( 6,14)  NBLOKS, NPBLK, NLAST
     IF( NROW* NROW.GT. IMX1) GOTO 4
     ICASE=4
     NBLSYM=1
     NPSYM= NROW
     NLSYM= NROW
     IMAT= NROW* NROW
     WRITE( 6,15)
     GOTO 5
   4 ICASE=5
     NPSYM= IMAX/(2* NROW)
     NBLSYM= IMX1/ NROW
     IF( NBLSYM.LT. NPSYM) NPSYM= NBLSYM
     IF( NPSYM.LT.1) GOTO 12
     NBLSYM=( NROW-1)/ NPSYM
     NLSYM= NROW- NBLSYM* NPSYM
     NBLSYM= NBLSYM+1
     WRITE( 6,16)  NBLSYM, NPSYM, NLSYM
     IMAT= NPSYM* NROW
   5 NOP= NCOL/ NROW
     IF( NOP* NROW.NE. NCOL) GOTO 13
C
C     SET UP SSX MATRIX FOR ROTATIONAL SYMMETRY.
C
     IF( IPSYM.GT.0) GOTO 7
     PHAZ=6.2831853072D+0/ NOP
     DO 6  I=2, NOP
     DO 6  J= I, NOP
     ARG= PHAZ* DFLOAT( I-1)* DFLOAT( J-1)
     SSX( I, J)= CMPLX( COS( ARG), SIN( ARG))
   6 SSX( J, I)= SSX( I, J)
C
C     SET UP SSX MATRIX FOR PLANE SYMMETRY
C
     GOTO 11
   7 KK=1
     SSX(1,1)=(1.,0.)
     IF(( NOP.EQ.2).OR.( NOP.EQ.4).OR.( NOP.EQ.8)) GOTO 8
     STOP
   8 KA= NOP/2
     IF( NOP.EQ.8) KA=3
     DO 10  K=1, KA
     DO 9  I=1, KK
     DO 9  J=1, KK
     DETER= SSX( I, J)
     SSX( I, J+ KK)= DETER
     SSX( I+ KK, J+ KK)=- DETER
   9 SSX( I+ KK, J)= DETER
  10 KK= KK*2
  11 RETURN
  12 WRITE( 6,17)  NROW, NCOL
     STOP
  13 WRITE( 6,18)  NROW, NCOL
C
     STOP
  14 FORMAT(//' MATRIX FILE STORAGE -  NO. BLOCKS=',I5,' COLUMNS PE',
    &'R BLOCK=',I5,' COLUMNS IN LAST BLOCK=',I5)
  15 FORMAT(' SUBMATRICIES FIT IN CORE')
  16 FORMAT(' SUBMATRIX PARTITIONING -  NO. BLOCKS=',I5,' COLUMNS P',
    &'ER BLOCK=',I5,' COLUMNS IN LAST BLOCK=',I5)
  17 FORMAT(' ERROR - INSUFFICIENT STORAGE FOR MATRIX',2I5)
  18 FORMAT(' SYMMETRY ERROR - NROW,NCOL=',2I5)
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE FBNGF( NEQ, NEQ2, IRESRV, IB11, IC11, ID11, IX11)
C ***
C     FBNGF SETS THE BLOCKING PARAMETERS FOR THE B, C, AND D ARRAYS FOR
C     OUT-OF-CORE STORAGE.
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMMON  /MATPAR/ ICASE, NBLOKS, NPBLK, NLAST, NBLSYM, NPSYM,
    &NLSYM, IMAT, ICASX, NBBX, NPBX, NLBX, NBBL, NPBL, NLBL
     IRESX= IRESRV- IMAT
     NBLN= NEQ* NEQ2
     NDLN= NEQ2* NEQ2
     NBCD=2* NBLN+ NDLN
     IF( NBCD.GT. IRESX) GOTO 1
     ICASX=1
     IB11= IMAT+1
     GOTO 2
   1 IF( ICASE.LT.3) GOTO 3
     IF( NBCD.GT. IRESRV.OR. NBLN.GT. IRESX) GOTO 3
     ICASX=2
     IB11=1
   2 NBBX=1
     NPBX= NEQ
     NLBX= NEQ
     NBBL=1
     NPBL= NEQ2
     NLBL= NEQ2
     GOTO 5
   3 IR= IRESRV
     IF( ICASE.LT.3) IR= IRESX
     ICASX=3
     IF( NDLN.GT. IR) ICASX=4
     NBCD=2* NEQ+ NEQ2
     NPBL= IR/ NBCD
     NLBL= IR/(2* NEQ2)
     IF( NLBL.LT. NPBL) NPBL= NLBL
     IF( ICASE.LT.3) GOTO 4
     NLBL= IRESX/ NEQ
     IF( NLBL.LT. NPBL) NPBL= NLBL
   4 IF( NPBL.LT.1) GOTO 6
     NBBL=( NEQ2-1)/ NPBL
     NLBL= NEQ2- NBBL* NPBL
     NBBL= NBBL+1
     NBLN= NEQ* NPBL
     IR= IR- NBLN
     NPBX= IR/ NEQ2
     IF( NPBX.GT. NEQ) NPBX= NEQ
     NBBX=( NEQ-1)/ NPBX
     NLBX= NEQ- NBBX* NPBX
     NBBX= NBBX+1
     IB11=1
     IF( ICASE.LT.3) IB11= IMAT+1
   5 IC11= IB11+ NBLN
     ID11= IC11+ NBLN
     IX11= IMAT+1
     WRITE( 6,11)  NEQ2
     IF( ICASX.EQ.1) RETURN
     WRITE( 6,8)  ICASX
     WRITE( 6,9)  NBBX, NPBX, NLBX
     WRITE( 6,10)  NBBL, NPBL, NLBL
     RETURN
   6 WRITE( 6,7)  IRESRV, IMAT, NEQ, NEQ2
C
     STOP
   7 FORMAT(55H ERROR - INSUFFICIENT STORAGE FOR INTERACTION MATRICIES
    &,'  IRESRV,IMAT,NEQ,NEQ2 =',4I5)
   8 FORMAT(48H FILE STORAGE FOR NEW MATRIX SECTIONS -  ICASX =,I2)
   9 FORMAT(' B FILLED BY ROWS -',15X,'NO. BLOCKS =',I3,3X,'ROWS P',
    &'ER BLOCK =',I3,3X,'ROWS IN LAST BLOCK =',I3)
  10 FORMAT(32H B BY COLUMNS, C AND D BY ROWS -,2X,12HNO. BLOCKS =,I3,
    &4X,15HR/C PER BLOCK =,I3,4X,19HR/C IN LAST BLOCK =,I3)
  11 FORMAT(//,35H N.G.F. - NUMBER OF NEW UNKNOWNS IS,I4)
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE FFLD( THET, PHI, ETH, EPH)
C ***
C
C     FFLD CALCULATES THE FAR ZONE RADIATED ELECTRIC FIELDS,
C     THE FACTOR EXP(J*K*R)/(R/LAMDA) NOT INCLUDED
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  CIX, CIY, CIZ, EXA, ETH, EPH, CONST, CCX, CCY, CCZ,
    &CDP, CUR
     COMPLEX  ZRATI, ZRSIN, RRV, RRH, RRV1, RRH1, RRV2, RRH2,
    &ZRATI2, TIX, TIY, TIZ, T1, ZSCRN, EX, EY, EZ, GX, GY, GZ, FRATI
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /ANGL/ SALP( NM)
     COMMON  /CRNT/ AIR( NM), AII( NM), BIR( NM), BII( NM), CIR( NM),
    &CII( NM), CUR( N3M)
     COMMON  /GND/ ZRATI, ZRATI2, FRATI, CL, CH, SCRWL, SCRWR, NRADL,
    &KSYMP, IFAR, IPERF, T1, T2
     DIMENSION  CAB(1), SAB(1), CONSX(2)
     EQUIVALENCE(CAB,ALP),(SAB,BET),(CONST,CONSX)
     DATA   PI, TP, ETA/3.141592654D+0,6.283185308D+0,376.73/
     DATA   CONSX/0.,-29.97922085D+0/
     PHX=- SIN( PHI)
     PHY= COS( PHI)
     ROZ= COS( THET)
     ROZS= ROZ
     THX= ROZ* PHY
     THY=- ROZ* PHX
     THZ=- SIN( THET)
     ROX=- THZ* PHY
     ROY= THZ* PHX
C
C     LOOP FOR STRUCTURE IMAGE IF ANY
C
     IF( N.EQ.0) GOTO 20
C
C     CALCULATION OF REFLECTION COEFFECIENTS
C
     DO 19  K=1, KSYMP
     IF( K.EQ.1) GOTO 4
C
C     FOR PERFECT GROUND
C
     IF( IPERF.NE.1) GOTO 1
     RRV=-(1.,0.)
     RRH=-(1.,0.)
C
C     FOR INFINITE PLANAR GROUND
C
     GOTO 2
   1 ZRSIN= SQRT(1.- ZRATI* ZRATI* THZ* THZ)
     RRV=-( ROZ- ZRATI* ZRSIN)/( ROZ+ ZRATI* ZRSIN)
     RRH=( ZRATI* ROZ- ZRSIN)/( ZRATI* ROZ+ ZRSIN)
C
C     FOR THE CLIFF PROBLEM, TWO REFLCTION COEFFICIENTS CALCULATED
C
   2 IF( IFAR.LE.1) GOTO 3
     RRV1= RRV
     RRH1= RRH
     TTHET= TAN( THET)
     IF( IFAR.EQ.4) GOTO 3
     ZRSIN= SQRT(1.- ZRATI2* ZRATI2* THZ* THZ)
     RRV2=-( ROZ- ZRATI2* ZRSIN)/( ROZ+ ZRATI2* ZRSIN)
     RRH2=( ZRATI2* ROZ- ZRSIN)/( ZRATI2* ROZ+ ZRSIN)
     DARG=- TP*2.* CH* ROZ
   3 ROZ=- ROZ
     CCX= CIX
     CCY= CIY
     CCZ= CIZ
   4 CIX=(0.,0.)
     CIY=(0.,0.)
C
C     LOOP OVER STRUCTURE SEGMENTS
C
     CIZ=(0.,0.)
     DO 17  I=1, N
     OMEGA=-( ROX* CAB( I)+ ROY* SAB( I)+ ROZ* SALP( I))
     EL= PI* SI( I)
     SILL= OMEGA* EL
     TOP= EL+ SILL
     BOT= EL- SILL
     IF( ABS( OMEGA).LT.1.D-7) GOTO 5
     A=2.* SIN( SILL)/ OMEGA
     GOTO 6
   5 A=(2.- OMEGA* OMEGA* EL* EL/3.)* EL
   6 IF( ABS( TOP).LT.1.D-7) GOTO 7
     TOO= SIN( TOP)/ TOP
     GOTO 8
   7 TOO=1.- TOP* TOP/6.
   8 IF( ABS( BOT).LT.1.D-7) GOTO 9
     BOO= SIN( BOT)/ BOT
     GOTO 10
   9 BOO=1.- BOT* BOT/6.
  10 B= EL*( BOO- TOO)
     C= EL*( BOO+ TOO)
     RR= A* AIR( I)+ B* BII( I)+ C* CIR( I)
     RI= A* AII( I)- B* BIR( I)+ C* CII( I)
     ARG= TP*( X( I)* ROX+ Y( I)* ROY+ Z( I)* ROZ)
     IF( K.EQ.2.AND. IFAR.GE.2) GOTO 11
C
C     SUMMATION FOR FAR FIELD INTEGRAL
C
     EXA= CMPLX( COS( ARG), SIN( ARG))* CMPLX( RR, RI)
     CIX= CIX+ EXA* CAB( I)
     CIY= CIY+ EXA* SAB( I)
     CIZ= CIZ+ EXA* SALP( I)
C
C     CALCULATION OF IMAGE CONTRIBUTION IN CLIFF AND GROUND SCREEN
C     PROBLEMS.
C
     GOTO 17
C
C     SPECULAR POINT DISTANCE
C
  11 DR= Z( I)* TTHET
     D= DR* PHY+ X( I)
     IF( IFAR.EQ.2) GOTO 13
     D= SQRT( D* D+( Y( I)- DR* PHX)**2)
     IF( IFAR.EQ.3) GOTO 13
C
C     RADIAL WIRE GROUND SCREEN REFLECTION COEFFICIENT
C
     IF(( SCRWL- D).LT.0.) GOTO 12
     D= D+ T2
     ZSCRN= T1* D* LOG( D/ T2)
     ZSCRN=( ZSCRN* ZRATI)/( ETA* ZRATI+ ZSCRN)
     ZRSIN= SQRT(1.- ZSCRN* ZSCRN* THZ* THZ)
     RRV=( ROZ+ ZSCRN* ZRSIN)/(- ROZ+ ZSCRN* ZRSIN)
     RRH=( ZSCRN* ROZ+ ZRSIN)/( ZSCRN* ROZ- ZRSIN)
     GOTO 16
  12 IF( IFAR.EQ.4) GOTO 14
     IF( IFAR.EQ.5) D= DR* PHY+ X( I)
  13 IF(( CL- D).LE.0.) GOTO 15
  14 RRV= RRV1
     RRH= RRH1
     GOTO 16
  15 RRV= RRV2
     RRH= RRH2
     ARG= ARG+ DARG
C
C     CONTRIBUTION OF EACH IMAGE SEGMENT MODIFIED BY REFLECTION COEF. ,
C     FOR CLIFF AND GROUND SCREEN PROBLEMS
C
  16 EXA= CMPLX( COS( ARG), SIN( ARG))* CMPLX( RR, RI)
     TIX= EXA* CAB( I)
     TIY= EXA* SAB( I)
     TIZ= EXA* SALP( I)
     CDP=( TIX* PHX+ TIY* PHY)*( RRH- RRV)
     CIX= CIX+ TIX* RRV+ CDP* PHX
     CIY= CIY+ TIY* RRV+ CDP* PHY
     CIZ= CIZ- TIZ* RRV
  17 CONTINUE
     IF( K.EQ.1) GOTO 19
C
C     CALCULATION OF CONTRIBUTION OF STRUCTURE IMAGE FOR INFINITE GROUND
C
     IF( IFAR.GE.2) GOTO 18
     CDP=( CIX* PHX+ CIY* PHY)*( RRH- RRV)
     CIX= CCX+ CIX* RRV+ CDP* PHX
     CIY= CCY+ CIY* RRV+ CDP* PHY
     CIZ= CCZ- CIZ* RRV
     GOTO 19
  18 CIX= CIX+ CCX
     CIY= CIY+ CCY
     CIZ= CIZ+ CCZ
  19 CONTINUE
     IF( M.GT.0) GOTO 21
     ETH=( CIX* THX+ CIY* THY+ CIZ* THZ)* CONST
     EPH=( CIX* PHX+ CIY* PHY)* CONST
     RETURN
  20 CIX=(0.,0.)
     CIY=(0.,0.)
     CIZ=(0.,0.)
C
C     ELECTRIC FIELD COMPONENTS
C
  21 ROZ= ROZS
     RFL=-1.
     DO 25  IP=1, KSYMP
     RFL=- RFL
     RRZ= ROZ* RFL
     CALL FFLDS( ROX, ROY, RRZ, CUR( N+1), GX, GY, GZ)
     IF( IP.EQ.2) GOTO 22
     EX= GX
     EY= GY
     EZ= GZ
     GOTO 25
  22 IF( IPERF.NE.1) GOTO 23
     GX=- GX
     GY=- GY
     GZ=- GZ
     GOTO 24
  23 RRV= SQRT(1.- ZRATI* ZRATI* THZ* THZ)
     RRH= ZRATI* ROZ
     RRH=( RRH- RRV)/( RRH+ RRV)
     RRV= ZRATI* RRV
     RRV=-( ROZ- RRV)/( ROZ+ RRV)
     ETH=( GX* PHX+ GY* PHY)*( RRH- RRV)
     GX= GX* RRV+ ETH* PHX
     GY= GY* RRV+ ETH* PHY
     GZ= GZ* RRV
  24 EX= EX+ GX
     EY= EY+ GY
     EZ= EZ- GZ
  25 CONTINUE
     EX= EX+ CIX* CONST
     EY= EY+ CIY* CONST
     EZ= EZ+ CIZ* CONST
     ETH= EX* THX+ EY* THY+ EZ* THZ
     EPH= EX* PHX+ EY* PHY
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE FFLDS( ROX, ROY, ROZ, SCUR, EX, EY, EZ)
C ***
C     CALCULATES THE XYZ COMPONENTS OF THE ELECTRIC FIELD DUE TO
C     SURFACE CURRENTS
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  CT, CONS, SCUR, EX, EY, EZ
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     DIMENSION  XS(1), YS(1), ZS(1), S(1), SCUR(1), CONSX(2)
     EQUIVALENCE(XS,X),(YS,Y),(ZS,Z),(S,BI),(CONS,CONSX)
     DATA   TPI/6.283185308D+0/, CONSX/0.,188.365/
     EX=(0.,0.)
     EY=(0.,0.)
     EZ=(0.,0.)
     I= LD+1
     DO 1  J=1, M
     I= I-1
     ARG= TPI*( ROX* XS( I)+ ROY* YS( I)+ ROZ* ZS( I))
     CT= CMPLX( COS( ARG)* S( I), SIN( ARG)* S( I))
     K=3* J
     EX= EX+ SCUR( K-2)* CT
     EY= EY+ SCUR( K-1)* CT
     EZ= EZ+ SCUR( K)* CT
   1 CONTINUE
     CT= ROX* EX+ ROY* EY+ ROZ* EZ
     EX= CONS*( CT* ROX- EX)
     EY= CONS*( CT* ROY- EY)
     EZ= CONS*( CT* ROZ- EZ)
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE GF( ZK, CO, SI)
C ***
C
C     GF COMPUTES THE INTEGRAND EXP(JKR)/(KR) FOR NUMERICAL INTEGRATION.
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMMON  /TMI/ ZPK, RKB2, IJ
     ZDK= ZK- ZPK
     RK= SQRT( RKB2+ ZDK* ZDK)
     SI= SIN( RK)/ RK
     IF( IJ) 1,2,1
   1 CO= COS( RK)/ RK
     RETURN
   2 IF( RK.LT..2) GOTO 3
     CO=( COS( RK)-1.)/ RK
     RETURN
   3 RKS= RK* RK
     CO=((-1.38888889D-3* RKS+4.16666667D-2)* RKS-.5)* RK
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE GFIL( IPRT)
C ***
C
C     GFIL READS THE N.G.F. FILE
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  CM, SSX, ZRATI, ZRATI2, T1, ZARRAY, AR1, AR2, AR3,
    &EPSCF, FRATI
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /CMB/ CM(90000)
     COMMON  /ANGL/ SALP( NM)
     COMMON  /GND/ ZRATI, ZRATI2, FRATI, CL, CH, SCRWL, SCRWR, NRADL,
    &KSYMP, IFAR, IPERF, T1, T2
     COMMON  /GGRID/ AR1(11,10,4), AR2(17,5,4), AR3(9,8,4), EPSCF, DXA
    &(3), DYA(3), XSA(3), YSA(3), NXA(3), NYA(3)
     COMMON  /MATPAR/ ICASE, NBLOKS, NPBLK, NLAST, NBLSYM, NPSYM,
    &NLSYM, IMAT, ICASX, NBBX, NPBX, NLBX, NBBL, NPBL, NLBL
     COMMON  /SMAT/ SSX(16,16)
     COMMON  /ZLOAD/ ZARRAY( NM), NLOAD, NLODF
     COMMON  /SAVE/ IP( N2M), KCOM, COM(19,5), EPSR, SIG, SCRWLT,
    &SCRWRT, FMHZ
     DATA   IGFL/20/
     REWIND IGFL
     READ( IGFL)  N1, NP, M1, MP, WLAM, FMHZ, IPSYM, KSYMP, IPERF,
    &NRADL, EPSR, SIG, SCRWLT, SCRWRT, NLODF, KCOM
     N= N1
     M= M1
     N2= N1+1
     M2= M1+1
C     READ SEG. DATA AND CONVERT BACK TO END COORD. IN UNITS OF METERS
     IF( N1.EQ.0) GOTO 2
     READ( IGFL) ( X( I), I=1, N1),( Y( I), I=1, N1),( Z( I), I=1, N1)
    &
     READ( IGFL) ( SI( I), I=1, N1),( BI( I), I=1, N1),( ALP( I), I=1,
    & N1)
     READ( IGFL) ( BET( I), I=1, N1),( SALP( I), I=1, N1)
     READ( IGFL) ( ICON1( I), I=1, N1),( ICON2( I), I=1, N1)
     READ( IGFL) ( ITAG( I), I=1, N1)
     IF( NLODF.NE.0) READ( IGFL) ( ZARRAY( I), I=1, N1)
     DO 1  I=1, N1
     XI= X( I)* WLAM
     YI= Y( I)* WLAM
     ZI= Z( I)* WLAM
     DX= SI( I)*.5* WLAM
     X( I)= XI- ALP( I)* DX
     Y( I)= YI- BET( I)* DX
     Z( I)= ZI- SALP( I)* DX
     SI( I)= XI+ ALP( I)* DX
     ALP( I)= YI+ BET( I)* DX
     BET( I)= ZI+ SALP( I)* DX
     BI( I)= BI( I)* WLAM
   1 CONTINUE
   2 IF( M1.EQ.0) GOTO 4
C     READ PATCH DATA AND CONVERT TO METERS
     J= LD- M1+1
     READ( IGFL) ( X( I), I= J, LD),( Y( I), I= J, LD),( Z( I), I= J,
    &LD)
     READ( IGFL) ( SI( I), I= J, LD),( BI( I), I= J, LD),( ALP( I), I=
    & J, LD)
     READ( IGFL) ( BET( I), I= J, LD),( SALP( I), I= J, LD)
     READ( IGFL) ( ICON1( I), I= J, LD),( ICON2( I), I= J, LD)
     READ( IGFL) ( ITAG( I), I= J, LD)
     DX= WLAM* WLAM
     DO 3  I= J, LD
     X( I)= X( I)* WLAM
     Y( I)= Y( I)* WLAM
     Z( I)= Z( I)* WLAM
   3 BI( I)= BI( I)* DX
   4 READ( IGFL)  ICASE, NBLOKS, NPBLK, NLAST, NBLSYM, NPSYM, NLSYM,
    &IMAT
     IF( IPERF.EQ.2) READ( IGFL)  AR1, AR2, AR3, EPSCF, DXA, DYA, XSA,
    & YSA, NXA, NYA
     NEQ= N1+2* M1
     NPEQ= NP+2* MP
     NOP= NEQ/ NPEQ
     IF( NOP.GT.1) READ( IGFL) (( SSX( I, J), I=1, NOP), J=1, NOP)
C     READ MATRIX A AND WRITE TAPE13 FOR OUT OF CORE
     READ( IGFL) ( IP( I), I=1, NEQ), COM
     IF( ICASE.GT.2) GOTO 5
     IOUT= NEQ* NPEQ
     READ( IGFL) ( CM( I), I=1, IOUT)
     GOTO 10
   5 REWIND 13
     IF( ICASE.NE.4) GOTO 7
     IOUT= NPEQ* NPEQ
     DO 6  K=1, NOP
     READ( IGFL) ( CM( J), J=1, IOUT)
   6 WRITE( 13) ( CM( J), J=1, IOUT)
     GOTO 9
   7 IOUT= NPSYM* NPEQ*2
     NBL2=2* NBLSYM
     DO 8  IOP=1, NOP
     DO 8  I=1, NBL2
     CALL BLCKIN( CM, IGFL,1, IOUT,1,206)
   8 CALL BLCKOT( CM,13,1, IOUT,1,205)
   9 REWIND 13
C     WRITE(6,N) G.F. HEADING
  10 REWIND IGFL
     WRITE( 6,16)
     WRITE( 6,14)
     WRITE( 6,14)
     WRITE( 6,17)
     WRITE( 6,18)  N1, M1
     IF( NOP.GT.1) WRITE( 6,19)  NOP
     WRITE( 6,20)  IMAT, ICASE
     IF( ICASE.LT.3) GOTO 11
     NBL2= NEQ* NPEQ
     WRITE( 6,21)  NBL2
  11 WRITE( 6,22)  FMHZ
     IF( KSYMP.EQ.2.AND. IPERF.EQ.1) WRITE( 6,23)
     IF( KSYMP.EQ.2.AND. IPERF.EQ.0) WRITE( 6,27)
     IF( KSYMP.EQ.2.AND. IPERF.EQ.2) WRITE( 6,28)
     IF( KSYMP.EQ.2.AND. IPERF.NE.1) WRITE( 6,24)  EPSR, SIG
     WRITE( 6,17)
     DO 12  J=1, KCOM
  12 WRITE( 6,15) ( COM( I, J), I=1,19)
     WRITE( 6,17)
     WRITE( 6,14)
     WRITE( 6,14)
     WRITE( 6,16)
     IF( IPRT.EQ.0) RETURN
     WRITE( 6,25)
     DO 13  I=1, N1
  13 WRITE( 6,26)  I, X( I), Y( I), Z( I), SI( I), ALP( I), BET( I)
C
     RETURN
  14 FORMAT(5X,'**************************************************',
    &'**********************************')
  15 FORMAT(5X,3H** ,19A4,3H **)
  16 FORMAT(////)
  17 FORMAT(5X,2H**,80X,2H**)
  18 FORMAT(5X,'** NUMERICAL GREEN S FUNCTION',53X,2H**,/,5X,'** NO',
    &'. SEGMENTS =',I4,10X,'NO. PATCHES =',I4,34X,2H**)
  19 FORMAT(5X,'** NO. SYMMETRIC SECTIONS =',I4,51X,2H**)
  20 FORMAT(5X,'** N.G.F. MATRIX -  CORE STORAGE =',I7,' COMPLEX NU',
    &'MBERS,  CASE',I2,16X,2H**)
  21 FORMAT(5X,2H**,19X,'MATRIX SIZE =',I7,' COMPLEX NUMBERS',25X,'**')
  22 FORMAT(5X,'** FREQUENCY =',1P,E12.5,' MHZ.',51X,2H**)
  23 FORMAT(5X,'** PERFECT GROUND',65X,2H**)
  24 FORMAT(5X,'** GROUND PARAMETERS - DIELECTRIC CONSTANT =',1P,E12.5,
    &26X,'**',/,5X,'**',21X,'CONDUCTIVITY =',E12.5,' MHOS/M.',25X,'**')
  25 FORMAT(39X,'NUMERICAL GREEN S FUNCTION DATA',/,41X,'COORDINATES',
    &' OF SEGMENT ENDS',/,51X,'(METERS)',/,5X,'SEG.',11X,
    &'- - - END ON''E - - -',26X,'- - - END TWO - - -',/,6X,3HNO.,6X,1
    &HX,14X,1HY,14X,1HZ,14X,1HX,14X,1HY,14X,1HZ)
  26 FORMAT(1X,I7,1P,6E15.6)
  27 FORMAT(5X,'** FINITE GROUND.  REFLECTION COEFFICIENT APPROXIMAT',
    &'ION',27X,2H**)
  28 FORMAT(5X,'** FINITE GROUND.  SOMMERFELD SOLUTION',44X,'**')
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE GFLD( RHO, PHI, RZ, ETH, EPI, ERD, UX, KSYMP)
C ***
C
C     GFLD COMPUTES THE RADIATED FIELD INCLUDING GROUND WAVE.
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  CUR, EPI, CIX, CIY, CIZ, EXA, XX1, XX2, U, U2, ERV,
    &EZV, ERH, EPH
     COMPLEX  EZH, EX, EY, ETH, UX, ERD
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /ANGL/ SALP( NM)
     COMMON  /CRNT/ AIR( NM), AII( NM), BIR( NM), BII( NM), CIR( NM),
    &CII( NM), CUR( N3M)
     COMMON  /GWAV/ U, U2, XX1, XX2, R1, R2, ZMH, ZPH
     DIMENSION  CAB(1), SAB(1)
     EQUIVALENCE(CAB(1),ALP(1)),(SAB(1),BET(1))
     DATA   PI, TP/3.141592654D+0,6.283185308D+0/
     R= SQRT( RHO* RHO+ RZ* RZ)
     IF( KSYMP.EQ.1) GOTO 1
     IF( ABS( UX).GT..5) GOTO 1
     IF( R.GT.1.E5) GOTO 1
C
C     COMPUTATION OF SPACE WAVE ONLY
C
     GOTO 4
   1 IF( RZ.LT.1.D-20) GOTO 2
     THET= ATAN( RHO/ RZ)
     GOTO 3
   2 THET= PI*.5
   3 CALL FFLD( THET, PHI, ETH, EPI)
     ARG=- TP* R
     EXA= CMPLX( COS( ARG), SIN( ARG))/ R
     ETH= ETH* EXA
     EPI= EPI* EXA
     ERD=(0.,0.)
C
C     COMPUTATION OF SPACE AND GROUND WAVES.
C
     RETURN
   4 U= UX
     U2= U* U
     PHX=- SIN( PHI)
     PHY= COS( PHI)
     RX= RHO* PHY
     RY=- RHO* PHX
     CIX=(0.,0.)
     CIY=(0.,0.)
C
C     SUMMATION OF FIELD FROM INDIVIDUAL SEGMENTS
C
     CIZ=(0.,0.)
     DO 17  I=1, N
     DX= CAB( I)
     DY= SAB( I)
     DZ= SALP( I)
     RIX= RX- X( I)
     RIY= RY- Y( I)
     RHS= RIX* RIX+ RIY* RIY
     RHP= SQRT( RHS)
     IF( RHP.LT.1.D-6) GOTO 5
     RHX= RIX/ RHP
     RHY= RIY/ RHP
     GOTO 6
   5 RHX=1.
     RHY=0.
   6 CALP=1.- DZ* DZ
     IF( CALP.LT.1.D-6) GOTO 7
     CALP= SQRT( CALP)
     CBET= DX/ CALP
     SBET= DY/ CALP
     CPH= RHX* CBET+ RHY* SBET
     SPH= RHY* CBET- RHX* SBET
     GOTO 8
   7 CPH= RHX
     SPH= RHY
   8 EL= PI* SI( I)
C
C     INTEGRATION OF (CURRENT)*(PHASE FACTOR) OVER SEGMENT AND IMAGE FOR
C     CONSTANT, SINE, AND COSINE CURRENT DISTRIBUTIONS
C
     RFL=-1.
     DO 16  K=1,2
     RFL=- RFL
     RIZ= RZ- Z( I)* RFL
     RXYZ= SQRT( RIX* RIX+ RIY* RIY+ RIZ* RIZ)
     RNX= RIX/ RXYZ
     RNY= RIY/ RXYZ
     RNZ= RIZ/ RXYZ
     OMEGA=-( RNX* DX+ RNY* DY+ RNZ* DZ* RFL)
     SILL= OMEGA* EL
     TOP= EL+ SILL
     BOT= EL- SILL
     IF( ABS( OMEGA).LT.1.D-7) GOTO 9
     A=2.* SIN( SILL)/ OMEGA
     GOTO 10
   9 A=(2.- OMEGA* OMEGA* EL* EL/3.)* EL
  10 IF( ABS( TOP).LT.1.D-7) GOTO 11
     TOO= SIN( TOP)/ TOP
     GOTO 12
  11 TOO=1.- TOP* TOP/6.
  12 IF( ABS( BOT).LT.1.D-7) GOTO 13
     BOO= SIN( BOT)/ BOT
     GOTO 14
  13 BOO=1.- BOT* BOT/6.
  14 B= EL*( BOO- TOO)
     C= EL*( BOO+ TOO)
     RR= A* AIR( I)+ B* BII( I)+ C* CIR( I)
     RI= A* AII( I)- B* BIR( I)+ C* CII( I)
     ARG= TP*( X( I)* RNX+ Y( I)* RNY+ Z( I)* RNZ* RFL)
     EXA= CMPLX( COS( ARG), SIN( ARG))* CMPLX( RR, RI)/ TP
     IF( K.EQ.2) GOTO 15
     XX1= EXA
     R1= RXYZ
     ZMH= RIZ
     GOTO 16
  15 XX2= EXA
     R2= RXYZ
     ZPH= RIZ
C
C     CALL SUBROUTINE TO COMPUTE THE FIELD OF SEGMENT INCLUDING GROUND
C     WAVE.
C
  16 CONTINUE
     CALL GWAVE( ERV, EZV, ERH, EZH, EPH)
     ERH= ERH* CPH* CALP+ ERV* DZ
     EPH= EPH* SPH* CALP
     EZH= EZH* CPH* CALP+ EZV* DZ
     EX= ERH* RHX- EPH* RHY
     EY= ERH* RHY+ EPH* RHX
     CIX= CIX+ EX
     CIY= CIY+ EY
  17 CIZ= CIZ+ EZH
     ARG=- TP* R
     EXA= CMPLX( COS( ARG), SIN( ARG))
     CIX= CIX* EXA
     CIY= CIY* EXA
     CIZ= CIZ* EXA
     RNX= RX/ R
     RNY= RY/ R
     RNZ= RZ/ R
     THX= RNZ* PHY
     THY=- RNZ* PHX
     THZ=- RHO/ R
     ETH= CIX* THX+ CIY* THY+ CIZ* THZ
     EPI= CIX* PHX+ CIY* PHY
     ERD= CIX* RNX+ CIY* RNY+ CIZ* RNZ
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE GFOUT
C ***
C
C     WRITE N.G.F. FILE
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  CM, SSX, ZRATI, ZRATI2, T1, ZARRAY, AR1, AR2, AR3,
    &EPSCF, FRATI
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /CMB/ CM(90000)
     COMMON  /ANGL/ SALP( NM)
     COMMON  /GND/ ZRATI, ZRATI2, FRATI, CL, CH, SCRWL, SCRWR, NRADL,
    &KSYMP, IFAR, IPERF, T1, T2
     COMMON  /GGRID/ AR1(11,10,4), AR2(17,5,4), AR3(9,8,4), EPSCF, DXA
    &(3), DYA(3), XSA(3), YSA(3), NXA(3), NYA(3)
     COMMON  /MATPAR/ ICASE, NBLOKS, NPBLK, NLAST, NBLSYM, NPSYM,
    &NLSYM, IMAT, ICASX, NBBX, NPBX, NLBX, NBBL, NPBL, NLBL
     COMMON  /SMAT/ SSX(16,16)
     COMMON  /ZLOAD/ ZARRAY( NM), NLOAD, NLODF
     COMMON  /SAVE/ IP( N2M), KCOM, COM(19,5), EPSR, SIG, SCRWLT,
    &SCRWRT, FMHZ
     DATA   IGFL/20/
     NEQ= N+2* M
     NPEQ= NP+2* MP
     NOP= NEQ/ NPEQ
     WRITE( IGFL)  N, NP, M, MP, WLAM, FMHZ, IPSYM, KSYMP, IPERF,
    &NRADL, EPSR, SIG, SCRWLT, SCRWRT, NLOAD, KCOM
     IF( N.EQ.0) GOTO 1
     WRITE( IGFL) ( X( I), I=1, N),( Y( I), I=1, N),( Z( I), I=1, N)
     WRITE( IGFL) ( SI( I), I=1, N),( BI( I), I=1, N),( ALP( I), I=1,
    &N)
     WRITE( IGFL) ( BET( I), I=1, N),( SALP( I), I=1, N)
     WRITE( IGFL) ( ICON1( I), I=1, N),( ICON2( I), I=1, N)
     WRITE( IGFL) ( ITAG( I), I=1, N)
     IF( NLOAD.GT.0) WRITE( IGFL) ( ZARRAY( I), I=1, N)
   1 IF( M.EQ.0) GOTO 2
     J= LD- M+1
     WRITE( IGFL) ( X( I), I= J, LD),( Y( I), I= J, LD),( Z( I), I= J,
    & LD)
     WRITE( IGFL) ( SI( I), I= J, LD),( BI( I), I= J, LD),( ALP( I), I
    &= J, LD)
     WRITE( IGFL) ( BET( I), I= J, LD),( SALP( I), I= J, LD)
     WRITE( IGFL) ( ICON1( I), I= J, LD),( ICON2( I), I= J, LD)
     WRITE( IGFL) ( ITAG( I), I= J, LD)
   2 WRITE( IGFL)  ICASE, NBLOKS, NPBLK, NLAST, NBLSYM, NPSYM, NLSYM,
    &IMAT
     IF( IPERF.EQ.2) WRITE( IGFL)  AR1, AR2, AR3, EPSCF, DXA, DYA, XSA
    &, YSA, NXA, NYA
     IF( NOP.GT.1) WRITE( IGFL) (( SSX( I, J), I=1, NOP), J=1, NOP)
     WRITE( IGFL) ( IP( I), I=1, NEQ), COM
     IF( ICASE.GT.2) GOTO 3
     IOUT= NEQ* NPEQ
     WRITE( IGFL) ( CM( I), I=1, IOUT)
     GOTO 12
   3 IF( ICASE.NE.4) GOTO 5
     REWIND 13
     I= NPEQ* NPEQ
     DO 4  K=1, NOP
     READ( 13) ( CM( J), J=1, I)
   4 WRITE( IGFL) ( CM( J), J=1, I)
     REWIND 13
     GOTO 12
   5 REWIND 13
     REWIND 14
     IF( ICASE.EQ.5) GOTO 8
     IOUT= NPBLK* NEQ*2
     DO 6  I=1, NBLOKS
     CALL BLCKIN( CM,13,1, IOUT,1,201)
   6 CALL BLCKOT( CM, IGFL,1, IOUT,1,202)
     DO 7  I=1, NBLOKS
     CALL BLCKIN( CM,14,1, IOUT,1,203)
   7 CALL BLCKOT( CM, IGFL,1, IOUT,1,204)
     GOTO 12
   8 IOUT= NPSYM* NPEQ*2
     DO 11  IOP=1, NOP
     DO 9  I=1, NBLSYM
     CALL BLCKIN( CM,13,1, IOUT,1,205)
   9 CALL BLCKOT( CM, IGFL,1, IOUT,1,206)
     DO 10  I=1, NBLSYM
     CALL BLCKIN( CM,14,1, IOUT,1,207)
  10 CALL BLCKOT( CM, IGFL,1, IOUT,1,208)
  11 CONTINUE
     REWIND 13
     REWIND 14
  12 REWIND IGFL
     WRITE( 6,13)  IGFL, IMAT
C
     RETURN
  13 FORMAT(///,' ****NUMERICAL GREEN S FUNCTION FILE ON TAPE',I3,
    &'****',/,5X,'MATRIX STORAGE -',I7,' COMPLEX NUMBERS',///)
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE GH( ZK, HR, HI)
C ***
C     INTEGRAND FOR H FIELD OF A WIRE
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMMON  /TMH/ ZPK, RHKS
     RS= ZK- ZPK
     RS= RHKS+ RS* RS
     R= SQRT( RS)
     CKR= COS( R)
     SKR= SIN( R)
     RR2=1./ RS
     RR3= RR2/ R
     HR= SKR* RR2+ CKR* RR3
     HI= CKR* RR2- SKR* RR3
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE GWAVE( ERV, EZV, ERH, EZH, EPH)
C ***
C
C     GWAVE COMPUTES THE ELECTRIC FIELD, INCLUDING GROUND WAVE, OF A
C     CURRENT ELEMENT OVER A GROUND PLANE USING FORMULAS OF K.A. NORTON
C     (PROC. IRE, SEPT., 1937, PP.1203,1236.)
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  FJ, TPJ, U2, U, RK1, RK2, T1, T2, T3, T4, P1, RV, OMR
    &, W, F, Q1, RH, V, G, XR1, XR2, X1, X2, X3, X4, X5, X6, X7, EZV,
    &ERV, EZH, ERH, EPH, XX1, XX2, ECON, FBAR
     COMMON  /GWAV/ U, U2, XX1, XX2, R1, R2, ZMH, ZPH
     DIMENSION  FJX(2), TPJX(2), ECONX(2)
     EQUIVALENCE(FJ,FJX),(TPJ,TPJX),(ECON,ECONX)
     DATA   PI/3.141592654D+0/, FJX/0.,1./, TPJX/0.,6.283185308D+0/
     DATA   ECONX/0.,-188.367/
     SPPP= ZMH/ R1
     SPPP2= SPPP* SPPP
     CPPP2=1.- SPPP2
     IF( CPPP2.LT.1.D-20) CPPP2=1.D-20
     CPPP= SQRT( CPPP2)
     SPP= ZPH/ R2
     SPP2= SPP* SPP
     CPP2=1.- SPP2
     IF( CPP2.LT.1.D-20) CPP2=1.D-20
     CPP= SQRT( CPP2)
     RK1=- TPJ* R1
     RK2=- TPJ* R2
     T1=1.- U2* CPP2
     T2= SQRT( T1)
     T3=(1.-1./ RK1)/ RK1
     T4=(1.-1./ RK2)/ RK2
     P1= RK2* U2* T1/(2.* CPP2)
     RV=( SPP- U* T2)/( SPP+ U* T2)
     OMR=1.- RV
     W=1./ OMR
     W=(4.,0.)* P1* W* W
     F= FBAR( W)
     Q1= RK2* T1/(2.* U2* CPP2)
     RH=( T2- U* SPP)/( T2+ U* SPP)
     V=1./(1.+ RH)
     V=(4.,0.)* Q1* V* V
     G= FBAR( V)
     XR1= XX1/ R1
     XR2= XX2/ R2
     X1= CPPP2* XR1
     X2= RV* CPP2* XR2
     X3= OMR* CPP2* F* XR2
     X4= U* T2* SPP*2.* XR2/ RK2
     X5= XR1* T3*(1.-3.* SPPP2)
     X6= XR2* T4*(1.-3.* SPP2)
     EZV=( X1+ X2+ X3- X4- X5- X6)* ECON
     X1= SPPP* CPPP* XR1
     X2= RV* SPP* CPP* XR2
     X3= CPP* OMR* U* T2* F* XR2
     X4= SPP* CPP* OMR* XR2/ RK2
     X5=3.* SPPP* CPPP* T3* XR1
     X6= CPP* U* T2* OMR* XR2/ RK2*.5
     X7=3.* SPP* CPP* T4* XR2
     ERV=-( X1+ X2- X3+ X4- X5+ X6- X7)* ECON
     EZH=-( X1- X2+ X3- X4- X5- X6+ X7)* ECON
     X1= SPPP2* XR1
     X2= RV* SPP2* XR2
     X4= U2* T1* OMR* F* XR2
     X5= T3*(1.-3.* CPPP2)* XR1
     X6= T4*(1.-3.* CPP2)*(1.- U2*(1.+ RV)- U2* OMR* F)* XR2
     X7= U2* CPP2* OMR*(1.-1./ RK2)*( F*( U2* T1- SPP2-1./ RK2)+1./
    &RK2)* XR2
     ERH=( X1- X2- X4- X5+ X6+ X7)* ECON
     X1= XR1
     X2= RH* XR2
     X3=( RH+1.)* G* XR2
     X4= T3* XR1
     X5= T4*(1.- U2*(1.+ RV)- U2* OMR* F)* XR2
     X6=.5* U2* OMR*( F*( U2* T1- SPP2-1./ RK2)+1./ RK2)* XR2/ RK2
     EPH=-( X1- X2+ X3- X4+ X5+ X6)* ECON
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE GX( ZZ, RH, XK, GZ, GZP)
C ***
C     SEGMENT END CONTRIBUTIONS FOR THIN WIRE APPROX.
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  GZ, GZP
     R2= ZZ* ZZ+ RH* RH
     R= SQRT( R2)
     RKZ= XK* R
     GZ= CMPLX( COS( RKZ),- SIN( RKZ))/ R
     GZP=- CMPLX(1.0, RKZ)* GZ/ R2
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE GXX( ZZ, RH, A, A2, XK, IRA, G1, G1P, G2, G2P, G3, GZP
    &)
C ***
C     SEGMENT END CONTRIBUTIONS FOR EXT. THIN WIRE APPROX.
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  GZ, C1, C2, C3, G1, G1P, G2, G2P, G3, GZP
     R2= ZZ* ZZ+ RH* RH
     R= SQRT( R2)
     R4= R2* R2
     RK= XK* R
     RK2= RK* RK
     RH2= RH* RH
     T1=.25* A2* RH2/ R4
     T2=.5* A2/ R2
     C1= CMPLX(1.0, RK)
     C2=3.* C1- RK2
     C3= CMPLX(6.0, RK)* RK2-15.* C1
     GZ= CMPLX( COS( RK),- SIN( RK))/ R
     G2= GZ*(1.+ T1* C2)
     G1= G2- T2* C1* GZ
     GZ= GZ/ R2
     G2P= GZ*( T1* C3- C1)
     GZP= T2* C2* GZ
     G3= G2P+ GZP
     G1P= G3* ZZ
     IF( IRA.EQ.1) GOTO 2
     G3=( G3+ GZP)* RH
     GZP=- ZZ* C1* GZ
     IF( RH.GT.1.D-10) GOTO 1
     G2=0.
     G2P=0.
     RETURN
   1 G2= G2/ RH
     G2P= G2P* ZZ/ RH
     RETURN
   2 T2=.5* A
     G2=- T2* C1* GZ
     G2P= T2* GZ* C2/ R2
     G3= RH2* G2P- A* GZ* C1
     G2P= G2P* ZZ
     GZP=- ZZ* C1* GZ
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE HELIX( S, HL, A1, B1, A2, B2, RAD, NS, ITG)
C ***
C     SUBROUTINE HELIX GENERATES SEGMENT GEOMETRY DATA FOR A HELIX OF NS
C     SEGMENTS
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     DIMENSION  X2(1), Y2(1), Z2(1)
     EQUIVALENCE(X2(1),SI(1)),(Y2(1),ALP(1)),(Z2(1),BET(1))
     DATA   PI/3.1415926D+0/
     IST= N+1
     N= N+ NS
     NP= N
     MP= M
     IPSYM=0
     IF( NS.LT.1) RETURN
     TURNS= ABS( HL/ S)
     ZINC= ABS( HL/ NS)
     Z( IST)=0.
     DO 25  I= IST, N
     BI( I)= RAD
     ITAG( I)= ITG
     IF( I.NE. IST) Z( I)= Z( I-1)+ ZINC
     Z2( I)= Z( I)+ ZINC
     IF( A2.NE. A1) GOTO 10
     IF( B1.EQ.0) B1= A1
     X( I)= A1* COS(2.* PI* Z( I)/ S)
     Y( I)= B1* SIN(2.* PI* Z( I)/ S)
     X2( I)= A1* COS(2.* PI* Z2( I)/ S)
     Y2( I)= B1* SIN(2.* PI* Z2( I)/ S)
     GOTO 20
  10 IF( B2.EQ.0) B2= A2
     X( I)=( A1+( A2- A1)* Z( I)/ ABS( HL))* COS(2.* PI* Z( I)/ S)
     Y( I)=( B1+( B2- B1)* Z( I)/ ABS( HL))* SIN(2.* PI* Z( I)/ S)
     X2( I)=( A1+( A2- A1)* Z2( I)/ ABS( HL))* COS(2.* PI* Z2( I)/ S)
     Y2( I)=( B1+( B2- B1)* Z2( I)/ ABS( HL))* SIN(2.* PI* Z2( I)/ S)
  20 IF( HL.GT.0) GOTO 25
     COPY= X( I)
     X( I)= Y( I)
     Y( I)= COPY
     COPY= X2( I)
     X2( I)= Y2( I)
     Y2( I)= COPY
  25 CONTINUE
     IF( A2.EQ. A1) GOTO 21
     SANGLE= ATAN( A2/( ABS( HL)+( ABS( HL)* A1)/( A2- A1)))
     WRITE( 6,104)  SANGLE
 104 FORMAT(5X,'THE CONE ANGLE OF THE SPIRAL IS',F10.4)
     RETURN
  21 IF( A1.NE. B1) GOTO 30
     HDIA=2.* A1
     TURN= HDIA* PI
     PITCH= ATAN( S/( PI* HDIA))
     TURN= TURN/ COS( PITCH)
     PITCH=180.* PITCH/ PI
     GOTO 40
  30 IF( A1.LT. B1) GOTO 34
     HMAJ=2.* A1
     HMIN=2.* B1
     GOTO 35
  34 HMAJ=2.* B1
     HMIN=2.* A1
  35 HDIA= SQRT(( HMAJ**2+ HMIN**2)/2* HMAJ)
     TURN=2.* PI* HDIA
     PITCH=(180./ PI)* ATAN( S/( PI* HDIA))
  40 WRITE( 6,105)  PITCH, TURN
 105 FORMAT(5X,'THE PITCH ANGLE IS',F10.4/5X,
    &'THE LENGTH OF WIRE/TURN ''IS',F10.4)
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE HFK( EL1, EL2, RHK, ZPKX, SGR, SGI)
C ***
C     HFK COMPUTES THE H FIELD OF A UNIFORM CURRENT FILAMENT BY
C     NUMERICAL INTEGRATION
     IMPLICIT REAL (A-H,O-Z)
     COMMON  /TMH/ ZPK, RHKS
     DATA   NX, NM, NTS, RX/1,65536,4,1.D-4/
     ZPK= ZPKX
     RHKS= RHK* RHK
     Z= EL1
     ZE= EL2
     S= ZE- Z
     EP= S/(10.* NM)
     ZEND= ZE- EP
     SGR=0.0
     SGI=0.0
     NS= NX
     NT=0
     CALL GH( Z, G1R, G1I)
   1 DZ= S/ NS
     ZP= Z+ DZ
     IF( ZP- ZE) 3,3,2
   2 DZ= ZE- Z
     IF( ABS( DZ)- EP) 17,17,3
   3 DZOT= DZ*.5
     ZP= Z+ DZOT
     CALL GH( ZP, G3R, G3I)
     ZP= Z+ DZ
     CALL GH( ZP, G5R, G5I)
   4 T00R=( G1R+ G5R)* DZOT
     T00I=( G1I+ G5I)* DZOT
     T01R=( T00R+ DZ* G3R)*0.5
     T01I=( T00I+ DZ* G3I)*0.5
     T10R=(4.0* T01R- T00R)/3.0
     T10I=(4.0* T01I- T00I)/3.0
     CALL TEST( T01R, T10R, TE1R, T01I, T10I, TE1I,0.)
     IF( TE1I- RX) 5,5,6
   5 IF( TE1R- RX) 8,8,6
   6 ZP= Z+ DZ*0.25
     CALL GH( ZP, G2R, G2I)
     ZP= Z+ DZ*0.75
     CALL GH( ZP, G4R, G4I)
     T02R=( T01R+ DZOT*( G2R+ G4R))*0.5
     T02I=( T01I+ DZOT*( G2I+ G4I))*0.5
     T11R=(4.0* T02R- T01R)/3.0
     T11I=(4.0* T02I- T01I)/3.0
     T20R=(16.0* T11R- T10R)/15.0
     T20I=(16.0* T11I- T10I)/15.0
     CALL TEST( T11R, T20R, TE2R, T11I, T20I, TE2I,0.)
     IF( TE2I- RX) 7,7,14
   7 IF( TE2R- RX) 9,9,14
   8 SGR= SGR+ T10R
     SGI= SGI+ T10I
     NT= NT+2
     GOTO 10
   9 SGR= SGR+ T20R
     SGI= SGI+ T20I
     NT= NT+1
  10 Z= Z+ DZ
     IF( Z- ZEND) 11,17,17
  11 G1R= G5R
     G1I= G5I
     IF( NT- NTS) 1,12,12
  12 IF( NS- NX) 1,1,13
  13 NS= NS/2
     NT=1
     GOTO 1
  14 NT=0
     IF( NS- NM) 16,15,15
  15 WRITE( 6,18)  Z
     GOTO 9
  16 NS= NS*2
     DZ= S/ NS
     DZOT= DZ*0.5
     G5R= G3R
     G5I= G3I
     G3R= G2R
     G3I= G2I
     GOTO 4
  17 CONTINUE
     SGR= SGR* RHK*.5
     SGI= SGI* RHK*.5
C
     RETURN
  18 FORMAT(' STEP SIZE LIMITED AT Z=',F10.5)
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE HINTG( XI, YI, ZI)
C ***
C     HINTG COMPUTES THE H FIELD OF A PATCH CURRENT
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  EXK, EYK, EZK, EXS, EYS, EZS, EXC, EYC, EZC, ZRATI,
    &ZRATI2, GAM, F1X, F1Y, F1Z, F2X, F2Y, F2Z, RRV, RRH, T1, FRATI
     COMMON  /DATAJ/ S, B, XJ, YJ, ZJ, CABJ, SABJ, SALPJ, EXK, EYK,
    &EZK, EXS, EYS, EZS, EXC, EYC, EZC, RKH, IEXK, IND1, INDD1, IND2,
    &INDD2, IPGND
     COMMON  /GND/ ZRATI, ZRATI2, FRATI, CL, CH, SCRWL, SCRWR, NRADL,
    &KSYMP, IFAR, IPERF, T1, T2
     EQUIVALENCE(T1XJ,CABJ),(T1YJ,SABJ),(T1ZJ,SALPJ),(T2XJ,B),(T2YJ,
    &IND1),(T2ZJ,IND2)
     DATA   FPI/12.56637062D+0/, TP/6.283185308D+0/
     RX= XI- XJ
     RY= YI- YJ
     RFL=-1.
     EXK=(0.,0.)
     EYK=(0.,0.)
     EZK=(0.,0.)
     EXS=(0.,0.)
     EYS=(0.,0.)
     EZS=(0.,0.)
     DO 5  IP=1, KSYMP
     RFL=- RFL
     RZ= ZI- ZJ* RFL
     RSQ= RX* RX+ RY* RY+ RZ* RZ
     IF( RSQ.LT.1.D-20) GOTO 5
     R= SQRT( RSQ)
     RK= TP* R
     CR= COS( RK)
     SR= SIN( RK)
     GAM=-( CMPLX( CR,- SR)+ RK* CMPLX( SR, CR))/( FPI* RSQ* R)* S
     EXC= GAM* RX
     EYC= GAM* RY
     EZC= GAM* RZ
     T1ZR= T1ZJ* RFL
     T2ZR= T2ZJ* RFL
     F1X= EYC* T1ZR- EZC* T1YJ
     F1Y= EZC* T1XJ- EXC* T1ZR
     F1Z= EXC* T1YJ- EYC* T1XJ
     F2X= EYC* T2ZR- EZC* T2YJ
     F2Y= EZC* T2XJ- EXC* T2ZR
     F2Z= EXC* T2YJ- EYC* T2XJ
     IF( IP.EQ.1) GOTO 4
     IF( IPERF.NE.1) GOTO 1
     F1X=- F1X
     F1Y=- F1Y
     F1Z=- F1Z
     F2X=- F2X
     F2Y=- F2Y
     F2Z=- F2Z
     GOTO 4
   1 XYMAG= SQRT( RX* RX+ RY* RY)
     IF( XYMAG.GT.1.D-6) GOTO 2
     PX=0.
     PY=0.
     CTH=1.
     RRV=(1.,0.)
     GOTO 3
   2 PX=- RY/ XYMAG
     PY= RX/ XYMAG
     CTH= RZ/ R
     RRV= SQRT(1.- ZRATI* ZRATI*(1.- CTH* CTH))
   3 RRH= ZRATI* CTH
     RRH=( RRH- RRV)/( RRH+ RRV)
     RRV= ZRATI* RRV
     RRV=-( CTH- RRV)/( CTH+ RRV)
     GAM=( F1X* PX+ F1Y* PY)*( RRV- RRH)
     F1X= F1X* RRH+ GAM* PX
     F1Y= F1Y* RRH+ GAM* PY
     F1Z= F1Z* RRH
     GAM=( F2X* PX+ F2Y* PY)*( RRV- RRH)
     F2X= F2X* RRH+ GAM* PX
     F2Y= F2Y* RRH+ GAM* PY
     F2Z= F2Z* RRH
   4 EXK= EXK+ F1X
     EYK= EYK+ F1Y
     EZK= EZK+ F1Z
     EXS= EXS+ F2X
     EYS= EYS+ F2Y
     EZS= EZS+ F2Z
   5 CONTINUE
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE HSFLD( XI, YI, ZI, AI)
C ***
C     HSFLD COMPUTES THE H FIELD FOR CONSTANT, SINE, AND COSINE CURRENT
C     ON A SEGMENT INCLUDING GROUND EFFECTS.
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  EXK, EYK, EZK, EXS, EYS, EZS, EXC, EYC, EZC, ZRATI,
    &ZRATI2, T1, HPK, HPS, HPC, QX, QY, QZ, RRV, RRH, ZRATX, FRATI
     COMMON  /DATAJ/ S, B, XJ, YJ, ZJ, CABJ, SABJ, SALPJ, EXK, EYK,
    &EZK, EXS, EYS, EZS, EXC, EYC, EZC, RKH, IEXK, IND1, INDD1, IND2,
    &INDD2, IPGND
     COMMON  /GND/ ZRATI, ZRATI2, FRATI, CL, CH, SCRWL, SCRWR, NRADL,
    &KSYMP, IFAR, IPERF, T1, T2
     DATA   ETA/376.73/
     XIJ= XI- XJ
     YIJ= YI- YJ
     RFL=-1.
     DO 7  IP=1, KSYMP
     RFL=- RFL
     SALPR= SALPJ* RFL
     ZIJ= ZI- RFL* ZJ
     ZP= XIJ* CABJ+ YIJ* SABJ+ ZIJ* SALPR
     RHOX= XIJ- CABJ* ZP
     RHOY= YIJ- SABJ* ZP
     RHOZ= ZIJ- SALPR* ZP
     RH= SQRT( RHOX* RHOX+ RHOY* RHOY+ RHOZ* RHOZ+ AI* AI)
     IF( RH.GT.1.D-10) GOTO 1
     EXK=0.
     EYK=0.
     EZK=0.
     EXS=0.
     EYS=0.
     EZS=0.
     EXC=0.
     EYC=0.
     EZC=0.
     GOTO 7
   1 RHOX= RHOX/ RH
     RHOY= RHOY/ RH
     RHOZ= RHOZ/ RH
     PHX= SABJ* RHOZ- SALPR* RHOY
     PHY= SALPR* RHOX- CABJ* RHOZ
     PHZ= CABJ* RHOY- SABJ* RHOX
     CALL HSFLX( S, RH, ZP, HPK, HPS, HPC)
     IF( IP.NE.2) GOTO 6
     IF( IPERF.EQ.1) GOTO 5
     ZRATX= ZRATI
     RMAG= SQRT( ZP* ZP+ RH* RH)
C
C     SET PARAMETERS FOR RADIAL WIRE GROUND SCREEN.
C
     XYMAG= SQRT( XIJ* XIJ+ YIJ* YIJ)
     IF( NRADL.EQ.0) GOTO 2
     XSPEC=( XI* ZJ+ ZI* XJ)/( ZI+ ZJ)
     YSPEC=( YI* ZJ+ ZI* YJ)/( ZI+ ZJ)
     RHOSPC= SQRT( XSPEC* XSPEC+ YSPEC* YSPEC+ T2* T2)
     IF( RHOSPC.GT. SCRWL) GOTO 2
     RRV= T1* RHOSPC* LOG( RHOSPC/ T2)
     ZRATX=( RRV* ZRATI)/( ETA* ZRATI+ RRV)
C
C     CALCULATION OF REFLECTION COEFFICIENTS WHEN GROUND IS SPECIFIED.
C
   2 IF( XYMAG.GT.1.D-6) GOTO 3
     PX=0.
     PY=0.
     CTH=1.
     RRV=(1.,0.)
     GOTO 4
   3 PX=- YIJ/ XYMAG
     PY= XIJ/ XYMAG
     CTH= ZIJ/ RMAG
     RRV= SQRT(1.- ZRATX* ZRATX*(1.- CTH* CTH))
   4 RRH= ZRATX* CTH
     RRH=-( RRH- RRV)/( RRH+ RRV)
     RRV= ZRATX* RRV
     RRV=( CTH- RRV)/( CTH+ RRV)
     QY=( PHX* PX+ PHY* PY)*( RRV- RRH)
     QX= QY* PX+ PHX* RRH
     QY= QY* PY+ PHY* RRH
     QZ= PHZ* RRH
     EXK= EXK- HPK* QX
     EYK= EYK- HPK* QY
     EZK= EZK- HPK* QZ
     EXS= EXS- HPS* QX
     EYS= EYS- HPS* QY
     EZS= EZS- HPS* QZ
     EXC= EXC- HPC* QX
     EYC= EYC- HPC* QY
     EZC= EZC- HPC* QZ
     GOTO 7
   5 EXK= EXK- HPK* PHX
     EYK= EYK- HPK* PHY
     EZK= EZK- HPK* PHZ
     EXS= EXS- HPS* PHX
     EYS= EYS- HPS* PHY
     EZS= EZS- HPS* PHZ
     EXC= EXC- HPC* PHX
     EYC= EYC- HPC* PHY
     EZC= EZC- HPC* PHZ
     GOTO 7
   6 EXK= HPK* PHX
     EYK= HPK* PHY
     EZK= HPK* PHZ
     EXS= HPS* PHX
     EYS= HPS* PHY
     EZS= HPS* PHZ
     EXC= HPC* PHX
     EYC= HPC* PHY
     EZC= HPC* PHZ
   7 CONTINUE
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE HSFLX( S, RH, ZPX, HPK, HPS, HPC)
C ***
C     CALCULATES H FIELD OF SINE COSINE, AND CONSTANT CURRENT OF SEGMENT
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  FJ, FJK, EKR1, EKR2, T1, T2, CONS, HPS, HPC, HPK
     DIMENSION  FJX(2), FJKX(2)
     EQUIVALENCE(FJ,FJX),(FJK,FJKX)
     DATA   TP/6.283185308D+0/, FJX/0.,1./, FJKX/0.,-6.283185308D+0/
     DATA   PI8/25.13274123D+0/
     IF( RH.LT.1.D-10) GOTO 6
     IF( ZPX.LT.0.) GOTO 1
     ZP= ZPX
     HSS=1.
     GOTO 2
   1 ZP=- ZPX
     HSS=-1.
   2 DH=.5* S
     Z1= ZP+ DH
     Z2= ZP- DH
     IF( Z2.LT.1.D-7) GOTO 3
     RHZ= RH/ Z2
     GOTO 4
   3 RHZ=1.
   4 DK= TP* DH
     CDK= COS( DK)
     SDK= SIN( DK)
     CALL HFK(- DK, DK, RH* TP, ZP* TP, HKR, HKI)
     HPK= CMPLX( HKR, HKI)
     IF( RHZ.LT.1.D-3) GOTO 5
     RH2= RH* RH
     R1= SQRT( RH2+ Z1* Z1)
     R2= SQRT( RH2+ Z2* Z2)
     EKR1= EXP( FJK* R1)
     EKR2= EXP( FJK* R2)
     T1= Z1* EKR1/ R1
     T2= Z2* EKR2/ R2
     HPS=( CDK*( EKR2- EKR1)- FJ* SDK*( T2+ T1))* HSS
     HPC=- SDK*( EKR2+ EKR1)- FJ* CDK*( T2- T1)
     CONS=- FJ/(2.* TP* RH)
     HPS= CONS* HPS
     HPC= CONS* HPC
     RETURN
   5 EKR1= CMPLX( CDK, SDK)/( Z2* Z2)
     EKR2= CMPLX( CDK,- SDK)/( Z1* Z1)
     T1= TP*(1./ Z1-1./ Z2)
     T2= EXP( FJK* ZP)* RH/ PI8
     HPS= T2*( T1+( EKR1+ EKR2)* SDK)* HSS
     HPC= T2*(- FJ* T1+( EKR1- EKR2)* CDK)
     RETURN
   6 HPS=(0.,0.)
     HPC=(0.,0.)
     HPK=(0.,0.)
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE INTRP( X, Y, F1, F2, F3, F4)
C ***
C
C     INTRP USES BIVARIATE CUBIC INTERPOLATION TO OBTAIN THE VALUES OF
C     4 FUNCTIONS AT THE POINT (X,Y).
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  F1, F2, F3, F4, A, B, C, D, FX1, FX2, FX3, FX4, P1,
    &P2, P3, P4, A11, A12, A13, A14, A21, A22, A23, A24, A31, A32, A33
    &, A34, A41, A42, A43, A44, B11, B12, B13, B14, B21, B22, B23, B24
    &, B31, B32, B33, B34, B41, B42, B43, B44, C11, C12, C13, C14, C21
    &, C22, C23, C24, C31, C32, C33, C34, C41, C42, C43, C44, D11, D12
    &, D13, D14, D21, D22, D23, D24, D31, D32, D33, D34, D41, D42, D43
    &, D44
     COMPLEX  AR1, AR2, AR3, ARL1, ARL2, ARL3, EPSCF
     COMMON  /GGRID/ AR1(11,10,4), AR2(17,5,4), AR3(9,8,4), EPSCF, DXA
    &(3), DYA(3), XSA(3), YSA(3), NXA(3), NYA(3)
     DIMENSION  NDA(3), NDPA(3)
     DIMENSION  A(4,4), B(4,4), C(4,4), D(4,4), ARL1(1), ARL2(1), ARL3
    &(1)
     EQUIVALENCE(A(1,1),A11),(A(1,2),A12),(A(1,3),A13),(A(1,4),A14)
     EQUIVALENCE(A(2,1),A21),(A(2,2),A22),(A(2,3),A23),(A(2,4),A24)
     EQUIVALENCE(A(3,1),A31),(A(3,2),A32),(A(3,3),A33),(A(3,4),A34)
     EQUIVALENCE(A(4,1),A41),(A(4,2),A42),(A(4,3),A43),(A(4,4),A44)
     EQUIVALENCE(B(1,1),B11),(B(1,2),B12),(B(1,3),B13),(B(1,4),B14)
     EQUIVALENCE(B(2,1),B21),(B(2,2),B22),(B(2,3),B23),(B(2,4),B24)
     EQUIVALENCE(B(3,1),B31),(B(3,2),B32),(B(3,3),B33),(B(3,4),B34)
     EQUIVALENCE(B(4,1),B41),(B(4,2),B42),(B(4,3),B43),(B(4,4),B44)
     EQUIVALENCE(C(1,1),C11),(C(1,2),C12),(C(1,3),C13),(C(1,4),C14)
     EQUIVALENCE(C(2,1),C21),(C(2,2),C22),(C(2,3),C23),(C(2,4),C24)
     EQUIVALENCE(C(3,1),C31),(C(3,2),C32),(C(3,3),C33),(C(3,4),C34)
     EQUIVALENCE(C(4,1),C41),(C(4,2),C42),(C(4,3),C43),(C(4,4),C44)
     EQUIVALENCE(D(1,1),D11),(D(1,2),D12),(D(1,3),D13),(D(1,4),D14)
     EQUIVALENCE(D(2,1),D21),(D(2,2),D22),(D(2,3),D23),(D(2,4),D24)
     EQUIVALENCE(D(3,1),D31),(D(3,2),D32),(D(3,3),D33),(D(3,4),D34)
     EQUIVALENCE(D(4,1),D41),(D(4,2),D42),(D(4,3),D43),(D(4,4),D44)
     EQUIVALENCE(ARL1,AR1),(ARL2,AR2),(ARL3,AR3),(XS2,XSA(2)),(YS3,YSA
    &(3))
     DATA   IXS, IYS, IGRS/-10,-10,-10/, DX, DY, XS, YS/1.,1.,0.,0./
     DATA   NDA/11,17,9/, NDPA/110,85,72/, IXEG, IYEG/0,0/
     IF( X.LT. XS.OR. Y.LT. YS) GOTO 1
     IX= INT(( X- XS)/ DX)+1
C
C     IF POINT LIES IN SAME 4 BY 4 POINT REGION AS PREVIOUS POINT, OLD
C     VALUES ARE REUSED
C
     IY= INT(( Y- YS)/ DY)+1
     IF( IX.LT. IXEG.OR. IY.LT. IYEG) GOTO 1
C
C     DETERMINE CORRECT GRID AND GRID REGION
C
     IF( IABS( IX- IXS).LT.2.AND. IABS( IY- IYS).LT.2) GOTO 12
   1 IF( X.GT. XS2) GOTO 2
     IGR=1
     GOTO 3
   2 IGR=2
     IF( Y.GT. YS3) IGR=3
   3 IF( IGR.EQ. IGRS) GOTO 4
     IGRS= IGR
     DX= DXA( IGRS)
     DY= DYA( IGRS)
     XS= XSA( IGRS)
     YS= YSA( IGRS)
     NXM2= NXA( IGRS)-2
     NYM2= NYA( IGRS)-2
     NXMS=(( NXM2+1)/3)*3+1
     NYMS=(( NYM2+1)/3)*3+1
     ND= NDA( IGRS)
     NDP= NDPA( IGRS)
     IX= INT(( X- XS)/ DX)+1
     IY= INT(( Y- YS)/ DY)+1
   4 IXS=(( IX-1)/3)*3+2
     IF( IXS.LT.2) IXS=2
     IXEG=-10000
     IF( IXS.LE. NXM2) GOTO 5
     IXS= NXM2
     IXEG= NXMS
   5 IYS=(( IY-1)/3)*3+2
     IF( IYS.LT.2) IYS=2
     IYEG=-10000
     IF( IYS.LE. NYM2) GOTO 6
     IYS= NYM2
C
C     COMPUTE COEFFICIENTS OF 4 CUBIC POLYNOMIALS IN X FOR THE 4 GRID
C     VALUES OF Y FOR EACH OF THE 4 FUNCTIONS
C
     IYEG= NYMS
   6 IADZ= IXS+( IYS-3)* ND- NDP
     DO 11  K=1,4
     IADZ= IADZ+ NDP
     IADD= IADZ
     DO 11  I=1,4
     IADD= IADD+ ND
C     P1=AR1(IXS-1,IYS-2+I,K)
     GOTO (7,8,9), IGRS
   7 P1= ARL1( IADD-1)
     P2= ARL1( IADD)
     P3= ARL1( IADD+1)
     P4= ARL1( IADD+2)
     GOTO 10
   8 P1= ARL2( IADD-1)
     P2= ARL2( IADD)
     P3= ARL2( IADD+1)
     P4= ARL2( IADD+2)
     GOTO 10
   9 P1= ARL3( IADD-1)
     P2= ARL3( IADD)
     P3= ARL3( IADD+1)
     P4= ARL3( IADD+2)
  10 A( I, K)=( P4- P1+3.*( P2- P3))*.1666666667D+0
     B( I, K)=( P1-2.* P2+ P3)*.5
     C( I, K)= P3-(2.* P1+3.* P2+ P4)*.1666666667D+0
  11 D( I, K)= P2
     XZ=( IXS-1)* DX+ XS
C
C     EVALUATE POLYMOMIALS IN X AND THEN USE CUBIC INTERPOLATION IN Y
C     FOR EACH OF THE 4 FUNCTIONS.
C
     YZ=( IYS-1)* DY+ YS
  12 XX=( X- XZ)/ DX
     YY=( Y- YZ)/ DY
     FX1=(( A11* XX+ B11)* XX+ C11)* XX+ D11
     FX2=(( A21* XX+ B21)* XX+ C21)* XX+ D21
     FX3=(( A31* XX+ B31)* XX+ C31)* XX+ D31
     FX4=(( A41* XX+ B41)* XX+ C41)* XX+ D41
     P1= FX4- FX1+3.*( FX2- FX3)
     P2=3.*( FX1-2.* FX2+ FX3)
     P3=6.* FX3-2.* FX1-3.* FX2- FX4
     F1=(( P1* YY+ P2)* YY+ P3)* YY*.1666666667D+0+ FX2
     FX1=(( A12* XX+ B12)* XX+ C12)* XX+ D12
     FX2=(( A22* XX+ B22)* XX+ C22)* XX+ D22
     FX3=(( A32* XX+ B32)* XX+ C32)* XX+ D32
     FX4=(( A42* XX+ B42)* XX+ C42)* XX+ D42
     P1= FX4- FX1+3.*( FX2- FX3)
     P2=3.*( FX1-2.* FX2+ FX3)
     P3=6.* FX3-2.* FX1-3.* FX2- FX4
     F2=(( P1* YY+ P2)* YY+ P3)* YY*.1666666667D+0+ FX2
     FX1=(( A13* XX+ B13)* XX+ C13)* XX+ D13
     FX2=(( A23* XX+ B23)* XX+ C23)* XX+ D23
     FX3=(( A33* XX+ B33)* XX+ C33)* XX+ D33
     FX4=(( A43* XX+ B43)* XX+ C43)* XX+ D43
     P1= FX4- FX1+3.*( FX2- FX3)
     P2=3.*( FX1-2.* FX2+ FX3)
     P3=6.* FX3-2.* FX1-3.* FX2- FX4
     F3=(( P1* YY+ P2)* YY+ P3)* YY*.1666666667D+0+ FX2
     FX1=(( A14* XX+ B14)* XX+ C14)* XX+ D14
     FX2=(( A24* XX+ B24)* XX+ C24)* XX+ D24
     FX3=(( A34* XX+ B34)* XX+ C34)* XX+ D34
     FX4=(( A44* XX+ B44)* XX+ C44)* XX+ D44
     P1= FX4- FX1+3.*( FX2- FX3)
     P2=3.*( FX1-2.* FX2+ FX3)
     P3=6.* FX3-2.* FX1-3.* FX2- FX4
     F4=(( P1* YY+ P2)* YY+ P3)* YY*.1666666667D+0+ FX2
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE INTX( EL1, EL2, B, IJ, SGR, SGI)
C ***
C
C     INTX PERFORMS NUMERICAL INTEGRATION OF EXP(JKR)/R BY THE METHOD OF
C     VARIABLE INTERVAL WIDTH ROMBERG INTEGRATION.  THE INTEGRAND VALUE
C     IS SUPPLIED BY SUBROUTINE GF.
C
     IMPLICIT REAL (A-H,O-Z)
     DATA   NX, NM, NTS, RX/1,65536,4,1.D-4/
     Z= EL1
     ZE= EL2
     IF( IJ.EQ.0) ZE=0.
     S= ZE- Z
     FNM= NM
     EP= S/(10.* FNM)
     ZEND= ZE- EP
     SGR=0.
     SGI=0.
     NS= NX
     NT=0
     CALL GF( Z, G1R, G1I)
   1 FNS= NS
     DZ= S/ FNS
     ZP= Z+ DZ
     IF( ZP- ZE) 3,3,2
   2 DZ= ZE- Z
     IF( ABS( DZ)- EP) 17,17,3
   3 DZOT= DZ*.5
     ZP= Z+ DZOT
     CALL GF( ZP, G3R, G3I)
     ZP= Z+ DZ
     CALL GF( ZP, G5R, G5I)
   4 T00R=( G1R+ G5R)* DZOT
     T00I=( G1I+ G5I)* DZOT
     T01R=( T00R+ DZ* G3R)*0.5
     T01I=( T00I+ DZ* G3I)*0.5
     T10R=(4.0* T01R- T00R)/3.0
C
C     TEST CONVERGENCE OF 3 POINT ROMBERG RESULT.
C
     T10I=(4.0* T01I- T00I)/3.0
     CALL TEST( T01R, T10R, TE1R, T01I, T10I, TE1I,0.)
     IF( TE1I- RX) 5,5,6
   5 IF( TE1R- RX) 8,8,6
   6 ZP= Z+ DZ*0.25
     CALL GF( ZP, G2R, G2I)
     ZP= Z+ DZ*0.75
     CALL GF( ZP, G4R, G4I)
     T02R=( T01R+ DZOT*( G2R+ G4R))*0.5
     T02I=( T01I+ DZOT*( G2I+ G4I))*0.5
     T11R=(4.0* T02R- T01R)/3.0
     T11I=(4.0* T02I- T01I)/3.0
     T20R=(16.0* T11R- T10R)/15.0
C
C     TEST CONVERGENCE OF 5 POINT ROMBERG RESULT.
C
     T20I=(16.0* T11I- T10I)/15.0
     CALL TEST( T11R, T20R, TE2R, T11I, T20I, TE2I,0.)
     IF( TE2I- RX) 7,7,14
   7 IF( TE2R- RX) 9,9,14
   8 SGR= SGR+ T10R
     SGI= SGI+ T10I
     NT= NT+2
     GOTO 10
   9 SGR= SGR+ T20R
     SGI= SGI+ T20I
     NT= NT+1
  10 Z= Z+ DZ
     IF( Z- ZEND) 11,17,17
  11 G1R= G5R
     G1I= G5I
     IF( NT- NTS) 1,12,12
C
C     DOUBLE STEP SIZE
C
  12 IF( NS- NX) 1,1,13
  13 NS= NS/2
     NT=1
     GOTO 1
  14 NT=0
     IF( NS- NM) 16,15,15
  15 WRITE( 6,20)  Z
C
C     HALVE STEP SIZE
C
     GOTO 9
  16 NS= NS*2
     FNS= NS
     DZ= S/ FNS
     DZOT= DZ*0.5
     G5R= G3R
     G5I= G3I
     G3R= G2R
     G3I= G2I
     GOTO 4
  17 CONTINUE
C
C     ADD CONTRIBUTION OF NEAR SINGULARITY FOR DIAGONAL TERM
C
     IF( IJ) 19,18,19
  18 SGR=2.*( SGR+ LOG(( SQRT( B* B+ S* S)+ S)/ B))
     SGI=2.* SGI
  19 CONTINUE
C
     RETURN
  20 FORMAT(' STEP SIZE LIMITED AT Z=',F10.5)
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     FUNCTION ISEGNO( ITAGI, MX)
C ***
C
C     ISEGNO RETURNS THE SEGMENT NUMBER OF THE MTH SEGMENT HAVING THE
C     TAG NUMBER ITAGI.  IF ITAGI=0 SEGMENT NUMBER M IS RETURNED.
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     IF( MX.GT.0) GOTO 1
     WRITE( 6,6)
     STOP
   1 ICNT=0
     IF( ITAGI.NE.0) GOTO 2
     ISEGNO= MX
     RETURN
   2 IF( N.LT.1) GOTO 4
     DO 3  I=1, N
     IF( ITAG( I).NE. ITAGI) GOTO 3
     ICNT= ICNT+1
     IF( ICNT.EQ. MX) GOTO 5
   3 CONTINUE
   4 WRITE( 6,7)  ITAGI
     STOP
   5 ISEGNO= I
C
     RETURN
   6 FORMAT(4X,'CHECK DATA, PARAMETER SPECIFYING SEGMENT POSITION IN',
    &' A GROUP OF EQUAL TAGS MUST NOT BE ZERO')
   7 FORMAT(///,10X,'NO SEGMENT HAS AN ITAG OF ',I5)
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE LFACTR( A, NROW, IX1, IX2, IP)
C ***
C
C     LFACTR PERFORMS GAUSS-DOOLITTLE MANIPULATIONS ON THE TWO BLOCKS OF
C     THE TRANSPOSED MATRIX IN CORE STORAGE.  THE GAUSS-DOOLITTLE
C     ALGORITHM IS PRESENTED ON PAGES 411-416 OF A. RALSTON -- A FIRST
C     COURSE IN NUMERICAL ANALYSIS.  COMMENTS BELOW REFER TO COMMENTS IN
C     RALSTONS TEXT.
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  A, D, AJR
     INTEGER  R, R1, R2, PJ, PR
     LOGICAL  L1, L2, L3
     COMMON  /MATPAR/ ICASE, NBLOKS, NPBLK, NLAST, NBLSYM, NPSYM,
    &NLSYM, IMAT, ICASX, NBBX, NPBX, NLBX, NBBL, NPBL, NLBL
     COMMON  /SCRATM/ D( N2M)
     DIMENSION  A( NROW,1), IP( NROW)
C
C     INITIALIZE R1,R2,J1,J2
C
     IFLG=0
     L1= IX1.EQ.1.AND. IX2.EQ.2
     L2=( IX2-1).EQ. IX1
     L3= IX2.EQ. NBLSYM
     IF( L1) GOTO 1
     GOTO 2
   1 R1=1
     R2=2* NPSYM
     J1=1
     J2=-1
     GOTO 5
   2 R1= NPSYM+1
     R2=2* NPSYM
     J1=( IX1-1)* NPSYM+1
     IF( L2) GOTO 3
     GOTO 4
   3 J2= J1+ NPSYM-2
     GOTO 5
   4 J2= J1+ NPSYM-1
   5 IF( L3) R2= NPSYM+ NLSYM
C
C     STEP 1
C
     DO 16  R= R1, R2
     DO 6  K= J1, NROW
     D( K)= A( K, R)
C
C     STEPS 2 AND 3
C
   6 CONTINUE
     IF( L1.OR. L2) J2= J2+1
     IF( J1.GT. J2) GOTO 9
     IXJ=0
     DO 8  J= J1, J2
     IXJ= IXJ+1
     PJ= IP( J)
     AJR= D( PJ)
     A( J, R)= AJR
     D( PJ)= D( J)
     JP1= J+1
     DO 7  I= JP1, NROW
     D( I)= D( I)- A( I, IXJ)* AJR
   7 CONTINUE
   8 CONTINUE
C
C     STEP 4
C
   9 CONTINUE
     J2P1= J2+1
     IF( L1.OR. L2) GOTO 11
     IF( NROW.LT. J2P1) GOTO 16
     DO 10  I= J2P1, NROW
     A( I, R)= D( I)
  10 CONTINUE
     GOTO 16
  11 DMAX= REAL( D( J2P1)* CONJG( D( J2P1)))
     IP( J2P1)= J2P1
     J2P2= J2+2
     IF( J2P2.GT. NROW) GOTO 13
     DO 12  I= J2P2, NROW
     ELMAG= REAL( D( I)* CONJG( D( I)))
     IF( ELMAG.LT. DMAX) GOTO 12
     DMAX= ELMAG
     IP( J2P1)= I
  12 CONTINUE
  13 CONTINUE
     IF( DMAX.LT.1.D-10) IFLG=1
     PR= IP( J2P1)
     A( J2P1, R)= D( PR)
C
C     STEP 5
C
     D( PR)= D( J2P1)
     IF( J2P2.GT. NROW) GOTO 15
     AJR=1./ A( J2P1, R)
     DO 14  I= J2P2, NROW
     A( I, R)= D( I)* AJR
  14 CONTINUE
  15 CONTINUE
     IF( IFLG.EQ.0) GOTO 16
     WRITE( 6,17)  J2, DMAX
     IFLG=0
  16 CONTINUE
C
     RETURN
  17 FORMAT(' ','PIVOT(,I3,2H)=',1P,E16.8)
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE LOAD( LDTYP, LDTAG, LDTAGF, LDTAGT, ZLR, ZLI, ZLC)
C ***
C
C     LOAD CALCULATES THE IMPEDANCE OF SPECIFIED SEGMENTS FOR VARIOUS
C     TYPES OF LOADING
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  ZARRAY, ZT, TPCJ, ZINT
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /ZLOAD/ ZARRAY( NM), NLOAD, NLODF
     DIMENSION  LDTYP(1), LDTAG(1), LDTAGF(1), LDTAGT(1), ZLR(1), ZLI(
    &1), ZLC(1), TPCJX(2)
     EQUIVALENCE(TPCJ,TPCJX)
C
C     WRITE(6,HEADING)
C
     DATA   TPCJX/0.,1.883698955D+9/
C
C     INITIALIZE D ARRAY, USED FOR TEMPORARY STORAGE OF LOADING
C     INFORMATION.
C
     WRITE( 6,25)
     DO 1  I= N2, N
   1 ZARRAY( I)=(0.,0.)
C
C     CYCLE OVER LOADING CARDS
C
     IWARN=0
     ISTEP=0
   2 ISTEP= ISTEP+1
     IF( ISTEP.LE. NLOAD) GOTO 5
     IF( IWARN.EQ.1) WRITE( 6,26)
     IF( N1+2* M1.GT.0) GOTO 4
     NOP= N/ NP
     IF( NOP.EQ.1) GOTO 4
     DO 3  I=1, NP
     ZT= ZARRAY( I)
     L1= I
     DO 3  L2=2, NOP
     L1= L1+ NP
   3 ZARRAY( L1)= ZT
   4 RETURN
   5 IF( LDTYP( ISTEP).LE.5) GOTO 6
     WRITE( 6,27)  LDTYP( ISTEP)
     STOP
   6 LDTAGS= LDTAG( ISTEP)
     JUMP= LDTYP( ISTEP)+1
C
C     SEARCH SEGMENTS FOR PROPER ITAGS
C
     ICHK=0
     L1= N2
     L2= N
     IF( LDTAGS.NE.0) GOTO 7
     IF( LDTAGF( ISTEP).EQ.0.AND. LDTAGT( ISTEP).EQ.0) GOTO 7
     L1= LDTAGF( ISTEP)
     L2= LDTAGT( ISTEP)
     IF( L1.GT. N1) GOTO 7
     WRITE( 6,29)
     STOP
   7 DO 17  I= L1, L2
     IF( LDTAGS.EQ.0) GOTO 8
     IF( LDTAGS.NE. ITAG( I)) GOTO 17
     IF( LDTAGF( ISTEP).EQ.0) GOTO 8
     ICHK= ICHK+1
     IF( ICHK.GE. LDTAGF( ISTEP).AND. ICHK.LE. LDTAGT( ISTEP)) GOTO 9
     GOTO 17
C
C     CALCULATION OF LAMDA*IMPED. PER UNIT LENGTH, JUMP TO APPROPRIATE
C     SECTION FOR LOADING TYPE
C
   8 ICHK=1
   9 GOTO (10,11,12,13,14,15), JUMP
  10 ZT= ZLR( ISTEP)/ SI( I)+ TPCJ* ZLI( ISTEP)/( SI( I)* WLAM)
     IF( ABS( ZLC( ISTEP)).GT.1.D-20) ZT= ZT+ WLAM/( TPCJ* SI( I)* ZLC
    &( ISTEP))
     GOTO 16
  11 ZT= TPCJ* SI( I)* ZLC( ISTEP)/ WLAM
     IF( ABS( ZLI( ISTEP)).GT.1.D-20) ZT= ZT+ SI( I)* WLAM/( TPCJ* ZLI
    &( ISTEP))
     IF( ABS( ZLR( ISTEP)).GT.1.D-20) ZT= ZT+ SI( I)/ ZLR( ISTEP)
     ZT=1./ ZT
     GOTO 16
  12 ZT= ZLR( ISTEP)* WLAM+ TPCJ* ZLI( ISTEP)
     IF( ABS( ZLC( ISTEP)).GT.1.D-20) ZT= ZT+1./( TPCJ* SI( I)* SI( I)
    &* ZLC( ISTEP))
     GOTO 16
  13 ZT= TPCJ* SI( I)* SI( I)* ZLC( ISTEP)
     IF( ABS( ZLI( ISTEP)).GT.1.D-20) ZT= ZT+1./( TPCJ* ZLI( ISTEP))
     IF( ABS( ZLR( ISTEP)).GT.1.D-20) ZT= ZT+1./( ZLR( ISTEP)* WLAM)
     ZT=1./ ZT
     GOTO 16
  14 ZT= CMPLX( ZLR( ISTEP), ZLI( ISTEP))/ SI( I)
     GOTO 16
  15 ZT= ZINT( ZLR( ISTEP)* WLAM, BI( I))
  16 IF(( ABS( REAL( ZARRAY( I)))+ ABS( AIMAG( ZARRAY( I)))).GT.1.D-20
    &) IWARN=1
     ZARRAY( I)= ZARRAY( I)+ ZT
  17 CONTINUE
     IF( ICHK.NE.0) GOTO 18
     WRITE( 6,28)  LDTAGS
C
C     PRINTING THE SEGMENT LOADING DATA, JUMP TO PROPER PRINT
C
     STOP
  18 GOTO (19,20,21,22,23,24), JUMP
  19 CALL PRNT( LDTAGS, LDTAGF( ISTEP), LDTAGT( ISTEP), ZLR( ISTEP),
    &ZLI( ISTEP), ZLC( ISTEP),0.,0.,0.,8H SERIES ,2)
     GOTO 2
  20 CALL PRNT( LDTAGS, LDTAGF( ISTEP), LDTAGT( ISTEP), ZLR( ISTEP),
    &ZLI( ISTEP), ZLC( ISTEP),0.,0.,0.,8HPARALLEL,2)
     GOTO 2
  21 CALL PRNT( LDTAGS, LDTAGF( ISTEP), LDTAGT( ISTEP), ZLR( ISTEP),
    &ZLI( ISTEP), ZLC( ISTEP),0.,0.,0.,20HSERIES (PER METER),5)
     GOTO 2
  22 CALL PRNT( LDTAGS, LDTAGF( ISTEP), LDTAGT( ISTEP), ZLR( ISTEP),
    &ZLI( ISTEP), ZLC( ISTEP),0.,0.,0.,20HPARALLEL (PER METER),5)
     GOTO 2
  23 CALL PRNT( LDTAGS, LDTAGF( ISTEP), LDTAGT( ISTEP),0.,0.,0., ZLR(
    &ISTEP), ZLI( ISTEP),0.,16HFIXED IMPEDANCE ,4)
     GOTO 2
  24 CALL PRNT( LDTAGS, LDTAGF( ISTEP), LDTAGT( ISTEP),0.,0.,0.,0.,0.,
    & ZLR( ISTEP),8H  WIRE  ,2)
C
     GOTO 2
  25 FORMAT(//,7X,'LOCATION',10X,'RESISTANCE',3X,'INDUCTANCE',2X,
    &'CAPACITANCE',7X,'IMPEDANCE (OHMS)',5X,'CONDUCTIVITY',4X,'TYPE',/
    &,4X,'ITAG',' FROM THRU',10X,'OHMS',8X,'HENRYS',7X,'FARADS',8X,
    &'REAL',6X,'IMAGINARY',4X,'MHOS/METER')
  26 FORMAT(/,10X,'NOTE, SOME OF THE ABOVE SEGMENTS HAVE BEEN LOADED',
    &' TWICE - IMPEDANCES ADDED')
  27 FORMAT(/,10X,'IMPROPER LOAD TYPE CHOOSEN, REQUESTED TYPE IS ',I3)
    &
  28 FORMAT(/,10X,'LOADING DATA CARD ERROR, NO SEGMENT HAS AN ITAG =',
    &I5)
  29 FORMAT(' ERROR - LOADING MAY NOT BE ADDED TO SEGMENTS IN N.G.F.'
    &' SECTION')
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE LTSOLV( A, NROW, IX, B, NEQ, NRH, IFL1, IFL2)
C ***
C
C     LTSOLV SOLVES THE MATRIX EQ. Y(R)*LU(T)=B(R) WHERE (R) DENOTES ROW
C     VECTOR AND LU(T) DENOTES THE LU DECOMPOSITION OF THE TRANSPOSE OF
C     THE ORIGINAL COEFFICIENT MATRIX.  THE LU(T) DECOMPOSITION IS
C     STORED ON TAPE 5 IN BLOCKS IN ASCENDING ORDER AND ON FILE 3 IN
C     BLOCKS OF DESCENDING ORDER.
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  A, B, Y, SUM
     COMMON  /MATPAR/ ICASE, NBLOKS, NPBLK, NLAST, NBLSYM, NPSYM,
    &NLSYM, IMAT, ICASX, NBBX, NPBX, NLBX, NBBL, NPBL, NLBL
     COMMON  /SCRATM/ Y( N2M)
C
C     FORWARD SUBSTITUTION
C
     DIMENSION  A( NROW, NROW), B( NEQ, NRH), IX( NEQ)
     I2=2* NPSYM* NROW
     DO 4  IXBLK1=1, NBLSYM
     CALL BLCKIN( A, IFL1,1, I2,1,121)
     K2= NPSYM
     IF( IXBLK1.EQ. NBLSYM) K2= NLSYM
     JST=( IXBLK1-1)* NPSYM
     DO 4  IC=1, NRH
     J= JST
     DO 3  K=1, K2
     JM1= J
     J= J+1
     SUM=(0.,0.)
     IF( JM1.LT.1) GOTO 2
     DO 1  I=1, JM1
   1 SUM= SUM+ A( I, K)* B( I, IC)
   2 B( J, IC)=( B( J, IC)- SUM)/ A( J, K)
   3 CONTINUE
C
C     BACKWARD SUBSTITUTION
C
   4 CONTINUE
     JST= NROW+1
     DO 8  IXBLK1=1, NBLSYM
     CALL BLCKIN( A, IFL2,1, I2,1,122)
     K2= NPSYM
     IF( IXBLK1.EQ.1) K2= NLSYM
     DO 7  IC=1, NRH
     KP= K2+1
     J= JST
     DO 6  K=1, K2
     KP= KP-1
     JP1= J
     J= J-1
     SUM=(0.,0.)
     IF( NROW.LT. JP1) GOTO 6
     DO 5  I= JP1, NROW
   5 SUM= SUM+ A( I, KP)* B( I, IC)
     B( J, IC)= B( J, IC)- SUM
   6 CONTINUE
   7 CONTINUE
C
C     UNSCRAMBLE SOLUTION
C
   8 JST= JST- K2
     DO 10  IC=1, NRH
     DO 9  I=1, NROW
     IXI= IX( I)
   9 Y( IXI)= B( I, IC)
     DO 10  I=1, NROW
  10 B( I, IC)= Y( I)
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE LUNSCR( A, NROW, NOP, IX, IP, IU2, IU3, IU4)
C ***
C
C     S/R WHICH UNSCRAMBLES, SCRAMBLED FACTORED MATRIX
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  A, TEMP
     COMMON  /MATPAR/ ICASE, NBLOKS, NPBLK, NLAST, NBLSYM, NPSYM,
    &NLSYM, IMAT, ICASX, NBBX, NPBX, NLBX, NBBL, NPBL, NLBL
     DIMENSION  A( NROW,1), IP( NROW), IX( NROW)
     I1=1
     I2=2* NPSYM* NROW
     NM1= NROW-1
     REWIND IU2
     REWIND IU3
     REWIND IU4
     DO 9  KK=1, NOP
     KA=( KK-1)* NROW
     DO 4  IXBLK1=1, NBLSYM
     CALL BLCKIN( A, IU2, I1, I2,1,121)
     K1=( IXBLK1-1)* NPSYM+2
     IF( NM1.LT. K1) GOTO 3
     J2=0
     DO 2  K= K1, NM1
     IF( J2.LT. NPSYM) J2= J2+1
     IPK= IP( K+ KA)
     DO 1  J=1, J2
     TEMP= A( K, J)
     A( K, J)= A( IPK, J)
     A( IPK, J)= TEMP
   1 CONTINUE
   2 CONTINUE
   3 CONTINUE
     CALL BLCKOT( A, IU3, I1, I2,1,122)
   4 CONTINUE
     DO 5  IXBLK1=1, NBLSYM
     BACKSPACE IU3
     IF( IXBLK1.NE.1) BACKSPACE IU3
     CALL BLCKIN( A, IU3, I1, I2,1,123)
     CALL BLCKOT( A, IU4, I1, I2,1,124)
   5 CONTINUE
     DO 6  I=1, NROW
     IX( I+ KA)= I
   6 CONTINUE
     DO 7  I=1, NROW
     IPI= IP( I+ KA)
     IXT= IX( I+ KA)
     IX( I+ KA)= IX( IPI+ KA)
     IX( IPI+ KA)= IXT
   7 CONTINUE
     IF( NOP.EQ.1) GOTO 9
C     SKIP NB1 LOGICAL RECORDS FORWARD
     NB1= NBLSYM-1
     DO 8  IXBLK1=1, NB1
     CALL BLCKIN( A, IU3, I1, I2,1,125)
   8 CONTINUE
   9 CONTINUE
     REWIND IU2
     REWIND IU3
     REWIND IU4
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE MOVE( ROX, ROY, ROZ, XS, YS, ZS, ITS, NRPT, ITGI)
C ***
C
C     SUBROUTINE MOVE MOVES THE STRUCTURE WITH RESPECT TO ITS
C     COORDINATE SYSTEM OR REPRODUCES STRUCTURE IN NEW POSITIONS.
C     STRUCTURE IS ROTATED ABOUT X,Y,Z AXES BY ROX,ROY,ROZ
C     RESPECTIVELY, THEN SHIFTED BY XS,YS,ZS
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /ANGL/ SALP( NM)
     DIMENSION  T1X(1), T1Y(1), T1Z(1), T2X(1), T2Y(1), T2Z(1), X2(1),
    & Y2(1), Z2(1)
     EQUIVALENCE(X2(1),SI(1)),(Y2(1),ALP(1)),(Z2(1),BET(1))
     EQUIVALENCE(T1X,SI),(T1Y,ALP),(T1Z,BET),(T2X,ICON1),(T2Y,ICON2),(
    &T2Z,ITAG)
     IF( ABS( ROX)+ ABS( ROY).GT.1.D-10) IPSYM= IPSYM*3
     SPS= SIN( ROX)
     CPS= COS( ROX)
     STH= SIN( ROY)
     CTH= COS( ROY)
     SPH= SIN( ROZ)
     CPH= COS( ROZ)
     XX= CPH* CTH
     XY= CPH* STH* SPS- SPH* CPS
     XZ= CPH* STH* CPS+ SPH* SPS
     YX= SPH* CTH
     YY= SPH* STH* SPS+ CPH* CPS
     YZ= SPH* STH* CPS- CPH* SPS
     ZX=- STH
     ZY= CTH* SPS
     ZZ= CTH* CPS
     NRP= NRPT
     IF( NRPT.EQ.0) NRP=1
     IX=1
     IF( N.LT. N2) GOTO 3
     I1= ISEGNO( ITS,1)
     IF( I1.LT. N2) I1= N2
     IX= I1
     K= N
     IF( NRPT.EQ.0) K= I1-1
     DO 2  IR=1, NRP
     DO 1  I= I1, N
     K= K+1
     XI= X( I)
     YI= Y( I)
     ZI= Z( I)
     X( K)= XI* XX+ YI* XY+ ZI* XZ+ XS
     Y( K)= XI* YX+ YI* YY+ ZI* YZ+ YS
     Z( K)= XI* ZX+ YI* ZY+ ZI* ZZ+ ZS
     XI= X2( I)
     YI= Y2( I)
     ZI= Z2( I)
     X2( K)= XI* XX+ YI* XY+ ZI* XZ+ XS
     Y2( K)= XI* YX+ YI* YY+ ZI* YZ+ YS
     Z2( K)= XI* ZX+ YI* ZY+ ZI* ZZ+ ZS
     BI( K)= BI( I)
     ITAG( K)= ITAG( I)
     IF( ITAG( I).NE.0) ITAG( K)= ITAG( I)+ ITGI
   1 CONTINUE
     I1= N+1
     N= K
   2 CONTINUE
   3 IF( M.LT. M2) GOTO 6
     I1= M2
     K= M
     LDI= LD+1
     IF( NRPT.EQ.0) K= M1
     DO 5  II=1, NRP
     DO 4  I= I1, M
     K= K+1
     IR= LDI- I
     KR= LDI- K
     XI= X( IR)
     YI= Y( IR)
     ZI= Z( IR)
     X( KR)= XI* XX+ YI* XY+ ZI* XZ+ XS
     Y( KR)= XI* YX+ YI* YY+ ZI* YZ+ YS
     Z( KR)= XI* ZX+ YI* ZY+ ZI* ZZ+ ZS
     XI= T1X( IR)
     YI= T1Y( IR)
     ZI= T1Z( IR)
     T1X( KR)= XI* XX+ YI* XY+ ZI* XZ
     T1Y( KR)= XI* YX+ YI* YY+ ZI* YZ
     T1Z( KR)= XI* ZX+ YI* ZY+ ZI* ZZ
     XI= T2X( IR)
     YI= T2Y( IR)
     ZI= T2Z( IR)
     T2X( KR)= XI* XX+ YI* XY+ ZI* XZ
     T2Y( KR)= XI* YX+ YI* YY+ ZI* YZ
     T2Z( KR)= XI* ZX+ YI* ZY+ ZI* ZZ
     SALP( KR)= SALP( IR)
   4 BI( KR)= BI( IR)
     I1= M+1
   5 M= K
   6 IF(( NRPT.EQ.0).AND.( IX.EQ.1)) RETURN
     NP= N
     MP= M
     IPSYM=0
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE NEFLD( XOB, YOB, ZOB, EX, EY, EZ)
C ***
C
C     NEFLD COMPUTES THE NEAR FIELD AT SPECIFIED POINTS IN SPACE AFTER
C     THE STRUCTURE CURRENTS HAVE BEEN COMPUTED.
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  EX, EY, EZ, CUR, ACX, BCX, CCX, EXK, EYK, EZK, EXS,
    &EYS, EZS, EXC, EYC, EZC, ZRATI, ZRATI2, T1, FRATI
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /ANGL/ SALP( NM)
     COMMON  /CRNT/ AIR( NM), AII( NM), BIR( NM), BII( NM), CIR( NM),
    &CII( NM), CUR( N3M)
     COMMON  /DATAJ/ S, B, XJ, YJ, ZJ, CABJ, SABJ, SALPJ, EXK, EYK,
    &EZK, EXS, EYS, EZS, EXC, EYC, EZC, RKH, IEXK, IND1, INDD1, IND2,
    &INDD2, IPGND
     COMMON  /GND/ ZRATI, ZRATI2, FRATI, CL, CH, SCRWL, SCRWR, NRADL,
    &KSYMP, IFAR, IPERF, T1, T2
     DIMENSION  CAB(1), SAB(1), T1X(1), T1Y(1), T1Z(1), T2X(1), T2Y(1)
    &, T2Z(1)
     EQUIVALENCE(CAB,ALP),(SAB,BET)
     EQUIVALENCE(T1X,SI),(T1Y,ALP),(T1Z,BET),(T2X,ICON1),(T2Y,ICON2),(
    &T2Z,ITAG)
     EQUIVALENCE(T1XJ,CABJ),(T1YJ,SABJ),(T1ZJ,SALPJ),(T2XJ,B),(T2YJ,
    &IND1),(T2ZJ,IND2)
     EX=(0.,0.)
     EY=(0.,0.)
     EZ=(0.,0.)
     AX=0.
     IF( N.EQ.0) GOTO 20
     DO 1  I=1, N
     XJ= XOB- X( I)
     YJ= YOB- Y( I)
     ZJ= ZOB- Z( I)
     ZP= CAB( I)* XJ+ SAB( I)* YJ+ SALP( I)* ZJ
     IF( ABS( ZP).GT.0.5001* SI( I)) GOTO 1
     ZP= XJ* XJ+ YJ* YJ+ ZJ* ZJ- ZP* ZP
     XJ= BI( I)
     IF( ZP.GT.0.9* XJ* XJ) GOTO 1
     AX= XJ
     GOTO 2
   1 CONTINUE
   2 DO 19  I=1, N
     S= SI( I)
     B= BI( I)
     XJ= X( I)
     YJ= Y( I)
     ZJ= Z( I)
     CABJ= CAB( I)
     SABJ= SAB( I)
     SALPJ= SALP( I)
     IF( IEXK.EQ.0) GOTO 18
     IPR= ICON1( I)
     IF( IPR) 3,8,4
   3 IPR=- IPR
     IF(- ICON1( IPR).NE. I) GOTO 9
     GOTO 6
   4 IF( IPR.NE. I) GOTO 5
     IF( CABJ* CABJ+ SABJ* SABJ.GT.1.D-8) GOTO 9
     GOTO 7
   5 IF( ICON2( IPR).NE. I) GOTO 9
   6 XI= ABS( CABJ* CAB( IPR)+ SABJ* SAB( IPR)+ SALPJ* SALP( IPR))
     IF( XI.LT.0.999999D+0) GOTO 9
     IF( ABS( BI( IPR)/ B-1.).GT.1.D-6) GOTO 9
   7 IND1=0
     GOTO 10
   8 IND1=1
     GOTO 10
   9 IND1=2
  10 IPR= ICON2( I)
     IF( IPR) 11,16,12
  11 IPR=- IPR
     IF(- ICON2( IPR).NE. I) GOTO 17
     GOTO 14
  12 IF( IPR.NE. I) GOTO 13
     IF( CABJ* CABJ+ SABJ* SABJ.GT.1.D-8) GOTO 17
     GOTO 15
  13 IF( ICON1( IPR).NE. I) GOTO 17
  14 XI= ABS( CABJ* CAB( IPR)+ SABJ* SAB( IPR)+ SALPJ* SALP( IPR))
     IF( XI.LT.0.999999D+0) GOTO 17
     IF( ABS( BI( IPR)/ B-1.).GT.1.D-6) GOTO 17
  15 IND2=0
     GOTO 18
  16 IND2=1
     GOTO 18
  17 IND2=2
  18 CONTINUE
     CALL EFLD( XOB, YOB, ZOB, AX,1)
     ACX= CMPLX( AIR( I), AII( I))
     BCX= CMPLX( BIR( I), BII( I))
     CCX= CMPLX( CIR( I), CII( I))
     EX= EX+ EXK* ACX+ EXS* BCX+ EXC* CCX
     EY= EY+ EYK* ACX+ EYS* BCX+ EYC* CCX
  19 EZ= EZ+ EZK* ACX+ EZS* BCX+ EZC* CCX
     IF( M.EQ.0) RETURN
  20 JC= N
     JL= LD+1
     DO 21  I=1, M
     JL= JL-1
     S= BI( JL)
     XJ= X( JL)
     YJ= Y( JL)
     ZJ= Z( JL)
     T1XJ= T1X( JL)
     T1YJ= T1Y( JL)
     T1ZJ= T1Z( JL)
     T2XJ= T2X( JL)
     T2YJ= T2Y( JL)
     T2ZJ= T2Z( JL)
     JC= JC+3
     ACX= T1XJ* CUR( JC-2)+ T1YJ* CUR( JC-1)+ T1ZJ* CUR( JC)
     BCX= T2XJ* CUR( JC-2)+ T2YJ* CUR( JC-1)+ T2ZJ* CUR( JC)
     DO 21  IP=1, KSYMP
     IPGND= IP
     CALL UNERE( XOB, YOB, ZOB)
     EX= EX+ ACX* EXK+ BCX* EXS
     EY= EY+ ACX* EYK+ BCX* EYS
  21 EZ= EZ+ ACX* EZK+ BCX* EZS
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE NETWK( CM, CMB, CMC, CMD, IP, EINC)
C ***
C
C     SUBROUTINE NETWK SOLVES FOR STRUCTURE CURRENTS FOR A GIVEN
C     EXCITATION INCLUDING THE EFFECT OF NON-RADIATING NETWORKS IF
C     PRESENT.
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  CMN, RHNT, YMIT, RHS, ZPED, EINC, VSANT, VLT, CUR,
    &VSRC, RHNX, VQD, VQDS, CUX, CM, CMB, CMC, CMD
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /CRNT/ AIR( NM), AII( NM), BIR( NM), BII( NM), CIR( NM),
    &CII( NM), CUR( N3M)
     COMMON  /VSORC/ VQD(30), VSANT(30), VQDS(30), IVQD(30), ISANT(30)
    &, IQDS(30), NVQD, NSANT, NQDS
     COMMON  /NETCX/ ZPED, PIN, PNLS, NEQ, NPEQ, NEQ2, NONET, NTSOL,
    &NPRINT, MASYM, ISEG1(150), ISEG2(150), X11R(150), X11I(150),
    &X12R(150), X12I(150), X22R(150), X22I(150), NTYP(150)
     DIMENSION  EINC(1), IP(1), CM(1), CMB(1), CMC(1), CMD(1)
     DIMENSION  CMN(150,150), RHNT(150), IPNT(150), NTEQA(150),
    &NTSCA(150), RHS( N3M), VSRC(10), RHNX(150)
     DATA   NDIMN, NDIMNP/150,151/, TP/6.283185308D+0/
     NEQZ2= NEQ2
     IF( NEQZ2.EQ.0) NEQZ2=1
     PIN=0.
     PNLS=0.
     NEQT= NEQ+ NEQ2
     IF( NTSOL.NE.0) GOTO 42
     NOP= NEQ/ NPEQ
C
C     COMPUTE RELATIVE MATRIX ASYMMETRY
C
     IF( MASYM.EQ.0) GOTO 14
     IROW1=0
     IF( NONET.EQ.0) GOTO 5
     DO 4  I=1, NONET
     NSEG1= ISEG1( I)
     DO 3  ISC1=1,2
     IF( IROW1.EQ.0) GOTO 2
     DO 1  J=1, IROW1
     IF( NSEG1.EQ. IPNT( J)) GOTO 3
   1 CONTINUE
   2 IROW1= IROW1+1
     IPNT( IROW1)= NSEG1
   3 NSEG1= ISEG2( I)
   4 CONTINUE
   5 IF( NSANT.EQ.0) GOTO 9
     DO 8  I=1, NSANT
     NSEG1= ISANT( I)
     IF( IROW1.EQ.0) GOTO 7
     DO 6  J=1, IROW1
     IF( NSEG1.EQ. IPNT( J)) GOTO 8
   6 CONTINUE
   7 IROW1= IROW1+1
     IPNT( IROW1)= NSEG1
   8 CONTINUE
   9 IF( IROW1.LT. NDIMNP) GOTO 10
     WRITE( 6,59)
     STOP
  10 IF( IROW1.LT.2) GOTO 14
     DO 12  I=1, IROW1
     ISC1= IPNT( I)
     ASM= SI( ISC1)
     DO 11  J=1, NEQT
  11 RHS( J)=(0.,0.)
     RHS( ISC1)=(1.,0.)
     CALL SOLGF( CM, CMB, CMC, CMD, RHS, IP, NP, N1, N, MP, M1, M, NEQ
    &, NEQ2, NEQZ2)
     CALL CABC( RHS)
     DO 12  J=1, IROW1
     ISC1= IPNT( J)
  12 CMN( J, I)= RHS( ISC1)/ ASM
     ASM=0.
     ASA=0.
     DO 13  I=2, IROW1
     ISC1= I-1
     DO 13  J=1, ISC1
     CUX= CMN( I, J)
     PWR= ABS(( CUX- CMN( J, I))/ CUX)
     ASA= ASA+ PWR* PWR
     IF( PWR.LT. ASM) GOTO 13
     ASM= PWR
     NTEQ= IPNT( I)
     NTSC= IPNT( J)
  13 CONTINUE
     ASA= SQRT( ASA*2./ DFLOAT( IROW1*( IROW1-1)))
     WRITE( 6,58)  ASM, NTEQ, NTSC, ASA
C
C     SOLUTION OF NETWORK EQUATIONS
C
  14 IF( NONET.EQ.0) GOTO 48
     DO 15  I=1, NDIMN
     RHNX( I)=(0.,0.)
     DO 15  J=1, NDIMN
  15 CMN( I, J)=(0.,0.)
     NTEQ=0
C
C     SORT NETWORK AND SOURCE DATA AND ASSIGN EQUATION NUMBERS TO
C     SEGMENTS.
C
     NTSC=0
     DO 38  J=1, NONET
     NSEG1= ISEG1( J)
     NSEG2= ISEG2( J)
     IF( NTYP( J).GT.1) GOTO 16
     Y11R= X11R( J)
     Y11I= X11I( J)
     Y12R= X12R( J)
     Y12I= X12I( J)
     Y22R= X22R( J)
     Y22I= X22I( J)
     GOTO 17
  16 Y22R= TP* X11I( J)/ WLAM
     Y12R=0.
     Y12I=1./( X11R( J)* SIN( Y22R))
     Y11R= X12R( J)
     Y11I=- Y12I* COS( Y22R)
     Y22R= X22R( J)
     Y22I= Y11I+ X22I( J)
     Y11I= Y11I+ X12I( J)
     IF( NTYP( J).EQ.2) GOTO 17
     Y12R=- Y12R
     Y12I=- Y12I
  17 IF( NSANT.EQ.0) GOTO 19
     DO 18  I=1, NSANT
     IF( NSEG1.NE. ISANT( I)) GOTO 18
     ISC1= I
     GOTO 22
  18 CONTINUE
  19 ISC1=0
     IF( NTEQ.EQ.0) GOTO 21
     DO 20  I=1, NTEQ
     IF( NSEG1.NE. NTEQA( I)) GOTO 20
     IROW1= I
     GOTO 25
  20 CONTINUE
  21 NTEQ= NTEQ+1
     IROW1= NTEQ
     NTEQA( NTEQ)= NSEG1
     GOTO 25
  22 IF( NTSC.EQ.0) GOTO 24
     DO 23  I=1, NTSC
     IF( NSEG1.NE. NTSCA( I)) GOTO 23
     IROW1= NDIMNP- I
     GOTO 25
  23 CONTINUE
  24 NTSC= NTSC+1
     IROW1= NDIMNP- NTSC
     NTSCA( NTSC)= NSEG1
     VSRC( NTSC)= VSANT( ISC1)
  25 IF( NSANT.EQ.0) GOTO 27
     DO 26  I=1, NSANT
     IF( NSEG2.NE. ISANT( I)) GOTO 26
     ISC2= I
     GOTO 30
  26 CONTINUE
  27 ISC2=0
     IF( NTEQ.EQ.0) GOTO 29
     DO 28  I=1, NTEQ
     IF( NSEG2.NE. NTEQA( I)) GOTO 28
     IROW2= I
     GOTO 33
  28 CONTINUE
  29 NTEQ= NTEQ+1
     IROW2= NTEQ
     NTEQA( NTEQ)= NSEG2
     GOTO 33
  30 IF( NTSC.EQ.0) GOTO 32
     DO 31  I=1, NTSC
     IF( NSEG2.NE. NTSCA( I)) GOTO 31
     IROW2= NDIMNP- I
     GOTO 33
  31 CONTINUE
  32 NTSC= NTSC+1
     IROW2= NDIMNP- NTSC
     NTSCA( NTSC)= NSEG2
     VSRC( NTSC)= VSANT( ISC2)
  33 IF( NTSC+ NTEQ.LT. NDIMNP) GOTO 34
     WRITE( 6,59)
C
C     FILL NETWORK EQUATION MATRIX AND RIGHT HAND SIDE VECTOR WITH
C     NETWORK SHORT-CIRCUIT ADMITTANCE MATRIX COEFFICIENTS.
C
     STOP
  34 IF( ISC1.NE.0) GOTO 35
     CMN( IROW1, IROW1)= CMN( IROW1, IROW1)- CMPLX( Y11R, Y11I)* SI(
    &NSEG1)
     CMN( IROW1, IROW2)= CMN( IROW1, IROW2)- CMPLX( Y12R, Y12I)* SI(
    &NSEG1)
     GOTO 36
  35 RHNX( IROW1)= RHNX( IROW1)+ CMPLX( Y11R, Y11I)* VSANT( ISC1)/
    &WLAM
     RHNX( IROW2)= RHNX( IROW2)+ CMPLX( Y12R, Y12I)* VSANT( ISC1)/
    &WLAM
  36 IF( ISC2.NE.0) GOTO 37
     CMN( IROW2, IROW2)= CMN( IROW2, IROW2)- CMPLX( Y22R, Y22I)* SI(
    &NSEG2)
     CMN( IROW2, IROW1)= CMN( IROW2, IROW1)- CMPLX( Y12R, Y12I)* SI(
    &NSEG2)
     GOTO 38
  37 RHNX( IROW1)= RHNX( IROW1)+ CMPLX( Y12R, Y12I)* VSANT( ISC2)/
    &WLAM
     RHNX( IROW2)= RHNX( IROW2)+ CMPLX( Y22R, Y22I)* VSANT( ISC2)/
    &WLAM
C
C     ADD INTERACTION MATRIX ADMITTANCE ELEMENTS TO NETWORK EQUATION
C     MATRIX
C
  38 CONTINUE
     DO 41  I=1, NTEQ
     DO 39  J=1, NEQT
  39 RHS( J)=(0.,0.)
     IROW1= NTEQA( I)
     RHS( IROW1)=(1.,0.)
     CALL SOLGF( CM, CMB, CMC, CMD, RHS, IP, NP, N1, N, MP, M1, M, NEQ
    &, NEQ2, NEQZ2)
     CALL CABC( RHS)
     DO 40  J=1, NTEQ
     IROW1= NTEQA( J)
  40 CMN( I, J)= CMN( I, J)+ RHS( IROW1)
C
C     FACTOR NETWORK EQUATION MATRIX
C
  41 CONTINUE
C
C     ADD TO NETWORK EQUATION RIGHT HAND SIDE THE TERMS DUE TO ELEMENT
C     INTERACTIONS
C
     CALL FACTR( NTEQ, CMN, IPNT, NDIMN)
  42 IF( NONET.EQ.0) GOTO 48
     DO 43  I=1, NEQT
  43 RHS( I)= EINC( I)
     CALL SOLGF( CM, CMB, CMC, CMD, RHS, IP, NP, N1, N, MP, M1, M, NEQ
    &, NEQ2, NEQZ2)
     CALL CABC( RHS)
     DO 44  I=1, NTEQ
     IROW1= NTEQA( I)
C
C     SOLVE NETWORK EQUATIONS
C
  44 RHNT( I)= RHNX( I)+ RHS( IROW1)
C
C     ADD FIELDS DUE TO NETWORK VOLTAGES TO ELECTRIC FIELDS APPLIED TO
C     STRUCTURE AND SOLVE FOR INDUCED CURRENT
C
     CALL SOLVE( NTEQ, CMN, IPNT, RHNT, NDIMN)
     DO 45  I=1, NTEQ
     IROW1= NTEQA( I)
  45 EINC( IROW1)= EINC( IROW1)- RHNT( I)
     CALL SOLGF( CM, CMB, CMC, CMD, EINC, IP, NP, N1, N, MP, M1, M,
    &NEQ, NEQ2, NEQZ2)
     CALL CABC( EINC)
     IF( NPRINT.EQ.0) WRITE( 6,61)
     IF( NPRINT.EQ.0) WRITE( 6,60)
     DO 46  I=1, NTEQ
     IROW1= NTEQA( I)
     VLT= RHNT( I)* SI( IROW1)* WLAM
     CUX= EINC( IROW1)* WLAM
     YMIT= CUX/ VLT
     ZPED= VLT/ CUX
     IROW2= ITAG( IROW1)
     PWR=.5* REAL( VLT* CONJG( CUX))
     PNLS= PNLS- PWR
  46 IF( NPRINT.EQ.0) WRITE( 6,62)  IROW2, IROW1, VLT, CUX, ZPED, YMIT
    &, PWR
     IF( NTSC.EQ.0) GOTO 49
     DO 47  I=1, NTSC
     IROW1= NTSCA( I)
     VLT= VSRC( I)
     CUX= EINC( IROW1)* WLAM
     YMIT= CUX/ VLT
     ZPED= VLT/ CUX
     IROW2= ITAG( IROW1)
     PWR=.5* REAL( VLT* CONJG( CUX))
     PNLS= PNLS- PWR
  47 IF( NPRINT.EQ.0) WRITE( 6,62)  IROW2, IROW1, VLT, CUX, ZPED, YMIT
    &, PWR
C
C     SOLVE FOR CURRENTS WHEN NO NETWORKS ARE PRESENT
C
     GOTO 49
  48 CALL SOLGF( CM, CMB, CMC, CMD, EINC, IP, NP, N1, N, MP, M1, M,
    &NEQ, NEQ2, NEQZ2)
     CALL CABC( EINC)
     NTSC=0
  49 IF( NSANT+ NVQD.EQ.0) RETURN
     WRITE( 6,63)
     WRITE( 6,60)
     IF( NSANT.EQ.0) GOTO 56
     DO 55  I=1, NSANT
     ISC1= ISANT( I)
     VLT= VSANT( I)
     IF( NTSC.EQ.0) GOTO 51
     DO 50  J=1, NTSC
     IF( NTSCA( J).EQ. ISC1) GOTO 52
  50 CONTINUE
  51 CUX= EINC( ISC1)* WLAM
     IROW1=0
     GOTO 54
  52 IROW1= NDIMNP- J
     CUX= RHNX( IROW1)
     DO 53  J=1, NTEQ
  53 CUX= CUX- CMN( J, IROW1)* RHNT( J)
     CUX=( EINC( ISC1)+ CUX)* WLAM
  54 YMIT= CUX/ VLT
     ZPED= VLT/ CUX
     PWR=.5* REAL( VLT* CONJG( CUX))
     PIN= PIN+ PWR
     IF( IROW1.NE.0) PNLS= PNLS+ PWR
     IROW2= ITAG( ISC1)
  55 WRITE( 6,62)  IROW2, ISC1, VLT, CUX, ZPED, YMIT, PWR
  56 IF( NVQD.EQ.0) RETURN
     DO 57  I=1, NVQD
     ISC1= IVQD( I)
     VLT= VQD( I)
     CUX= CMPLX( AIR( ISC1), AII( ISC1))
     YMIT= CMPLX( BIR( ISC1), BII( ISC1))
     ZPED= CMPLX( CIR( ISC1), CII( ISC1))
     PWR= SI( ISC1)* TP*.5
     CUX=( CUX- YMIT* SIN( PWR)+ ZPED* COS( PWR))* WLAM
     YMIT= CUX/ VLT
     ZPED= VLT/ CUX
     PWR=.5* REAL( VLT* CONJG( CUX))
     PIN= PIN+ PWR
     IROW2= ITAG( ISC1)
  57 WRITE( 6,64)  IROW2, ISC1, VLT, CUX, ZPED, YMIT, PWR
C
     RETURN
  58 FORMAT(///,3X,'MAXIMUM RELATIVE ASYMMETRY OF THE DRIVING POINT',
    &' ADMITTANCE MATRIX IS',1P,E10.3,' FOR SEGMENTS',I5,4H AND,I5,/,3
    &X,'RMS RELATIVE ASYMMETRY IS',E10.3)
  59 FORMAT(1X,'ERROR - - NETWORK ARRAY DIMENSIONS TOO SMALL')
  60 FORMAT(/,3X,'TAG',3X,'SEG.',4X,'VOLTAGE (VOLTS)',9X,'CURRENT (',
    &'AMPS)',9X,'IMPEDANCE (OHMS)',8X,'ADMITTANCE (MHOS)',6X,'POWER',/
    &,3X,'NO.',3X,'NO.',4X,'REAL',8X,'IMAG.',3(7X,'REAL',8X,'IMAG.'),5
    &X,'(WATTS)')
  61 FORMAT(///,27X,'- - - STRUCTURE EXCITATION DATA AT NETWORK CONN',
    &'ECTION POINTS - - -')
  62 FORMAT(2(1X,I5),1P,9E12.5)
  63 FORMAT(///,42X,'- - - ANTENNA INPUT PARAMETERS - - -')
  64 FORMAT(1X,I5,' *',I4,1P,9E12.5)
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE NFPAT
C ***
C     COMPUTE NEAR E OR H FIELDS OVER A RANGE OF POINTS
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  EX, EY, EZ
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
C***
     COMMON  /FPAT/ NTH, NPH, IPD, IAVP, INOR, IAX, THETS, PHIS, DTH,
    &DPH, RFLD, GNOR, CLT, CHT, EPSR2, SIG2, IXTYP, XPR6, PINR, PNLR,
    &PLOSS, NEAR, NFEH, NRX, NRY, NRZ, XNR, YNR, ZNR, DXNR, DYNR, DZNR
    &
C***
     COMMON  /PLOT/ IPLP1, IPLP2, IPLP3, IPLP4
     DATA   TA/1.745329252D-02/
     IF( NFEH.EQ.1) GOTO 1
     WRITE( 6,10)
     GOTO 2
   1 WRITE( 6,12)
   2 ZNRT= ZNR- DZNR
     DO 9  I=1, NRZ
     ZNRT= ZNRT+ DZNR
     IF( NEAR.EQ.0) GOTO 3
     CTH= COS( TA* ZNRT)
     STH= SIN( TA* ZNRT)
   3 YNRT= YNR- DYNR
     DO 9  J=1, NRY
     YNRT= YNRT+ DYNR
     IF( NEAR.EQ.0) GOTO 4
     CPH= COS( TA* YNRT)
     SPH= SIN( TA* YNRT)
   4 XNRT= XNR- DXNR
     DO 9  KK=1, NRX
     XNRT= XNRT+ DXNR
     IF( NEAR.EQ.0) GOTO 5
     XOB= XNRT* STH* CPH
     YOB= XNRT* STH* SPH
     ZOB= XNRT* CTH
     GOTO 6
   5 XOB= XNRT
     YOB= YNRT
     ZOB= ZNRT
   6 TMP1= XOB/ WLAM
     TMP2= YOB/ WLAM
     TMP3= ZOB/ WLAM
     IF( NFEH.EQ.1) GOTO 7
     CALL NEFLD( TMP1, TMP2, TMP3, EX, EY, EZ)
     GOTO 8
   7 CALL NHFLD( TMP1, TMP2, TMP3, EX, EY, EZ)
   8 TMP1= ABS( EX)
     TMP2= CANG( EX)
     TMP3= ABS( EY)
     TMP4= CANG( EY)
     TMP5= ABS( EZ)
     TMP6= CANG( EZ)
C***
     WRITE( 6,11)  XOB, YOB, ZOB, TMP1, TMP2, TMP3, TMP4, TMP5, TMP6
     IF( IPLP1.NE.2) GOTO 9
     GOTO (14,15,16), IPLP4
  14 XXX= XOB
     GOTO 17
  15 XXX= YOB
     GOTO 17
  16 XXX= ZOB
  17 CONTINUE
     IF( IPLP2.NE.2) GOTO 13
     IF( IPLP3.EQ.1) WRITE( 8,*)  XXX, TMP1, TMP2
     IF( IPLP3.EQ.2) WRITE( 8,*)  XXX, TMP3, TMP4
     IF( IPLP3.EQ.3) WRITE( 8,*)  XXX, TMP5, TMP6
     IF( IPLP3.EQ.4) WRITE( 8,*)  XXX, TMP1, TMP2, TMP3, TMP4, TMP5,
    &TMP6
     GOTO 9
  13 IF( IPLP2.NE.1) GOTO 9
     IF( IPLP3.EQ.1) WRITE( 8,*)  XXX, EX
     IF( IPLP3.EQ.2) WRITE( 8,*)  XXX, EY
     IF( IPLP3.EQ.3) WRITE( 8,*)  XXX, EZ
C***
     IF( IPLP3.EQ.4) WRITE( 8,*)  XXX, EX, EY, EZ
   9 CONTINUE
C
     RETURN
  10 FORMAT(///,35X,'- - - NEAR ELECTRIC FIELDS - - -',//,12X,'-  L',
    &'OCATION  -',21X,'-  EX  -',15X,'-  EY  -',15X,'-  EZ  -',/,8X,
    &'X',10X,'Y',10X,'Z',10X,'MAGNITUDE',3X,'PHASE',6X,'MAGNITUDE',3X,
    &'PHASE',6X,'MAGNITUDE',3X,'PHASE',/,6X,'METERS',5X,'METERS',5X,
    &'METERS',8X,'VOLTS/M',3X,'DEGREES',6X,'VOLTS/M',3X,'DEGREES',6X
    &,'VOLTS/M',3X,'DEGREES')
  11 FORMAT(2X,3(2X,F9.4),1X,3(3X,1P,E11.4,2X,0P,F7.2))
  12 FORMAT(///,35X,'- - - NEAR MAGNETIC FIELDS - - -',//,12X,'-  L',
    &'OCATION  -',21X,'-  HX  -',15X,'-  HY  -',15X,'-  HZ  -',/,8X,
    &'X',10X,'Y',10X,'Z',10X,'MAGNITUDE',3X,'PHASE',6X,'MAGNITUDE',3X,
    &'PHASE',6X,'MAGNITUDE',3X,'PHASE',/,6X,'METERS',5X,'METERS',5X,
    &'METERS',9X,'AMPS/M',3X,'DEGREES',7X,'AMPS/M',3X,'DEGREES',7X,
    &'AMPS/M',3X,'DEGREES')
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE NHFLD( XOB, YOB, ZOB, HX, HY, HZ)
C ***
C
C     NHFLD COMPUTES THE NEAR FIELD AT SPECIFIED POINTS IN SPACE AFTER
C     THE STRUCTURE CURRENTS HAVE BEEN COMPUTED.
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEXHX,HY,HZ,CUR,ACX,  BCX, CCX, EXK, EYK, EZK, EXS, EYS,
    &EZS, EXC, EYC, EZC
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /ANGL/ SALP( NM)
     COMMON  /CRNT/ AIR( NM), AII( NM), BIR( NM), BII( NM), CIR( NM),
    &CII( NM), CUR( N3M)
     COMMON  /DATAJ/ S, B, XJ, YJ, ZJ, CABJ, SABJ, SALPJ, EXK, EYK,
    &EZK, EXS, EYS, EZS, EXC, EYC, EZC, RKH, IEXK, IND1, INDD1, IND2,
    &INDD2, IPGND
     DIMENSION  CAB(1), SAB(1)
     DIMENSION  T1X(1), T1Y(1), T1Z(1), T2X(1), T2Y(1), T2Z(1), XS(1),
    & YS(1), ZS(1)
     EQUIVALENCE(T1X,SI),(T1Y,ALP),(T1Z,BET),(T2X,ICON1),(T2Y,ICON2),(
    &T2Z,ITAG),(XS,X),(YS,Y),(ZS,Z)
     EQUIVALENCE(T1XJ,CABJ),(T1YJ,SABJ),(T1ZJ,SALPJ),(T2XJ,B),(T2YJ,
    &IND1),(T2ZJ,IND2)
     EQUIVALENCE(CAB,ALP),(SAB,BET)
     HX=(0.,0.)
     HY=(0.,0.)
     HZ=(0.,0.)
     AX=0.
     IF( N.EQ.0) GOTO 4
     DO 1  I=1, N
     XJ= XOB- X( I)
     YJ= YOB- Y( I)
     ZJ= ZOB- Z( I)
     ZP= CAB( I)* XJ+ SAB( I)* YJ+ SALP( I)* ZJ
     IF( ABS( ZP).GT.0.5001* SI( I)) GOTO 1
     ZP= XJ* XJ+ YJ* YJ+ ZJ* ZJ- ZP* ZP
     XJ= BI( I)
     IF( ZP.GT.0.9* XJ* XJ) GOTO 1
     AX= XJ
     GOTO 2
   1 CONTINUE
   2 DO 3  I=1, N
     S= SI( I)
     B= BI( I)
     XJ= X( I)
     YJ= Y( I)
     ZJ= Z( I)
     CABJ= CAB( I)
     SABJ= SAB( I)
     SALPJ= SALP( I)
     CALL HSFLD( XOB, YOB, ZOB, AX)
     ACX= CMPLX( AIR( I), AII( I))
     BCX= CMPLX( BIR( I), BII( I))
     CCX= CMPLX( CIR( I), CII( I))
     HX= HX+ EXK* ACX+ EXS* BCX+ EXC* CCX
     HY= HY+ EYK* ACX+ EYS* BCX+ EYC* CCX
   3 HZ= HZ+ EZK* ACX+ EZS* BCX+ EZC* CCX
     IF( M.EQ.0) RETURN
   4 JC= N
     JL= LD+1
     DO 5  I=1, M
     JL= JL-1
     S= BI( JL)
     XJ= X( JL)
     YJ= Y( JL)
     ZJ= Z( JL)
     T1XJ= T1X( JL)
     T1YJ= T1Y( JL)
     T1ZJ= T1Z( JL)
     T2XJ= T2X( JL)
     T2YJ= T2Y( JL)
     T2ZJ= T2Z( JL)
     CALL HINTG( XOB, YOB, ZOB)
     JC= JC+3
     ACX= T1XJ* CUR( JC-2)+ T1YJ* CUR( JC-1)+ T1ZJ* CUR( JC)
     BCX= T2XJ* CUR( JC-2)+ T2YJ* CUR( JC-1)+ T2ZJ* CUR( JC)
     HX= HX+ ACX* EXK+ BCX* EXS
     HY= HY+ ACX* EYK+ BCX* EYS
   5 HZ= HZ+ ACX* EZK+ BCX* EZS
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE PATCH( NX, NY, X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, X4,
    & Y4, Z4)
C ***
C     PATCH GENERATES AND MODIFIES PATCH GEOMETRY DATA
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /ANGL/ SALP( NM)
     DIMENSION  T1X(1), T1Y(1), T1Z(1), T2X(1), T2Y(1), T2Z(1)
C     NEW PATCHES.  FOR NX=0, NY=1,2,3,4 PATCH IS (RESPECTIVELY)
C     ARBITRARY, RECTAGULAR, TRIANGULAR, OR QUADRILATERAL.
C     FOR NX AND NY .GT. 0 A RECTANGULAR SURFACE IS PRODUCED WITH
C     NX BY NY RECTANGULAR PATCHES.
     EQUIVALENCE(T1X,SI),(T1Y,ALP),(T1Z,BET),(T2X,ICON1),(T2Y,ICON2),(
    &T2Z,ITAG)
     M= M+1
     MI= LD+1- M
     NTP= NY
     IF( NX.GT.0) NTP=2
     IF( NTP.GT.1) GOTO 2
     X( MI)= X1
     Y( MI)= Y1
     Z( MI)= Z1
     BI( MI)= Z2
     ZNV= COS( X2)
     XNV= ZNV* COS( Y2)
     YNV= ZNV* SIN( Y2)
     ZNV= SIN( X2)
     XA= SQRT( XNV* XNV+ YNV* YNV)
     IF( XA.LT.1.D-6) GOTO 1
     T1X( MI)=- YNV/ XA
     T1Y( MI)= XNV/ XA
     T1Z( MI)=0.
     GOTO 6
   1 T1X( MI)=1.
     T1Y( MI)=0.
     T1Z( MI)=0.
     GOTO 6
   2 S1X= X2- X1
     S1Y= Y2- Y1
     S1Z= Z2- Z1
     S2X= X3- X2
     S2Y= Y3- Y2
     S2Z= Z3- Z2
     IF( NX.EQ.0) GOTO 3
     S1X= S1X/ NX
     S1Y= S1Y/ NX
     S1Z= S1Z/ NX
     S2X= S2X/ NY
     S2Y= S2Y/ NY
     S2Z= S2Z/ NY
   3 XNV= S1Y* S2Z- S1Z* S2Y
     YNV= S1Z* S2X- S1X* S2Z
     ZNV= S1X* S2Y- S1Y* S2X
     XA= SQRT( XNV* XNV+ YNV* YNV+ ZNV* ZNV)
     XNV= XNV/ XA
     YNV= YNV/ XA
     ZNV= ZNV/ XA
     XST= SQRT( S1X* S1X+ S1Y* S1Y+ S1Z* S1Z)
     T1X( MI)= S1X/ XST
     T1Y( MI)= S1Y/ XST
     T1Z( MI)= S1Z/ XST
     IF( NTP.GT.2) GOTO 4
     X( MI)= X1+.5*( S1X+ S2X)
     Y( MI)= Y1+.5*( S1Y+ S2Y)
     Z( MI)= Z1+.5*( S1Z+ S2Z)
     BI( MI)= XA
     GOTO 6
   4 IF( NTP.EQ.4) GOTO 5
     X( MI)=( X1+ X2+ X3)/3.
     Y( MI)=( Y1+ Y2+ Y3)/3.
     Z( MI)=( Z1+ Z2+ Z3)/3.
     BI( MI)=.5* XA
     GOTO 6
   5 S1X= X3- X1
     S1Y= Y3- Y1
     S1Z= Z3- Z1
     S2X= X4- X1
     S2Y= Y4- Y1
     S2Z= Z4- Z1
     XN2= S1Y* S2Z- S1Z* S2Y
     YN2= S1Z* S2X- S1X* S2Z
     ZN2= S1X* S2Y- S1Y* S2X
     XST= SQRT( XN2* XN2+ YN2* YN2+ ZN2* ZN2)
     SALPN=1./(3.*( XA+ XST))
     X( MI)=( XA*( X1+ X2+ X3)+ XST*( X1+ X3+ X4))* SALPN
     Y( MI)=( XA*( Y1+ Y2+ Y3)+ XST*( Y1+ Y3+ Y4))* SALPN
     Z( MI)=( XA*( Z1+ Z2+ Z3)+ XST*( Z1+ Z3+ Z4))* SALPN
     BI( MI)=.5*( XA+ XST)
     S1X=( XNV* XN2+ YNV* YN2+ ZNV* ZN2)/ XST
     IF( S1X.GT.0.9998) GOTO 6
     WRITE( 6,14)
     STOP
   6 T2X( MI)= YNV* T1Z( MI)- ZNV* T1Y( MI)
     T2Y( MI)= ZNV* T1X( MI)- XNV* T1Z( MI)
     T2Z( MI)= XNV* T1Y( MI)- YNV* T1X( MI)
     SALP( MI)=1.
     IF( NX.EQ.0) GOTO 8
     M= M+ NX* NY-1
     XN2= X( MI)- S1X- S2X
     YN2= Y( MI)- S1Y- S2Y
     ZN2= Z( MI)- S1Z- S2Z
     XS= T1X( MI)
     YS= T1Y( MI)
     ZS= T1Z( MI)
     XT= T2X( MI)
     YT= T2Y( MI)
     ZT= T2Z( MI)
     MI= MI+1
     DO 7  IY=1, NY
     XN2= XN2+ S2X
     YN2= YN2+ S2Y
     ZN2= ZN2+ S2Z
     DO 7  IX=1, NX
     XST= IX
     MI= MI-1
     X( MI)= XN2+ XST* S1X
     Y( MI)= YN2+ XST* S1Y
     Z( MI)= ZN2+ XST* S1Z
     BI( MI)= XA
     SALP( MI)=1.
     T1X( MI)= XS
     T1Y( MI)= YS
     T1Z( MI)= ZS
     T2X( MI)= XT
     T2Y( MI)= YT
   7 T2Z( MI)= ZT
   8 IPSYM=0
     NP= N
     MP= M
C     DIVIDE PATCH FOR WIRE CONNECTION
     RETURN
     ENTRY SUBPH( NX, NY, X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, X4, Y4,
    &Z4)
     IF( NY.GT.0) GOTO 10
     IF( NX.EQ. M) GOTO 10
     NXP= NX+1
     IX= LD- M
     DO 9  IY= NXP, M
     IX= IX+1
     NYP= IX-3
     X( NYP)= X( IX)
     Y( NYP)= Y( IX)
     Z( NYP)= Z( IX)
     BI( NYP)= BI( IX)
     SALP( NYP)= SALP( IX)
     T1X( NYP)= T1X( IX)
     T1Y( NYP)= T1Y( IX)
     T1Z( NYP)= T1Z( IX)
     T2X( NYP)= T2X( IX)
     T2Y( NYP)= T2Y( IX)
   9 T2Z( NYP)= T2Z( IX)
  10 MI= LD+1- NX
     XS= X( MI)
     YS= Y( MI)
     ZS= Z( MI)
     XA= BI( MI)*.25
     XST= SQRT( XA)*.5
     S1X= T1X( MI)
     S1Y= T1Y( MI)
     S1Z= T1Z( MI)
     S2X= T2X( MI)
     S2Y= T2Y( MI)
     S2Z= T2Z( MI)
     SALN= SALP( MI)
     XT= XST
     YT= XST
     IF( NY.GT.0) GOTO 11
     MIA= MI
     GOTO 12
  11 M= M+1
     MP= MP+1
     MIA= LD+1- M
  12 DO 13  IX=1,4
     X( MIA)= XS+ XT* S1X+ YT* S2X
     Y( MIA)= YS+ XT* S1Y+ YT* S2Y
     Z( MIA)= ZS+ XT* S1Z+ YT* S2Z
     BI( MIA)= XA
     T1X( MIA)= S1X
     T1Y( MIA)= S1Y
     T1Z( MIA)= S1Z
     T2X( MIA)= S2X
     T2Y( MIA)= S2Y
     T2Z( MIA)= S2Z
     SALP( MIA)= SALN
     IF( IX.EQ.2) YT=- YT
     IF( IX.EQ.1.OR. IX.EQ.3) XT=- XT
     MIA= MIA-1
  13 CONTINUE
     M= M+3
     IF( NX.LE. MP) MP= MP+3
     IF( NY.GT.0) Z( MI)=10000.
C
     RETURN
  14 FORMAT(' ERROR -- CORNERS OF QUADRILATERAL PATCH DO NOT LIE IN ',
    &'A PLANE')
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE PCINT( XI, YI, ZI, CABI, SABI, SALPI, E)
C ***
C     INTEGRATE OVER PATCHES AT WIRE CONNECTION POINT
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  EXK, EYK, EZK, EXS, EYS, EZS, EXC, EYC, EZC, E, E1,
    &E2, E3, E4, E5, E6, E7, E8, E9
     COMMON  /DATAJ/ S, B, XJ, YJ, ZJ, CABJ, SABJ, SALPJ, EXK, EYK,
    &EZK, EXS, EYS, EZS, EXC, EYC, EZC, RKH, IEXK, IND1, INDD1, IND2,
    &INDD2, PGND
     DIMENSION  E(9)
     EQUIVALENCE(T1XJ,CABJ),(T1YJ,SABJ),(T1ZJ,SALPJ),(T2XJ,B),(T2YJ,
    &IND1),(T2ZJ,IND2)
     DATA   TPI/6.283185308D+0/, NINT/10/
     D= SQRT( S)*.5
     DS=4.* D/ DFLOAT( NINT)
     DA= DS* DS
     GCON=1./ S
     FCON=1./(2.* TPI* D)
     XXJ= XJ
     XYJ= YJ
     XZJ= ZJ
     XS= S
     S= DA
     S1= D+ DS*.5
     XSS= XJ+ S1*( T1XJ+ T2XJ)
     YSS= YJ+ S1*( T1YJ+ T2YJ)
     ZSS= ZJ+ S1*( T1ZJ+ T2ZJ)
     S1= S1+ D
     S2X= S1
     E1=(0.,0.)
     E2=(0.,0.)
     E3=(0.,0.)
     E4=(0.,0.)
     E5=(0.,0.)
     E6=(0.,0.)
     E7=(0.,0.)
     E8=(0.,0.)
     E9=(0.,0.)
     DO 1  I1=1, NINT
     S1= S1- DS
     S2= S2X
     XSS= XSS- DS* T1XJ
     YSS= YSS- DS* T1YJ
     ZSS= ZSS- DS* T1ZJ
     XJ= XSS
     YJ= YSS
     ZJ= ZSS
     DO 1  I2=1, NINT
     S2= S2- DS
     XJ= XJ- DS* T2XJ
     YJ= YJ- DS* T2YJ
     ZJ= ZJ- DS* T2ZJ
     CALL UNERE( XI, YI, ZI)
     EXK= EXK* CABI+ EYK* SABI+ EZK* SALPI
     EXS= EXS* CABI+ EYS* SABI+ EZS* SALPI
     G1=( D+ S1)*( D+ S2)* GCON
     G2=( D- S1)*( D+ S2)* GCON
     G3=( D- S1)*( D- S2)* GCON
     G4=( D+ S1)*( D- S2)* GCON
     F2=( S1* S1+ S2* S2)* TPI
     F1= S1/ F2-( G1- G2- G3+ G4)* FCON
     F2= S2/ F2-( G1+ G2- G3- G4)* FCON
     E1= E1+ EXK* G1
     E2= E2+ EXK* G2
     E3= E3+ EXK* G3
     E4= E4+ EXK* G4
     E5= E5+ EXS* G1
     E6= E6+ EXS* G2
     E7= E7+ EXS* G3
     E8= E8+ EXS* G4
   1 E9= E9+ EXK* F1+ EXS* F2
     E(1)= E1
     E(2)= E2
     E(3)= E3
     E(4)= E4
     E(5)= E5
     E(6)= E6
     E(7)= E7
     E(8)= E8
     E(9)= E9
     XJ= XXJ
     YJ= XYJ
     ZJ= XZJ
     S= XS
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE PRNT( IN1, IN2, IN3, FL1, FL2, FL3, FL4, FL5, FL6, IA,
    & ICHAR)
C ***
C
C     PRNT SETS UP THE PRINT FORMATS FOR IMPEDANCE LOADING
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     REAL  IFORM, IVAR
     DIMENSION  IVAR(13), IA(1), IFORM(8), IN(3), INT(3), FL(6), FLT(6
    &)
     INTEGER  HALL
C
C     NUMBER OF CHARACTERS PER COMPUTER WORD IS NCPW
C
     DATA   IFORM/5H(/3X,,3HI5,,3H5X,,3HA5,,6HE13.4,,4H13X,,3H3X,,
    &4H5A4)/
     DATA   HALL/4H ALL/
     IN(1)= IN1
     IN(2)= IN2
     IN(3)= IN3
     FL(1)= FL1
     FL(2)= FL2
     FL(3)= FL3
     FL(4)= FL4
     FL(5)= FL5
C
C     INTEGER FORMAT
C
     FL(6)= FL6
     NINT=0
     IVAR(1)= IFORM(1)
     K=1
     I1=1
     IF(.NOT.( IN1.EQ.0.AND. IN2.EQ.0.AND. IN3.EQ.0)) GOTO 1
     INT(1)= HALL
     NINT=1
     I1=2
     K= K+1
     IVAR( K)= IFORM(4)
   1 DO 3  I= I1,3
     K= K+1
     IF( IN( I).EQ.0) GOTO 2
     NINT= NINT+1
     INT( NINT)= IN( I)
     IVAR( K)= IFORM(2)
     GOTO 3
   2 IVAR( K)= IFORM(3)
   3 CONTINUE
     K= K+1
C
C     DFLOATING POINT FORMAT
C
     IVAR( K)= IFORM(7)
     NFLT=0
     DO 5  I=1,6
     K= K+1
     IF( ABS( FL( I)).LT.1.D-20) GOTO 4
     NFLT= NFLT+1
     FLT( NFLT)= FL( I)
     IVAR( K)= IFORM(5)
     GOTO 5
   4 IVAR( K)= IFORM(6)
   5 CONTINUE
     K= K+1
     IVAR( K)= IFORM(7)
     K= K+1
     IVAR( K)= IFORM(8)
     WRITE( 6,IVAR) ( INT( I), I=1, NINT),( FLT( J), J=1, NFLT),( IA(
    &L), L=1, ICHAR)
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE QDSRC( IS, V, E)
C ***
C     FILL INCIDENT FIELD ARRAY FOR CHARGE DISCONTINUITY VOLTAGE SOURCE
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  VQDS, CURD, CCJ, V, EXK, EYK, EZK, EXS, EYS, EZS, EXC
    &, EYC, EZC, ETK, ETS, ETC, VSANT, VQD, E, ZARRAY
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /VSORC/ VQD(30), VSANT(30), VQDS(30), IVQD(30), ISANT(30)
    &, IQDS(30), NVQD, NSANT, NQDS
     COMMON  /SEGJ/ AX(30), BX(30), CX(30), JCO(30), JSNO, ISCON(50),
    &NSCON, IPCON(10), NPCON
     COMMON  /DATAJ/ S, B, XJ, YJ, ZJ, CABJ, SABJ, SALPJ, EXK, EYK,
    &EZK, EXS, EYS, EZS, EXC, EYC, EZC, RKH, IEXK, IND1, INDD1, IND2,
    &INDD2, IPGND
     COMMON  /ANGL/ SALP( NM)
     COMMON  /ZLOAD/ ZARRAY( NM), NLOAD, NLODF
     DIMENSION  CCJX(2), E(1), CAB(1), SAB(1)
     DIMENSION  T1X(1), T1Y(1), T1Z(1), T2X(1), T2Y(1), T2Z(1)
     EQUIVALENCE(CCJ,CCJX),(CAB,ALP),(SAB,BET)
     EQUIVALENCE(T1X,SI),(T1Y,ALP),(T1Z,BET),(T2X,ICON1),(T2Y,ICON2),(
    &T2Z,ITAG)
     DATA   TP/6.283185308D+0/, CCJX/0.,-.01666666667D+0/
     I= ICON1( IS)
     ICON1( IS)=0
     CALL TBF( IS,0)
     ICON1( IS)= I
     S= SI( IS)*.5
     CURD= CCJ* V/(( LOG(2.* S/ BI( IS))-1.)*( BX( JSNO)* COS( TP* S)+
    & CX( JSNO)* SIN( TP* S))* WLAM)
     NQDS= NQDS+1
     VQDS( NQDS)= V
     IQDS( NQDS)= IS
     DO 20  JX=1, JSNO
     J= JCO( JX)
     S= SI( J)
     B= BI( J)
     XJ= X( J)
     YJ= Y( J)
     ZJ= Z( J)
     CABJ= CAB( J)
     SABJ= SAB( J)
     SALPJ= SALP( J)
     IF( IEXK.EQ.0) GOTO 16
     IPR= ICON1( J)
     IF( IPR) 1,6,2
   1 IPR=- IPR
     IF(- ICON1( IPR).NE. J) GOTO 7
     GOTO 4
   2 IF( IPR.NE. J) GOTO 3
     IF( CABJ* CABJ+ SABJ* SABJ.GT.1.D-8) GOTO 7
     GOTO 5
   3 IF( ICON2( IPR).NE. J) GOTO 7
   4 XI= ABS( CABJ* CAB( IPR)+ SABJ* SAB( IPR)+ SALPJ* SALP( IPR))
     IF( XI.LT.0.999999D+0) GOTO 7
     IF( ABS( BI( IPR)/ B-1.).GT.1.D-6) GOTO 7
   5 IND1=0
     GOTO 8
   6 IND1=1
     GOTO 8
   7 IND1=2
   8 IPR= ICON2( J)
     IF( IPR) 9,14,10
   9 IPR=- IPR
     IF(- ICON2( IPR).NE. J) GOTO 15
     GOTO 12
  10 IF( IPR.NE. J) GOTO 11
     IF( CABJ* CABJ+ SABJ* SABJ.GT.1.D-8) GOTO 15
     GOTO 13
  11 IF( ICON1( IPR).NE. J) GOTO 15
  12 XI= ABS( CABJ* CAB( IPR)+ SABJ* SAB( IPR)+ SALPJ* SALP( IPR))
     IF( XI.LT.0.999999D+0) GOTO 15
     IF( ABS( BI( IPR)/ B-1.).GT.1.D-6) GOTO 15
  13 IND2=0
     GOTO 16
  14 IND2=1
     GOTO 16
  15 IND2=2
  16 CONTINUE
     DO 17  I=1, N
     IJ= I- J
     XI= X( I)
     YI= Y( I)
     ZI= Z( I)
     AI= BI( I)
     CALL EFLD( XI, YI, ZI, AI, IJ)
     CABI= CAB( I)
     SABI= SAB( I)
     SALPI= SALP( I)
     ETK= EXK* CABI+ EYK* SABI+ EZK* SALPI
     ETS= EXS* CABI+ EYS* SABI+ EZS* SALPI
     ETC= EXC* CABI+ EYC* SABI+ EZC* SALPI
  17 E( I)= E( I)-( ETK* AX( JX)+ ETS* BX( JX)+ ETC* CX( JX))* CURD
     IF( M.EQ.0) GOTO 19
     IJ= LD+1
     I1= N
     DO 18  I=1, M
     IJ= IJ-1
     XI= X( IJ)
     YI= Y( IJ)
     ZI= Z( IJ)
     CALL HSFLD( XI, YI, ZI,0.)
     I1= I1+1
     TX= T2X( IJ)
     TY= T2Y( IJ)
     TZ= T2Z( IJ)
     ETK= EXK* TX+ EYK* TY+ EZK* TZ
     ETS= EXS* TX+ EYS* TY+ EZS* TZ
     ETC= EXC* TX+ EYC* TY+ EZC* TZ
     E( I1)= E( I1)+( ETK* AX( JX)+ ETS* BX( JX)+ ETC* CX( JX))* CURD*
    & SALP( IJ)
     I1= I1+1
     TX= T1X( IJ)
     TY= T1Y( IJ)
     TZ= T1Z( IJ)
     ETK= EXK* TX+ EYK* TY+ EZK* TZ
     ETS= EXS* TX+ EYS* TY+ EZS* TZ
     ETC= EXC* TX+ EYC* TY+ EZC* TZ
  18 E( I1)= E( I1)+( ETK* AX( JX)+ ETS* BX( JX)+ ETC* CX( JX))* CURD*
    & SALP( IJ)
  19 IF( NLOAD.GT.0.OR. NLODF.GT.0) E( J)= E( J)+ ZARRAY( J)* CURD*(
    &AX( JX)+ CX( JX))
  20 CONTINUE
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE RDPAT
C ***
C     COMPUTE RADIATION PATTERN, GAIN, NORMALIZED GAIN
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
C     INTEGER HPOL,HBLK,HCIR,HCLIF
     REAL  IGNTP, IGAX, IGTP, HCIR, HBLK, HPOL, HCLIF, ISENS, COM
     COMPLEX  ETH, EPH, ERD, ZRATI, ZRATI2, T1, FRATI
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /SAVE/ IP( N2M), KCOM, COM(19,5), EPSR, SIG, SCRWLT,
    &SCRWRT, FMHZ
     COMMON  /GND/ ZRATI, ZRATI2, FRATI, CL, CH, SCRWL, SCRWR, NRADL,
    &KSYMP, IFAR, IPERF, T1, T2
     COMMON  /FPAT/ NTH, NPH, IPD, IAVP, INOR, IAX, THETS, PHIS, DTH,
    &DPH, RFLD, GNOR, CLT, CHT, EPSR2, SIG2, IXTYP, XPR6, PINR, PNLR,
    &PLOSS, NEAR, NFEH, NRX, NRY, NRZ, XNR, YNR, ZNR, DXNR, DYNR, DZNR
    &
C***
     COMMON  /SCRATM/ GAIN(1200)
C***
     COMMON  /PLOT/ IPLP1, IPLP2, IPLP3, IPLP4
     DIMENSION  IGTP(4), IGAX(4), IGNTP(10), HPOL(3)
     DATA   HPOL/6HLINEAR,5HRIGHT,4HLEFT/, HBLK, HCIR/1H ,6HCIRCLE/
     DATA   IGTP/6H    - ,6HPOWER ,6H- DIRE,6HCTIVE /
     DATA   IGAX/6H MAJOR,6H MINOR,6H VERT.,6H HOR. /
     DATA   IGNTP/6H MAJOR,6H AXIS ,6H MINOR,6H AXIS ,6H   VER,
    &6HTICAL ,6H HORIZ,6HONTAL ,6H      ,6HTOTAL /
     DATA   PI, TA, TD/3.141592654D+0,1.745329252D-02,57.29577951D+0/
     DATA   NORMAX/1200/
     IF( IFAR.LT.2) GOTO 2
     WRITE( 6,35)
     IF( IFAR.LE.3) GOTO 1
     WRITE( 6,36)  NRADL, SCRWLT, SCRWRT
     IF( IFAR.EQ.4) GOTO 2
   1 IF( IFAR.EQ.2.OR. IFAR.EQ.5) HCLIF= HPOL(1)
     IF( IFAR.EQ.3.OR. IFAR.EQ.6) HCLIF= HCIR
     CL= CLT/ WLAM
     CH= CHT/ WLAM
     ZRATI2= SQRT(1./ CMPLX( EPSR2,- SIG2* WLAM*59.96))
     WRITE( 6,37)  HCLIF, CLT, CHT, EPSR2, SIG2
   2 IF( IFAR.NE.1) GOTO 3
     WRITE( 6,41)
     GOTO 5
   3 I=2* IPD+1
     J= I+1
     ITMP1=2* IAX+1
     ITMP2= ITMP1+1
     WRITE( 6,38)
     IF( RFLD.LT.1.D-20) GOTO 4
     EXRM=1./ RFLD
     EXRA= RFLD/ WLAM
     EXRA=-360.*( EXRA- AINT( EXRA))
     WRITE( 6,39)  RFLD, EXRM, EXRA
   4 WRITE( 6,40)  IGTP( I), IGTP( J), IGAX( ITMP1), IGAX( ITMP2)
   5 IF( IXTYP.EQ.0.OR. IXTYP.EQ.5) GOTO 7
     IF( IXTYP.EQ.4) GOTO 6
     PRAD=0.
     GCON=4.* PI/(1.+ XPR6* XPR6)
     GCOP= GCON
     GOTO 8
   6 PINR=394.51* XPR6* XPR6* WLAM* WLAM
   7 GCOP= WLAM* WLAM*2.* PI/(376.73* PINR)
     PRAD= PINR- PLOSS- PNLR
     GCON= GCOP
     IF( IPD.NE.0) GCON= GCON* PINR/ PRAD
   8 I=0
     GMAX=-1.E10
     PINT=0.
     TMP1= DPH* TA
     TMP2=.5* DTH* TA
     PHI= PHIS- DPH
     DO 29  KPH=1, NPH
     PHI= PHI+ DPH
     PHA= PHI* TA
     THET= THETS- DTH
     DO 29  KTH=1, NTH
     THET= THET+ DTH
     IF( KSYMP.EQ.2.AND. THET.GT.90.01.AND. IFAR.NE.1) GOTO 29
     THA= THET* TA
     IF( IFAR.EQ.1) GOTO 9
     CALL FFLD( THA, PHA, ETH, EPH)
     GOTO 10
   9 CALL GFLD( RFLD/ WLAM, PHA, THET/ WLAM, ETH, EPH, ERD, ZRATI,
    &KSYMP)
     ERDM= ABS( ERD)
     ERDA= CANG( ERD)
  10 ETHM2= REAL( ETH* CONJG( ETH))
     ETHM= SQRT( ETHM2)
     ETHA= CANG( ETH)
     EPHM2= REAL( EPH* CONJG( EPH))
     EPHM= SQRT( EPHM2)
     EPHA= CANG( EPH)
C     ELLIPTICAL POLARIZATION CALC.
     IF( IFAR.EQ.1) GOTO 28
     IF( ETHM2.GT.1.D-20.OR. EPHM2.GT.1.D-20) GOTO 11
     TILTA=0.
     EMAJR2=0.
     EMINR2=0.
     AXRAT=0.
     ISENS= HBLK
     GOTO 16
  11 DFAZ= EPHA- ETHA
     IF( EPHA.LT.0.) GOTO 12
     DFAZ2= DFAZ-360.
     GOTO 13
  12 DFAZ2= DFAZ+360.
  13 IF( ABS( DFAZ).GT. ABS( DFAZ2)) DFAZ= DFAZ2
     CDFAZ= COS( DFAZ* TA)
     TSTOR1= ETHM2- EPHM2
     TSTOR2=2.* EPHM* ETHM* CDFAZ
     TILTA=.5* ATGN2( TSTOR2, TSTOR1)
     STILTA= SIN( TILTA)
     TSTOR1= TSTOR1* STILTA* STILTA
     TSTOR2= TSTOR2* STILTA* COS( TILTA)
     EMAJR2=- TSTOR1+ TSTOR2+ ETHM2
     EMINR2= TSTOR1- TSTOR2+ EPHM2
     IF( EMINR2.LT.0.) EMINR2=0.
     AXRAT= SQRT( EMINR2/ EMAJR2)
     TILTA= TILTA* TD
     IF( AXRAT.GT.1.D-5) GOTO 14
     ISENS= HPOL(1)
     GOTO 16
  14 IF( DFAZ.GT.0.) GOTO 15
     ISENS= HPOL(2)
     GOTO 16
  15 ISENS= HPOL(3)
  16 GNMJ= DB10( GCON* EMAJR2)
     GNMN= DB10( GCON* EMINR2)
     GNV= DB10( GCON* ETHM2)
     GNH= DB10( GCON* EPHM2)
     GTOT= DB10( GCON*( ETHM2+ EPHM2))
     IF( INOR.LT.1) GOTO 23
     I= I+1
     IF( I.GT. NORMAX) GOTO 23
     GOTO (17,18,19,20,21), INOR
  17 TSTOR1= GNMJ
     GOTO 22
  18 TSTOR1= GNMN
     GOTO 22
  19 TSTOR1= GNV
     GOTO 22
  20 TSTOR1= GNH
     GOTO 22
  21 TSTOR1= GTOT
  22 GAIN( I)= TSTOR1
     IF( TSTOR1.GT. GMAX) GMAX= TSTOR1
  23 IF( IAVP.EQ.0) GOTO 24
     TSTOR1= GCOP*( ETHM2+ EPHM2)
     TMP3= THA- TMP2
     TMP4= THA+ TMP2
     IF( KTH.EQ.1) TMP3= THA
     IF( KTH.EQ. NTH) TMP4= THA
     DA= ABS( TMP1*( COS( TMP3)- COS( TMP4)))
     IF( KPH.EQ.1.OR. KPH.EQ. NPH) DA=.5* DA
     PINT= PINT+ TSTOR1* DA
     IF( IAVP.EQ.2) GOTO 29
  24 IF( IAX.EQ.1) GOTO 25
     TMP5= GNMJ
     TMP6= GNMN
     GOTO 26
  25 TMP5= GNV
     TMP6= GNH
  26 ETHM= ETHM* WLAM
     EPHM= EPHM* WLAM
     IF( RFLD.LT.1.D-20) GOTO 27
     ETHM= ETHM* EXRM
     ETHA= ETHA+ EXRA
     EPHM= EPHM* EXRM
     EPHA= EPHA+ EXRA
C      GO TO 29
C***
C28    WRITE(6,43)  RFLD,PHI,THET,ETHM,ETHA,EPHM,EPHA,ERDM,ERDA
  27 WRITE( 6,42)  THET, PHI, TMP5, TMP6, GTOT, AXRAT, TILTA, ISENS,
    &ETHM, ETHA, EPHM, EPHA
     IF( IPLP1.NE.3) GOTO 299
     IF( IPLP3.EQ.0) GOTO 290
     IF( IPLP2.EQ.1.AND. IPLP3.EQ.1) WRITE( 8,*)  THET, ETHM, ETHA
     IF( IPLP2.EQ.1.AND. IPLP3.EQ.2) WRITE( 8,*)  THET, EPHM, EPHA
     IF( IPLP2.EQ.2.AND. IPLP3.EQ.1) WRITE( 8,*)  PHI, ETHM, ETHA
     IF( IPLP2.EQ.2.AND. IPLP3.EQ.2) WRITE( 8,*)  PHI, EPHM, EPHA
     IF( IPLP4.EQ.0) GOTO 299
 290 IF( IPLP2.EQ.1.AND. IPLP4.EQ.1) WRITE( 8,*)  THET, TMP5
     IF( IPLP2.EQ.1.AND. IPLP4.EQ.2) WRITE( 8,*)  THET, TMP6
     IF( IPLP2.EQ.1.AND. IPLP4.EQ.3) WRITE( 8,*)  THET, GTOT
     IF( IPLP2.EQ.2.AND. IPLP4.EQ.1) WRITE( 8,*)  PHI, TMP5
     IF( IPLP2.EQ.2.AND. IPLP4.EQ.2) WRITE( 8,*)  PHI, TMP6
     IF( IPLP2.EQ.2.AND. IPLP4.EQ.3) WRITE( 8,*)  PHI, GTOT
     GOTO 299
  28 WRITE( 6,43)  RFLD, PHI, THET, ETHM, ETHA, EPHM, EPHA, ERDM, ERDA
    &
C***
 299 CONTINUE
  29 CONTINUE
     IF( IAVP.EQ.0) GOTO 30
     TMP3= THETS* TA
     TMP4= TMP3+ DTH* TA* DFLOAT( NTH-1)
     TMP3= ABS( DPH* TA* DFLOAT( NPH-1)*( COS( TMP3)- COS( TMP4)))
     PINT= PINT/ TMP3
     TMP3= TMP3/ PI
     WRITE( 6,44)  PINT, TMP3
  30 IF( INOR.EQ.0) GOTO 34
     IF( ABS( GNOR).GT.1.D-20) GMAX= GNOR
     ITMP1=( INOR-1)*2+1
     ITMP2= ITMP1+1
     WRITE( 6,45)  IGNTP( ITMP1), IGNTP( ITMP2), GMAX
     ITMP2= NPH* NTH
     IF( ITMP2.GT. NORMAX) ITMP2= NORMAX
     ITMP1=( ITMP2+2)/3
     ITMP2= ITMP1*3- ITMP2
     ITMP3= ITMP1
     ITMP4=2* ITMP1
     IF( ITMP2.EQ.2) ITMP4= ITMP4-1
     DO 31  I=1, ITMP1
     ITMP3= ITMP3+1
     ITMP4= ITMP4+1
     J=( I-1)/ NTH
     TMP1= THETS+ DFLOAT( I- J* NTH-1)* DTH
     TMP2= PHIS+ DFLOAT( J)* DPH
     J=( ITMP3-1)/ NTH
     TMP3= THETS+ DFLOAT( ITMP3- J* NTH-1)* DTH
     TMP4= PHIS+ DFLOAT( J)* DPH
     J=( ITMP4-1)/ NTH
     TMP5= THETS+ DFLOAT( ITMP4- J* NTH-1)* DTH
     TMP6= PHIS+ DFLOAT( J)* DPH
     TSTOR1= GAIN( I)- GMAX
     IF( I.EQ. ITMP1.AND. ITMP2.NE.0) GOTO 32
     TSTOR2= GAIN( ITMP3)- GMAX
     PINT= GAIN( ITMP4)- GMAX
  31 WRITE( 6,46)  TMP1, TMP2, TSTOR1, TMP3, TMP4, TSTOR2, TMP5, TMP6,
    & PINT
     GOTO 34
  32 IF( ITMP2.EQ.2) GOTO 33
     TSTOR2= GAIN( ITMP3)- GMAX
     WRITE( 6,46)  TMP1, TMP2, TSTOR1, TMP3, TMP4, TSTOR2
     GOTO 34
  33 WRITE( 6,46)  TMP1, TMP2, TSTOR1
C
  34 RETURN
  35 FORMAT(///,31X,'- - - FAR FIELD GROUND PARAMETERS - - -',//)
  36 FORMAT(40X,'RADIAL WIRE GROUND SCREEN',/,40X,I5,' WIRES',/,40X,
    &'WIRE LENGTH=',F8.2,' METERS',/,40X,'WIRE RADIUS=',1P,E10.3,
    &' METERS')
  37 FORMAT(40X,A6,' CLIFF',/,40X,'EDGE DISTANCE=',F9.2,' METERS',/,40
    &X,'HEIGHT=',F8.2,' METERS',/,40X,'SECOND MEDIUM -',/,40X,'RELA',
    &'TIVE DIELECTRIC CONST.=',F7.3,/,40X,'CONDUCTIVITY=',1P,E10.3,
    &' MHOS')
  38 FORMAT(///,48X,'- - - RADIATION PATTERNS - - -')
  39 FORMAT(54X,'RANGE=',1P,E13.6,' METERS',/,54X,'EXP(-JKR)/R=',E12.5
    &,' AT PHASE',0P,F7.2,' DEGREES',/)
  40 FORMAT(/,2X,'- - ANGLES - -',7X,2A6,'GAINS -',7X,'- - - POLARI',
    &'ZATION - - -',4X,'- - - E(THETA) - - -',4X,'- - - E(PHI) - -',
    &' -',/,2X,'THETA',5X,'PHI',7X,A6,2X,A6,3X,'TOTAL',6X,'AXIAL',5X,
    &'TILT',3X,'SENSE',2(5X,'MAGNITUDE',4X,'PHASE'),/,2(1X,'DEGREES',1
    &X),3(6X,'DB'),8X,'RATIO',5X,'DEG.',8X,2(6X,'VOLTS/M',4X,'DEGRE',
    &'ES'))
  41 FORMAT(///,28X,' - - - RADIATED FIELDS NEAR GROUND - - -',//,8X,
    &'- - - LOCATION - - -',10X,'- - E(THETA) - -',8X,'- - E(PHI) -'
    &' -',8X,'- - E(RADIAL) - -',/,7X,'RHO',6X,'PHI',9X,'Z',12X,'MAG',
    &6X,'PHASE',9X,'MAG',6X,'PHASE',9X,'MAG',6X,'PHASE',/,5X,'METERS',
    &3X,'DEGREES',4X,'METERS',8X,'VOLTS/M',3X,'DEGREES',6X,'VOLTS/M',3
    &X,'DEGREES',6X,'VOLTS/M',3X,'DEGREES',/)
  42 FORMAT(1X,F7.2,F9.2,3X,3F8.2,F11.5,F9.2,2X,A6,2(1P,E15.5,0P,F9.2)
    &)
  43 FORMAT(3X,F9.2,2X,F7.2,2X,F9.2,1X,3(3X,1P,E11.4,2X,0P,F7.2))
  44 FORMAT(//,3X,'AVERAGE POWER GAIN=',1P,E12.5,7X,'SOLID ANGLE U',
    &'SED IN AVERAGING=(',0P,F7.4,')*PI STERADIANS.',//)
  45 FORMAT(//,37X,'- - - - NORMALIZED GAIN - - - -',//,37X,2A6,'GAI',
    &'N',/,38X,'NORMALIZATION FACTOR =',F9.2,' DB',//,3(4X,
    &'- - ANGLES'' - -',6X,'GAIN',7X),/,3(4X,'THETA',5X,'PHI',8X,'DB',
    &8X),/,3(3X,'DEGREES',2X,'DEGREES',16X))
  46 FORMAT(3(1X,2F9.2,1X,F9.2,6X))
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE READGM( GM, I1, I2, X1, Y1, Z1, X2, Y2, Z2, RAD)
C ***
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     INTEGER*4 NTOT
     INTEGER*4 NINT
     INTEGER*4 NFLT
     PARAMETER (NTOT=9, NINT=2, NFLT=7)
     INTEGER  IARR( NINT), BP( NTOT), EP( NTOT)
     DIMENSION  RARR( NFLT)
     CHARACTER   LINE*133, GM*2, BUFFER*132, BUFFER1*132
     READ( 5,10)  LINE
  10 FORMAT(A)
     NLIN= LEN(LINE)
     CALL STR0PC( LINE(1: NLIN), LINE(1: NLIN))
     IF( NLIN.LT.2) GOTO 110
     IF( NLIN.LE.132) GOTO 20
     NLIN=132
     LINE(133:133)=' '
  20 GM= LINE(1:2)
     NLIN= NLIN+1
     DO 30  I=1, NINT
  30 IARR( I)=0
     DO 40  I=1, NFLT
  40 RARR( I)=0.0
     IC=2
     IFOUND=0
     DO 70  I=1, NTOT
  50 IC= IC+1
     IF( IC.GE. NLIN) GOTO 80
     IF( LINE( IC: IC).EQ.' '.OR. LINE( IC: IC).EQ.',') GOTO 50
C BEGINNING OF I-TH NUMERICAL FIELD
     BP( I)= IC
  60 IC= IC+1
     IF( IC.GT. NLIN) GOTO 80
     IF( LINE( IC: IC).NE.' '.AND. LINE( IC: IC).NE.',') GOTO 60
C END OF I-TH NUMERICAL FIELD
     EP( I)= IC-1
     IFOUND= I
  70 CONTINUE
  80 CONTINUE
     DO 90  I=1, MIN( IFOUND, NINT)
     NLEN= EP( I)- BP( I)+1
     BUFFER= LINE( BP( I): EP( I))
     IND= INDEX( BUFFER(1: NLEN),'.')
     IF( IND.GT.0.AND. IND.LT. NLEN) GOTO 110
C USER PUT DECIMAL POINT FOR INTEGER
     IF( IND.EQ. NLEN) NLEN= NLEN-1
     READ( BUFFER(1: NLEN),111,ERR=110)  IARR( I)
111   format(i3)
  90 CONTINUE
     DO 100  I= NINT+1, IFOUND
     NLEN= EP( I)- BP( I)+1
     BUFFER= LINE( BP( I): EP( I))
     IND= INDEX( BUFFER(1: NLEN),'.')
C USER FORGOT DECIMAL POINT FOR REAL
     IF( IND.EQ.0) THEN
     IF( NLEN.GE.15) GOTO 110
     INDE= INDEX( BUFFER(1: NLEN),'E')
     NLEN= NLEN+1
     IF( INDE.EQ.0) THEN
     BUFFER( NLEN: NLEN)='.'
     ELSE
     BUFFER1= BUFFER(1: INDD-1)//'.'// BUFFER( INDE: NLEN-1)
     BUFFER= BUFFER1
     ENDIF
     ENDIF
     READ( BUFFER(1: NLEN),112,ERR=110)  RARR( I- NINT)
 112 format (F15.7)
 100 CONTINUE
     I1= IARR(1)
     I2= IARR(2)
     X1= RARR(1)
     Y1= RARR(2)
     Z1= RARR(3)
     X2= RARR(4)
     Y2= RARR(5)
     Z2= RARR(6)
     RAD= RARR(7)
     RETURN
 110 WRITE( 6,*) ' GEOMETRY DATA CARD ERROR'
     WRITE( 6,*)  LINE(1: MAX(1, NLIN-1))
     STOP
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE READMN( GM, I1, I2, I3, I4, F1, F2, F3, F4, F5, F6)
C ***
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     INTEGER*4 NTOT
     INTEGER*4 NINT
     INTEGER*4 NFLT
     PARAMETER (NTOT=10, NINT=4, NFLT=6)
     INTEGER  IARR( NINT), BP( NTOT), EP( NTOT)
     DIMENSION  RARR( NFLT)
     CHARACTER   LINE*133, GM*2, BUFFER*132, BUFFER1*132
     READ( 5,10)  LINE
  10 FORMAT(A)
     NLIN= LEN(LINE)
     CALL STR0PC( LINE(1: NLIN), LINE(1: NLIN))
     IF( NLIN.LT.2) GOTO 110
     IF( NLIN.LE.132) GOTO 20
     NLIN=132
     LINE(133:133)=' '
  20 GM= LINE(1:2)
     NLIN= NLIN+1
     DO 30  I=1, NINT
  30 IARR( I)=0
     DO 40  I=1, NFLT
  40 RARR( I)=0.0
     IC=2
     IFOUND=0
     DO 70  I=1, NTOT
  50 IC= IC+1
     IF( IC.GE. NLIN) GOTO 80
     IF( LINE( IC: IC).EQ.' '.OR. LINE( IC: IC).EQ.',') GOTO 50
C BEGINNING OF I-TH NUMERICAL FIELD
     BP( I)= IC
  60 IC= IC+1
     IF( IC.GT. NLIN) GOTO 80
     IF( LINE( IC: IC).NE.' '.AND. LINE( IC: IC).NE.',') GOTO 60
C END OF I-TH NUMERICAL FIELD
     EP( I)= IC-1
     IFOUND= I
  70 CONTINUE
  80 CONTINUE
     DO 90  I=1, MIN( IFOUND, NINT)
     NLEN= EP( I)- BP( I)+1
     BUFFER= LINE( BP( I): EP( I))
     IND= INDEX( BUFFER(1: NLEN),'.')
     IF( IND.GT.0.AND. IND.LT. NLEN) GOTO 110
C USER PUT DECIMAL POINT FOR INTEGER
     IF( IND.EQ. NLEN) NLEN= NLEN-1
     READ( BUFFER(1: NLEN),111,ERR=110)  IARR( I)
 111 format(I5)
  90 CONTINUE
     DO 100  I= NINT+1, IFOUND
     NLEN= EP( I)- BP( I)+1
     BUFFER= LINE( BP( I): EP( I))
     IND= INDEX( BUFFER(1: NLEN),'.')
C USER FORGOT DECIMAL POINT FOR REAL
     IF( IND.EQ.0) THEN
     IF( NLEN.GE.15) GOTO 110
     INDE= INDEX( BUFFER(1: NLEN),'E')
     NLEN= NLEN+1
     IF( INDE.EQ.0) THEN
     BUFFER( NLEN: NLEN)='.'
     ELSE
     BUFFER1= BUFFER(1: INDD-1)//'.'// BUFFER( INDE: NLEN-1)
     BUFFER= BUFFER1
     ENDIF
     ENDIF
     READ( BUFFER(1: NLEN),112,ERR=110)  RARR( I- NINT)
 112 format(F15.7)
 100 CONTINUE
     I1= IARR(1)
     I2= IARR(2)
     I3= IARR(3)
     I4= IARR(4)
     F1= RARR(1)
     F2= RARR(2)
     F3= RARR(3)
     F4= RARR(4)
     F5= RARR(5)
     F6= RARR(6)
     RETURN
 110 WRITE( 6,*) '          FAULTY DATA CARD AFTER GEOMETRY SECTION'
     WRITE( 6,*)  LINE(1: MAX(1, NLIN-1))
     STOP
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE REBLK( B, BX, NB, NBX, N2C)
C ***
C     REBLOCK ARRAY B IN N.G.F. SOLUTION FROM BLOCKS OF ROWS ON TAPE14
C     TO BLOCKS OF COLUMNS ON TAPE16
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  B, BX
     COMMON  /MATPAR/ ICASE, NBLOKS, NPBLK, NLAST, NBLSYM, NPSYM,
    &NLSYM, IMAT, ICASX, NBBX, NPBX, NLBX, NBBL, NPBL, NLBL
     DIMENSION  B( NB,1), BX( NBX,1)
     REWIND 16
     NIB=0
     NPB= NPBL
     DO 3  IB=1, NBBL
     IF( IB.EQ. NBBL) NPB= NLBL
     REWIND 14
     NIX=0
     NPX= NPBX
     DO 2  IBX=1, NBBX
     IF( IBX.EQ. NBBX) NPX= NLBX
     READ( 14) (( BX( I, J), I=1, NPX), J=1, N2C)
     DO 1  I=1, NPX
     IX= I+ NIX
     DO 1  J=1, NPB
   1 B( IX, J)= BX( I, J+ NIB)
   2 NIX= NIX+ NPBX
     WRITE( 16) (( B( I, J), I=1, NB), J=1, NPB)
   3 NIB= NIB+ NPBL
     REWIND 14
     REWIND 16
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE REFLC( IX, IY, IZ, ITX, NOP)
C ***
C
C     REFLC REFLECTS PARTIAL STRUCTURE ALONG X,Y, OR Z AXES OR ROTATES
C     STRUCTURE TO COMPLETE A SYMMETRIC STRUCTURE.
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /ANGL/ SALP( NM)
     DIMENSION  T1X(1), T1Y(1), T1Z(1), T2X(1), T2Y(1), T2Z(1), X2(1),
    & Y2(1), Z2(1)
     EQUIVALENCE(T1X,SI),(T1Y,ALP),(T1Z,BET),(T2X,ICON1),(T2Y,ICON2),(
    &T2Z,ITAG),(X2,SI),(Y2,ALP),(Z2,BET)
     NP= N
     MP= M
     IPSYM=0
     ITI= ITX
     IF( IX.LT.0) GOTO 19
     IF( NOP.EQ.0) RETURN
     IPSYM=1
C
C     REFLECT ALONG Z AXIS
C
     IF( IZ.EQ.0) GOTO 6
     IPSYM=2
     IF( N.LT. N2) GOTO 3
     DO 2  I= N2, N
     NX= I+ N- N1
     E1= Z( I)
     E2= Z2( I)
     IF( ABS( E1)+ ABS( E2).GT.1.D-5.AND. E1* E2.GE.-1.D-6) GOTO 1
     WRITE( 6,24)  I
     STOP
   1 X( NX)= X( I)
     Y( NX)= Y( I)
     Z( NX)=- E1
     X2( NX)= X2( I)
     Y2( NX)= Y2( I)
     Z2( NX)=- E2
     ITAGI= ITAG( I)
     IF( ITAGI.EQ.0) ITAG( NX)=0
     IF( ITAGI.NE.0) ITAG( NX)= ITAGI+ ITI
   2 BI( NX)= BI( I)
     N= N*2- N1
     ITI= ITI*2
   3 IF( M.LT. M2) GOTO 6
     NXX= LD+1- M1
     DO 5  I= M2, M
     NXX= NXX-1
     NX= NXX- M+ M1
     IF( ABS( Z( NXX)).GT.1.D-10) GOTO 4
     WRITE( 6,25)  I
     STOP
   4 X( NX)= X( NXX)
     Y( NX)= Y( NXX)
     Z( NX)=- Z( NXX)
     T1X( NX)= T1X( NXX)
     T1Y( NX)= T1Y( NXX)
     T1Z( NX)=- T1Z( NXX)
     T2X( NX)= T2X( NXX)
     T2Y( NX)= T2Y( NXX)
     T2Z( NX)=- T2Z( NXX)
     SALP( NX)=- SALP( NXX)
   5 BI( NX)= BI( NXX)
     M= M*2- M1
C
C     REFLECT ALONG Y AXIS
C
   6 IF( IY.EQ.0) GOTO 12
     IF( N.LT. N2) GOTO 9
     DO 8  I= N2, N
     NX= I+ N- N1
     E1= Y( I)
     E2= Y2( I)
     IF( ABS( E1)+ ABS( E2).GT.1.D-5.AND. E1* E2.GE.-1.D-6) GOTO 7
     WRITE( 6,24)  I
     STOP
   7 X( NX)= X( I)
     Y( NX)=- E1
     Z( NX)= Z( I)
     X2( NX)= X2( I)
     Y2( NX)=- E2
     Z2( NX)= Z2( I)
     ITAGI= ITAG( I)
     IF( ITAGI.EQ.0) ITAG( NX)=0
     IF( ITAGI.NE.0) ITAG( NX)= ITAGI+ ITI
   8 BI( NX)= BI( I)
     N= N*2- N1
     ITI= ITI*2
   9 IF( M.LT. M2) GOTO 12
     NXX= LD+1- M1
     DO 11  I= M2, M
     NXX= NXX-1
     NX= NXX- M+ M1
     IF( ABS( Y( NXX)).GT.1.D-10) GOTO 10
     WRITE( 6,25)  I
     STOP
  10 X( NX)= X( NXX)
     Y( NX)=- Y( NXX)
     Z( NX)= Z( NXX)
     T1X( NX)= T1X( NXX)
     T1Y( NX)=- T1Y( NXX)
     T1Z( NX)= T1Z( NXX)
     T2X( NX)= T2X( NXX)
     T2Y( NX)=- T2Y( NXX)
     T2Z( NX)= T2Z( NXX)
     SALP( NX)=- SALP( NXX)
  11 BI( NX)= BI( NXX)
     M= M*2- M1
C
C     REFLECT ALONG X AXIS
C
  12 IF( IX.EQ.0) GOTO 18
     IF( N.LT. N2) GOTO 15
     DO 14  I= N2, N
     NX= I+ N- N1
     E1= X( I)
     E2= X2( I)
     IF( ABS( E1)+ ABS( E2).GT.1.D-5.AND. E1* E2.GE.-1.D-6) GOTO 13
     WRITE( 6,24)  I
     STOP
  13 X( NX)=- E1
     Y( NX)= Y( I)
     Z( NX)= Z( I)
     X2( NX)=- E2
     Y2( NX)= Y2( I)
     Z2( NX)= Z2( I)
     ITAGI= ITAG( I)
     IF( ITAGI.EQ.0) ITAG( NX)=0
     IF( ITAGI.NE.0) ITAG( NX)= ITAGI+ ITI
  14 BI( NX)= BI( I)
     N= N*2- N1
  15 IF( M.LT. M2) GOTO 18
     NXX= LD+1- M1
     DO 17  I= M2, M
     NXX= NXX-1
     NX= NXX- M+ M1
     IF( ABS( X( NXX)).GT.1.D-10) GOTO 16
     WRITE( 6,25)  I
     STOP
  16 X( NX)=- X( NXX)
     Y( NX)= Y( NXX)
     Z( NX)= Z( NXX)
     T1X( NX)=- T1X( NXX)
     T1Y( NX)= T1Y( NXX)
     T1Z( NX)= T1Z( NXX)
     T2X( NX)=- T2X( NXX)
     T2Y( NX)= T2Y( NXX)
     T2Z( NX)= T2Z( NXX)
     SALP( NX)=- SALP( NXX)
  17 BI( NX)= BI( NXX)
     M= M*2- M1
C
C     REPRODUCE STRUCTURE WITH ROTATION TO FORM CYLINDRICAL STRUCTURE
C
  18 RETURN
  19 FNOP= NOP
     IPSYM=-1
     SAM=6.283185308D+0/ FNOP
     CS= COS( SAM)
     SS= SIN( SAM)
     IF( N.LT. N2) GOTO 21
     N= N1+( N- N1)* NOP
     NX= NP+1
     DO 20  I= NX, N
     K= I- NP+ N1
     XK= X( K)
     YK= Y( K)
     X( I)= XK* CS- YK* SS
     Y( I)= XK* SS+ YK* CS
     Z( I)= Z( K)
     XK= X2( K)
     YK= Y2( K)
     X2( I)= XK* CS- YK* SS
     Y2( I)= XK* SS+ YK* CS
     Z2( I)= Z2( K)
     ITAGI= ITAG( K)
     IF( ITAGI.EQ.0) ITAG( I)=0
     IF( ITAGI.NE.0) ITAG( I)= ITAGI+ ITI
  20 BI( I)= BI( K)
  21 IF( M.LT. M2) GOTO 23
     M= M1+( M- M1)* NOP
     NX= MP+1
     K= LD+1- M1
     DO 22  I= NX, M
     K= K-1
     J= K- MP+ M1
     XK= X( K)
     YK= Y( K)
     X( J)= XK* CS- YK* SS
     Y( J)= XK* SS+ YK* CS
     Z( J)= Z( K)
     XK= T1X( K)
     YK= T1Y( K)
     T1X( J)= XK* CS- YK* SS
     T1Y( J)= XK* SS+ YK* CS
     T1Z( J)= T1Z( K)
     XK= T2X( K)
     YK= T2Y( K)
     T2X( J)= XK* CS- YK* SS
     T2Y( J)= XK* SS+ YK* CS
     T2Z( J)= T2Z( K)
     SALP( J)= SALP( K)
  22 BI( J)= BI( K)
C
  23 RETURN
  24 FORMAT(' GEOMETRY DATA ERROR--SEGMENT,I5,26H LIES IN PLANE OF S',
    &'YMMETRY')
  25 FORMAT(' GEOMETRY DATA ERROR--PATCH,I4,26H LIES IN PLANE OF SYM',
    &'METRY')
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE ROM2( A, B, SUM, DMIN)
C ***
C
C     FOR THE SOMMERFELD GROUND OPTION, ROM2 INTEGRATES OVER THE SOURCE
C     SEGMENT TO OBTAIN THE TOTAL FIELD DUE TO GROUND.  THE METHOD OF
C     VARIABLE INTERVAL WIDTH ROMBERG INTEGRATION IS USED.  THERE ARE 9
C     FIELD COMPONENTS - THE X, Y, AND Z COMPONENTS DUE TO CONSTANT,
C     SINE, AND COSINE CURRENT DISTRIBUTIONS.
C
     IMPLICIT REAL (A-H,O-Z)
     COMPLEX  SUM, G1, G2, G3, G4, G5, T00, T01, T10, T02, T11, T20
    &
     DIMENSION  SUM(9), G1(9), G2(9), G3(9), G4(9), G5(9), T01(9), T10
    &(9), T20(9)
     DATA   NM, NTS, NX, N/65536,4,1,9/, RX/1.D-4/
     Z= A
     ZE= B
     S= B- A
     IF( S.GE.0.) GOTO 1
     WRITE( 6,18)
     STOP
   1 EP= S/(1.E4* NM)
     ZEND= ZE- EP
     DO 2  I=1, N
   2 SUM( I)=(0.,0.)
     NS= NX
     NT=0
     CALL SFLDS( Z, G1)
   3 DZ= S/ NS
     IF( Z+ DZ.LE. ZE) GOTO 4
     DZ= ZE- Z
     IF( DZ.LE. EP) GOTO 17
   4 DZOT= DZ*.5
     CALL SFLDS( Z+ DZOT, G3)
     CALL SFLDS( Z+ DZ, G5)
   5 TMAG1=0.
C
C     EVALUATE 3 POINT ROMBERG RESULT AND TEST CONVERGENCE.
C
     TMAG2=0.
     DO 6  I=1, N
     T00=( G1( I)+ G5( I))* DZOT
     T01( I)=( T00+ DZ* G3( I))*.5
     T10( I)=(4.* T01( I)- T00)/3.
     IF( I.GT.3) GOTO 6
     TR= REAL( T01( I))
     TI= AIMAG( T01( I))
     TMAG1= TMAG1+ TR* TR+ TI* TI
     TR= REAL( T10( I))
     TI= AIMAG( T10( I))
     TMAG2= TMAG2+ TR* TR+ TI* TI
   6 CONTINUE
     TMAG1= SQRT( TMAG1)
     TMAG2= SQRT( TMAG2)
     CALL TEST( TMAG1, TMAG2, TR,0.,0., TI, DMIN)
     IF( TR.GT. RX) GOTO 8
     DO 7  I=1, N
   7 SUM( I)= SUM( I)+ T10( I)
     NT= NT+2
     GOTO 12
   8 CALL SFLDS( Z+ DZ*.25, G2)
     CALL SFLDS( Z+ DZ*.75, G4)
     TMAG1=0.
C
C     EVALUATE 5 POINT ROMBERG RESULT AND TEST CONVERGENCE.
C
     TMAG2=0.
     DO 9  I=1, N
     T02=( T01( I)+ DZOT*( G2( I)+ G4( I)))*.5
     T11=(4.* T02- T01( I))/3.
     T20( I)=(16.* T11- T10( I))/15.
     IF( I.GT.3) GOTO 9
     TR= REAL( T11)
     TI= AIMAG( T11)
     TMAG1= TMAG1+ TR* TR+ TI* TI
     TR= REAL( T20( I))
     TI= AIMAG( T20( I))
     TMAG2= TMAG2+ TR* TR+ TI* TI
   9 CONTINUE
     TMAG1= SQRT( TMAG1)
     TMAG2= SQRT( TMAG2)
     CALL TEST( TMAG1, TMAG2, TR,0.,0., TI, DMIN)
     IF( TR.GT. RX) GOTO 14
  10 DO 11  I=1, N
  11 SUM( I)= SUM( I)+ T20( I)
     NT= NT+1
  12 Z= Z+ DZ
     IF( Z.GT. ZEND) GOTO 17
     DO 13  I=1, N
  13 G1( I)= G5( I)
     IF( NT.LT. NTS.OR. NS.LE. NX) GOTO 3
     NS= NS/2
     NT=1
     GOTO 3
  14 NT=0
     IF( NS.LT. NM) GOTO 15
     WRITE( 6,19)  Z
     GOTO 10
  15 NS= NS*2
     DZ= S/ NS
     DZOT= DZ*.5
     DO 16  I=1, N
     G5( I)= G3( I)
  16 G3( I)= G2( I)
     GOTO 5
  17 CONTINUE
C
     RETURN
  18 FORMAT(' ERROR - B LESS THAN A IN ROM2')
  19 FORMAT(' ROM2 -- STEP SIZE LIMITED AT Z =',1P,E12.5)
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE SBF( I, IS, AA, BB, CC)
C ***
C     COMPUTE COMPONENT OF BASIS FUNCTION I ON SEGMENT IS.
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     DATA   PI/3.141592654D+0/, JMAX/30/
     AA=0.
     BB=0.
     CC=0.
     JUNE=0
     JSNO=0
     PP=0.
     JCOX= ICON1( I)
     IF( JCOX.GT.10000) JCOX= I
     JEND=-1
     IEND=-1
     SIG=-1.
     IF( JCOX) 1,11,2
   1 JCOX=- JCOX
     GOTO 3
   2 SIG=- SIG
     JEND=- JEND
   3 JSNO= JSNO+1
     IF( JSNO.GE. JMAX) GOTO 24
     D= PI* SI( JCOX)
     SDH= SIN( D)
     CDH= COS( D)
     SD=2.* SDH* CDH
     IF( D.GT.0.015) GOTO 4
     OMC=4.* D* D
     OMC=((1.3888889D-3* OMC-4.1666666667D-2)* OMC+.5)* OMC
     GOTO 5
   4 OMC=1.- CDH* CDH+ SDH* SDH
   5 AJ=1./( LOG(1./( PI* BI( JCOX)))-.577215664D+0)
     PP= PP- OMC/ SD* AJ
     IF( JCOX.NE. IS) GOTO 6
     AA= AJ/ SD* SIG
     BB= AJ/(2.* CDH)
     CC=- AJ/(2.* SDH)* SIG
     JUNE= IEND
   6 IF( JCOX.EQ. I) GOTO 9
     IF( JEND.EQ.1) GOTO 7
     JCOX= ICON1( JCOX)
     GOTO 8
   7 JCOX= ICON2( JCOX)
   8 IF( IABS( JCOX).EQ. I) GOTO 10
     IF( JCOX) 1,24,2
   9 IF( JCOX.EQ. IS) BB=- BB
  10 IF( IEND.EQ.1) GOTO 12
  11 PM=- PP
     PP=0.
     NJUN1= JSNO
     JCOX= ICON2( I)
     IF( JCOX.GT.10000) JCOX= I
     JEND=1
     IEND=1
     SIG=-1.
     IF( JCOX) 1,12,2
  12 NJUN2= JSNO- NJUN1
     D= PI* SI( I)
     SDH= SIN( D)
     CDH= COS( D)
     SD=2.* SDH* CDH
     CD= CDH* CDH- SDH* SDH
     IF( D.GT.0.015) GOTO 13
     OMC=4.* D* D
     OMC=((1.3888889D-3* OMC-4.1666666667D-2)* OMC+.5)* OMC
     GOTO 14
  13 OMC=1.- CD
  14 AP=1./( LOG(1./( PI* BI( I)))-.577215664D+0)
     AJ= AP
     IF( NJUN1.EQ.0) GOTO 19
     IF( NJUN2.EQ.0) GOTO 21
     QP= SD*( PM* PP+ AJ* AP)+ CD*( PM* AP- PP* AJ)
     QM=( AP* OMC- PP* SD)/ QP
     QP=-( AJ* OMC+ PM* SD)/ QP
     IF( JUNE) 15,18,16
  15 AA= AA* QM
     BB= BB* QM
     CC= CC* QM
     GOTO 17
  16 AA=- AA* QP
     BB= BB* QP
     CC=- CC* QP
  17 IF( I.NE. IS) RETURN
  18 AA= AA-1.
     BB= BB+( AJ* QM+ AP* QP)* SDH/ SD
     CC= CC+( AJ* QM- AP* QP)* CDH/ SD
     RETURN
  19 IF( NJUN2.EQ.0) GOTO 23
     QP= PI* BI( I)
     XXI= QP* QP
     XXI= QP*(1.-.5* XXI)/(1.- XXI)
     QP=-( OMC+ XXI* SD)/( SD*( AP+ XXI* PP)+ CD*( XXI* AP- PP))
     IF( JUNE.NE.1) GOTO 20
     AA=- AA* QP
     BB= BB* QP
     CC=- CC* QP
     IF( I.NE. IS) RETURN
  20 AA= AA-1.
     D= CD- XXI* SD
     BB= BB+( SDH+ AP* QP*( CDH- XXI* SDH))/ D
     CC= CC+( CDH+ AP* QP*( SDH+ XXI* CDH))/ D
     RETURN
  21 QM= PI* BI( I)
     XXI= QM* QM
     XXI= QM*(1.-.5* XXI)/(1.- XXI)
     QM=( OMC+ XXI* SD)/( SD*( AJ- XXI* PM)+ CD*( PM+ XXI* AJ))
     IF( JUNE.NE.-1) GOTO 22
     AA= AA* QM
     BB= BB* QM
     CC= CC* QM
     IF( I.NE. IS) RETURN
  22 AA= AA-1.
     D= CD- XXI* SD
     BB= BB+( AJ* QM*( CDH- XXI* SDH)- SDH)/ D
     CC= CC+( CDH- AJ* QM*( SDH+ XXI* CDH))/ D
     RETURN
  23 AA=-1.
     QP= PI* BI( I)
     XXI= QP* QP
     XXI= QP*(1.-.5* XXI)/(1.- XXI)
     CC=1./( CDH- XXI* SDH)
     RETURN
  24 WRITE( 6,25)  I
C
     STOP
  25 FORMAT(' SBF - SEGMENT CONNECTION ERROR FOR SEGMENT',I5)
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE SFLDS( T, E)
C ***
C
C     SFLDX RETURNS THE FIELD DUE TO GROUND FOR A CURRENT ELEMENT ON
C     THE SOURCE SEGMENT AT T RELATIVE TO THE SEGMENT CENTER.
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  E, ERV, EZV, ERH, EZH, EPH, T1, EXK, EYK, EZK, EXS,
    &EYS, EZS, EXC, EYC, EZC, XX1, XX2, U, U2, ZRATI, ZRATI2, FRATI,
    &ER, ET, HRV, HZV, HRH
     COMMON  /DATAJ/ S, B, XJ, YJ, ZJ, CABJ, SABJ, SALPJ, EXK, EYK,
    &EZK, EXS, EYS, EZS, EXC, EYC, EZC, RKH, IEXK, IND1, INDD1, IND2,
    &INDD2, IPGND
     COMMON  /INCOM/ XO, YO, ZO, SN, XSN, YSN, ISNOR
     COMMON  /GWAV/ U, U2, XX1, XX2, R1, R2, ZMH, ZPH
     COMMON  /GND/ ZRATI, ZRATI2, FRATI, CL, CH, SCRWL, SCRWR, NRADL,
    &KSYMP, IFAR, IPERF, T1, T2
     DIMENSION  E(9)
     DATA   PI/3.141592654D+0/, TP/6.283185308D+0/, POT/1.570796327D+0
    &/
     XT= XJ+ T* CABJ
     YT= YJ+ T* SABJ
     ZT= ZJ+ T* SALPJ
     RHX= XO- XT
     RHY= YO- YT
     RHS= RHX* RHX+ RHY* RHY
     RHO= SQRT( RHS)
     IF( RHO.GT.0.) GOTO 1
     RHX=1.
     RHY=0.
     PHX=0.
     PHY=1.
     GOTO 2
   1 RHX= RHX/ RHO
     RHY= RHY/ RHO
     PHX=- RHY
     PHY= RHX
   2 CPH= RHX* XSN+ RHY* YSN
     SPH= RHY* XSN- RHX* YSN
     IF( ABS( CPH).LT.1.D-10) CPH=0.
     IF( ABS( SPH).LT.1.D-10) SPH=0.
     ZPH= ZO+ ZT
     ZPHS= ZPH* ZPH
     R2S= RHS+ ZPHS
     R2= SQRT( R2S)
     RK= R2* TP
     XX2= CMPLX( COS( RK),- SIN( RK))
C
C     USE NORTON APPROXIMATION FOR FIELD DUE TO GROUND.  CURRENT IS
C     LUMPED AT SEGMENT CENTER WITH CURRENT MOMENT FOR CONSTANT, SINE,
C     OR COSINE DISTRIBUTION.
C
     IF( ISNOR.EQ.1) GOTO 3
     ZMH=1.
     R1=1.
     XX1=0.
     CALL GWAVE( ERV, EZV, ERH, EZH, EPH)
     ET=-(0.,4.77134)* FRATI* XX2/( R2S* R2)
     ER=2.* ET* CMPLX(1.0, RK)
     ET= ET* CMPLX(1.0 - RK* RK, RK)
     HRV=( ER+ ET)* RHO* ZPH/ R2S
     HZV=( ZPHS* ER- RHS* ET)/ R2S
     HRH=( RHS* ER- ZPHS* ET)/ R2S
     ERV= ERV- HRV
     EZV= EZV- HZV
     ERH= ERH+ HRH
     EZH= EZH+ HRV
     EPH= EPH+ ET
     ERV= ERV* SALPJ
     EZV= EZV* SALPJ
     ERH= ERH* SN* CPH
     EZH= EZH* SN* CPH
     EPH= EPH* SN* SPH
     ERH= ERV+ ERH
     E(1)=( ERH* RHX+ EPH* PHX)* S
     E(2)=( ERH* RHY+ EPH* PHY)* S
     E(3)=( EZV+ EZH)* S
     E(4)=0.
     E(5)=0.
     E(6)=0.
     SFAC= PI* S
     SFAC= SIN( SFAC)/ SFAC
     E(7)= E(1)* SFAC
     E(8)= E(2)* SFAC
     E(9)= E(3)* SFAC
C
C     INTERPOLATE IN SOMMERFELD FIELD TABLES
C
     RETURN
   3 IF( RHO.LT.1.D-12) GOTO 4
     THET= ATAN( ZPH/ RHO)
     GOTO 5
   4 THET= POT
C     COMBINE VERTICAL AND HORIZONTAL COMPONENTS AND CONVERT TO X,Y,Z
C     COMPONENTS.  MULTIPLY BY EXP(-JKR)/R.
   5 CALL INTRP( R2, THET, ERV, EZV, ERH, EPH)
     XX2= XX2/ R2
     SFAC= SN* CPH
     ERH= XX2*( SALPJ* ERV+ SFAC* ERH)
     EZH= XX2*( SALPJ* EZV- SFAC* ERV)
C     X,Y,Z FIELDS FOR CONSTANT CURRENT
     EPH= SN* SPH* XX2* EPH
     E(1)= ERH* RHX+ EPH* PHX
     E(2)= ERH* RHY+ EPH* PHY
     E(3)= EZH
C     X,Y,Z FIELDS FOR SINE CURRENT
     RK= TP* T
     SFAC= SIN( RK)
     E(4)= E(1)* SFAC
     E(5)= E(2)* SFAC
C     X,Y,Z FIELDS FOR COSINE CURRENT
     E(6)= E(3)* SFAC
     SFAC= COS( RK)
     E(7)= E(1)* SFAC
     E(8)= E(2)* SFAC
     E(9)= E(3)* SFAC
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE SOLGF( A, B, C, D, XY, IP, NP, N1, N, MP, M1, M, N1C,
    &N2C, N2CZ)
C ***
C     SOLVE FOR CURRENT IN N.G.F. PROCEDURE
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  A, B, C, D, SUM, XY, Y
     COMMON  /SCRATM/ Y( N2M)
     COMMON  /SEGJ/ AX(30), BX(30), CX(30), JCO(30), JSNO, ISCON(50),
    &NSCON, IPCON(10), NPCON
     COMMON  /MATPAR/ ICASE, NBLOKS, NPBLK, NLAST, NBLSYM, NPSYM,
    &NLSYM, IMAT, ICASX, NBBX, NPBX, NLBX, NBBL, NPBL, NLBL
     DIMENSION  A(1), B( N1C,1), C( N1C,1), D( N2CZ,1), IP(1), XY(1)
     IFL=14
     IF( ICASX.GT.0) IFL=13
C     NORMAL SOLUTION.  NOT N.G.F.
     IF( N2C.GT.0) GOTO 1
     CALL SOLVES( A, IP, XY, N1C,1, NP, N, MP, M,13, IFL)
     GOTO 22
C     REORDER EXCITATION ARRAY
   1 IF( N1.EQ. N.OR. M1.EQ.0) GOTO 5
     N2= N1+1
     JJ= N+1
     NPM= N+2* M1
     DO 2  I= N2, NPM
   2 Y( I)= XY( I)
     J= N1
     DO 3  I= JJ, NPM
     J= J+1
   3 XY( J)= Y( I)
     DO 4  I= N2, N
     J= J+1
   4 XY( J)= Y( I)
   5 NEQS= NSCON+2* NPCON
     IF( NEQS.EQ.0) GOTO 7
     NEQ= N1C+ N2C
C     COMPUTE INV(A)E1
     NEQS= NEQ- NEQS+1
     DO 6  I= NEQS, NEQ
   6 XY( I)=(0.,0.)
   7 CALL SOLVES( A, IP, XY, N1C,1, NP, N1, MP, M1,13, IFL)
     NI=0
C     COMPUTE E2-C(INV(A)E1)
     NPB= NPBL
     DO 10  JJ=1, NBBL
     IF( JJ.EQ. NBBL) NPB= NLBL
     IF( ICASX.GT.1) READ( 15) (( C( I, J), I=1, N1C), J=1, NPB)
     II= N1C+ NI
     DO 9  I=1, NPB
     SUM=(0.,0.)
     DO 8  J=1, N1C
   8 SUM= SUM+ C( J, I)* XY( J)
     J= II+ I
   9 XY( J)= XY( J)- SUM
  10 NI= NI+ NPBL
     REWIND 15
C     COMPUTE INV(D)(E2-C(INV(A)E1)) = I2
     JJ= N1C+1
     IF( ICASX.GT.1) GOTO 11
     CALL SOLVE( N2C, D, IP( JJ), XY( JJ), N2C)
     GOTO 13
  11 IF( ICASX.EQ.4) GOTO 12
     NI= N2C* N2C
     READ( 11) ( B( J,1), J=1, NI)
     REWIND 11
     CALL SOLVE( N2C, B, IP( JJ), XY( JJ), N2C)
     GOTO 13
  12 NBLSYS= NBLSYM
     NPSYS= NPSYM
     NLSYS= NLSYM
     ICASS= ICASE
     NBLSYM= NBBL
     NPSYM= NPBL
     NLSYM= NLBL
     ICASE=3
     REWIND 11
     REWIND 16
     CALL LTSOLV( B, N2C, IP( JJ), XY( JJ), N2C,1,11,16)
     REWIND 11
     REWIND 16
     NBLSYM= NBLSYS
     NPSYM= NPSYS
     NLSYM= NLSYS
     ICASE= ICASS
  13 NI=0
C     COMPUTE INV(A)E1-(INV(A)B)I2 = I1
     NPB= NPBL
     DO 16  JJ=1, NBBL
     IF( JJ.EQ. NBBL) NPB= NLBL
     IF( ICASX.GT.1) READ( 14) (( B( I, J), I=1, N1C), J=1, NPB)
     II= N1C+ NI
     DO 15  I=1, N1C
     SUM=(0.,0.)
     DO 14  J=1, NPB
     JP= II+ J
  14 SUM= SUM+ B( I, J)* XY( JP)
  15 XY( I)= XY( I)- SUM
  16 NI= NI+ NPBL
     REWIND 14
C     REORDER CURRENT ARRAY
     IF( N1.EQ. N.OR. M1.EQ.0) GOTO 20
     DO 17  I= N2, NPM
  17 Y( I)= XY( I)
     JJ= N1C+1
     J= N1
     DO 18  I= JJ, NPM
     J= J+1
  18 XY( J)= Y( I)
     DO 19  I= N2, N1C
     J= J+1
  19 XY( J)= Y( I)
  20 IF( NSCON.EQ.0) GOTO 22
     J= NEQS-1
     DO 21  I=1, NSCON
     J= J+1
     JJ= ISCON( I)
  21 XY( JJ)= XY( J)
  22 RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE SOLVE( N, A, IP, B, NDIM)
C ***
C
C     SUBROUTINE TO SOLVE THE MATRIX EQUATION LU*X=B WHERE L IS A UNIT
C     LOWER TRIANGULAR MATRIX AND U IS AN UPPER TRIANGULAR MATRIX BOTH
C     OF WHICH ARE STORED IN A.  THE RHS VECTOR B IS INPUT AND THE
C     SOLUTION IS RETURNED THROUGH VECTOR B.    (MATRIX TRANSPOSED.
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  A, B, Y, SUM
     INTEGER  PI
     COMMON  /SCRATM/ Y( N2M)
C
C     FORWARD SUBSTITUTION
C
     DIMENSION  A( NDIM, NDIM), IP( NDIM), B( NDIM)
     DO 3  I=1, N
     PI= IP( I)
     Y( I)= B( PI)
     B( PI)= B( I)
     IP1= I+1
     IF( IP1.GT. N) GOTO 2
     DO 1  J= IP1, N
     B( J)= B( J)- A( I, J)* Y( I)
   1 CONTINUE
   2 CONTINUE
C
C     BACKWARD SUBSTITUTION
C
   3 CONTINUE
     DO 6  K=1, N
     I= N- K+1
     SUM=(0.,0.)
     IP1= I+1
     IF( IP1.GT. N) GOTO 5
     DO 4  J= IP1, N
     SUM= SUM+ A( J, I)* B( J)
   4 CONTINUE
   5 CONTINUE
     B( I)=( Y( I)- SUM)/ A( I, I)
   6 CONTINUE
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE SOLVES( A, IP, B, NEQ, NRH, NP, N, MP, M, IFL1, IFL2)
C ***
C
C     SUBROUTINE SOLVES, FOR SYMMETRIC STRUCTURES, HANDLES THE
C     TRANSFORMATION OF THE RIGHT HAND SIDE VECTOR AND SOLUTION OF THE
C     MATRIX EQ.
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  A, B, Y, SUM, SSX
     COMMON  /SMAT/ SSX(16,16)
     COMMON  /SCRATM/ Y( N2M)
     COMMON  /MATPAR/ ICASE, NBLOKS, NPBLK, NLAST, NBLSYM, NPSYM,
    &NLSYM, IMAT, ICASX, NBBX, NPBX, NLBX, NBBL, NPBL, NLBL
     DIMENSION  A(1), IP(1), B( NEQ, NRH)
     NPEQ= NP+2* MP
     NOP= NEQ/ NPEQ
     FNOP= NOP
     FNORM=1./ FNOP
     NROW= NEQ
     IF( ICASE.GT.3) NROW= NPEQ
     IF( NOP.EQ.1) GOTO 11
     DO 10  IC=1, NRH
     IF( N.EQ.0.OR. M.EQ.0) GOTO 6
     DO 1  I=1, NEQ
   1 Y( I)= B( I, IC)
     KK=2* MP
     IA= NP
     IB= N
     J= NP
     DO 5  K=1, NOP
     IF( K.EQ.1) GOTO 3
     DO 2  I=1, NP
     IA= IA+1
     J= J+1
   2 B( J, IC)= Y( IA)
     IF( K.EQ. NOP) GOTO 5
   3 DO 4  I=1, KK
     IB= IB+1
     J= J+1
   4 B( J, IC)= Y( IB)
C
C     TRANSFORM MATRIX EQ. RHS VECTOR ACCORDING TO SYMMETRY MODES
C
   5 CONTINUE
   6 DO 10  I=1, NPEQ
     DO 7  K=1, NOP
     IA= I+( K-1)* NPEQ
   7 Y( K)= B( IA, IC)
     SUM= Y(1)
     DO 8  K=2, NOP
   8 SUM= SUM+ Y( K)
     B( I, IC)= SUM* FNORM
     DO 10  K=2, NOP
     IA= I+( K-1)* NPEQ
     SUM= Y(1)
     DO 9  J=2, NOP
   9 SUM= SUM+ Y( J)* CONJG( SSX( K, J))
  10 B( IA, IC)= SUM* FNORM
  11 IF( ICASE.LT.3) GOTO 12
     REWIND IFL1
C
C     SOLVE EACH MODE EQUATION
C
     REWIND IFL2
  12 DO 16  KK=1, NOP
     IA=( KK-1)* NPEQ+1
     IB= IA
     IF( ICASE.NE.4) GOTO 13
     I= NPEQ* NPEQ
     READ( IFL1) ( A( J), J=1, I)
     IB=1
  13 IF( ICASE.EQ.3.OR. ICASE.EQ.5) GOTO 15
     DO 14  IC=1, NRH
  14 CALL SOLVE( NPEQ, A( IB), IP( IA), B( IA, IC), NROW)
     GOTO 16
  15 CALL LTSOLV( A, NPEQ, IP( IA), B( IA,1), NEQ, NRH, IFL1, IFL2)
  16 CONTINUE
C
C     INVERSE TRANSFORM THE MODE SOLUTIONS
C
     IF( NOP.EQ.1) RETURN
     DO 26  IC=1, NRH
     DO 20  I=1, NPEQ
     DO 17  K=1, NOP
     IA= I+( K-1)* NPEQ
  17 Y( K)= B( IA, IC)
     SUM= Y(1)
     DO 18  K=2, NOP
  18 SUM= SUM+ Y( K)
     B( I, IC)= SUM
     DO 20  K=2, NOP
     IA= I+( K-1)* NPEQ
     SUM= Y(1)
     DO 19  J=2, NOP
  19 SUM= SUM+ Y( J)* SSX( K, J)
  20 B( IA, IC)= SUM
     IF( N.EQ.0.OR. M.EQ.0) GOTO 26
     DO 21  I=1, NEQ
  21 Y( I)= B( I, IC)
     KK=2* MP
     IA= NP
     IB= N
     J= NP
     DO 25  K=1, NOP
     IF( K.EQ.1) GOTO 23
     DO 22  I=1, NP
     IA= IA+1
     J= J+1
  22 B( IA, IC)= Y( J)
     IF( K.EQ. NOP) GOTO 25
  23 DO 24  I=1, KK
     IB= IB+1
     J= J+1
  24 B( IB, IC)= Y( J)
  25 CONTINUE
  26 CONTINUE
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE TBF( I, ICAP)
C ***
C     COMPUTE BASIS FUNCTION I
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /SEGJ/ AX(30), BX(30), CX(30), JCO(30), JSNO, ISCON(50),
    &NSCON, IPCON(10), NPCON
     DATA   PI/3.141592654D+0/, JMAX/30/
     JSNO=0
     PP=0.
     JCOX= ICON1( I)
     IF( JCOX.GT.10000) JCOX= I
     JEND=-1
     IEND=-1
     SIG=-1.
     IF( JCOX) 1,10,2
   1 JCOX=- JCOX
     GOTO 3
   2 SIG=- SIG
     JEND=- JEND
   3 JSNO= JSNO+1
     IF( JSNO.GE. JMAX) GOTO 28
     JCO( JSNO)= JCOX
     D= PI* SI( JCOX)
     SDH= SIN( D)
     CDH= COS( D)
     SD=2.* SDH* CDH
     IF( D.GT.0.015) GOTO 4
     OMC=4.* D* D
     OMC=((1.3888889D-3* OMC-4.1666666667D-2)* OMC+.5)* OMC
     GOTO 5
   4 OMC=1.- CDH* CDH+ SDH* SDH
   5 AJ=1./( LOG(1./( PI* BI( JCOX)))-.577215664D+0)
     PP= PP- OMC/ SD* AJ
     AX( JSNO)= AJ/ SD* SIG
     BX( JSNO)= AJ/(2.* CDH)
     CX( JSNO)=- AJ/(2.* SDH)* SIG
     IF( JCOX.EQ. I) GOTO 8
     IF( JEND.EQ.1) GOTO 6
     JCOX= ICON1( JCOX)
     GOTO 7
   6 JCOX= ICON2( JCOX)
   7 IF( IABS( JCOX).EQ. I) GOTO 9
     IF( JCOX) 1,28,2
   8 BX( JSNO)=- BX( JSNO)
   9 IF( IEND.EQ.1) GOTO 11
  10 PM=- PP
     PP=0.
     NJUN1= JSNO
     JCOX= ICON2( I)
     IF( JCOX.GT.10000) JCOX= I
     JEND=1
     IEND=1
     SIG=-1.
     IF( JCOX) 1,11,2
  11 NJUN2= JSNO- NJUN1
     JSNOP= JSNO+1
     JCO( JSNOP)= I
     D= PI* SI( I)
     SDH= SIN( D)
     CDH= COS( D)
     SD=2.* SDH* CDH
     CD= CDH* CDH- SDH* SDH
     IF( D.GT.0.015) GOTO 12
     OMC=4.* D* D
     OMC=((1.3888889D-3* OMC-4.1666666667D-2)* OMC+.5)* OMC
     GOTO 13
  12 OMC=1.- CD
  13 AP=1./( LOG(1./( PI* BI( I)))-.577215664D+0)
     AJ= AP
     IF( NJUN1.EQ.0) GOTO 16
     IF( NJUN2.EQ.0) GOTO 20
     QP= SD*( PM* PP+ AJ* AP)+ CD*( PM* AP- PP* AJ)
     QM=( AP* OMC- PP* SD)/ QP
     QP=-( AJ* OMC+ PM* SD)/ QP
     BX( JSNOP)=( AJ* QM+ AP* QP)* SDH/ SD
     CX( JSNOP)=( AJ* QM- AP* QP)* CDH/ SD
     DO 14  IEND=1, NJUN1
     AX( IEND)= AX( IEND)* QM
     BX( IEND)= BX( IEND)* QM
  14 CX( IEND)= CX( IEND)* QM
     JEND= NJUN1+1
     DO 15  IEND= JEND, JSNO
     AX( IEND)=- AX( IEND)* QP
     BX( IEND)= BX( IEND)* QP
  15 CX( IEND)=- CX( IEND)* QP
     GOTO 27
  16 IF( NJUN2.EQ.0) GOTO 24
     IF( ICAP.NE.0) GOTO 17
     XXI=0.
     GOTO 18
  17 QP= PI* BI( I)
     XXI= QP* QP
     XXI= QP*(1.-.5* XXI)/(1.- XXI)
  18 QP=-( OMC+ XXI* SD)/( SD*( AP+ XXI* PP)+ CD*( XXI* AP- PP))
     D= CD- XXI* SD
     BX( JSNOP)=( SDH+ AP* QP*( CDH- XXI* SDH))/ D
     CX( JSNOP)=( CDH+ AP* QP*( SDH+ XXI* CDH))/ D
     DO 19  IEND=1, NJUN2
     AX( IEND)=- AX( IEND)* QP
     BX( IEND)= BX( IEND)* QP
  19 CX( IEND)=- CX( IEND)* QP
     GOTO 27
  20 IF( ICAP.NE.0) GOTO 21
     XXI=0.
     GOTO 22
  21 QM= PI* BI( I)
     XXI= QM* QM
     XXI= QM*(1.-.5* XXI)/(1.- XXI)
  22 QM=( OMC+ XXI* SD)/( SD*( AJ- XXI* PM)+ CD*( PM+ XXI* AJ))
     D= CD- XXI* SD
     BX( JSNOP)=( AJ* QM*( CDH- XXI* SDH)- SDH)/ D
     CX( JSNOP)=( CDH- AJ* QM*( SDH+ XXI* CDH))/ D
     DO 23  IEND=1, NJUN1
     AX( IEND)= AX( IEND)* QM
     BX( IEND)= BX( IEND)* QM
  23 CX( IEND)= CX( IEND)* QM
     GOTO 27
  24 BX( JSNOP)=0.
     IF( ICAP.NE.0) GOTO 25
     XXI=0.
     GOTO 26
  25 QP= PI* BI( I)
     XXI= QP* QP
     XXI= QP*(1.-.5* XXI)/(1.- XXI)
  26 CX( JSNOP)=1./( CDH- XXI* SDH)
  27 JSNO= JSNOP
     AX( JSNO)=-1.
     RETURN
  28 WRITE( 6,29)  I
C
     STOP
  29 FORMAT(' TBF - SEGMENT CONNECTION ERROR FOR SEGMENT',I5)
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE TEST( F1R, F2R, TR, F1I, F2I, TI, DMIN)
C ***
C
C     TEST FOR CONVERGENCE IN NUMERICAL INTEGRATION
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     DEN= ABS( F2R)
     TR= ABS( F2I)
     IF( DEN.LT. TR) DEN= TR
     IF( DEN.LT. DMIN) DEN= DMIN
     IF( DEN.LT.1.D-37) GOTO 1
     TR= ABS(( F1R- F2R)/ DEN)
     TI= ABS(( F1I- F2I)/ DEN)
     RETURN
   1 TR=0.
     TI=0.
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE TRIO( J)
C ***
C     COMPUTE THE COMPONENTS OF ALL BASIS FUNCTIONS ON SEGMENT J
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     COMMON  /SEGJ/ AX(30), BX(30), CX(30), JCO(30), JSNO, ISCON(50),
    &NSCON, IPCON(10), NPCON
     DATA   JMAX/30/
     JSNO=0
     JCOX= ICON1( J)
     IF( JCOX.GT.10000) GOTO 7
     JEND=-1
     IEND=-1
     IF( JCOX) 1,7,2
   1 JCOX=- JCOX
     GOTO 3
   2 JEND=- JEND
   3 IF( JCOX.EQ. J) GOTO 6
     JSNO= JSNO+1
     IF( JSNO.GE. JMAX) GOTO 9
     CALL SBF( JCOX, J, AX( JSNO), BX( JSNO), CX( JSNO))
     JCO( JSNO)= JCOX
     IF( JEND.EQ.1) GOTO 4
     JCOX= ICON1( JCOX)
     GOTO 5
   4 JCOX= ICON2( JCOX)
   5 IF( JCOX) 1,9,2
   6 IF( IEND.EQ.1) GOTO 8
   7 JCOX= ICON2( J)
     IF( JCOX.GT.10000) GOTO 8
     JEND=1
     IEND=1
     IF( JCOX) 1,8,2
   8 JSNO= JSNO+1
     CALL SBF( J, J, AX( JSNO), BX( JSNO), CX( JSNO))
     JCO( JSNO)= J
     RETURN
   9 WRITE( 6,10)  J
C
     STOP
  10 FORMAT(' TRIO - SEGMENT CONNENTION ERROR FOR SEGMENT',I5)
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE UNERE( XOB, YOB, ZOB)
C ***
C     CALCULATES THE ELECTRIC FIELD DUE TO UNIT CURRENT IN THE T1 AND T2
C     DIRECTIONS ON A PATCH
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMPLEX  EXK, EYK, EZK, EXS, EYS, EZS, EXC, EYC, EZC, ZRATI,
    &ZRATI2, T1, ER, Q1, Q2, RRV, RRH, EDP, FRATI
     COMMON  /DATAJ/ S, B, XJ, YJ, ZJ, CABJ, SABJ, SALPJ, EXK, EYK,
    &EZK, EXS, EYS, EZS, EXC, EYC, EZC, RKH, IEXK, IND1, INDD1, IND2,
    &INDD2, IPGND
     COMMON  /GND/ ZRATI, ZRATI2, FRATI, CL, CH, SCRWL, SCRWR, NRADL,
    &KSYMP, IFAR, IPERF, T1, T2
     EQUIVALENCE(T1XJ,CABJ),(T1YJ,SABJ),(T1ZJ,SALPJ),(T2XJ,B),(T2YJ,
    &IND1),(T2ZJ,IND2)
C     CONST=ETA/(8.*PI**2)
     DATA   TPI, CONST/6.283185308D+0,4.771341188D+0/
     ZR= ZJ
     T1ZR= T1ZJ
     T2ZR= T2ZJ
     IF( IPGND.NE.2) GOTO 1
     ZR=- ZR
     T1ZR=- T1ZR
     T2ZR=- T2ZR
   1 RX= XOB- XJ
     RY= YOB- YJ
     RZ= ZOB- ZR
     R2= RX* RX+ RY* RY+ RZ* RZ
     IF( R2.GT.1.D-20) GOTO 2
     EXK=(0.,0.)
     EYK=(0.,0.)
     EZK=(0.,0.)
     EXS=(0.,0.)
     EYS=(0.,0.)
     EZS=(0.,0.)
     RETURN
   2 R= SQRT( R2)
     TT1=- TPI* R
     TT2= TT1* TT1
     RT= R2* R
     ER= CMPLX( SIN( TT1),- COS( TT1))*( CONST* S)
     Q1= CMPLX( TT2-1., TT1)* ER/ RT
     Q2= CMPLX(3.- TT2,-3.* TT1)* ER/( RT* R2)
     ER= Q2*( T1XJ* RX+ T1YJ* RY+ T1ZR* RZ)
     EXK= Q1* T1XJ+ ER* RX
     EYK= Q1* T1YJ+ ER* RY
     EZK= Q1* T1ZR+ ER* RZ
     ER= Q2*( T2XJ* RX+ T2YJ* RY+ T2ZR* RZ)
     EXS= Q1* T2XJ+ ER* RX
     EYS= Q1* T2YJ+ ER* RY
     EZS= Q1* T2ZR+ ER* RZ
     IF( IPGND.EQ.1) GOTO 6
     IF( IPERF.NE.1) GOTO 3
     EXK=- EXK
     EYK=- EYK
     EZK=- EZK
     EXS=- EXS
     EYS=- EYS
     EZS=- EZS
     GOTO 6
   3 XYMAG= SQRT( RX* RX+ RY* RY)
     IF( XYMAG.GT.1.D-6) GOTO 4
     PX=0.
     PY=0.
     CTH=1.
     RRV=(1.,0.)
     GOTO 5
   4 PX=- RY/ XYMAG
     PY= RX/ XYMAG
     CTH= RZ/ SQRT( XYMAG* XYMAG+ RZ* RZ)
     RRV= SQRT(1.- ZRATI* ZRATI*(1.- CTH* CTH))
   5 RRH= ZRATI* CTH
     RRH=( RRH- RRV)/( RRH+ RRV)
     RRV= ZRATI* RRV
     RRV=-( CTH- RRV)/( CTH+ RRV)
     EDP=( EXK* PX+ EYK* PY)*( RRH- RRV)
     EXK= EXK* RRV+ EDP* PX
     EYK= EYK* RRV+ EDP* PY
     EZK= EZK* RRV
     EDP=( EXS* PX+ EYS* PY)*( RRH- RRV)
     EXS= EXS* RRV+ EDP* PX
     EYS= EYS* RRV+ EDP* PY
     EZS= EZS* RRV
   6 RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     SUBROUTINE WIRE( XW1, YW1, ZW1, XW2, YW2, ZW2, RAD, RDEL, RRAD,
    &NS, ITG)
C ***
C
C     SUBROUTINE WIRE GENERATES SEGMENT GEOMETRY DATA FOR A STRAIGHT
C     WIRE OF NS SEGMENTS.
C
     IMPLICIT REAL (A-H,O-Z)
     PARAMETER ( NM=600, N2M=800, N3M=1000)
     COMMON  /DATA/ LD, N1, N2, N, NP, M1, M2, M, MP, X( NM), Y( NM),
    &Z( NM), SI( NM), BI( NM), ALP( NM), BET( NM), ICON1( N2M), ICON2(
    & N2M), ITAG( N2M), ICONX( NM), WLAM, IPSYM
     DIMENSION  X2(1), Y2(1), Z2(1)
     EQUIVALENCE(X2(1),SI(1)),(Y2(1),ALP(1)),(Z2(1),BET(1))
     IST= N+1
     N= N+ NS
     NP= N
     MP= M
     IPSYM=0
     IF( NS.LT.1) RETURN
     XD= XW2- XW1
     YD= YW2- YW1
     ZD= ZW2- ZW1
     IF( ABS( RDEL-1.).LT.1.D-6) GOTO 1
     DELZ= SQRT( XD* XD+ YD* YD+ ZD* ZD)
     XD= XD/ DELZ
     YD= YD/ DELZ
     ZD= ZD/ DELZ
     DELZ= DELZ*(1.- RDEL)/(1.- RDEL** NS)
     RD= RDEL
     GOTO 2
   1 FNS= NS
     XD= XD/ FNS
     YD= YD/ FNS
     ZD= ZD/ FNS
     DELZ=1.
     RD=1.
   2 RADZ= RAD
     XS1= XW1
     YS1= YW1
     ZS1= ZW1
     DO 3  I= IST, N
     ITAG( I)= ITG
     XS2= XS1+ XD* DELZ
     YS2= YS1+ YD* DELZ
     ZS2= ZS1+ ZD* DELZ
     X( I)= XS1
     Y( I)= YS1
     Z( I)= ZS1
     X2( I)= XS2
     Y2( I)= YS2
     Z2( I)= ZS2
     BI( I)= RADZ
     DELZ= DELZ* RD
     RADZ= RADZ* RRAD
     XS1= XS2
     YS1= YS2
   3 ZS1= ZS2
     X2( N)= XW2
     Y2( N)= YW2
     Z2( N)= ZW2
     RETURN
     END
C ***
C     DOUBLE PRECISION 6/4/85
C
     FUNCTION ZINT( SIGL, ROLAM)
C ***
C
C     ZINT COMPUTES THE INTERNAL IMPEDANCE OF A CIRCULAR WIRE
C
C
     IMPLICIT REAL (A-H,O-Z)
     COMPLEX  TH, PH, F, G, FJ, CN, BR1, BR2, ZINT
     COMPLEX  CC1, CC2, CC3, CC4, CC5, CC6, CC7, CC8, CC9, CC10,
    &CC11, CC12, CC13, CC14
     DIMENSION  FJX(2), CNX(2), CCN(28)
     EQUIVALENCE(FJ,FJX),(CN,CNX),(CC1,CCN(1)),(CC2,CCN(3)),(CC3,CCN(5
    &)),(CC4,CCN(7)),(CC5,CCN(9)),(CC6,CCN(11)),(CC7,CCN(13)),(CC8,CCN
    &(15)),(CC9,CCN(17)),(CC10,CCN(19)),(CC11,CCN(21)),(CC12,CCN(23)),
    &(CC13,CCN(25)),(CC14,CCN(27))
     DATA   PI, POT, TP, TPCMU/3.1415926D+0,1.5707963D+0,6.2831853D+0,
    &2.368705D+3/
     DATA   CMOTP/60.00/, FJX/0.,1./, CNX/.70710678D+0,.70710678D+0/
     DATA   CCN/6.D-7,1.9D-6,-3.4D-6,5.1D-6,-2.52D-5,0.,-9.06D-5,-
    &9.01D-5,0.,-9.765D-4,.0110486D+0,-.0110485D+0,0.,-.3926991D+0,
    &1.6D-6,-3.2D-6,1.17D-5,-2.4D-6,3.46D-5,3.38D-5,5.D-7,2.452D-4,-
    &1.3813D-3,1.3811D-3,-6.25001D-2,-1.D-7,.7071068D+0,.7071068D+0/
     TH( D)=((((( CC1* D+ CC2)* D+ CC3)* D+ CC4)* D+ CC5)* D+ CC6)* D+
    & CC7
     PH( D)=((((( CC8* D+ CC9)* D+ CC10)* D+ CC11)* D+ CC12)* D+ CC13)
    &* D+ CC14
     F( D)= SQRT( POT/ D)* EXP(- CN* D+ TH(-8./ X))
     G( D)= EXP( CN* D+ TH(8./ X))/ SQRT( TP* D)
     X= SQRT( TPCMU* SIGL)* ROLAM
     IF( X.GT.110.) GOTO 2
     IF( X.GT.8.) GOTO 1
     Y= X/8.
     Y= Y* Y
     S= Y* Y
     BER=((((((-9.01D-6* S+1.22552D-3)* S-.08349609D+0)* S+
    &2.6419140D+0)* S-32.363456D+0)* S+113.77778D+0)* S-64.)* S+1.
     BEI=((((((1.1346D-4* S-.01103667D+0)* S+.52185615D+0)* S-
    &10.567658D+0)* S+72.817777D+0)* S-113.77778D+0)* S+16.)* Y
     BR1= CMPLX( BER, BEI)
     BER=(((((((-3.94D-6* S+4.5957D-4)* S-.02609253D+0)* S+
    &.66047849D+0)* S-6.0681481D+0)* S+14.222222D+0)* S-4.)* Y)* X
     BEI=((((((4.609D-5* S-3.79386D-3)* S+.14677204D+0)* S-
    &2.3116751D+0)* S+11.377778D+0)* S-10.666667D+0)* S+.5)* X
     BR2= CMPLX( BER, BEI)
     BR1= BR1/ BR2
     GOTO 3
   1 BR2= FJ* F( X)/ PI
     BR1= G( X)+ BR2
     BR2= G( X)* PH(8./ X)- BR2* PH(-8./ X)
     BR1= BR1/ BR2
     GOTO 3
   2 BR1= CMPLX(.70710678D+0,-.70710678D+0)
   3 ZINT= FJ* SQRT( CMOTP/ SIGL)* BR1/ ROLAM
     RETURN
     END

     SUBROUTINE STR0PC( STRING, STRING1)
     CHARACTER *(*)  STRING, STRING1
     INTEGER*4  I, J, IC
     DO 150, I=1, LEN( STRING)
     IC= ICHAR( STRING( I: I))
     IF( IC.GE.97.AND. IC.LE.122) IC= IC-32
     STRING1( I: I)= CHAR( IC)
 150 CONTINUE
     RETURN
     END