⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initial.h

📁 基于电磁波方程
💻 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 + -