Remove parameter GS_THRESHOLD. It is now outdated. (nw)
parent
ff820d6fa9
commit
d790daa2a7
|
@ -46,7 +46,6 @@ NETLIST_START(dummy)
|
|||
PARAM(Solver.NR_LOOPS, 9000)
|
||||
PARAM(Solver.SOR_FACTOR, 0.001)
|
||||
PARAM(Solver.GS_LOOPS, 1)
|
||||
//PARAM(Solver.GS_THRESHOLD, 99)
|
||||
PARAM(Solver.ITERATIVE, "MAT_CR")
|
||||
|
||||
#if USE_OPTMIZATIONS
|
||||
|
|
|
@ -13,7 +13,6 @@ NETLIST_START(dummy)
|
|||
PARAM(Solver.ACCURACY, 1e-8)
|
||||
PARAM(Solver.NR_LOOPS, 300)
|
||||
PARAM(Solver.GS_LOOPS, 1)
|
||||
PARAM(Solver.GS_THRESHOLD, 6)
|
||||
//PARAM(Solver.ITERATIVE, "W")
|
||||
PARAM(Solver.ITERATIVE, "MAT_CR")
|
||||
//PARAM(Solver.ITERATIVE, "MAT")
|
||||
|
|
|
@ -18,7 +18,6 @@ NETLIST_START(main)
|
|||
PARAM(Solver.SOR_FACTOR, 1.0)
|
||||
//PARAM(Solver.CONVERG, 1.0)
|
||||
PARAM(Solver.GS_LOOPS, 5)
|
||||
PARAM(Solver.GS_THRESHOLD, 5)
|
||||
|
||||
SUBMODEL(op1, opamp_fast)
|
||||
/* Wired as non - inverting amplifier like in LM3900 datasheet */
|
||||
|
|
|
@ -18,7 +18,6 @@ NETLIST_START(main)
|
|||
PARAM(Solver.NR_LOOPS, 30000 )
|
||||
//PARAM(Solver.CONVERG, 1.0)
|
||||
PARAM(Solver.GS_LOOPS, 30)
|
||||
PARAM(Solver.GS_THRESHOLD, 99)
|
||||
|
||||
// Tie up +5 to opamps thought it's not currently needed
|
||||
// Stay compatible
|
||||
|
|
|
@ -130,6 +130,13 @@ NETLIB_UPDATE(solver)
|
|||
}
|
||||
}
|
||||
|
||||
template <class C>
|
||||
std::unique_ptr<matrix_solver_t> create_it(netlist_t &nl, pstring name, solver_parameters_t ¶ms, unsigned size)
|
||||
{
|
||||
typedef C solver;
|
||||
return plib::make_unique<solver>(nl, name, ¶ms, size);
|
||||
}
|
||||
|
||||
template <int m_N, int storage_N>
|
||||
std::unique_ptr<matrix_solver_t> NETLIB_NAME(solver)::create_solver(unsigned size, const bool use_specific)
|
||||
{
|
||||
|
@ -140,55 +147,48 @@ std::unique_ptr<matrix_solver_t> NETLIB_NAME(solver)::create_solver(unsigned siz
|
|||
return plib::make_unique<matrix_solver_direct2_t>(netlist(), solvername, &m_params);
|
||||
else
|
||||
{
|
||||
if (static_cast<int>(size) >= m_gs_threshold())
|
||||
if (pstring("SOR_MAT").equals(m_iterative_solver()))
|
||||
{
|
||||
if (pstring("SOR_MAT").equals(m_iterative_solver()))
|
||||
{
|
||||
typedef matrix_solver_SOR_mat_t<m_N,storage_N> solver_sor_mat;
|
||||
return plib::make_unique<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 plib::make_unique<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 plib::make_unique<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 plib::make_unique<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 plib::make_unique<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 plib::make_unique<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 plib::make_unique<solver_GMRES>(netlist(), solvername, &m_params, size);
|
||||
}
|
||||
else
|
||||
{
|
||||
netlist().log().fatal("Unknown solver type: {1}\n", m_iterative_solver());
|
||||
return nullptr;
|
||||
}
|
||||
return create_it<matrix_solver_SOR_mat_t<m_N, storage_N>>(netlist(), solvername, m_params, size);
|
||||
//typedef matrix_solver_SOR_mat_t<m_N,storage_N> solver_sor_mat;
|
||||
//return plib::make_unique<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 plib::make_unique<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 plib::make_unique<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 plib::make_unique<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 plib::make_unique<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 plib::make_unique<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 plib::make_unique<solver_GMRES>(netlist(), solvername, &m_params, size);
|
||||
}
|
||||
else
|
||||
{
|
||||
typedef matrix_solver_direct_t<m_N,storage_N> solver_D;
|
||||
return plib::make_unique<solver_D>(netlist(), solvername, &m_params, size);
|
||||
netlist().log().fatal("Unknown solver type: {1}\n", m_iterative_solver());
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -297,6 +297,7 @@ void NETLIB_NAME(solver)::post_start()
|
|||
|
||||
switch (net_count)
|
||||
{
|
||||
#if 1
|
||||
case 1:
|
||||
ms = create_solver<1,1>(1, use_specific);
|
||||
break;
|
||||
|
@ -343,6 +344,7 @@ void NETLIB_NAME(solver)::post_start()
|
|||
case 87:
|
||||
ms = create_solver<87,87>(87, use_specific);
|
||||
break;
|
||||
#endif
|
||||
#endif
|
||||
default:
|
||||
netlist().log().warning("No specific solver found for netlist of size {1}", net_count);
|
||||
|
@ -354,7 +356,8 @@ void NETLIB_NAME(solver)::post_start()
|
|||
{
|
||||
ms = create_solver<0,32>(net_count, use_specific);
|
||||
}
|
||||
else if (net_count <= 64)
|
||||
else
|
||||
if (net_count <= 64)
|
||||
{
|
||||
ms = create_solver<0,64>(net_count, use_specific);
|
||||
}
|
||||
|
|
|
@ -49,7 +49,6 @@ NETLIB_OBJECT(solver)
|
|||
, m_sor(*this, "SOR_FACTOR", 1.059)
|
||||
, m_iterative_solver(*this, "ITERATIVE", "SOR")
|
||||
, m_accuracy(*this, "ACCURACY", 1e-7)
|
||||
, m_gs_threshold(*this, "GS_THRESHOLD", 6) // below this value, gaussian elimination is used
|
||||
, m_gs_loops(*this, "GS_LOOPS",9) // Gauss-Seidel loops
|
||||
|
||||
/* general parameters */
|
||||
|
@ -92,7 +91,6 @@ protected:
|
|||
param_double_t m_sor;
|
||||
param_str_t m_iterative_solver;
|
||||
param_double_t m_accuracy;
|
||||
param_int_t m_gs_threshold;
|
||||
param_int_t m_gs_loops;
|
||||
param_double_t m_gmin;
|
||||
param_logic_t m_pivot;
|
||||
|
|
|
@ -313,7 +313,6 @@ NETLIST_START(kidniki)
|
|||
PARAM(Solver.ACCURACY, 1e-8)
|
||||
PARAM(Solver.NR_LOOPS, 300)
|
||||
PARAM(Solver.GS_LOOPS, 1)
|
||||
PARAM(Solver.GS_THRESHOLD, 6)
|
||||
//PARAM(Solver.ITERATIVE, "SOR")
|
||||
PARAM(Solver.ITERATIVE, "MAT_CR")
|
||||
//PARAM(Solver.ITERATIVE, "GMRES")
|
||||
|
|
|
@ -220,7 +220,6 @@ NETLIST_START(mario)
|
|||
SOLVER(Solver, 48000)
|
||||
PARAM(Solver.ACCURACY, 1e-6)
|
||||
PARAM(Solver.SOR_FACTOR, 1.0)
|
||||
PARAM(Solver.GS_THRESHOLD, 5)
|
||||
PARAM(Solver.GS_LOOPS, 1)
|
||||
/* Dynamic timestepping avoids excessive newton loops on startup */
|
||||
PARAM(Solver.DYNAMIC_LTE, 5e-2)
|
||||
|
|
|
@ -91,11 +91,9 @@ CIRCUIT_LAYOUT( breakout )
|
|||
#if (SLOW_BUT_ACCURATE)
|
||||
SOLVER(Solver, 48000)
|
||||
PARAM(Solver.ACCURACY, 1e-8) // less accuracy and diode will not work
|
||||
PARAM(Solver.GS_THRESHOLD, 6)
|
||||
#else
|
||||
SOLVER(Solver, 48000)
|
||||
PARAM(Solver.ACCURACY, 1e-6)
|
||||
PARAM(Solver.GS_THRESHOLD, 6)
|
||||
PARAM(Solver.DYNAMIC_TS, 0)
|
||||
//PARAM(Solver.LTE, 1e-10)
|
||||
PARAM(Solver.MIN_TIMESTEP, 1e-8)
|
||||
|
|
Loading…
Reference in New Issue