summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/solver/nld_matrix_solver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/solver/nld_matrix_solver.cpp')
-rw-r--r--src/lib/netlist/solver/nld_matrix_solver.cpp32
1 files changed, 9 insertions, 23 deletions
diff --git a/src/lib/netlist/solver/nld_matrix_solver.cpp b/src/lib/netlist/solver/nld_matrix_solver.cpp
index 68cad1422ea..756c7817c03 100644
--- a/src/lib/netlist/solver/nld_matrix_solver.cpp
+++ b/src/lib/netlist/solver/nld_matrix_solver.cpp
@@ -39,20 +39,6 @@ namespace devices
m_connected_net_idx.push_back(net_other);
}
- void terms_for_net_t::set_pointers()
- {
- m_gt.resize(count(), 0.0);
- m_go.resize(count(), 0.0);
- m_Idr.resize(count(), 0.0);
- m_connected_net_V.resize(count(), nullptr);
-
- for (std::size_t i = 0; i < count(); i++)
- {
- m_terms[i]->set_ptrs(&m_gt[i], &m_go[i], &m_Idr[i]);
- m_connected_net_V[i] = m_terms[i]->otherterm()->net().Q_Analog_state_ptr();
- }
- }
-
// ----------------------------------------------------------------------------------------
// matrix_solver
// ----------------------------------------------------------------------------------------
@@ -237,7 +223,7 @@ namespace devices
/* rebuild */
for (auto &term : m_terms)
{
- int *other = term->connected_net_idx();
+ int *other = term->m_connected_net_idx.data();
for (std::size_t i = 0; i < term->count(); i++)
//FIXME: this is weird
if (other[i] != -1)
@@ -253,9 +239,7 @@ namespace devices
{
m_terms[k]->m_railstart = m_terms[k]->count();
for (std::size_t i = 0; i < m_rails_temp[k]->count(); i++)
- this->m_terms[k]->add(m_rails_temp[k]->terms()[i], m_rails_temp[k]->connected_net_idx()[i], false);
-
- m_terms[k]->set_pointers();
+ this->m_terms[k]->add(m_rails_temp[k]->terms()[i], m_rails_temp[k]->m_connected_net_idx.data()[i], false);
}
// free all - no longer needed
@@ -263,12 +247,14 @@ namespace devices
sort_terms(m_sort);
+ this->set_pointers();
+
/* create a list of non zero elements. */
for (unsigned k = 0; k < iN; k++)
{
terms_for_net_t * t = m_terms[k].get();
/* pretty brutal */
- int *other = t->connected_net_idx();
+ int *other = t->m_connected_net_idx.data();
t->m_nz.clear();
@@ -290,7 +276,7 @@ namespace devices
{
terms_for_net_t * t = m_terms[k].get();
/* pretty brutal */
- int *other = t->connected_net_idx();
+ int *other = t->m_connected_net_idx.data();
if (k==0)
t->m_nzrd.clear();
@@ -371,9 +357,9 @@ namespace devices
state().save(*this, m_terms[k]->m_h_n_m_1, this->name(), "m_h_n_m_1." + num);
// FIXME: This shouldn't be necessary, recalculate on each entry ...
- state().save(*this, m_terms[k]->go(),"GO" + num, this->name(), m_terms[k]->count());
- state().save(*this, m_terms[k]->gt(),"GT" + num, this->name(), m_terms[k]->count());
- state().save(*this, m_terms[k]->Idr(),"IDR" + num, this->name(), m_terms[k]->count());
+ state().save(*this, m_gonn[k],"GO" + num, this->name(), m_terms[k]->count());
+ state().save(*this, m_gtn[k],"GT" + num, this->name(), m_terms[k]->count());
+ state().save(*this, m_Idrn[k],"IDR" + num, this->name(), m_terms[k]->count());
}
}