#include "fdtd.h"
void main()
{
printf("Please input the Model file name:\n");
gets(ch);
//Read Data and Initialize
if((fInput=fopen(ch,"r"))==NULL)
{
printf("Open Model File Error!\n");
return;
}
//if(DelDataFlag)
if(!ReadData_Init())
{
printf("Read Data Error!\n");
return;
}
T=0;
StepStart=1;
printf("Please input how many steps you want to calculate:\n");
scanf("%d",&nsteps);
MainFDTD();
DelData();
return;
}
//------------------------------------------
int ReadData_Init()
{
int iNumCount=0;
char *cTemp1="Read File Error! Line ", cTemp2[5];
ReadDataFlag=0;
fgets(StrTemp, 200, fInput);
iNumCount++;
if(strcmp(StrTemp," MaxX, MaxY, MaxZ, dx, dy, dz\n"))
{
itoa(iNumCount,cTemp2,10);
strcat(cTemp1,cTemp2);
printf(cTemp1);
printf("\n");
return(0);
}
fscanf(fInput,"%d, %d, %d, %lf, %lf, %lf\n", &MaxX,&MaxY,&MaxZ, &dx,&dy,&dz);
iNumCount++;
min_dxyz=dx;
if(min_dxyz>dy) min_dxyz=dy;
if(min_dxyz>dz) min_dxyz=dz;
dt=min_dxyz/(2.*C0);
dx_rate=min_dxyz/dx;
dy_rate=min_dxyz/dy;
dz_rate=min_dxyz/dz;
//Read Sourece
iNumCount++;
fgets(StrTemp, 200, fInput);
iNumCount++;
if(strcmp(StrTemp,"(SourceX1,SourceY1,SourceZ1) (SourceX2,SourceY2,SourceZ2) SourceVector(1x/2y/3z)\n"))
{
itoa(iNumCount,cTemp2,10);
strcat(cTemp1,cTemp2);
printf(cTemp1);
printf("\n");
return(0);
}
fgets(StrTemp, 200, fInput);
iNumCount++;
if(strcmp(StrTemp," SourceType(1: UWB1 / 2:UWB2 / 3:Gauss / 4:Sin), Hard(0)/Soft(1)/Plane(2)/Transfer(3)\n"))
{
itoa(iNumCount,cTemp2,10);
strcat(cTemp1,cTemp2);
printf(cTemp1);
printf("\n");
return(0);
}
fgets(StrTemp, 200, fInput);
iNumCount++;
if(strcmp(StrTemp," 1:tao,delta,t0 / 2:alpha,beita / 3:tao(ps), t0(ps) / 4: f(GHz)\n"))
{
itoa(iNumCount,cTemp2,10);
strcat(cTemp1,cTemp2);
printf(cTemp1);
printf("\n");
return(0);
}
fscanf(fInput," (%d,%d,%d) (%d,%d,%d) %d\n",&SourceX1,&SourceY1,&SourceZ1,
&SourceX2,&SourceY2,&SourceZ2,&SourceVector);
iNumCount++;
if((SourceX1!=SourceX2)&&(SourceY1!=SourceY2)&&(SourceZ1==SourceZ2))
{
SourceNormal=3;
if(SourceNormal==SourceVector)
{
printf("SourceNormal==SourceVector\n");
return(0);
}
}
else if((SourceX1==SourceX2)&&(SourceY1!=SourceY2)&&(SourceZ1!=SourceZ2))
{
SourceNormal=1;
if(SourceNormal==SourceVector)
{
printf("SourceNormal==SourceVector\n");
return(0);
}
}
else if((SourceX1!=SourceX2)&&(SourceY1==SourceY2)&&(SourceZ1!=SourceZ2))
{
SourceNormal=2;
if(SourceNormal==SourceVector)
{
printf("SourceNormal==SourceVector\n");
return(0);
}
}
else
{
SourceNormal=3;
}
fscanf(fInput," %d, %d\n", &SourceType, &SourceHS);
if((SourceType==2)&&(SourceNormal==0))
{
printf("PlaneSource can't be used with point and line source1\n");
return(0);
}
iNumCount++;
switch(SourceType)
{
case 1:
fscanf(fInput," %lf, %lf, %lf\n", &UWB1tao,&UWB1delta,&UWB1t0);
iNumCount++;
UWB1tr=UWB1tao/4.5;
UWB1tp=UWB1delta/0.69-UWB1tr;
break;
case 2:
fscanf(fInput," %lf, %lf\n", &UWB2alpha,&UWB2beita);
iNumCount++;
UWB2t0=log(UWB2beita/UWB2alpha)/(UWB2beita-UWB2alpha);
UWB2E0=UWB2K/(exp(-UWB2alpha*UWB2t0)-exp(-UWB2beita*UWB2t0));
break;
case 3:
fscanf(fInput," %lf, %lf\n", &GaussSpread, &Gausst0);
iNumCount++;
GaussSpread=GaussSpread*1e-12;
Gausst0=Gausst0*1e-12;
break;
case 4:
fscanf(fInput, " %lf\n", &SinFreq);
iNumCount++;
SinFreq=SinFreq*1.E9;
break;
case 5:
fscanf(fInput, " %lf, %lf, %lf\n", &GaussSpread,&Gausst0,&SinFreq);
iNumCount++;
GaussSpread=GaussSpread*1e-12;
Gausst0=Gausst0*1e-12;
SinFreq=SinFreq*1.E9;
break;
default:
printf("Source Type is Error.\n");
return(0);
}
if((SourceHS!=0)&&(SourceHS!=1)&&(SourceHS!=2)&&(SourceHS!=3))
{
printf("Source Hard/Soft is Error!\n");
return(0);
}
if((fSource=fopen("Source.dat","w"))==NULL)
{
printf("Open Sorce.dat error!\n");
return(0);
}
if(SourceHS==2)
switch(SourceNormal)
{
case 1:
E_inc=new double[MaxX];
H_inc=new double[MaxX];
for(i=0;i<MaxX;i++)
{
E_inc[i]=0.0;
H_inc[i]=0.0;
}
break;
case 2:
E_inc=new double[MaxY];
H_inc=new double[MaxY];
for(j=0;j<MaxY;j++)
{
E_inc[j]=0.0;
H_inc[j]=0.0;
}
break;
case 3:
E_inc=new double[MaxZ];
H_inc=new double[MaxZ];
for(k=0;k<MaxZ;k++)
{
E_inc[k]=0.0;
H_inc[k]=0.0;
}
break;
}
//Read Watch Point Information
iNumCount++;
fgets(StrTemp, 200, fInput);
iNumCount++;
if(strcmp(StrTemp,"NumWatch(==2)\n"))
{
itoa(iNumCount,cTemp2,10);
strcat(cTemp1,cTemp2);
printf(cTemp1);
printf("\n");
return(0);
}
fgets(StrTemp, 200, fInput);
iNumCount++;
if(strcmp(StrTemp," (Watch1X,Watch1Y,Watch1Z) (Watch2X,Watch2Y,Watch2Z) ...\n"))
{
itoa(iNumCount,cTemp2,10);
strcat(cTemp1,cTemp2);
printf(cTemp1);
printf("\n");
return(0);
}
fscanf(fInput,"%d\n", &NumWatch);
iNumCount++;
if(NumWatch>0)
{
WatchX=new int[NumWatch];
WatchY=new int[NumWatch];
WatchZ=new int[NumWatch];
for(i=0;i<NumWatch;i++)
fscanf(fInput," (%d,%d,%d)", &WatchX[i], &WatchY[i], &WatchZ[i]);
fscanf(fInput,"\n");
iNumCount++;
}
if((fWatch1=fopen("Watch1.dat","w"))==NULL)
{
printf("Open Watch file error!\n");
return(0);
}
if((fWatch2=fopen("Watch2.dat","w"))==NULL)
{
printf("Open Watch file error!\n");
return(0);
}
//Read Port Information
iNumCount++;
fgets(StrTemp, 200, fInput);
iNumCount++;
if(strcmp(StrTemp,"NumPort\n"))
{
itoa(iNumCount,cTemp2,10);
strcat(cTemp1,cTemp2);
printf(cTemp1);
printf("\n");
return(0);
}
fgets(StrTemp, 200, fInput);
iNumCount++;
if(strcmp(StrTemp," (PortVX1,PortVY1,PortVZ1)(PortVX2,PortVY2,PortVZ2) (PortIX1,PortIY1,PortIZ1)(PortIX2,PortIY2,PortIZ2)\n"))
{
itoa(iNumCount,cTemp2,10);
strcat(cTemp1,cTemp2);
printf(cTemp1);
printf("\n");
return(0);
}
fgets(StrTemp, 200, fInput);
iNumCount++;
if(strcmp(StrTemp," (PortVX1,PortVY1,PortVZ1)(PortVX2,PortVY2,PortVZ2) (PortIX1,PortIY1,PortIZ1)(PortIX2,PortIY2,PortIZ2)\n"))
{
itoa(iNumCount,cTemp2,10);
strcat(cTemp1,cTemp2);
printf(cTemp1);
printf("\n");
return(0);
}
fgets(StrTemp, 200, fInput);
iNumCount++;
if(str
VC.rar_fdtd_vc fdtd_二极管 FDTD_电磁计算
版权申诉
5星 · 超过95%的资源 103 浏览量
2022-09-24
14:46:38
上传
评论
收藏 95KB RAR 举报
weixin_42653672
- 粉丝: 93
- 资源: 1万+
最新资源
- 测试aaaaaaabbbbb
- VID20240521070643.mp4
- Android系统原理与开发学习要点详解-培训课件.zip
- 部署yolov8的tensorrt模型支持检测分割姿态估计的C++源码+部署步骤.zip
- 以简单、易用、高性能为目标、开源的时序数据库,支持Linux及Windows, Time Series Database.zip
- python-leetcode面试题解之第198题打家劫舍-题解.zip
- python-leetcode面试题解之第191题位1的个数-题解.zip
- python-leetcode面试题解之第186题反转字符串中的单词II-题解.zip
- 一个基于python的web后端高性能开发框架,下载可用
- python-leetcode面试题解之第179题最大数-题解.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈