METech 版 (精华区)

发信人: zhangmeng (罗文中尉), 信区: METech
标  题: 器件模拟题目和我的源代码
发信站: BBS 哈工大紫丁香站 (Thu Sep 23 21:32:24 2004)

跑出结果来了,不过迭代次数少了点,大家一起探讨一下。

一个pn节,其杂志分布为线性对称分布,则平衡态的泊松方程为: 
d2ψ/dx2=-q(m x + ni e-θψ-ni eθψ)/ε 

    泊松方程中各量如下: 
m=1021cm-4, ni=1.5×1010cm-3, θ=q/kT=38.6V-1 
q=1.6×10-19C,   ε=12ε0=1.064×10-12F/cm 
求x≥0一侧的电势分布情况。设pn结厚度为W=0.5μm,在[0,W]的区域内沿x方向等距离网
 
格化,网格距为 
h=0.01μm,从x=0到x= 0.5μm 共有51个网格点,迭代终止标准为 
max/δψ(N)/≤εR    , εR =10-4 

#include<stdio.h>
#include<math.h>
extern float  cita=38.6;
extern float  q=1.6E-19;
extern float  m=1E21;
extern float  h=1E-6;
extern float  ep=1.064E-12;
extern float  Ni=1.5E10;
extern float  epr=1E-4;
float X(int N)
   {
    return(N*h);
   }
double fi0(int N)
   {
    return(log(m*X(N)/(2*Ni)+sqrt(pow((m*X(N)/(2*Ni)),2)+1))/cita);
   }
double b(double y)
   {
    return(-2-(q/ep)*Ni*cita*h*h*(exp(-cita*y)+exp(cita*y)));
   }
double f(int N,double fi[])
   {
    return((-q/ep)*h*h*(m*X(N)+Ni*exp(-cita*fi[N])-Ni*exp(cita*fi[N]))-fi[N-1]
+2*fi[N]-fi[N+1]);
   }
FILE *ti;
main()
   {
    int i,j,k,p;
    double temp,max,fi[51],arfa[50],beta[50],y[50],detafi[50];
    printf("input iteration times:\n");
    scanf("%d",&p);
    fi[0]=0;
    for(i=1;i<=50;i++)
       fi[i]=fi0(i);
    for(k=1;k<p;k++)
       {
       beta[1]=b(fi[1]);
       y[1]=f(1,fi);
       for(i=2;i<=49;i++)
          {
           arfa[i-1]=1/beta[i-1];
       beta[i]=b(fi[i])-arfa[i];
       y[i]=f(i,fi)-arfa[i-1]*y[i-1];
          }
       detafi[49]=y[49]/beta[49];
       for(i=48;i>=1;i--)
          {
           detafi[i]=(y[i]-detafi[i+1])/beta[i];
          }
       for(i=1;i<=49;i++)                                 /*update the fi[]"*/

          {
           temp=fi[i]+detafi[i];
           fi[i]=temp;
          }
       max=fabs(detafi[1]);                                      /*the max of 
detafi"*/
       for(i=2;i<=49;i++)
          {
       if(fabs(detafi[i])>max) max=detafi[i];
      }
       if(fabs(max)>epr) continue;
       else break;
       }
       for(i=0;i<=50;i++)
      printf("fi[%d]=%e V,x[%d]=%e cm\n",i,fi[i],i,X(i));
      printf("%d",k);
}


--

※ 来源:·哈工大紫丁香 http://bbs.hit.edu.cn·[FROM: 218.9.122.239]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:8.110毫秒