Found one additional issue in the extraction that causes incorrect

partitioning of unshielded areas reaching outward from any given
edge, caused by using a boundary value in the 2nd recursion call
that had been modified for the 1st recursion call and so was no
longer valid.
This commit is contained in:
Tim Edwards 2023-03-24 17:11:27 -04:00
parent 30184cb506
commit 8fb96db14c
2 changed files with 6 additions and 9 deletions

View File

@ -706,6 +706,8 @@ extOutputNodes(nodeList, outFile)
{
intR = (reg->nreg_resist + rround) / ExtCurStyle->exts_resistScale;
finC = reg->nreg_cap/ExtCurStyle->exts_capScale;
/* Avoid negative capacitance caused by round-off near zero */
if (finC < 0.0) finC = 0.0;
fprintf(outFile, "node \"%s\" %d %lg", text, intR, finC);
}

View File

@ -1403,11 +1403,6 @@ extSideOverlap(tp, esws)
subcap = (ExtCurStyle->exts_perimCap[ta][outtype] *
MIN(areaAccountedFor, length));
rbp->nreg_cap -= subcap;
/* XXX WIP XXX */
TxPrintf("(4) Subtracting cap value %g in clip area %d %d %d %d\n",
subcap,
ov.o_clip.r_xbot, ov.o_clip.r_ybot,
ov.o_clip.r_xtop, ov.o_clip.r_ytop);
/* Ignore residual error at ~zero zeptoFarads. Probably */
/* there should be better handling of round-off here. */
if ((rbp->nreg_cap > -0.001) && (rbp->nreg_cap < 0.001))
@ -1528,7 +1523,7 @@ extWalkTop(area, mask, func, bp, esws)
if (lookRight)
{
aloc = *area;
aloc.r_xbot = bloc.b_segment.r_xtop;
aloc.r_xbot = RIGHT(tp);
bloc.b_segment.r_xtop = bp->b_segment.r_xtop;
bloc.b_segment.r_xbot = aloc.r_xbot;
if (extWalkTop(&aloc, mask, func, &bloc, esws) != 0)
@ -1640,7 +1635,7 @@ extWalkBottom(area, mask, func, bp, esws)
if (lookRight)
{
aloc = *area;
aloc.r_xbot = bloc.b_segment.r_xtop;
aloc.r_xbot = RIGHT(tp);
bloc.b_segment.r_xtop = bp->b_segment.r_xtop;
bloc.b_segment.r_xbot = aloc.r_xbot;
if (extWalkBottom(&aloc, mask, func, &bloc, esws) != 0)
@ -1752,7 +1747,7 @@ extWalkRight(area, mask, func, bp, esws)
if (lookUp)
{
aloc = *area;
aloc.r_ybot = bloc.b_segment.r_ytop;
aloc.r_ybot = TOP(tp);
bloc.b_segment.r_ytop = bp->b_segment.r_ytop;
bloc.b_segment.r_ybot = aloc.r_ybot;
if (extWalkRight(&aloc, mask, func, &bloc, esws) != 0)
@ -1864,7 +1859,7 @@ extWalkLeft(area, mask, func, bp, esws)
if (lookUp)
{
aloc = *area;
aloc.r_ybot = bloc.b_segment.r_ytop;
aloc.r_ybot = TOP(tp);
bloc.b_segment.r_ytop = bp->b_segment.r_ytop;
bloc.b_segment.r_ybot = aloc.r_ybot;
if (extWalkLeft(&aloc, mask, func, &bloc, esws) != 0)