📄 initial.h
字号:
const int e=1e-7;
const int WL=40;
const float OMIGA=3.1415926/(1.0*WL);
float **Ez,**Hx,**Hy;
float EAC[4][2];
int IaMin,IaMax,JaMin,JaMax;
int IoMin,IoMax,JoMin,JoMax;
int ItMin,ItMax,JtMin,JtMax;
int IsMin,IsMax,JsMin,JsMax;
int aoDis,ocDis,csDis;
float cp,sp;
float offset;
float SpaceStep;//空间步长(空间步长和时间步长都可以很大程度上的变化)
BOOL IsKindofPSTF;//是否为总场-散射场?
BOOL IsKindofPWave;//是平面波还是偶极子?
BOOL IsKindofPluse;//是脉冲波还是单频波?
BOOL IsKindofTM;//是TE波还是TM波?
int TimeStop=2500;//时间步长
char myDirectory[256];
unsigned char **ob;
int MediaNo;
float *FE1,*FE2,FH1,FH2;
float *Ein,*Hin,*EBin;
int InitiatePara(char myDirectory[])
{
int zMax,zMin,IsM,JsM;
char file1[256],s1[6];
FILE *fp1;
sprintf(file1,"%s/model.grd",myDirectory);
if((fp1=fopen(file1,"r"))==NULL)
{
printf("Can't open file:%s",file1);
return -1;
}
fscanf(fp1,"%s",s1);
fscanf(fp1,"%d %d",&IsM,&JsM);
fscanf(fp1,"%d %d",&IsMin,&IsMax);
fscanf(fp1,"%d %d",&JsMin,&JsMax);
fscanf(fp1,"%d %d",&zMin,&zMax);
ob=DefineIntArray(IsMax+1,JsMax+1);
for(int i=0;i<IsM;i++)
{
for(int j=0;j<JsM;j++)
{
fscanf(fp1," %d",&ob[i][j]);
// ob[i][j]=16;
// if(i<50 || j<50) ob[i][j]=0;
}
}
fscanf(fp1,"%d",&MediaNo);
FE1=(float *)malloc(MediaNo*sizeof(float));
FE2=(float *)malloc(MediaNo*sizeof(float));
for(i=0;i<MediaNo;i++) fscanf(fp1,"%f %f %f %f",&FE1[i],&FE2[i],&FH1,&FH2);
FH1=1.0,FH2=0.5;
fscanf(fp1,"%f",&SpaceStep);
fclose(fp1);
int fdtdMode;
printf("你想用FDTD计算(0-5):");
scanf("%d",&fdtdMode);
switch(fdtdMode)
{
case 0://为单个和多个偶极子脉冲散射场
{
IsKindofPWave=FALSE;
IsKindofPluse=TRUE;
IsKindofPSTF=TRUE;
}
break;
case 1://为单个和多个偶极子简谐散射场
IsKindofPWave=FALSE;
IsKindofPluse=FALSE;
IsKindofPSTF=TRUE;
break;
case 2://为脉冲平面波散射场
IsKindofPWave=FALSE;
IsKindofPluse=TRUE;
IsKindofPSTF=TRUE;
break;
case 3://为简谐平面波散射场
IsKindofPWave=TRUE;
IsKindofPluse=FALSE;
IsKindofPSTF=TRUE;
break;
case 4://为脉冲平面波探地雷达
IsKindofPWave=TRUE;
IsKindofPluse=TRUE;
IsKindofPSTF=FALSE;
break;
case 5://为脉冲偶极子探地雷达
IsKindofPWave=FALSE;
IsKindofPluse=TRUE;
IsKindofPSTF=FALSE;
break;
default:
;
break;
}
if(IsKindofPluse)
{
int meanFrequency;
int maxFrequency;
}
if(IsKindofPSTF)//预定为总场-散射场
{
aoDis=20;//总场到输出边界的距离
ocDis=20;//输出边界到连接边界的距离
csDis=20;//连接边界到散射目标的距离
}
else
{
aoDis=20;
ocDis=20;
csDis=20;
}
IaMin=0,JaMin=0;
IoMin=IaMin+aoDis,JoMin=JaMin+aoDis;
ItMin=IoMin+ocDis,JtMin=JoMin+ocDis;
IsMin=ItMin+csDis,JsMin=JtMin+csDis;
IsMax=IsMin+IsM-1,JsMax=JsMin+JsM-1;
ItMax=IsMax+csDis,JtMax=JsMax+csDis;
IoMax=ItMax+ocDis,JoMax=JtMax+ocDis;
IaMax=IoMax+aoDis,JaMax=JoMax+aoDis;
Ez=DefineArray(IaMax+1,JaMax+1);
Hx=DefineArray(IaMax+1,JaMax);
Hy=DefineArray(IaMax,JaMax+1);
if(IsKindofPWave)//预定为平面波
{
float PHI;
PHI=90*3.1415926/180.0;//PHI为平面波的入射角(90~180)
cp=cos(PHI);
sp=sin(PHI);
Ein=(float *)malloc(1000*sizeof(float));
Hin=(float *)malloc(1000*sizeof(float));
EBin=(float *)malloc(4*sizeof(float));
memset(Ein,0,1000*sizeof(float));
memset(Hin,0,1000*sizeof(float));
memset(EBin,0,4*sizeof(float));
if(sp>=0&&cp>0) offset=ItMin*cp+JtMin*sp-50;
else if(sp>0&&cp<=0) offset=ItMax*cp+JtMin*sp-50;
else if(sp<=0&&cp<0) offset=ItMax*cp+JtMax*sp-50;
else offset=ItMin*cp+JtMax*sp-50;
}
return fdtdMode;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -