ArnoldiDelayCalc rcmodel

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2026-04-03 11:00:29 -07:00
parent f873c6520a
commit 5d40134239
1 changed files with 8 additions and 9 deletions

View File

@ -236,7 +236,6 @@ private:
int pin_n_; int pin_n_;
ArnoldiReduce *reduce_; ArnoldiReduce *reduce_;
delay_work *delay_work_; delay_work *delay_work_;
std::vector<rcmodel*> unsaved_parasitics_;
}; };
ArcDelayCalc * ArcDelayCalc *
@ -247,6 +246,7 @@ makeArnoldiDelayCalc(StaState *sta)
ArnoldiDelayCalc::ArnoldiDelayCalc(StaState *sta) : ArnoldiDelayCalc::ArnoldiDelayCalc(StaState *sta) :
LumpedCapDelayCalc(sta), LumpedCapDelayCalc(sta),
rcmodel_(nullptr),
reduce_(new ArnoldiReduce(sta)), reduce_(new ArnoldiReduce(sta)),
delay_work_(delay_work_create()) delay_work_(delay_work_create())
{ {
@ -267,6 +267,7 @@ ArnoldiDelayCalc::~ArnoldiDelayCalc()
free(_delayV); free(_delayV);
free(_slewV); free(_slewV);
delete reduce_; delete reduce_;
delete rcmodel_;
} }
Parasitic * Parasitic *
@ -297,12 +298,11 @@ ArnoldiDelayCalc::findParasitic(const Pin *drvr_pin,
} }
if (parasitic_network) { if (parasitic_network) {
rcmodel *rcmodel = reduce_->reduceToArnoldi(parasitic_network, drvr_pin, rcmodel_ = reduce_->reduceToArnoldi(parasitic_network, drvr_pin,
parasitics->couplingCapFactor(), parasitics->couplingCapFactor(),
drvr_rf, scene, min_max); drvr_rf, scene, min_max);
// Arnoldi parasitics are their own class that are not saved in the parasitic db. // Arnoldi parasitics are their own class that are not saved in the parasitic db.
unsaved_parasitics_.push_back(rcmodel); parasitic = rcmodel_;
parasitic = rcmodel;
} }
return parasitic; return parasitic;
} }
@ -321,9 +321,8 @@ ArnoldiDelayCalc::reduceParasitic(const Parasitic *,
void void
ArnoldiDelayCalc::finishDrvrPin() ArnoldiDelayCalc::finishDrvrPin()
{ {
for (auto parasitic : unsaved_parasitics_) delete rcmodel_;
delete parasitic; rcmodel_ = nullptr;
unsaved_parasitics_.clear();
} }
ArcDcalcResult ArcDcalcResult