46 #include <Xyce_config.h>
56 #ifdef Xyce_DEBUG_DEVICE
119 ExtendedString mater = material;
126 mass = pow((0.98*0.19*0.19),1.0/3.0);
129 else if (mater ==
"ge" )
131 mass = pow((1.64*0.082*0.082),1.0/3.0);
134 else if (mater ==
"gaas")
140 else if (mater==
"inalas" || mater==
"alinas")
143 else if (mater==
"ingaas" || mater==
"gainas")
146 else if (mater ==
"inp")
151 Report::UserFatal0() << material <<
" material not recognized.";
170 ExtendedString mater = material;
178 mass = pow((pow(mlh,1.5) + pow(mhh,1.5)),2.0/3.0);
180 else if (mater ==
"ge" )
184 mass = pow((pow(mlh, 1.5) + pow(mhh, 1.5)),2.0/3.0);
186 else if (mater ==
"gaas")
190 mass = pow((pow(mlh,1.5) + pow(mhh, 1.5)), 2.0/3.0);
194 else if (mater==
"inalas" || mater==
"alinas")
198 mass = pow((pow(mlh,1.5) + pow(mhh, 1.5)), 2.0/3.0);
200 else if (mater==
"ingaas" || mater==
"gainas")
204 mass = pow((pow(mlh,1.5) + pow(mhh, 1.5)), 2.0/3.0);
206 else if (mater ==
"inp")
210 mass = pow((pow(mlh,1.5) + pow(mhh, 1.5)), 2.0/3.0);
214 Report::UserFatal0() << material <<
" material not recognized.";
231 ExtendedString mater = material;
238 Mc = pow(6.0,2.0/3.0);
240 else if (mater ==
"gaas")
244 else if (mater ==
"ge")
248 else if (mater==
"inalas" || mater==
"alinas")
253 else if (mater==
"ingaas" || mater==
"gainas")
258 else if (mater ==
"inp")
265 Report::UserFatal0() << material <<
" material not recognized.";
283 ExtendedString mater = material;
292 Mc = pow(6.0,(2.0/3.0));
294 else if (mater ==
"gaas")
298 else if (mater ==
"ge")
300 Mc = pow(2.0,(4.0/3.0));
302 else if (mater==
"inalas" || mater==
"alinas")
307 else if (mater==
"ingaas" || mater==
"gainas")
312 else if (mater ==
"inp")
319 Report::UserFatal0() << material <<
" material not recognized.";
338 ExtendedString mater = material;
342 double charge(1.602176565e-19);
343 double h_planck(6.62606957e-34);
344 double e_mass (9.10938291e-31);
345 double kb (1.3806488e-23);
346 double kbq = 8.6173324e-5;
347 double dnbnd0 = 2.0*
M_PI*e_mass*kb*temp/(h_planck*h_planck);
348 dnbnd0 = 2.0*pow(dnbnd0,1.5)/1.0e6;
350 double bg =
bandgap(mater,temp);
354 double Nc = dnbnd0 * pow(mnDOS,1.50);
355 double Nv = dnbnd0 * pow(mpDOS,1.50);
356 ni = sqrt (Nc * Nv) * exp(-bg/(2.0 * kbq * temp));
358 #ifdef Xyce_DEBUG_DEVICE
359 Xyce::dout() <<
"mnDOS = " <<mnDOS <<std::endl;
360 Xyce::dout() <<
"mpDOS = " <<mpDOS <<std::endl;
361 Xyce::dout() <<
"dnbnd0 = " << dnbnd0 <<std::endl;
362 Xyce::dout() <<
"Nc = " << Nc <<std::endl;
363 Xyce::dout() <<
"Nv = " << Nv <<std::endl;
364 Xyce::dout() <<
"Ni = " << ni <<std::endl;
379 ExtendedString mater = material;
387 * pow(6.0,0.5) * pow(temp, 1.5) * exp(-
bandgap(mater,temp)/
388 (2.0 * 8.6174e-5 * temp));
391 else if (mater ==
"gaas")
395 * pow(temp, 1.5) * exp(-
bandgap(mater,temp)/
396 (2.0 * 8.6174e-5 * temp));
399 else if (mater ==
"ge")
403 * 2.0 * pow(temp, 1.5) * exp(-
bandgap(mater,temp)/
404 (2.0 * 8.6174e-5 * temp));
410 else if (mater==
"inalas" || mater==
"alinas")
414 * pow(temp, 1.5) * exp(-
bandgap(mater,temp)/
415 (2.0 * 8.6174e-5 * temp));
417 else if (mater==
"ingaas" || mater==
"gainas")
421 * pow(temp, 1.5) * exp(-
bandgap(mater,temp)/
422 (2.0 * 8.6174e-5 * temp));
424 else if (mater ==
"inp")
428 * pow(temp, 1.5) * exp(-
bandgap(mater,temp)/
429 (2.0 * 8.6174e-5 * temp));
433 std::string msg =
"MaterialSupport::getNi: ";
435 msg +=
" material not recognized.\n";
436 N_ERH_ErrorMgr::report( N_ERH_ErrorMgr::DEV_FATAL_0,msg);
452 ExtendedString mater = material;
460 else if (mater ==
"sio2")
464 else if (mater ==
"ge" )
468 else if (mater ==
"gaas")
472 else if (mater==
"inalas" || mater==
"alinas")
476 else if (mater==
"ingaas" || mater==
"gainas")
480 else if (mater ==
"inp")
486 Report::UserFatal0() << material <<
" material not recognized.";
508 (
const std::string & material,
double ni,
double n,
double p,
double tn,
double tp)
514 double B = (tp*(n+Ni)+tn*(p+Ni));
517 if (B >= exp(arg)) B = exp(arg);
539 (
const std::string & material,
double ni,
double n,
double p,
double tn,
double tp)
552 if (A1 >= exp(arg)) A1 = exp(arg);
556 C1 = (tp*(n+Ni)+tn*(p+Ni));
557 if (C1 >= exp(arg)) C1 = exp(arg);
560 dBdn = -1.0/(C1*C1) * tp;
562 pdRsrhN = dAdn * B1 + dBdn * A1;
584 (
const std::string & material,
double ni,
double n,
double p,
double tn,
double tp)
597 if (A1 >= exp(arg)) A1 = exp(arg);
601 C1 = (tp*(n+Ni)+tn*(p+Ni));
602 if (C1 >= exp(arg)) C1 = exp(arg);
605 dBdp = -1.0/(C1*C1) * tn;
607 pdRsrhP = dAdp * B1 + dBdp * A1;
630 (
const std::string & material,
double ni,
double n,
double p)
638 double C = (Cn*n+Cp*p);
641 if (C >= exp(arg)) C = exp(arg);
664 (
const std::string & material,
double ni,
double n,
double p)
678 if (A1 >= exp(arg)) A1 = exp(arg);
683 if (B1 >= exp(arg)) B1 = exp(arg);
687 pdRaugN = dAdn*B1 + A1*dBdn;
710 (
const std::string & material,
double ni,
double n,
double p)
724 if (A1 >= exp(arg)) A1 = exp(arg);
729 if (B1 >= exp(arg)) B1 = exp(arg);
733 pdRaugP = dAdp*B1 + A1*dBdp;
753 ExtendedString metalName = metal;
754 metalName.toLower ();
760 else if (metalName==
"ppoly")
764 else if (metalName==
"npoly")
768 else if (metalName==
"mo")
772 else if (metalName==
"w")
776 else if (metalName==
"modi")
780 else if (metalName==
"wdi")
784 else if (metalName==
"cu")
788 else if (metalName==
"pt")
792 else if (metalName==
"au")
796 else if (metalName==
"neutral")
802 Report::UserFatal0() << metalName <<
" material not recognized.";
823 ExtendedString materialName = material;
824 materialName.toLower();
826 if (materialName==
"si")
830 else if (materialName==
"ge")
834 else if (materialName==
"gaas")
838 else if (materialName==
"sio2")
842 else if (materialName==
"nitride")
846 else if (materialName==
"sapphire")
852 Report::UserError0() << materialName <<
" material not recognized.";
875 ExtendedString materialName = material;
876 materialName.toLower();
878 if (materialName==
"si")
880 gap = 1.17 - 4.73e-4*pow(temp,2.0)/(temp + 636.0);
882 else if (materialName==
"ge")
884 gap = 0.7437 - 4.774e-4*pow(temp,2.0)/(temp + 235);
886 else if (materialName==
"gaas")
888 gap = 1.519 - 5.405e-4*pow(temp,2.0)/(temp + 204);
890 else if (materialName==
"sio2")
894 else if (materialName==
"nitride")
898 else if (materialName==
"sapphire")
902 else if (materialName==
"inalas" || materialName==
"alinas")
908 else if (materialName==
"ingaas" || materialName==
"gainas")
914 else if (materialName==
"inp")
922 Report::UserError0() << materialName <<
" material not recognized.";
962 lt = LT0 / (1.0 + conc / Nref);
968 lt = LT0 / (1.0 + conc / Nref);