diff options
Diffstat (limited to 'src/lib/netlist/solver/nld_matrix_solver.cpp')
-rw-r--r-- | src/lib/netlist/solver/nld_matrix_solver.cpp | 32 |
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()); } } |