⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nummtemp.c

📁 spice中支持多层次元件模型仿真的可单独运行的插件源码
💻 C
字号:
/**********Copyright 1991 Regents of the University of California.  All rights reserved.Author:	1987 Kartikeya Mayaram, U. C. Berkeley CAD GroupAuthor:	1991 David A. Gates, U. C. Berkeley CAD Group**********/#include "spice.h"#include <stdio.h>#include <math.h>#include "util.h"#include "cktdefs.h"#include "numosdef.h"#include "numenum.h"#include "carddefs.h"#include "sperror.h"#include "suffix.h"#define NIL(type)   ((type *)0)intNUMOStemp(inModel, ckt)  GENmodel *inModel;  register CKTcircuit *ckt;/* * perform the temperature update */{  register NUMOSmodel *model = (NUMOSmodel *) inModel;  register NUMOSinstance *inst;  METHcard *methods;  MODLcard *models;  OPTNcard *options;  OUTPcard *outputs;  TWOmaterial *pM, *pMaterial, *pNextMaterial;  double startTime;  void TWOsetup();  void TWOnormalize();  void TWOsetDoping();  /* loop through all the models */  for (; model != NULL; model = model->NUMOSnextModel) {    methods = model->NUMOSmethods;    models = model->NUMOSmodels;    options = model->NUMOSoptions;    outputs = model->NUMOSoutputs;    if (!options->OPTNtnomGiven) {      options->OPTNtnom = ckt->CKTnomTemp;    }    for (pM = model->NUMOSmatlInfo; pM != NIL(TWOmaterial);	pM = pM->next) {      pM->tnom = options->OPTNtnom;    }    BandGapNarrowing = models->MODLbandGapNarrowing;    ConcDepLifetime = models->MODLconcDepLifetime;    TempDepMobility = models->MODLtempDepMobility;    ConcDepMobility = models->MODLconcDepMobility;    SurfaceMobility = models->MODLsurfaceMobility;    MatchingMobility = models->MODLmatchingMobility;    OneCarrier = methods->METHoneCarrier;    for (inst = model->NUMOSinstances; inst != NULL;	inst = inst->NUMOSnextInstance) {      if (inst->NUMOSowner != ARCHme) continue;      startTime = SPfrontEnd->IFseconds();      if (!inst->NUMOStempGiven) {	inst->NUMOStemp = ckt->CKTtemp;      }      if (!inst->NUMOSareaGiven || inst->NUMOSarea <= 0.0) {	inst->NUMOSarea = 1.0;      }      if (!inst->NUMOSwidthGiven || inst->NUMOSwidth <= 0.0) {	inst->NUMOSwidth = 1.0;      }      inst->NUMOSpDevice->width =	  inst->NUMOSarea * inst->NUMOSwidth * options->OPTNdefw;      /* Compute and save globals for this instance. */      GLOBcomputeGlobals(&(inst->NUMOSglobals), inst->NUMOStemp);      /* Calculate new sets of material parameters. */      pM = model->NUMOSmatlInfo;      pMaterial = inst->NUMOSpDevice->pMaterials;      for (; pM != NULL; pM = pM->next, pMaterial = pMaterial->next) {	/* Copy everything, then fix the incorrect pointer. */	pNextMaterial = pMaterial->next;	bcopy((char *) pM, (char *) pMaterial, sizeof(TWOmaterial));	pMaterial->next = pNextMaterial;	/* Now do the temperature dependence. */	MATLtempDep(pMaterial, pMaterial->tnom);	if (outputs->OUTPmaterial) {	  printMaterialInfo(pMaterial);	}      }      /* Assign doping to the mesh. */      TWOsetDoping(inst->NUMOSpDevice, model->NUMOSprofiles,	  model->NUMOSdopTables);      /* Assign physical parameters to the mesh. */      TWOsetup(inst->NUMOSpDevice);      /* Assign boundary condition parameters. */      TWOsetBCparams(inst->NUMOSpDevice, model->NUMOSboundaries);      /* Normalize everything. */      TWOnormalize(inst->NUMOSpDevice);      /* Find the device's type. */      if (inst->NUMOSpDevice->pFirstContact->pNodes[0]->netConc < 0.0) {	inst->NUMOStype = P_CH;	if (OneCarrier) {	  methods->METHoneCarrier = P_TYPE;	}      } else {	inst->NUMOStype = N_CH;	if (OneCarrier) {	  methods->METHoneCarrier = N_TYPE;	}      }      inst->NUMOSpDevice->pStats->totalTime[STAT_SETUP] +=	  SPfrontEnd->IFseconds() - startTime;    }  }  return (OK);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -