📄 fdtd3d.c
字号:
exit();
}
else {
fwrite(&fd1,sizeof(struct fddat),1,fbin);
fclose(fbin);
}
if ((fparms=fopen(fd1.filout,"w")) == NULL) {
printf("CAN'T OPEN %s FILE\n",fd1.filout);
exit();
}
/* ===================================================================== */
fprintf(fparms,"+++++++++++++++++++++++++++++++++++++++++++++++++\n");
fprintf(fparms,"CURRENT VERSION of fdtd3d.c COMPILED: 8/22/94 \n");
fprintf(fparms,"+++++++++++++++++++++++++++++++++++++++++++++++++\n");
fprintf(fparms,"DIMSIZX,DIMSIZY,DIMSIZZ: %d,%d,%d\n",DIMSIZX,DIMSIZY,DIMSIZZ);
fprintf(fparms,"ANTYDIM,ANTXDIM: %d,%d\n",ANTYDIM,ANTXDIM);
fprintf(fparms,"TARGSIZX,TARGSIZY,TARGSIZZ: %d,%d\n",TARGSIZX,TARGSIZY,TARGSIZZ);
fprintf(fparms,"SPHDIM,COAXDIMZ,CODIMABO: %d,%d,%d\n",SPHDIM,COAXDIMZ,CODIMABO);
fprintf(fparms,"OSUDIMXY,OSUDIMZ,PATTNUM: %d,%d,%d\n",OSUDIMXY,OSUDIMZ,PATTNUM);
fprintf(fparms,"PIPDIMXY,PIPDIMZ: %d,%d\n",PIPDIMXY,PIPDIMZ);
/* ========================================================================
fd1.patact = FIELD PATTERN ACTIVATION FLAG
expa,eypa,ezpa = X,Y,Z COORDINATES OF PATTERN SPECIFIED IN SUBROUTINE
PROFPAT.C
if fd1.patact==1 - FIELD PATTERN WRITTEN TO FILE fd1.filout + ".pat"
========================================================================= */
if(fd1.patact==1) {
if ((fpat=fopen("profpat.par","rb")) == NULL) {
printf("CAN'T OPEN profpat.PAR FILE\n");
exit();
}
else {
fread(expa,sizeof(short int),180,fpat);
fread(eypa,sizeof(short int),180,fpat);
fread(ezpa,sizeof(short int),180,fpat);
}
fclose(fpat);
}
/* =========================================================================
READ 2-D ARRAY CONTAINING ANTENNA PROPERTIES
2-D ARRAY CONSTRUCTED IN SUBROUTINE antcalcs3.c
"antdim.par" IS OUTPUT FILE FROM antcalcs3.c
========================================================================= */
if(fd1.anttype>0){
if ((fantpar=fopen("antdim.par","rb")) == NULL) {
printf("CAN'T OPEN antdim.par FILE\n");
}
else {
fread(&anty,sizeof(short int),1,fantpar);
fread(&antx,sizeof(short int),1,fantpar);
if(anty!=ANTYDIM) {
fprintf(fparms,"MISMATCH BETWEEN anty READ FROM ANTCALCS2.C AND ANTYDIM:\n");
fprintf(fparms,"anty = %d, ANTYDIM = %d\n",anty,ANTYDIM);
fclose(fparms);
exit();
}
if(antx!=ANTXDIM) {
fprintf(fparms,"MISMATCH BETWEEN antx READ FROM ANTCALCS2.C AND ANTXDIM:\n");
fprintf(fparms,"antx = %d, ANTXDIM = %d\n",antx,ANTXDIM);
fclose(fparms);
exit();
}
fread(&midt1x,sizeof(short int),1,fantpar);
fread(&midt1y,sizeof(short int),1,fantpar);
fread(&midr1x,sizeof(short int),1,fantpar);
fread(&midr1y,sizeof(short int),1,fantpar);
fread(xval,sizeof(float),ANTXDIM*ANTYDIM,fantpar);
fread(yval,sizeof(float),ANTXDIM*ANTYDIM,fantpar);
xas=fd1.xcen/fd1.dx-midt1x;
yas=fd1.ycen/fd1.dy-midt1y;
if(fd1.anttype==2) {
maxtrx=midt1x*2+1;
maxtry=midt1y*2+1;
}
else if(fd1.anttype==3) {
maxtrx=ANTXDIM;
maxtry=ANTYDIM;
if(xas+maxtrx>fd1.xmax/fd1.dx) maxtrx=fd1.xmax/fd1.dx-xas;
if(yas+maxtry>fd1.ymax/fd1.dy) maxtry=fd1.ymax/fd1.dy-yas;
}
else if(fd1.anttype>=25) {
maxtrx=ANTXDIM;
maxtry=ANTYDIM;
if(xas+maxtrx>fd1.xmax/fd1.dx) maxtrx=fd1.xmax/fd1.dx-xas;
if(yas+maxtry>fd1.ymax/fd1.dy) maxtry=fd1.ymax/fd1.dy-yas;
}
}
fclose(fantpar);
fprintf(fparms,"anty,antx read from antcalcs output file: %d,%d\n",anty,antx);
fprintf(fparms,"midt1y = %d\n",midt1y);
fprintf(fparms,"midt1x = %d\n",midt1x);
fprintf(fparms,"midr1x (offset of x-coord of center of receive antenna from xas) = %d\n",midr1x);
fprintf(fparms,"midr1y (offset of y-coord of center of receive antenna from yas)= %d\n",midr1y);
fprintf(fparms,"XAS (starting x-coord for antenna array of zeros and ones) = %d\n",xas);
fprintf(fparms,"YAS (starting y-coord for antenna array of zeros and ones)= %d\n",yas);
fprintf(fparms,"MAXWIDTH OF ANTENNA ARRAY = %d\n",maxtrx);
fprintf(fparms,"MAXLENGT OF ANTENNA ARRAY = %d\n",maxtry);
}
/* =========================================================================
BURIED OBJECT 3-D ARRAY
========================================================================= */
if((fd1.obj==1)||(fd1.obj==2)) {
if ((fsph=fopen("sphdim.par","rb")) == NULL) {
printf("CAN'T OPEN sphdim.par FILE FOR READING \n");
}
else {
fread(&readsph,sizeof(int),1,fsph);
if(readsph!=SPHDIM) {
fprintf(fparms,"ARRAY DIMENSIONS FROM sphcalc() or cylcalc() DON'T MATCH SPHCALC");
fprintf(fparms,"input dim. = %d, SPHDIM = %d - EXITING\n",readsph,SPHDIM);
fclose(fparms);
exit();
}
fread(Espx,sizeof(int),SPHDIM*SPHDIM*SPHDIM,fsph);
fread(Espy,sizeof(int),SPHDIM*SPHDIM*SPHDIM,fsph);
fread(Espz,sizeof(int),SPHDIM*SPHDIM*SPHDIM,fsph);
fclose(fsph);
fprintf(fparms,"DIMENSIONS OF SPHERE ARRAY READ FROM SPHCALC OR CYLCALC: %d\n",readsph);
}
}
else if ((fd1.obj==7)||(fd1.obj==8)) {
if ((fsph=fopen("pipdim.par","rb")) == NULL) {
printf("CAN'T OPEN pipdim.par FILE FOR READING \n");
}
else {
fread(&pipexy,sizeof(int),1,fsph);
fread(&pipez,sizeof(int),1,fsph);
if((pipexy!=PIPDIMXY)||(pipez!=PIPDIMZ)) {
fprintf(fparms,"ARRAY DIMENSIONS FROM pipcalc3() DON'T MATCH PIPDIMXY OR PIPDIMZ");
fprintf(fparms,"INPUT DIM. = %d,%d; PIPDIMXY,PIPDIMZ = %d - EXITING\n",pipexy,pipez,PIPDIMXY,PIPDIMZ);
fclose(fparms);
exit();
}
fread(Espx,sizeof(int),PIPDIMXY*PIPDIMXY*PIPDIMZ,fsph);
fread(Espy,sizeof(int),PIPDIMXY*PIPDIMXY*PIPDIMZ,fsph);
fread(Espz,sizeof(int),PIPDIMXY*PIPDIMXY*PIPDIMZ,fsph);
fclose(fsph);
fprintf(fparms,"DIMENSIONS OF PIPE ARRAY CREATED IN pipcalc3.c (x,y,z): %d,%d,%d\n",pipexy,pipexy,pipez);
}
}
/* =========================================================================
OUTPUT FILES FOR TIME PROFILES:
fd1.filout + ".x"
fd1.filout + ".y"
fd1.filout + ".z"
fd1.filout + ".vx"
fd1.filout + ".vp"
fd1.filout + ".v"
fd1.filout + ".t"
fd1.filout + ".rp"
========================================================================= */
if(fd1.timpro>=1) {
strcpy(youtfil,fd1.filout);
strcat(youtfil,".y");
if ((fftim=fopen(youtfil,"wb")) == NULL) {
printf("CAN'T OPEN timproy.out OUTPUT FILE: \n");
}
strcpy(xoutfil,fd1.filout);
strcat(xoutfil,".x");
if ((fftimb=fopen(xoutfil,"wb")) == NULL) {
printf("CAN'T OPEN timprox.out OUTPUT FILE: \n");
}
strcpy(zoutfil,fd1.filout);
strcat(zoutfil,".z");
if ((fftimc=fopen(zoutfil,"wb")) == NULL) {
printf("CAN'T OPEN timproz.out OUTPUT FILE: \n");
}
strcpy(verxfil,fd1.filout);
strcat(verxfil,".vx");
if ((fvpx=fopen(verxfil,"wb")) == NULL) {
printf("CAN'T OPEN verxfil OUTPUT FILE: \n");
}
strcpy(verpfil,fd1.filout);
strcat(verpfil,".vp");
if ((fvpp=fopen(verpfil,"wb")) == NULL) {
printf("CAN'T OPEN verpfil OUTPUT FILE: \n");
}
}
strcpy(filoutt,fd1.filout);
strcat(filoutt,".t");
if ((ftimet=fopen(filoutt,"wb")) == NULL) {
printf("CAN'T OPEN time.dat OUTPUT FILE: \n");
}
strcpy(filoutr,fd1.filout);
strcat(filoutr,".rp");
if ((ftimer=fopen(filoutr,"wb")) == NULL) {
printf("CAN'T OPEN %s OUTPUT FILE: \n",filoutr);
}
strcpy(filoutrx,fd1.filout);
strcat(filoutrx,".v");
if ((ftimerx=fopen(filoutrx,"wb")) == NULL) {
printf("CAN'T OPEN %s OUTPUT FILE: \n",filoutrx);
}
strcpy(filoutE,fd1.filout);
strcat(filoutE,".E");
if ((fIt=fopen(filoutE,"wb")) == NULL) {
printf("CAN'T OPEN %s OUTPUT FILE\n",filoutE);
}
strcpy(filoutE2,fd1.filout);
strcat(filoutE2,".E2");
if ((fIr=fopen(filoutE2,"wb")) == NULL) {
printf("CAN'T OPEN %s OUTPUT FILE\n",filoutE2);
}
/* =========================================================================
COMMON PARAMETERS AND ARRAY BOUNDARY CHECK (TO PREVENT CRASHING)
========================================================================= */
tlength=fd1.tlength/fd1.dt;
xm=fd1.xmax/fd1.dx;
ym=fd1.ymax/fd1.dy;
zm=fd1.zmax/fd1.dz;
dxi=1./fd1.dx;
dyi=1./fd1.dy;
dzi=1./fd1.dz;
interfac=fd1.zinter/fd1.dz;
planevala=interfac+fd1.pvala/fd1.dx;
planevalb=interfac+fd1.pvalb/fd1.dx;
planevalc=interfac+fd1.pvalc/fd1.dx;
tdela=fd1.delaya/fd1.dt;
tdelb=fd1.delayb/fd1.dt;
tdelc=fd1.delayc/fd1.dt;
fprintf(fparms,"delt = %f\n",fd1.dt);
fprintf(fparms,"xm = %d\n",xm);
fprintf(fparms,"ym = %d\n",ym);
fprintf(fparms,"zm = %d\n",zm);
fprintf(fparms,"planevala,planevalb,planevalc: %d %d %d\n",planevala,planevalb,planevalc);
fprintf(fparms,"tdela,tdelb,tdelc: %d %d %d\n",tdela,tdelb,tdelc);
if((DIMSIZX-xm<2)||(DIMSIZY-ym<2)||(DIMSIZZ-zm<2)) {
fprintf(fparms,"X,Y, or Z-DIMENSION TOO LARGE FOR DEFINED ARRAY - EXIT FLAG SET\n");
exitflag=1;
}
stab=pow(1./(fd1.dx*fd1.dx)+1./(fd1.dy*fd1.dy)+1./(fd1.dz*fd1.dz),-0.5)-fd1.dt*0.3;
printf(" \n3-D stability (must be >0.0): %f\n",stab);
if(stab<0) {
fprintf(fparms,"STABILITY PROBLEM - EXIT FLAG SET\n");
exitflag=1;
}
if((planevala>zm)||(planevalb>zm)||(planevalc>zm)) {
fprintf(fparms,"HORIZONTAL PLANE 1,2, or 3 > zm - EXIT FLAG SET\n");
exitflag=1;
}
if((planevala<0)||(planevalb<0)||(planevalc<0)) {
fprintf(fparms,"HORIZONTAL PLANE 1,2, or 3 < 0 - EXIT FLAG SET\n");
exitflag=1;
}
proxpos=fd1.timx/fd1.dx;
proypos=fd1.timy/fd1.dy;
if((proxpos>xm-1)||(proxpos<0)) {
fprintf(fparms,"VERTICAL X-DIRECTED PROFILE OUT OF BOUNDS - EXIT FLAG SET\n");
exitflag=1;
}
if((proypos>ym-1)||(proypos<0)) {
fprintf(fparms,"VERTICAL y-DIRECTED PROFILE OUT OF BOUNDS - EXIT FLAG SET\n");
exitflag=1;
}
/* $$$$$$$$$$ THIN WIRE PARAMETERS BELOW */
wirerad=0.003234501348;
lnval=0.5*log(fd1.dx/wirerad);
hthinmul=fd1.dt*0.00079577471546/(fd1.dx/2.*log(fd1.dx/wirerad));
fprintf(fparms,"THIN WIRE PARAMETERS: wirerad,lnval,hthinmul: %f,%f,%f\n", wirerad,lnval,hthinmul);
/* ################## INPUT VOLTAGE SPIKE PARAMETERS #################### */
Vo=fd1.modsiz; /* MAX VOLTAGE AT TERMINALS OF ANTENNA */
termimp=2.*pow(fd1.coaxurr/fd1.coaxerr,0.5)*94.175;
fprintf(fparms,"CHARACTERISTIC IMPEDANCE OF LOAD AT RECEIVE ANTENNA(S) (IF RECFLAG<-1): %f\n",termimp);
termcon=1.0/(termimp*fd1.dy) ; /* LUEBBERS, 1992 */
termrcon=1.0/(termimp*fd1.dy) ; /* LUEBBERS, 1992 (RECEIVE ANTENNA HAS 200 OHM TERMINAL IMPEDANCE) */
tcval=fd1.tcval/fd1.dt;
tlength=fd1.tlength;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -