| author | Felix Salfelder <felix@salfelder.org> | 2025年11月13日 00:00:00 +0000 |
|---|---|---|
| committer | Felix Salfelder <felix@salfelder.org> | 2025年11月13日 00:00:00 +0000 |
| commit | 019cc973677b739c6d085c3eb3ed22b3eade29ad (patch) | |
| tree | f7381f8888e21ddee2028f0f1850062c0152c9bf | |
| parent | dd0e7066641252c3d2e2beef4ec52193e725c564 (diff) | |
| download | gnucap-019cc973677b739c6d085c3eb3ed22b3eade29ad.tar.gz | |
| -rw-r--r-- | apps/d_bjt.model | 5 | ||||
| -rw-r--r-- | apps/d_mos.model | 18 | ||||
| -rw-r--r-- | include/u_sim_data.h | 3 | ||||
| -rw-r--r-- | lib/m_spline.cc | 2 | ||||
| -rw-r--r-- | lib/u_sim_data.cc | 4 |
diff --git a/apps/d_bjt.model b/apps/d_bjt.model index 44ba386e..a6a55c09 100644 --- a/apps/d_bjt.model +++ b/apps/d_bjt.model @@ -726,12 +726,13 @@ bool DEV_BUILT_IN_BJT::do_tr() } if (_sim->uic_now()) {untested();//736 + int polarity = int(m->polarity); if (has_good_value(c->icvbe)) {untested();//737 - vbe = m->polarity * c->icvbe; + vbe = polarity * c->icvbe; }else{untested();//739 } if (has_good_value(c->icvce)) {untested();//741 - vbc = vbe - m->polarity * c->icvce; + vbc = vbe - polarity * c->icvce; vbx = vbc; }else{untested();//744 } diff --git a/apps/d_mos.model b/apps/d_mos.model index 1854e987..536affdf 100644 --- a/apps/d_mos.model +++ b/apps/d_mos.model @@ -140,10 +140,10 @@ device BUILT_IN_MOS { vg = "@n_g[V]"; vb = "@n_b[V]"; vs = "@n_s[V]"; - "i{d}" = "(_Rd) ? @Rd[I] : (@Ids[I] - @Cgd[I] - @Ddb[I] * m->polarity)"; - is = "(_Rs) ? @Rs[I] : (-@Ids[I] - @Cgs[I] - @Dsb[I] * m->polarity)"; + "i{d}" = "(_Rd) ? @Rd[I] : (@Ids[I] - @Cgd[I] - @Ddb[I] * double(m->polarity))"; + is = "(_Rs) ? @Rs[I] : (-@Ids[I] - @Cgs[I] - @Dsb[I] * double(m->polarity))"; ig = "@Cgs[I] + @Cgd[I] + @Cgb[I]"; - ib = "- @Ddb[I] * m->polarity - @Dsb[I] * m->polarity - @Cgb[I]"; + ib = "- @Ddb[I] * double(m->polarity) - @Dsb[I] * double(m->polarity) - @Cgb[I]"; ibd = "@Ddb[I]"; ibs = "@Dsb[I]"; "cgso{vl}" = "@Cgs[NV]"; @@ -162,9 +162,9 @@ device BUILT_IN_MOS { "gmb{s}" = "(reversed) ? gmbr : gmbf"; gbd = "@Ddb[G]"; gbs = "@Dsb[G]"; - vth = "von * m->polarity"; - ids = "m->polarity * ((reversed) ? -ids : ids)"; - "idst{ray}" = "- @Cgd[I] + @Ddb[I] * m->polarity"; + vth = "von * double(m->polarity)"; + ids = "double(m->polarity) * ((reversed) ? -ids : ids)"; + "idst{ray}" = "- @Cgd[I] + @Ddb[I] * double(m->polarity)"; p ="@Rs[P] +@Rd[P] +@Ddb[P] +@Dsb[P] +@Cgs[P] +@Cgd[P] +@Cgb[P] +@Ids[P]"; pd="@Rs[PD]+@Rd[PD]+@Ddb[PD]+@Dsb[PD]+@Cgs[PD]+@Cgd[PD]+@Cgb[PD]+@Ids[PD]"; ps="@Rs[PS]+@Rd[PS]+@Ddb[PS]+@Dsb[PS]+@Cgs[PS]+@Cgd[PS]+@Cgb[PS]+@Ids[PS]"; @@ -469,7 +469,8 @@ bool DEV_BUILT_IN_MOS::tr_needs_eval()const assert(c); const MODEL_BUILT_IN_MOS_BASE* m=prechecked_cast<const MODEL_BUILT_IN_MOS_BASE*>(c->model()); assert(m); - polarity_t polarity = m->polarity; + polarity_t polarity_ = m->polarity; + double polarity = double(polarity_); node_t& eff_s((reversed) ? n_(n_id) : n_(n_is)); node_t& eff_d((reversed) ? n_(n_is) : n_(n_id)); return !(conchk(vds,polarity*(eff_d.v0()-eff_s.v0()),OPT::vntol) @@ -492,7 +493,8 @@ bool DEV_BUILT_IN_MOS::do_tr() bool was_saturated = saturated; bool was_reversed = reversed; bool was_sbfwd = sbfwd; - polarity_t polarity = m->polarity; + polarity_t polarity_ = m->polarity; + double polarity = double(polarity_); if (_sim->is_initial_step()) { reversed = false; diff --git a/include/u_sim_data.h b/include/u_sim_data.h index 38a62bb3..46b39fe1 100644 --- a/include/u_sim_data.h +++ b/include/u_sim_data.h @@ -183,9 +183,6 @@ public: bool exceeds_iteration_limit(OPT::ITL itlnum)const {return(_iter[iSTEP] > OPT::itl[itlnum]);} bool uic_now() {return _uic && analysis_is_static() && _time0==0.;} SIM_MODE has_op()const {return _has_op;} -private: // stash here for now. Try plugins performance later. - BSMATRIX_SOLVER<double>* _aa_solver; - BSMATRIX_SOLVER<COMPLEX>* _acx_solver; }; /*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/ diff --git a/lib/m_spline.cc b/lib/m_spline.cc index 09d8ee7f..a1f63e5c 100644 --- a/lib/m_spline.cc +++ b/lib/m_spline.cc @@ -290,7 +290,7 @@ FPOLY1 SPLINE::at(double x)const case 0: untested(); return FPOLY1(x, _f0[i], 0.); default: untested(); - assert(!"spline problem"); + unreachable(); return FPOLY1(); } { untested(); diff --git a/lib/u_sim_data.cc b/lib/u_sim_data.cc index 3ca48e92..46e35689 100644 --- a/lib/u_sim_data.cc +++ b/lib/u_sim_data.cc @@ -73,9 +73,7 @@ SIM_DATA::SIM_DATA() _evalq(nullptr), _evalq_uc(nullptr), _waves(nullptr), - _has_op(s_NONE), - _aa_solver(nullptr), - _acx_solver(nullptr) + _has_op(s_NONE) { _evalq = &_evalq1; _evalq_uc = &_evalq2; |