summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/solver/nld_ms_direct.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/solver/nld_ms_direct.h')
-rw-r--r--src/lib/netlist/solver/nld_ms_direct.h42
1 files changed, 19 insertions, 23 deletions
diff --git a/src/lib/netlist/solver/nld_ms_direct.h b/src/lib/netlist/solver/nld_ms_direct.h
index ba38a68235c..fd745d01d22 100644
--- a/src/lib/netlist/solver/nld_ms_direct.h
+++ b/src/lib/netlist/solver/nld_ms_direct.h
@@ -29,9 +29,10 @@ namespace devices
using float_type = FT;
- matrix_solver_direct_t(netlist_state_t &anetlist, const pstring &name, const solver_parameters_t *params, const std::size_t size);
+ matrix_solver_direct_t(netlist_state_t &anetlist, const pstring &name,
+ const analog_net_t::list_t &nets,
+ const solver_parameters_t *params, const std::size_t size);
- void vsetup(analog_net_t::list_t &nets) override;
void reset() override { matrix_solver_t::reset(); }
protected:
@@ -66,25 +67,6 @@ namespace devices
// ----------------------------------------------------------------------------------------
template <typename FT, int SIZE>
- void matrix_solver_direct_t<FT, SIZE>::vsetup(analog_net_t::list_t &nets)
- {
- matrix_solver_t::setup_base(nets);
-
- /* add RHS element */
- for (std::size_t k = 0; k < size(); k++)
- {
- terms_for_net_t & t = m_terms[k];
-
- if (!plib::container::contains(t.m_nzrd, static_cast<unsigned>(size())))
- t.m_nzrd.push_back(static_cast<unsigned>(size()));
- }
-
- // FIXME: This shouldn't be necessary ...
- for (std::size_t k = 0; k < size(); k++)
- state().save(*this, RHS(k), this->name(), plib::pfmt("RHS.{1}")(k));
- }
-
- template <typename FT, int SIZE>
void matrix_solver_direct_t<FT, SIZE>::LE_solve()
{
const std::size_t kN = size();
@@ -210,13 +192,27 @@ namespace devices
template <typename FT, int SIZE>
matrix_solver_direct_t<FT, SIZE>::matrix_solver_direct_t(netlist_state_t &anetlist, const pstring &name,
- const solver_parameters_t *params, const std::size_t size)
- : matrix_solver_t(anetlist, name, params)
+ const analog_net_t::list_t &nets,
+ const solver_parameters_t *params,
+ const std::size_t size)
+ : matrix_solver_t(anetlist, name, nets, params)
, m_new_V(size)
, m_dim(size)
, m_pitch(m_pitch_ABS ? m_pitch_ABS : (((m_dim + 1) + 7) / 8) * 8)
, m_A(size, m_pitch)
{
+ /* add RHS element */
+ for (std::size_t k = 0; k < this->size(); k++)
+ {
+ terms_for_net_t & t = m_terms[k];
+
+ if (!plib::container::contains(t.m_nzrd, static_cast<unsigned>(this->size())))
+ t.m_nzrd.push_back(static_cast<unsigned>(this->size()));
+ }
+
+ // FIXME: This shouldn't be necessary ...
+ for (std::size_t k = 0; k < this->size(); k++)
+ state().save(*this, RHS(k), this->name(), plib::pfmt("RHS.{1}")(k));
}
} // namespace devices