//NETLIB_CONSTRUCTOR(solver) //detail.family_setter_t m_famsetter; //template <class CLASS> public nld_solver(object owner, string name) : base(owner, name) { m_fb_step = new logic_input_t(this, "FB_step"); m_Q_step = new logic_output_t(this, "Q_step"); m_freq = new param_double_t(this, "FREQ", 48000.0); /* iteration parameters */ m_gs_sor = new param_double_t(this, "SOR_FACTOR", 1.059); m_method = new param_str_t(this, "METHOD", "MAT_CR"); m_accuracy = new param_double_t(this, "ACCURACY", 1e-7); m_gs_loops = new param_int_t(this, "GS_LOOPS", 9); // Gauss-Seidel loops /* general parameters */ m_gmin = new param_double_t(this, "GMIN", nl_config_global.NETLIST_GMIN_DEFAULT); m_pivot = new param_logic_t(this, "PIVOT", false /*0*/); // use pivoting - on supported solvers m_nr_loops = new param_int_t(this, "NR_LOOPS", 250); // Newton-Raphson loops m_nr_recalc_delay = new param_double_t(this, "NR_RECALC_DELAY", netlist_time.NLTIME_FROM_NS(10).as_double()); // Delay to next solve attempt if nr loops exceeded m_parallel = new param_int_t(this, "PARALLEL", 0); /* automatic time step */ m_dynamic_ts = new param_logic_t(this, "DYNAMIC_TS", false /*0*/); m_dynamic_lte = new param_double_t(this, "DYNAMIC_LTE", 1e-5); // diff/timestep m_dynamic_min_ts = new param_double_t(this, "DYNAMIC_MIN_TIMESTEP", 1e-6); // nl_double timestep resolution m_log_stats = new param_logic_t(this, "LOG_STATS", true); // log statistics on shutdown m_params = new solver_parameters_t(); // internal staff connect(m_fb_step, m_Q_step); }
//NETLIB_CONSTRUCTOR(mainclock) //detail.family_setter_t m_famsetter; //template <class CLASS> nld_mainclock(object owner, string name) : base(owner, name) { m_Q = new logic_output_t(this, "Q"); m_freq = new param_double_t(this, "FREQ", 7159000.0 * 5); m_inc = netlist_time.from_double(1.0 / (m_freq.op() * 2.0)); }
//NETLIB_CONSTRUCTOR_DERIVED(C, twoterm) //detail.family_setter_t m_famsetter; //template <class CLASS> public nld_C(netlist_state_t owner, string name) : base(owner, name) { m_C = new param_double_t(this, "C", 1e-6); m_GParallel = 0.0; //register_term("1", m_P); //register_term("2", m_N); }
//NETLIB_CONSTRUCTOR(POT) //detail.family_setter_t m_famsetter; //template <class CLASS> public nld_POT(object owner, string name) : base(owner, name) { m_R1 = new nld_R_base(this, "_R1"); m_R2 = new nld_R_base(this, "_R2"); m_R = new param_double_t(this, "R", 10000); m_Dial = new param_double_t(this, "DIAL", 0.5); m_DialIsLog = new param_logic_t(this, "DIALLOG", false /*0*/); register_subalias("1", m_R1.P); register_subalias("2", m_R1.N); register_subalias("3", m_R2.N); connect(m_R2.P, m_R1.N); }
//NETLIB_CONSTRUCTOR(analog_input) //detail.family_setter_t m_famsetter; //template <class CLASS> public nld_analog_input(object owner, string name) : base(owner, name) { m_Q = new analog_output_t(this, "Q"); m_IN = new param_double_t(this, "IN", 0.0); }
//NETLIB_CONSTRUCTOR_DERIVED(R, R_base) //detail.family_setter_t m_famsetter; //template <class CLASS> public nld_R(object owner, string name) : base(owner, name) { m_R = new param_double_t(this, "R", 1e9); }