summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/solver/nld_solver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/solver/nld_solver.cpp')
-rw-r--r--src/lib/netlist/solver/nld_solver.cpp36
1 files changed, 23 insertions, 13 deletions
diff --git a/src/lib/netlist/solver/nld_solver.cpp b/src/lib/netlist/solver/nld_solver.cpp
index 6ce9a093c84..44d51793690 100644
--- a/src/lib/netlist/solver/nld_solver.cpp
+++ b/src/lib/netlist/solver/nld_solver.cpp
@@ -175,6 +175,25 @@ poolptr<matrix_solver_t> NETLIB_NAME(solver)::create_solver(std::size_t size, co
}
}
+template <typename FT, int SIZE>
+poolptr<matrix_solver_t> NETLIB_NAME(solver)::create_solver_x(std::size_t size, const pstring &solvername)
+{
+ if (SIZE > 0)
+ {
+ if (size == SIZE)
+ return create_solver<FT, SIZE>(size, solvername);
+ else
+ return this->create_solver_x<FT, SIZE-1>(size, solvername);
+ }
+ else
+ {
+ if (size * 2 > -SIZE )
+ return create_solver<FT, SIZE>(size, solvername);
+ else
+ return this->create_solver_x<FT, SIZE / 2>(size, solvername);
+ }
+};
+
struct net_splitter
{
@@ -230,9 +249,6 @@ struct net_splitter
void NETLIB_NAME(solver)::post_start()
{
- const bool use_specific = true;
- plib::unused_var(use_specific);
-
m_params.m_pivot = m_pivot();
m_params.m_accuracy = m_accuracy();
/* FIXME: Throw when negative */
@@ -283,18 +299,11 @@ void NETLIB_NAME(solver)::post_start()
{
#if 1
case 1:
- if (use_specific)
- ms = pool().make_poolptr<matrix_solver_direct1_t<double>>(state(), sname, &m_params);
- else
- ms = create_solver<double, 1>(1, sname);
+ ms = pool().make_poolptr<matrix_solver_direct1_t<double>>(state(), sname, &m_params);
break;
case 2:
- if (use_specific)
- ms = pool().make_poolptr<matrix_solver_direct2_t<double>>(state(), sname, &m_params);
- else
- ms = create_solver<double, 2>(2, sname);
+ ms = pool().make_poolptr<matrix_solver_direct2_t<double>>(state(), sname, &m_params);
break;
-#if 1
case 3:
ms = create_solver<double, 3>(3, sname);
break;
@@ -319,6 +328,7 @@ void NETLIB_NAME(solver)::post_start()
case 10:
ms = create_solver<double, 10>(10, sname);
break;
+#if 0
case 11:
ms = create_solver<double, 11>(11, sname);
break;
@@ -341,7 +351,7 @@ void NETLIB_NAME(solver)::post_start()
ms = create_solver<double, 49>(49, sname);
break;
#endif
-#if 0
+#if 1
case 86:
ms = create_solver<double,86>(86, sname);
break;