diff options
Diffstat (limited to 'src/emu/netlist/analog/nld_solver.h')
| -rw-r--r-- | src/emu/netlist/analog/nld_solver.h | 112 |
1 files changed, 56 insertions, 56 deletions
diff --git a/src/emu/netlist/analog/nld_solver.h b/src/emu/netlist/analog/nld_solver.h index 99bb45d7e5b..ca8129bf207 100644 --- a/src/emu/netlist/analog/nld_solver.h +++ b/src/emu/netlist/analog/nld_solver.h @@ -15,7 +15,7 @@ #define SOLVER(_name, _freq) \ NET_REGISTER_DEV(solver, _name) \ - PARAM(_name.FREQ, _freq) + PARAM(_name.FREQ, _freq) // ---------------------------------------------------------------------------------------- // solver @@ -27,9 +27,9 @@ class NETLIB_NAME(solver); struct netlist_solver_parameters_t { - double m_accuracy; - double m_convergence_factor; - int m_resched_loops; + double m_accuracy; + double m_convergence_factor; + int m_resched_loops; }; class netlist_matrix_solver_t @@ -39,23 +39,23 @@ public: typedef netlist_core_device_t::list_t dev_list_t; netlist_matrix_solver_t() : m_owner(NULL) {} - virtual ~netlist_matrix_solver_t() {} + virtual ~netlist_matrix_solver_t() {} ATTR_COLD virtual void setup(netlist_net_t::list_t &nets, NETLIB_NAME(solver) &owner); // return true if a reschedule is needed ... - ATTR_HOT virtual int solve_non_dynamic() = 0; + ATTR_HOT virtual int solve_non_dynamic() = 0; ATTR_HOT virtual void step(const netlist_time delta); - ATTR_HOT bool solve(); + ATTR_HOT bool solve(); ATTR_HOT void update_inputs(); - ATTR_HOT void update_dynamic(); + ATTR_HOT void update_dynamic(); ATTR_HOT void schedule(); ATTR_HOT inline bool is_dynamic() { return m_dynamic.count() > 0; } - ATTR_HOT inline bool is_timestep() { return m_steps.count() > 0; } + ATTR_HOT inline bool is_timestep() { return m_steps.count() > 0; } ATTR_HOT inline const NETLIB_NAME(solver) &owner() const; ATTR_COLD virtual void reset(); @@ -67,9 +67,9 @@ protected: dev_list_t m_dynamic; netlist_core_terminal_t::list_t m_inps; dev_list_t m_steps; - netlist_time m_last_step; + netlist_time m_last_step; - NETLIB_NAME(solver) *m_owner; + NETLIB_NAME(solver) *m_owner; }; template <int m_N, int _storage_N> @@ -77,40 +77,40 @@ class netlist_matrix_solver_direct_t: public netlist_matrix_solver_t { public: - netlist_matrix_solver_direct_t() : netlist_matrix_solver_t() {} + netlist_matrix_solver_direct_t() : netlist_matrix_solver_t() {} - virtual ~netlist_matrix_solver_direct_t() {} + virtual ~netlist_matrix_solver_direct_t() {} - ATTR_COLD virtual void setup(netlist_net_t::list_t &nets, NETLIB_NAME(solver) &owner); - ATTR_COLD virtual void reset() { netlist_matrix_solver_t::reset(); } - ATTR_HOT virtual int solve_non_dynamic(); + ATTR_COLD virtual void setup(netlist_net_t::list_t &nets, NETLIB_NAME(solver) &owner); + ATTR_COLD virtual void reset() { netlist_matrix_solver_t::reset(); } + ATTR_HOT virtual int solve_non_dynamic(); - ATTR_HOT inline const int N() const { return (m_N == 0) ? m_nets.count() : m_N; } + ATTR_HOT inline const int N() const { return (m_N == 0) ? m_nets.count() : m_N; } protected: - ATTR_HOT inline void build_LE(double (* RESTRICT A)[_storage_N], double (* RESTRICT RHS)); - ATTR_HOT inline void gauss_LE(double (* RESTRICT A)[_storage_N], - double (* RESTRICT RHS), - double (* RESTRICT x)); - ATTR_HOT inline double delta( - const double (* RESTRICT RHS), - const double (* RESTRICT V)); - ATTR_HOT inline void store(const double (* RESTRICT RHS), const double (* RESTRICT V)); + ATTR_HOT inline void build_LE(double (* RESTRICT A)[_storage_N], double (* RESTRICT RHS)); + ATTR_HOT inline void gauss_LE(double (* RESTRICT A)[_storage_N], + double (* RESTRICT RHS), + double (* RESTRICT x)); + ATTR_HOT inline double delta( + const double (* RESTRICT RHS), + const double (* RESTRICT V)); + ATTR_HOT inline void store(const double (* RESTRICT RHS), const double (* RESTRICT V)); - double m_RHS[_storage_N]; // right hand side - contains currents + double m_RHS[_storage_N]; // right hand side - contains currents private: - ATTR_COLD int get_net_idx(netlist_net_t *net); + ATTR_COLD int get_net_idx(netlist_net_t *net); - struct terms_t{ - int net_this; - int net_other; - netlist_terminal_t *term; - }; - int m_term_num; - int m_rail_start; - terms_t m_terms[100]; + struct terms_t{ + int net_this; + int net_other; + netlist_terminal_t *term; + }; + int m_term_num; + int m_rail_start; + terms_t m_terms[100]; }; template <int m_N, int _storage_N> @@ -118,42 +118,42 @@ class netlist_matrix_solver_gauss_seidel_t: public netlist_matrix_solver_t { public: - netlist_matrix_solver_gauss_seidel_t() : netlist_matrix_solver_t() {} + netlist_matrix_solver_gauss_seidel_t() : netlist_matrix_solver_t() {} - virtual ~netlist_matrix_solver_gauss_seidel_t() {} + virtual ~netlist_matrix_solver_gauss_seidel_t() {} - ATTR_COLD virtual void setup(netlist_net_t::list_t &nets, NETLIB_NAME(solver) &owner) - { - netlist_matrix_solver_t::setup(nets, owner); - m_fallback.m_params = m_params; - m_fallback.setup(nets, owner); - } + ATTR_COLD virtual void setup(netlist_net_t::list_t &nets, NETLIB_NAME(solver) &owner) + { + netlist_matrix_solver_t::setup(nets, owner); + m_fallback.m_params = m_params; + m_fallback.setup(nets, owner); + } - ATTR_HOT int solve_non_dynamic(); + ATTR_HOT int solve_non_dynamic(); - ATTR_HOT inline const int N() const { if (m_N == 0) return m_nets.count(); else return m_N; } + ATTR_HOT inline const int N() const { if (m_N == 0) return m_nets.count(); else return m_N; } - ATTR_COLD virtual void reset() - { - netlist_matrix_solver_t::reset(); - m_fallback.reset(); - } + ATTR_COLD virtual void reset() + { + netlist_matrix_solver_t::reset(); + m_fallback.reset(); + } private: - netlist_matrix_solver_direct_t<m_N, _storage_N> m_fallback; + netlist_matrix_solver_direct_t<m_N, _storage_N> m_fallback; }; class netlist_matrix_solver_direct1_t: public netlist_matrix_solver_direct_t<1,1> { public: - ATTR_HOT int solve_non_dynamic(); + ATTR_HOT int solve_non_dynamic(); private: }; class netlist_matrix_solver_direct2_t: public netlist_matrix_solver_direct_t<2,2> { public: - ATTR_HOT int solve_non_dynamic(); + ATTR_HOT int solve_non_dynamic(); private: }; @@ -170,9 +170,9 @@ NETLIB_DEVICE_WITH_PARAMS(solver, netlist_param_double_t m_sync_delay; netlist_param_double_t m_accuracy; netlist_param_double_t m_convergence; - netlist_param_double_t m_gmin; - netlist_param_int_t m_resched_loops; - netlist_param_int_t m_parallel; + netlist_param_double_t m_gmin; + netlist_param_int_t m_resched_loops; + netlist_param_int_t m_parallel; netlist_time m_inc; netlist_time m_last_step; |
