Re: NEC-LIST: Could this be a NEC2 bug?

From: Jerry Burke <burke2_at_email.domain.hidden>
Date: Tue, 31 Oct 2006 15:11:33 -0500

Neoklis,

You are right, there is a bug in NEC-2 when the extended thin-wire
kernel is used with wires connected to patches. This has escaped
detection for over 20 years. I did not catch it yesterday, because I
had MAXSEG=10000, and ICON1 and ICON2 are dimensioned to 2*MAXSEG, so
10000 did not exceed the bound.

The problem can be fixed as shown below. In addition to subroutine
CMWW, where you encountered the problem, the same changes need to be
made in subroutines NEFLD and QDSRC. With this change the extended
kernel is not used at a wire end connected to a patch surface, but
would be used on the rest of the wire if it is straight .

The extended thin-wire kernel is only used on thick, straight wires,
so is not very useful. The code turns it off at junctions, bends and
changes in radius. Also, the connection of a wire to a patch surface
is not good in NEC-2 or 4. It works fairly well for something like a
monopole on a surface, but not for a half loop connected to the
surface. A wire grid surface provides a better connection for a wire
antenna.

NEC-4 does not have the extended kernel, but instead puts the current
on the wire surface with match points on the axis, and has an
approximation for wire end caps that reduces the instability when the
segment length to radius ratio is small. So NEC-4 would not have
this problem.

Thanks for finding this bug.

Jerry Burke
LLNL

To fix the extended thin-wire kernel with patches in NEC-2:

       SUBROUTINE CMWW (J,I1,I2,CM,NR,CW,NW,ITRP)
       .
       .
C DECIDE WETHER EXT. T.W. APPROX. CAN BE USED
       IPR=ICON1(J)
       IF(IPR.GT.10000)GO TO 5 !<---NEW
       IF (IPR) 1,6,2
1 IPR=-IPR
       IF (-ICON1(IPR).NE.J) GO TO 7
       GO TO 4
2 IF (IPR.NE.J) GO TO 3
       IF (CABJ*CABJ+SABJ*SABJ.GT.1.D-8) GO TO 7
       GO TO 5
3 IF (ICON2(IPR).NE.J) GO TO 7
4 XI=ABS(CABJ*CAB(IPR)+SABJ*SAB(IPR)+SALPJ*SALP(IPR))
       IF (XI.LT.0.999999D+0) GO TO 7
       IF (ABS(BI(IPR)/B-1.).GT.1.D-6) GO TO 7
5 IND1=0
       GO TO 8
6 IND1=1
       GO TO 8
7 IND1=2
8 IPR=ICON2(J)
       IF(IPR.GT.10000)GO TO 15 !<---NEW
       IF (IPR) 9,14,10

       SUBROUTINE NEFLD (XOB,YOB,ZOB,EX,EY,EZ)
       .
       .
       IPR=ICON1(I)
       IF(IPR.GT.10000)GO TO 9 !<---NEW
       IF (IPR) 3,8,4
3 IPR=-IPR
       IF (-ICON1(IPR).NE.I) GO TO 9
       GO TO 6
4 IF (IPR.NE.I) GO TO 5
       IF (CABJ*CABJ+SABJ*SABJ.GT.1.D-8) GO TO 9
       GO TO 7
5 IF (ICON2(IPR).NE.I) GO TO 9
6 XI=ABS(CABJ*CAB(IPR)+SABJ*SAB(IPR)+SALPJ*SALP(IPR))
       IF (XI.LT.0.999999D+0) GO TO 9
       IF (ABS(BI(IPR)/B-1.).GT.1.D-6) GO TO 9
7 IND1=0
       GO TO 10
8 IND1=1
       GO TO 10
9 IND1=2
10 IPR=ICON2(I)
       IF(IPR.GT.10000)GO TO 17 !<---NEW
       IF (IPR) 11,16,12

       SUBROUTINE QDSRC (IS,V,E)
       .
       .
       IPR=ICON1(J)
       IF(IPR.GT.10000)GO TO 7 !<---NEW
       IF (IPR) 1,6,2
1 IPR=-IPR
       IF (-ICON1(IPR).NE.J) GO TO 7
       GO TO 4
2 IF (IPR.NE.J) GO TO 3
       IF (CABJ*CABJ+SABJ*SABJ.GT.1.D-8) GO TO 7
       GO TO 5
3 IF (ICON2(IPR).NE.J) GO TO 7
4 XI=ABS(CABJ*CAB(IPR)+SABJ*SAB(IPR)+SALPJ*SALP(IPR))
       IF (XI.LT.0.999999D+0) GO TO 7
       IF (ABS(BI(IPR)/B-1.).GT.1.D-6) GO TO 7
5 IND1=0
       GO TO 8
6 IND1=1
       GO TO 8
7 IND1=2
8 IPR=ICON2(J)
       IF(IPR.GT.10000)GO TO 15 !<---NEW
       IF (IPR) 9,14,10

-- 
The NEC-List mailing list
NEC-List_at_robomod.net
http://www.robomod.net/mailman/listinfo/nec-list
Received on Tue Oct 31 2006 - 20:11:44 EST

This archive was generated by hypermail 2.2.0 : Sat Oct 02 2010 - 00:10:45 EDT