const netlist_time matrix_solver_t::solve() { const netlist_time now = netlist().time(); const netlist_time delta = now - m_last_step; // We are already up to date. Avoid oscillations. // FIXME: Make this a parameter! if (delta < netlist_time::quantum()) return netlist_time::zero(); /* update all terminals for new time step */ m_last_step = now; step(delta); solve_base(); const netlist_time next_time_step = compute_next_timestep(delta.as_double()); update_inputs(); return next_time_step; }
netlist_time matrix_solver_t::solve() { const netlist_time now = netlist().time(); const netlist_time delta = now - m_last_step; // We are already up to date. Avoid oscillations. // FIXME: Make this a parameter! if (delta < netlist_time::from_nsec(1)) // 20000 return netlist_time::from_nsec(0); /* update all terminals for new time step */ m_last_step = now; m_cur_ts = delta.as_double(); step(delta); const netlist_time next_time_step = solve_base(); update_inputs(); return next_time_step; }