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.cpp29
1 files changed, 16 insertions, 13 deletions
diff --git a/src/lib/netlist/solver/nld_solver.cpp b/src/lib/netlist/solver/nld_solver.cpp
index 9fa0ee16c60..525cce76eee 100644
--- a/src/lib/netlist/solver/nld_solver.cpp
+++ b/src/lib/netlist/solver/nld_solver.cpp
@@ -94,8 +94,10 @@ ATTR_COLD void terms_t::set_pointers()
// matrix_solver
// ----------------------------------------------------------------------------------------
-ATTR_COLD matrix_solver_t::matrix_solver_t(const eSortType sort, const solver_parameters_t *params)
-: m_stat_calculations(0),
+ATTR_COLD matrix_solver_t::matrix_solver_t(netlist_t &anetlist, const pstring &name,
+ const eSortType sort, const solver_parameters_t *params)
+: device_t(anetlist, name),
+ m_stat_calculations(0),
m_stat_newton_raphson(0),
m_stat_vsolver_calls(0),
m_iterative_fail(0),
@@ -707,10 +709,11 @@ NETLIB_UPDATE(solver)
template <int m_N, int _storage_N>
matrix_solver_t * NETLIB_NAME(solver)::create_solver(int size, const bool use_specific)
{
+ pstring solvername = pfmt("Solver_{1}")(m_mat_solvers.size());
if (use_specific && m_N == 1)
- return palloc(matrix_solver_direct1_t(&m_params));
+ return palloc(matrix_solver_direct1_t(netlist(), solvername, &m_params));
else if (use_specific && m_N == 2)
- return palloc(matrix_solver_direct2_t(&m_params));
+ return palloc(matrix_solver_direct2_t(netlist(), solvername, &m_params));
else
{
if (size >= m_gs_threshold)
@@ -718,39 +721,39 @@ matrix_solver_t * NETLIB_NAME(solver)::create_solver(int size, const bool use_sp
if (pstring("SOR_MAT").equals(m_iterative_solver))
{
typedef matrix_solver_SOR_mat_t<m_N,_storage_N> solver_sor_mat;
- return palloc(solver_sor_mat(&m_params, size));
+ return palloc(solver_sor_mat(netlist(), solvername, &m_params, size));
}
else if (pstring("MAT_CR").equals(m_iterative_solver))
{
typedef matrix_solver_GCR_t<m_N,_storage_N> solver_mat;
- return palloc(solver_mat(&m_params, size));
+ return palloc(solver_mat(netlist(), solvername, &m_params, size));
}
else if (pstring("MAT").equals(m_iterative_solver))
{
typedef matrix_solver_direct_t<m_N,_storage_N> solver_mat;
- return palloc(solver_mat(&m_params, size));
+ return palloc(solver_mat(netlist(), solvername, &m_params, size));
}
else if (pstring("SM").equals(m_iterative_solver))
{
/* Sherman-Morrison Formula */
typedef matrix_solver_sm_t<m_N,_storage_N> solver_mat;
- return palloc(solver_mat(&m_params, size));
+ return palloc(solver_mat(netlist(), solvername, &m_params, size));
}
else if (pstring("W").equals(m_iterative_solver))
{
/* Woodbury Formula */
typedef matrix_solver_w_t<m_N,_storage_N> solver_mat;
- return palloc(solver_mat(&m_params, size));
+ return palloc(solver_mat(netlist(), solvername, &m_params, size));
}
else if (pstring("SOR").equals(m_iterative_solver))
{
typedef matrix_solver_SOR_t<m_N,_storage_N> solver_GS;
- return palloc(solver_GS(&m_params, size));
+ return palloc(solver_GS(netlist(), solvername, &m_params, size));
}
else if (pstring("GMRES").equals(m_iterative_solver))
{
typedef matrix_solver_GMRES_t<m_N,_storage_N> solver_GMRES;
- return palloc(solver_GMRES(&m_params, size));
+ return palloc(solver_GMRES(netlist(), solvername, &m_params, size));
}
else
{
@@ -761,7 +764,7 @@ matrix_solver_t * NETLIB_NAME(solver)::create_solver(int size, const bool use_sp
else
{
typedef matrix_solver_direct_t<m_N,_storage_N> solver_D;
- return palloc(solver_D(&m_params, size));
+ return palloc(solver_D(netlist(), solvername, &m_params, size));
}
}
}
@@ -900,7 +903,7 @@ ATTR_COLD void NETLIB_NAME(solver)::post_start()
break;
}
- register_sub(pfmt("Solver_{1}")(m_mat_solvers.size()), *ms);
+ register_sub(*ms);
ms->setup(grp);