Chemical potential vs. temperature

The chemical potential of an extrinsic semiconductor is plotted as a function of temperature. A new plot can be generated by inputing parameters and pressing the 'Replot' button.

μ [eV]

T [K]

Nc(300 K) =

1/cm³

Nv(300 K) =

1/cm³

Nd =

1/cm³

Na =

1/cm³

Ed =

eV

Ea =

eV

Eg =

eV

T1 =

K

T2 =

K

This plot is generated with the following code:

var d1 = [];

function plot() {
  Nc=eval(data.Nc.value);
  Nv=eval(data.Nv.value);
  Nd=eval(data.Nd.value);
  Na=eval(data.Na.value);
  Ed=eval(data.Ed.value);
  Ea=eval(data.Ea.value);
  Eg=eval(data.Eg.value);
  T1=eval(data.T1.value);
  T2=eval(data.T2.value);

for (j=0; j<101; j++) {
 T=T1 + j*(T2-T1)/100;

if (Na > Nd) {

 for (i=0; i<500; i++) {
  Ef = i*Eg/500;
  n=Nc*Math.pow(T/300,1.5)*Math.exp(1.6022E-19*(Ef-Eg)/(1.38E-23*T));
  p=Nv*Math.pow(T/300,1.5)*Math.exp(1.6022E-19*(-Ef)/(1.38E-23*T));
  Namin = Na/(1+4*Math.exp(1.6022E-19*(Ea-Ef)/(1.38E-23*T)));
  Ndplus = Nd/(1+2*Math.exp(1.6022E-19*(Ef-Ed)/(1.38E-23*T)));
  logn = Math.log(Namin +n);
  logp = Math.log(Ndplus +p);
  if (logn > logp) { 
    Ef = Ef-Eg/500 + (Eg/500)*(logp0-logn0)/((logn-logn0)-(logp-logp0));   
    break; 
  }
  else {
    logn0 = logn;
    logp0 = logp;
  }
 }         
  d1[j] = [T,Ef];
}

else {

 for (i=500; i>0; i--) {
  Ef = i*Eg/500;
  n=Nc*Math.pow(T/300,1.5)*Math.exp(1.6022E-19*(Ef-Eg)/(1.38E-23*T));
  p=Nv*Math.pow(T/300,1.5)*Math.exp(1.6022E-19*(-Ef)/(1.38E-23*T));
  Namin = Na/(1+4*Math.exp(1.6022E-19*(Ea-Ef)/(1.38E-23*T)));
  Ndplus = Nd/(1+2*Math.exp(1.6022E-19*(Ef-Ed)/(1.38E-23*T)));
  logn = Math.log(Namin +n);
  logp = Math.log(Ndplus +p);
  if (logp > logn) { 
    Ef = Ef + (Eg/500)*(logp-logn)/((logn0-logn)-(logp0-logp));   
    break; 
  }
  else {
    logn0 = logn;
    logp0 = logp;
  }
 }         
  d1[j] = [T,Ef];
}
}
    var data1 = [{ data: d1, color: "rgb(0, 0, 0)", shadowSize:0, lines: {show:true} }];

    $.plot($("#placeholder"), data1);

}