summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/solver
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2020-09-29 22:35:18 +0200
committer couriersud <couriersud@gmx.org>2020-09-30 08:37:42 +0200
commit91ca668d141570b26879cf111d644515aca173e2 (patch)
tree2d2425a73751e928a57c6843c7ce0d529ea54c07 /src/lib/netlist/solver
parentd838120e37300e42b940b8bdfaf41e0bfada4037 (diff)
netlist: Fix a net splitting issue with four term devices.
* Under cirtum circumstances the splitter would create "ghost" solvers consisting of terminals already used in another and complete solver. This may impact all netlist which use opamps and thus is committed early in the cycle. * This commit adds functionality to instruct the splitter code to include terminals which will not create matrix elements into the parsing of net groups for solvers.
Diffstat (limited to 'src/lib/netlist/solver')
-rw-r--r--src/lib/netlist/solver/nld_solver.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/lib/netlist/solver/nld_solver.cpp b/src/lib/netlist/solver/nld_solver.cpp
index 9f152369001..09a43178e55 100644
--- a/src/lib/netlist/solver/nld_solver.cpp
+++ b/src/lib/netlist/solver/nld_solver.cpp
@@ -361,10 +361,14 @@ namespace devices
{
auto &pt = dynamic_cast<terminal_t &>(*term);
// check the connected terminal
- analog_net_t &connected_net = netlist.setup().get_connected_terminal(pt)->net();
- netlist.log().verbose(" Connected net {}", connected_net.name());
- if (!check_if_processed_and_join(connected_net))
- process_net(netlist, connected_net);
+ auto connected_terminals = netlist.setup().get_connected_terminals(pt);
+ for (auto ct = connected_terminals->begin(); *ct != nullptr; ct++)
+ {
+ analog_net_t &connected_net = (*ct)->net();
+ netlist.log().verbose(" Connected net {}", connected_net.name());
+ if (!check_if_processed_and_join(connected_net))
+ process_net(netlist, connected_net);
+ }
}
}
}