Merge branch 'master' into netgen-1.5
This commit is contained in:
commit
afe0e9f758
|
|
@ -372,22 +372,16 @@ int flattenInstancesOf(char *name, int fnum, char *instance)
|
||||||
|
|
||||||
/* update node numbers in child to unique numbers */
|
/* update node numbers in child to unique numbers */
|
||||||
oldmax = 0;
|
oldmax = 0;
|
||||||
for (tmp = ChildStart; tmp != NULL; tmp = tmp->next)
|
for (tmp = ChildStart; tmp != NULL; tmp = tmp->next) {
|
||||||
if (tmp->node > oldmax) oldmax = tmp->node;
|
if (tmp->node > oldmax) oldmax = tmp->node;
|
||||||
if (nextnode <= oldmax) nextnode = oldmax + 1;
|
if (tmp->node > 0) tmp->node += (nextnode - 1);
|
||||||
|
}
|
||||||
for (tmp = ChildStart; tmp != NULL; tmp = tmp->next)
|
nextnode += oldmax;
|
||||||
if (tmp->node <= oldmax && tmp->node > 0) {
|
|
||||||
if (Debug) Printf("Update node %d --> %d\n", tmp->node, nextnode);
|
|
||||||
UpdateNodeNumbers(ChildStart, tmp->node, nextnode);
|
|
||||||
nextnode++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* copy nodenumbers of ports from parent */
|
/* copy nodenumbers of ports from parent */
|
||||||
ob2 = ParentParams;
|
ob2 = ParentParams;
|
||||||
for (tmp = ChildStart; tmp != NULL; tmp = tmp->next) {
|
for (tmp = ChildStart; tmp && IsPort(tmp); tmp = tmp->next) {
|
||||||
if (IsPort(tmp)) {
|
if (tmp->node > 0) {
|
||||||
if (tmp->node > 0) {
|
|
||||||
if (ob2->node == -1) {
|
if (ob2->node == -1) {
|
||||||
|
|
||||||
// Before commiting to attaching to a unconnected node, see
|
// Before commiting to attaching to a unconnected node, see
|
||||||
|
|
@ -413,17 +407,16 @@ int flattenInstancesOf(char *name, int fnum, char *instance)
|
||||||
Printf("Update node %d --> %d\n", tmp->node, ob2->node);
|
Printf("Update node %d --> %d\n", tmp->node, ob2->node);
|
||||||
}
|
}
|
||||||
UpdateNodeNumbers(ChildStart, tmp->node, ob2->node);
|
UpdateNodeNumbers(ChildStart, tmp->node, ob2->node);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* in pathological cases, the lengths of the port lists may
|
/* in pathological cases, the lengths of the port lists may
|
||||||
* change. This is an error, but that is no reason to allow
|
* change. This is an error, but that is no reason to allow
|
||||||
* the code to core dump. We avoid this by placing a
|
* the code to core dump. We avoid this by placing a
|
||||||
* superfluous check on ob2->type
|
* superfluous check on ob2->type
|
||||||
*/
|
*/
|
||||||
if (ob2 != NULL) ob2 = ob2->next;
|
if (ob2 != NULL) ob2 = ob2->next;
|
||||||
|
|
||||||
if (ob2 == NULL) break;
|
if (ob2 == NULL) break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Using name == NULL to indicate that a .ext file is being */
|
/* Using name == NULL to indicate that a .ext file is being */
|
||||||
|
|
@ -1607,15 +1600,15 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
|
||||||
}
|
}
|
||||||
if (match) {
|
if (match) {
|
||||||
if (ecomp->cell1 && (ecomp->num1 > 0)) {
|
if (ecomp->cell1 && (ecomp->num1 > 0)) {
|
||||||
Fprintf(stdout, "Flattening instances of %s in cell %s"
|
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
||||||
" makes a better match\n", ecomp->cell1->name,
|
" makes a better match\n", ecomp->cell1->name,
|
||||||
name1);
|
name1, file1);
|
||||||
flattenInstancesOf(name1, file1, ecomp->cell1->name);
|
flattenInstancesOf(name1, file1, ecomp->cell1->name);
|
||||||
}
|
}
|
||||||
if (ecomp->cell2 && (ecomp->num2 > 0)) {
|
if (ecomp->cell2 && (ecomp->num2 > 0)) {
|
||||||
Fprintf(stdout, "Flattening instances of %s in cell %s"
|
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
||||||
" makes a better match\n", ecomp->cell2->name,
|
" makes a better match\n", ecomp->cell2->name,
|
||||||
name2);
|
name2, file2);
|
||||||
flattenInstancesOf(name2, file2, ecomp->cell2->name);
|
flattenInstancesOf(name2, file2, ecomp->cell2->name);
|
||||||
}
|
}
|
||||||
modified++;
|
modified++;
|
||||||
|
|
@ -1696,9 +1689,9 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
|
||||||
}
|
}
|
||||||
if (match) {
|
if (match) {
|
||||||
if (ecomp->cell2) {
|
if (ecomp->cell2) {
|
||||||
Fprintf(stdout, "Flattening instances of %s in cell %s"
|
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
||||||
" makes a better match\n", ecomp->cell2->name,
|
" makes a better match\n", ecomp->cell2->name,
|
||||||
name2);
|
name2, file2);
|
||||||
flattenInstancesOf(name2, file2, ecomp->cell2->name);
|
flattenInstancesOf(name2, file2, ecomp->cell2->name);
|
||||||
}
|
}
|
||||||
modified++;
|
modified++;
|
||||||
|
|
@ -1754,9 +1747,9 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
|
||||||
}
|
}
|
||||||
if (match) {
|
if (match) {
|
||||||
if (ecomp->cell1) {
|
if (ecomp->cell1) {
|
||||||
Fprintf(stdout, "Flattening instances of %s in cell %s"
|
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
||||||
" makes a better match\n", ecomp->cell1->name,
|
" makes a better match\n", ecomp->cell1->name,
|
||||||
name1);
|
name1, file1);
|
||||||
flattenInstancesOf(name1, file1, ecomp->cell1->name);
|
flattenInstancesOf(name1, file1, ecomp->cell1->name);
|
||||||
}
|
}
|
||||||
modified++;
|
modified++;
|
||||||
|
|
@ -1837,9 +1830,9 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
|
||||||
}
|
}
|
||||||
if (found) {
|
if (found) {
|
||||||
Fprintf(stdout, "Removing zero-valued device "
|
Fprintf(stdout, "Removing zero-valued device "
|
||||||
"%s from cell %s makes a better match\n",
|
"%s from cell %s (%d) makes a better "
|
||||||
tsub1->name,
|
"match\n",
|
||||||
tc1->name);
|
tsub1->name, tc1->name, tc1->file);
|
||||||
|
|
||||||
/* A current source is an open, while a */
|
/* A current source is an open, while a */
|
||||||
/* resistor or voltage source is a short. */
|
/* resistor or voltage source is a short. */
|
||||||
|
|
@ -1948,9 +1941,9 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
|
||||||
}
|
}
|
||||||
if (found) {
|
if (found) {
|
||||||
Fprintf(stdout, "Removing zero-valued device "
|
Fprintf(stdout, "Removing zero-valued device "
|
||||||
"%s from cell %s makes a better match\n",
|
"%s from cell %s (%d) makes a better "
|
||||||
tsub2->name,
|
"match\n",
|
||||||
tc2->name);
|
tsub2->name, tc2->name, tc2->file);
|
||||||
|
|
||||||
/* merge node of endpoints */
|
/* merge node of endpoints */
|
||||||
if (ecomp->cell2->class != CLASS_ISOURCE) {
|
if (ecomp->cell2->class != CLASS_ISOURCE) {
|
||||||
|
|
@ -2041,8 +2034,8 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
|
||||||
if (dstr) *dstr = '[';
|
if (dstr) *dstr = '[';
|
||||||
if ((ncomp == ecomp0X) && (ecomp0X->num2 <= ecompX0->num1)) {
|
if ((ncomp == ecomp0X) && (ecomp0X->num2 <= ecompX0->num1)) {
|
||||||
Fprintf(stdout, "Flattening instances of %s in cell %s"
|
Fprintf(stdout, "Flattening instances of %s in cell %s"
|
||||||
" makes a better match\n", ecompX0->cell1->name,
|
"(%d) makes a better match\n",
|
||||||
name1);
|
ecompX0->cell1->name, name1, file1);
|
||||||
flattenInstancesOf(name1, file1, ecompX0->cell1->name);
|
flattenInstancesOf(name1, file1, ecompX0->cell1->name);
|
||||||
ecompX0->num1 = 0;
|
ecompX0->num1 = 0;
|
||||||
ecomp0X->num1 += ecompX0->num1;
|
ecomp0X->num1 += ecompX0->num1;
|
||||||
|
|
@ -2067,8 +2060,8 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
|
||||||
if (dstr) *dstr = '[';
|
if (dstr) *dstr = '[';
|
||||||
if ((ncomp == ecompX0) && (ecompX0->num1 <= ecomp0X->num2)) {
|
if ((ncomp == ecompX0) && (ecompX0->num1 <= ecomp0X->num2)) {
|
||||||
Fprintf(stdout, "Flattening instances of %s in cell %s"
|
Fprintf(stdout, "Flattening instances of %s in cell %s"
|
||||||
" makes a better match\n", ecomp0X->cell2->name,
|
" (%d) makes a better match\n",
|
||||||
name2);
|
ecomp0X->cell2->name, name2, file2);
|
||||||
flattenInstancesOf(name2, file2, ecomp0X->cell2->name);
|
flattenInstancesOf(name2, file2, ecomp0X->cell2->name);
|
||||||
ecomp0X->num2 = 0;
|
ecomp0X->num2 = 0;
|
||||||
ecompX0->num2 += ecomp0X->num2;
|
ecompX0->num2 += ecomp0X->num2;
|
||||||
|
|
|
||||||
|
|
@ -3441,7 +3441,8 @@ int CombineParallel(char *model, int file)
|
||||||
}
|
}
|
||||||
HashKill(&devdict);
|
HashKill(&devdict);
|
||||||
if (dcnt > 0) {
|
if (dcnt > 0) {
|
||||||
Fprintf(stdout, "Class %s(%d): Merged %d parallel devices.\n", model, file, dcnt);
|
Fprintf(stdout, "Class %s (%d): Merged %d parallel devices.\n",
|
||||||
|
model, file, dcnt);
|
||||||
}
|
}
|
||||||
FREE(nodecount);
|
FREE(nodecount);
|
||||||
return dcnt;
|
return dcnt;
|
||||||
|
|
@ -3739,7 +3740,8 @@ int CombineSeries(char *model, int file)
|
||||||
}
|
}
|
||||||
FREE(instlist);
|
FREE(instlist);
|
||||||
if (scnt > 0) {
|
if (scnt > 0) {
|
||||||
Fprintf(stdout, "Class %s(%d): Merged %d series devices.\n", model, file, scnt);
|
Fprintf(stdout, "Class %s (%d): Merged %d series devices.\n",
|
||||||
|
model, file, scnt);
|
||||||
}
|
}
|
||||||
return scnt;
|
return scnt;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -810,7 +810,8 @@ void DescribeInstance(char *name, int file)
|
||||||
disconnectednodes++;
|
disconnectednodes++;
|
||||||
/* Don't report on ports marked "port_match_error", which is just confusing. */
|
/* Don't report on ports marked "port_match_error", which is just confusing. */
|
||||||
if (strcmp(ob->name, "port_match_error")) {
|
if (strcmp(ob->name, "port_match_error")) {
|
||||||
Fprintf(stderr, "Cell %s(%d) disconnected node: %s\n", tp->name, tp->file, ob->name);
|
Fprintf(stderr, "Cell %s (%d) disconnected node: %s\n",
|
||||||
|
tp->name, tp->file, ob->name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue