diff options
Diffstat (limited to 'src/lib/netlist/solver/nld_ms_direct1.h')
-rw-r--r-- | src/lib/netlist/solver/nld_ms_direct1.h | 50 |
1 files changed, 23 insertions, 27 deletions
diff --git a/src/lib/netlist/solver/nld_ms_direct1.h b/src/lib/netlist/solver/nld_ms_direct1.h index fbbb8ecb098..6e1f99bad7d 100644 --- a/src/lib/netlist/solver/nld_ms_direct1.h +++ b/src/lib/netlist/solver/nld_ms_direct1.h @@ -13,41 +13,37 @@ namespace netlist { -namespace devices -{ - template <typename FT> - class matrix_solver_direct1_t: public matrix_solver_direct_t<FT, 1> + namespace devices { - public: - - using float_type = FT; - using base_type = matrix_solver_direct_t<FT, 1>; - - matrix_solver_direct1_t(netlist_state_t &anetlist, const pstring &name, const solver_parameters_t *params) - : matrix_solver_direct_t<FT, 1>(anetlist, name, params, 1) - {} +class matrix_solver_direct1_t: public matrix_solver_direct_t<1,1> +{ +public: - // ---------------------------------------------------------------------------------------- - // matrix_solver - Direct1 - // ---------------------------------------------------------------------------------------- - unsigned vsolve_non_dynamic(const bool newton_raphson) override - { - this->build_LE_A(*this); - this->build_LE_RHS(*this); - //NL_VERBOSE_OUT(("{1} {2}\n", new_val, m_RHS[0] / m_A[0][0]); + matrix_solver_direct1_t(netlist_t &anetlist, const pstring &name, const solver_parameters_t *params) + : matrix_solver_direct_t<1, 1>(anetlist, name, params, 1) + {} + virtual unsigned vsolve_non_dynamic(const bool newton_raphson) override; - std::array<FT, 1> new_V = { this->RHS(0) / this->A(0,0) }; +}; - const FT err = (newton_raphson ? this->delta(new_V) : 0.0); - this->store(new_V); - return (err > this->m_params.m_accuracy) ? 2 : 1; - } +// ---------------------------------------------------------------------------------------- +// matrix_solver - Direct1 +// ---------------------------------------------------------------------------------------- - }; +inline unsigned matrix_solver_direct1_t::vsolve_non_dynamic(ATTR_UNUSED const bool newton_raphson) +{ + build_LE_A<matrix_solver_direct1_t>(); + build_LE_RHS<matrix_solver_direct1_t>(); + //NL_VERBOSE_OUT(("{1} {2}\n", new_val, m_RHS[0] / m_A[0][0]); + nl_double new_V[1] = { RHS(0) / A(0,0) }; + const nl_double err = (newton_raphson ? delta(new_V) : 0.0); + store(new_V); + return (err > this->m_params.m_accuracy) ? 2 : 1; +} -} //namespace devices + } //namespace devices } // namespace netlist |