Corrected "ext2spice" to mark nodes on resistors from "extresist"

so that they do not get marked as "FLOATING" nodes when writing out
the parasitic capacitances at the end.
This commit is contained in:
Tim Edwards 2023-02-28 13:11:32 -05:00
parent eb36edf35a
commit 0058000c22
2 changed files with 68 additions and 0 deletions

View File

@ -1264,10 +1264,44 @@ spcresistHierVisit(hc, hierName1, hierName2, res)
HierName *hierName2;
float res;
{
HashEntry *he;
EFNodeName *nn;
fprintf(esSpiceF, "R%d %s %s %g\n", esResNum++,
nodeSpiceHierName(hc, hierName1),
nodeSpiceHierName(hc, hierName2), res / 1000.);
/* Mark nodes as visited so that associated capacitances won't be marked
* as "floating". This is inefficient since nodeSpiceName() already does
* a hash lookup of the EFNodeName. Could be improved, but is not a big
* performance issue.
*/
he = EFHNLook(hierName1, (char *)NULL, "nodeName");
if (he != NULL)
{
nn = (EFNodeName *)HashGetValue(he);
/* Mark node as visited (set bit one higher than number of resist classes) */
if (esDistrJunct)
update_w(efNumResistClasses, 1, nn->efnn_node);
else
markVisited((nodeClientHier *)nn->efnn_node->efnode_client,
efNumResistClasses);
}
he = EFHNLook(hierName2, (char *)NULL, "nodeName");
if (he != NULL)
{
nn = (EFNodeName *)HashGetValue(he);
/* Mark node as visited (set bit one higher than number of resist classes) */
if (esDistrJunct)
update_w(efNumResistClasses, 1, nn->efnn_node);
else
markVisited((nodeClientHier *)nn->efnn_node->efnode_client,
efNumResistClasses);
}
return 0;
}

View File

@ -3506,9 +3506,43 @@ spcresistVisit(hierName1, hierName2, res)
HierName *hierName2;
float res;
{
HashEntry *he;
EFNodeName *nn;
fprintf(esSpiceF, "R%d %s %s %g\n", esResNum++, nodeSpiceName(hierName1, NULL),
nodeSpiceName(hierName2, NULL), res / 1000.);
/* Mark nodes as visited so that associated capacitances won't be marked
* as "floating". This is inefficient since nodeSpiceName() already does
* a hash lookup of the EFNodeName. Could be improved, but is not a big
* performance issue.
*/
he = EFHNLook(hierName1, (char *)NULL, "nodeName");
if (he != NULL)
{
nn = (EFNodeName *) HashGetValue(he);
/* Mark node as visited (set bit one higher than number of resist classes) */
if (esDistrJunct)
update_w(efNumResistClasses, 1, nn->efnn_node);
else
markVisited((nodeClientHier *)nn->efnn_node->efnode_client,
efNumResistClasses);
}
he = EFHNLook(hierName2, (char *)NULL, "nodeName");
if (he != NULL)
{
nn = (EFNodeName *) HashGetValue(he);
/* Mark node as visited (set bit one higher than number of resist classes) */
if (esDistrJunct)
update_w(efNumResistClasses, 1, nn->efnn_node);
else
markVisited((nodeClientHier *)nn->efnn_node->efnode_client,
efNumResistClasses);
}
return 0;
}