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