From a6590d354f18869a2fcb2152ae9bbe202de12e7f Mon Sep 17 00:00:00 2001 From: dwarning Date: Fri, 24 Oct 2025 09:37:34 +0200 Subject: [PATCH] correct and simplify temp derivatives --- src/spicelib/devices/vdmos/vdmosload.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/spicelib/devices/vdmos/vdmosload.c b/src/spicelib/devices/vdmos/vdmosload.c index 7618c8bd8..0d5fd43aa 100644 --- a/src/spicelib/devices/vdmos/vdmosload.c +++ b/src/spicelib/devices/vdmos/vdmosload.c @@ -297,17 +297,21 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) /* Calculate temperature dependent values for self-heating effect */ if (selfheat) { Beta = here->VDMOStTransconductance; - dBeta_dT = Beta * model->VDMOSmu * pow(Temp, model->VDMOSmu-1) / pow(model->VDMOStnom, model->VDMOSmu); + dBeta_dT = model->VDMOStransconductance * here->VDMOSm + * model->VDMOSmu * pow(Temp/model->VDMOStnom, model->VDMOSmu) / Temp; rd0T = here->VDMOSdrainResistance; if (model->VDMOStexp0Given) - drd0T_dT = rd0T * model->VDMOStexp0 * pow(Temp, model->VDMOStexp0-1) / pow(model->VDMOStnom, model->VDMOStexp0); + drd0T_dT = model->VDMOSdrainResistance / here->VDMOSm + * model->VDMOStexp0 * pow(Temp/model->VDMOStnom, model->VDMOStexp0) / Temp; else - drd0T_dT = rd0T * (model->VDMOStrd1 + model->VDMOStrd2*(2*model->VDMOStnom*Temp - model->VDMOStnom*model->VDMOStnom)); + drd0T_dT = model->VDMOSdrainResistance / here->VDMOSm + * (model->VDMOStrd1 + 2 * model->VDMOStrd2 * (Temp - model->VDMOStnom)); rd1T = 0.0; drd1T_dT = 0.0; if (model->VDMOSqsGiven) { rd1T = here->VDMOSqsResistance; - drd1T_dT = rd1T * model->VDMOStexp1 * pow(Temp, model->VDMOStexp1-1) / pow(model->VDMOStnom, model->VDMOStexp1); + drd1T_dT = model->VDMOSqsResistance / here->VDMOSm + * model->VDMOStexp1 * pow(Temp/model->VDMOStnom, model->VDMOStexp1) / Temp; } } else { Beta = here->VDMOStTransconductance;