/// \brief resolve parameter names to pointers /// /// This function must be called after all device were constructed but /// before reset is called. public void resolve_params(netlist_time sample_time) { m_pos = 0; m_sample_time = sample_time; if (m_param_name.op() != "") { param_t p = state().setup().find_param(m_param_name.op()).param(); m_param = p; if (p is param_fp_t) //if (dynamic_cast<param_fp_t *>(p) != nullptr) { m_param_setter = setter <param_fp_t>; //m_param_setter = setter_t(&NETLIB_NAME(buffered_param_setter)::setter<param_fp_t>, this); } else if (p is param_logic_t) //else if (dynamic_cast<param_logic_t *>(p) != nullptr) { m_param_setter = setter <param_logic_t>; //m_param_setter = setter_t(&NETLIB_NAME(buffered_param_setter)::setter<param_logic_t>, this); } } }
// NETLIB_UPDATE_PARAMI(); //template <typename FT, int SIZE> //matrix_solver_t * create_solver(std::size_t size, const pstring &solvername); matrix_solver_t create_solver(int SIZE, UInt32 size, string solvername) { if (m_method.op() == "SOR_MAT") { throw new emu_unimplemented(); } else if (m_method.op() == "MAT_CR") { if (size > 0) // GCR always outperforms MAT solver { return(new matrix_solver_GCR_t(SIZE, state(), solvername, m_params, size)); //return create_it<matrix_solver_SOR_mat_t<FT, SIZE>>(state(), solvername, m_params, size); } else { throw new emu_unimplemented(); } } else if (m_method.op() == "MAT") { throw new emu_unimplemented(); } else if (m_method.op() == "SM") { throw new emu_unimplemented(); } else if (m_method.op() == "W") { throw new emu_unimplemented(); } else if (m_method.op() == "SOR") { throw new emu_unimplemented(); } else if (m_method.op() == "GMRES") { throw new emu_unimplemented(); } else { log().fatal.op(nl_errstr_global.MF_1_UNKNOWN_SOLVER_TYPE, m_method.op()); return(null); } }