diff options
author | 2019-02-01 02:07:30 +0100 | |
---|---|---|
committer | 2019-02-01 02:07:48 +0100 | |
commit | b4ba8dc55210a81b03ee0b45bcd36478cfc66dd4 (patch) | |
tree | c2f6953306cc756e1f688b7946bd40be8483e818 /src/lib/netlist/solver/nld_matrix_solver.cpp | |
parent | 15e84aaa88092995e0bc390b3b72e5b854d6843e (diff) |
netlist: code maintenance and fixing kidniki ... (nw)
to run at acceptable speed again.
Diffstat (limited to 'src/lib/netlist/solver/nld_matrix_solver.cpp')
-rw-r--r-- | src/lib/netlist/solver/nld_matrix_solver.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/lib/netlist/solver/nld_matrix_solver.cpp b/src/lib/netlist/solver/nld_matrix_solver.cpp index 2c530b219cc..30e47c9ba72 100644 --- a/src/lib/netlist/solver/nld_matrix_solver.cpp +++ b/src/lib/netlist/solver/nld_matrix_solver.cpp @@ -429,7 +429,7 @@ void matrix_solver_t::reset() void matrix_solver_t::update() NL_NOEXCEPT { - const netlist_time new_timestep = solve(); + const netlist_time new_timestep = solve(exec().time()); update_inputs(); if (m_params.m_dynamic_ts && has_timestep_devices() && new_timestep > netlist_time::zero()) @@ -438,9 +438,15 @@ void matrix_solver_t::update() NL_NOEXCEPT } } +/* update_forced is called from within param_update + * + * this should only occur outside of execution and thus + * using time should be safe. + * + */ void matrix_solver_t::update_forced() { - const netlist_time new_timestep = solve(); + const netlist_time new_timestep = solve(exec().time()); plib::unused_var(new_timestep); update_inputs(); @@ -458,7 +464,7 @@ void matrix_solver_t::step(const netlist_time &delta) m_step_devices[k]->timestep(dd); } -void matrix_solver_t::solve_base() +void matrix_solver_t::solve_base(netlist_time time) { ++m_stat_vsolver_calls; if (has_dynamic_devices()) @@ -487,9 +493,8 @@ void matrix_solver_t::solve_base() } } -const netlist_time matrix_solver_t::solve() +const netlist_time matrix_solver_t::solve(netlist_time now) { - const netlist_time now = exec().time(); const netlist_time delta = now - m_last_step; // We are already up to date. Avoid oscillations. @@ -500,7 +505,7 @@ const netlist_time matrix_solver_t::solve() /* update all terminals for new time step */ m_last_step = now; step(delta); - solve_base(); + solve_base(now); const netlist_time next_time_step = compute_next_timestep(delta.as_double()); return next_time_step; @@ -614,7 +619,6 @@ netlist_time matrix_solver_t::compute_next_timestep(const double cur_ts) const nl_double DD_n = (n->Q_Analog() - t->m_last_V); const nl_double hn = cur_ts; - //printf("%f %f %f %f\n", DD_n, t->m_DD_n_m_1, hn, t->m_h_n_m_1); nl_double DD2 = (DD_n / hn - t->m_DD_n_m_1 / t->m_h_n_m_1) / (hn + t->m_h_n_m_1); nl_double new_net_timestep; |