SiC上AlGaN層の臨界膜厚(C言語)

 以前、SiC上GaNおよびAlN層の臨界膜厚を計算しました(詳細はコチラ)。今回は、それを発展させて、SiC基板上AlGaN層の臨界膜厚を計算してみました。ようやく計算の価値が出てきそうです。Ga組成依存性です。AlGaNの格子定数として、Vegard's ruleを使用しています。
【補足】
 練習目的:Gnuplotを用いたグラフ表示


#include stdio.h
#include stdlib.h
#include math.h
#define NX 720

double mb(double amb, double hmb, double bmb, double fmb, double vmb, double dmb);
double F(double af, double hf, double bf, double ff, double vf, double df);
double pb(double apb, double hpb, double bpb, double fpb, double vpb, double dpb);

int main()
{
// パラメータ
double az, bz, fz, vz, dz, hz, x, xz;

// 計算精度
double dh=pow(10,-13);

// データの入力
FILE *mbm, *fm, *pbm, *gp;
char *mbm_file, *fm_file, *pbm_file;
int i;
double dx=0.05;

// Matthews-Blakesleeモデル
mbm_file="out1.dat";
mbm = fopen(mbm_file,"w");

for(i=0; i<=20; i++){
hz=1000*pow(10,-9);
xz=i*dx;
vz=0.2, bz=((1-xz)*0.3118+xz*0.3112)*pow(10,-9), fz=(1-xz)*0.03387+xz*0.00996, az=60, dz=0;
x=mb(az,hz,bz,fz,vz,dz);

while (hz>x){
hz=hz-dh;
x=mb(az,hz,bz,fz,vz,dz);
}
fprintf(mbm,"%f\t%f\n", xz, hz*pow(10,9));
}
fclose(mbm);

// Fischerモデル
fm_file="out2.dat";
fm = fopen(fm_file,"w");

for(i=0; i<=20; i++){
hz=1000*pow(10,-9);
xz=i*dx;
vz=0.2, bz=((1-xz)*0.3118+xz*0.3112)*pow(10,-9), fz=(1-xz)*0.03387+xz*0.00996, az=60, dz=0;
x=F(az,hz,bz,fz,vz,dz);

while (hz>x){
hz=hz-dh;
x=F(az,hz,bz,fz,vz,dz);
}
fprintf(fm,"%f\t%f\n", xz, hz*pow(10,9));
}
fclose(fm);

// People-Beanモデル
pbm_file="out3.dat";
pbm = fopen(pbm_file,"w");

for(i=0; i<=20; i++){
hz=1000*pow(10,-9);
xz=i*dx;
vz=0.2, bz=((1-xz)*0.3118+xz*0.3112)*pow(10,-9), fz=(1-xz)*0.03387+xz*0.00996, az=60, dz=0;
x=pb(az,hz,bz,fz,vz,dz);

while (hz>x){
hz=hz-dh;
x=pb(az,hz,bz,fz,vz,dz);
}
fprintf(pbm,"%f\t%f\n", xz, hz*pow(10,9));
}
fclose(pbm);

//Gnuplot出力
gp = popen("/Applications/gnuplot.app/gnuplot -persist","w");
fprintf(gp, "set logscale y\n");
fprintf(gp, "set xlabel \"Al ratio in Al_x Ga_1-x N\"\n");
fprintf(gp, "set ylabel \"Critical thickness [nm]\"\n");
fprintf(gp, "set xrange [0:1]\n");
fprintf(gp, "set yrange [0.4:500]\n");
fprintf(gp, "set style line 1 lt 1 lw 3\n");
fprintf(gp, "set style line 2 lt 2 lw 3\n");
fprintf(gp, "set style line 3 lt 3 lw 3\n");
fprintf(gp, "plot \"%s\" with lines linetype 1 title \"Matthews-Blakeslee Model\"\n", mbm_file);
fprintf(gp, "replot \"%s\" with lines linetype 2 title \"Fischer Model\"\n", fm_file);
fprintf(gp, "replot \"%s\" with lines linetype 3 title \"People-Bean Model\"\n", pbm_file);
pclose(gp);
return 0;
}

// Matthews-Blakesleeモデルの関数
double mb(double amb, double hmb, double bmb, double fmb, double vmb, double dmb)
{
double c;
c=bmb*(1-vmb*cos(amb*M_PI/180)*cos(amb*M_PI/180))*(log(hmb/bmb)+1)/(8*M_PI*fmb*(1+vmb)*cos(dmb*M_PI/180));
return c;
}

// Fischerモデルの関数
double F(double af, double hf, double bf, double ff, double vf, double df)
{
double c;
c=bf*(1-vf*cos(af*M_PI/180)*cos(af*M_PI/180))*(log(hf/bf)+1)/(8*M_PI*ff*(1+vf)*cos(df*M_PI/180))+bf*cos(df*M_PI/180)/(2*ff);
return c;
}

// People-Beanモデルの関数
double pb(double apb, double hpb, double bpb, double fpb, double vpb, double dpb)
{
double c;
c=bpb/(16*M_PI*sqrt(2))*(1-vpb)/(1+vpb)/(fpb*fpb)*log(hpb/bpb);
return c;
}

0 件のコメント:

コメントを投稿