Fixed a bug in the SOR solvers. (nw)

This commit is contained in:
couriersud 2015-06-11 23:50:55 +02:00
parent b2bbc99e76
commit 6fd6de50ff
2 changed files with 15 additions and 18 deletions

View File

@ -183,18 +183,6 @@ ATTR_HOT inline int netlist_matrix_solver_SOR_t<m_N, _storage_N>::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<m_N, _storage_N>::vsolve_non_dyn
this->m_gs_fail++;
return netlist_matrix_solver_direct_t<m_N, _storage_N>::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;
}

View File

@ -217,20 +217,19 @@ ATTR_HOT inline int netlist_matrix_solver_SOR_mat_t<m_N, _storage_N>::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<m_N, _storage_N>::solve_non_dynamic(newton_raphson);
}
else {
this->m_stat_calculations++;
this->store(new_v);
return resched_cnt;
}