diff --git a/src/emu/netlist/analog/nld_ms_sor.h b/src/emu/netlist/analog/nld_ms_sor.h index d20b1d3ade1..90fcf4254b9 100644 --- a/src/emu/netlist/analog/nld_ms_sor.h +++ b/src/emu/netlist/analog/nld_ms_sor.h @@ -183,18 +183,6 @@ ATTR_HOT inline int netlist_matrix_solver_SOR_t::vsolve_non_dyn resched_cnt++; } while (resched && (resched_cnt < this->m_params.m_gs_loops)); - if (newton_raphson) - { - //printf("here %s\n", this->name().cstr()); - for (int k = 0; k < iN; k++) - this->m_nets[k]->m_cur_Analog += 1.0 * (new_V[k] - this->m_nets[k]->m_cur_Analog); - } - else - { - for (int k = 0; k < iN; k++) - this->m_nets[k]->m_cur_Analog = new_V[k]; - } - this->m_gs_total += resched_cnt; this->m_stat_calculations++; @@ -204,9 +192,19 @@ ATTR_HOT inline int netlist_matrix_solver_SOR_t::vsolve_non_dyn this->m_gs_fail++; return netlist_matrix_solver_direct_t::vsolve_non_dynamic(newton_raphson); } - else { - return resched_cnt; + + if (newton_raphson) + { + for (int k = 0; k < iN; k++) + this->m_nets[k]->m_cur_Analog += 1.0 * (new_V[k] - this->m_nets[k]->m_cur_Analog); } + else + { + for (int k = 0; k < iN; k++) + this->m_nets[k]->m_cur_Analog = new_V[k]; + } + + return resched_cnt; } diff --git a/src/emu/netlist/analog/nld_ms_sor_mat.h b/src/emu/netlist/analog/nld_ms_sor_mat.h index 01a0d16a229..29875004370 100644 --- a/src/emu/netlist/analog/nld_ms_sor_mat.h +++ b/src/emu/netlist/analog/nld_ms_sor_mat.h @@ -217,20 +217,19 @@ ATTR_HOT inline int netlist_matrix_solver_SOR_mat_t::vsolve_non resched_cnt++; } while (resched && (resched_cnt < this->m_params.m_gs_loops)); - this->store(new_v); + this->m_stat_calculations++; this->m_gs_total += resched_cnt; + if (resched) { //this->netlist().warning("Falling back to direct solver .. Consider increasing RESCHED_LOOPS"); this->m_gs_fail++; this->LE_solve(); - this->m_stat_calculations++; return netlist_matrix_solver_direct_t::solve_non_dynamic(newton_raphson); } else { - this->m_stat_calculations++; - + this->store(new_v); return resched_cnt; }