diff options
author | couriersud <couriersud@arcor.de> | 2015-05-03 19:32:20 +0200 |
---|---|---|
committer | couriersud <couriersud@arcor.de> | 2015-05-03 19:32:20 +0200 |
commit | 16618b71c71183d5ac95e0cc333683324684736d (patch) | |
tree | fb8a418caaf7865aff6f71fbf17236f356e957f7 | |
parent | 4c7066c7871190ddc4cad1c263d97c8868f7ef8d (diff) |
Fix a bug in the solver code. (nw)
-rw-r--r-- | src/emu/netlist/analog/nld_solver.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/emu/netlist/analog/nld_solver.c b/src/emu/netlist/analog/nld_solver.c index e254f6587a1..62b1661abcf 100644 --- a/src/emu/netlist/analog/nld_solver.c +++ b/src/emu/netlist/analog/nld_solver.c @@ -341,7 +341,7 @@ NETLIB_START(solver) register_param("ACCURACY", m_accuracy, 1e-7); register_param("GS_LOOPS", m_gs_loops, 9); // Gauss-Seidel loops - register_param("GS_THRESHOLD", m_gs_threshold, 5); // below this value, gaussian elimination is used + register_param("GS_THRESHOLD", m_gs_threshold, 2); // below this value, gaussian elimination is used register_param("NR_LOOPS", m_nr_loops, 25); // Newton-Raphson loops register_param("PARALLEL", m_parallel, 0); register_param("SOR_FACTOR", m_sor, 1.059); @@ -441,11 +441,16 @@ netlist_matrix_solver_t * NETLIB_NAME(solver)::create_solver(int size, const int return nl_alloc(netlist_matrix_solver_direct2_t, m_params); else { - typedef netlist_matrix_solver_gauss_seidel_t<m_N,_storage_N> solver_N; if (size >= gs_threshold) - return nl_alloc(solver_N, m_params, size); + { + typedef netlist_matrix_solver_gauss_seidel_t<m_N,_storage_N> solver_GS; + return nl_alloc(solver_GS, m_params, size); + } else - return nl_alloc(solver_N, m_params, size); + { + typedef netlist_matrix_solver_direct_t<m_N,_storage_N> solver_D; + return nl_alloc(solver_D, m_params, size); + } } } |