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:
parent
30184cb506
commit
8fb96db14c
|
|
@ -706,6 +706,8 @@ extOutputNodes(nodeList, outFile)
|
||||||
{
|
{
|
||||||
intR = (reg->nreg_resist + rround) / ExtCurStyle->exts_resistScale;
|
intR = (reg->nreg_resist + rround) / ExtCurStyle->exts_resistScale;
|
||||||
finC = reg->nreg_cap/ExtCurStyle->exts_capScale;
|
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);
|
fprintf(outFile, "node \"%s\" %d %lg", text, intR, finC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1403,11 +1403,6 @@ extSideOverlap(tp, esws)
|
||||||
subcap = (ExtCurStyle->exts_perimCap[ta][outtype] *
|
subcap = (ExtCurStyle->exts_perimCap[ta][outtype] *
|
||||||
MIN(areaAccountedFor, length));
|
MIN(areaAccountedFor, length));
|
||||||
rbp->nreg_cap -= subcap;
|
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 */
|
/* Ignore residual error at ~zero zeptoFarads. Probably */
|
||||||
/* there should be better handling of round-off here. */
|
/* there should be better handling of round-off here. */
|
||||||
if ((rbp->nreg_cap > -0.001) && (rbp->nreg_cap < 0.001))
|
if ((rbp->nreg_cap > -0.001) && (rbp->nreg_cap < 0.001))
|
||||||
|
|
@ -1528,7 +1523,7 @@ extWalkTop(area, mask, func, bp, esws)
|
||||||
if (lookRight)
|
if (lookRight)
|
||||||
{
|
{
|
||||||
aloc = *area;
|
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_xtop = bp->b_segment.r_xtop;
|
||||||
bloc.b_segment.r_xbot = aloc.r_xbot;
|
bloc.b_segment.r_xbot = aloc.r_xbot;
|
||||||
if (extWalkTop(&aloc, mask, func, &bloc, esws) != 0)
|
if (extWalkTop(&aloc, mask, func, &bloc, esws) != 0)
|
||||||
|
|
@ -1640,7 +1635,7 @@ extWalkBottom(area, mask, func, bp, esws)
|
||||||
if (lookRight)
|
if (lookRight)
|
||||||
{
|
{
|
||||||
aloc = *area;
|
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_xtop = bp->b_segment.r_xtop;
|
||||||
bloc.b_segment.r_xbot = aloc.r_xbot;
|
bloc.b_segment.r_xbot = aloc.r_xbot;
|
||||||
if (extWalkBottom(&aloc, mask, func, &bloc, esws) != 0)
|
if (extWalkBottom(&aloc, mask, func, &bloc, esws) != 0)
|
||||||
|
|
@ -1752,7 +1747,7 @@ extWalkRight(area, mask, func, bp, esws)
|
||||||
if (lookUp)
|
if (lookUp)
|
||||||
{
|
{
|
||||||
aloc = *area;
|
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_ytop = bp->b_segment.r_ytop;
|
||||||
bloc.b_segment.r_ybot = aloc.r_ybot;
|
bloc.b_segment.r_ybot = aloc.r_ybot;
|
||||||
if (extWalkRight(&aloc, mask, func, &bloc, esws) != 0)
|
if (extWalkRight(&aloc, mask, func, &bloc, esws) != 0)
|
||||||
|
|
@ -1864,7 +1859,7 @@ extWalkLeft(area, mask, func, bp, esws)
|
||||||
if (lookUp)
|
if (lookUp)
|
||||||
{
|
{
|
||||||
aloc = *area;
|
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_ytop = bp->b_segment.r_ytop;
|
||||||
bloc.b_segment.r_ybot = aloc.r_ybot;
|
bloc.b_segment.r_ybot = aloc.r_ybot;
|
||||||
if (extWalkLeft(&aloc, mask, func, &bloc, esws) != 0)
|
if (extWalkLeft(&aloc, mask, func, &bloc, esws) != 0)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue