📄 antcalcs.c
字号:
/* program antcalcs3.c - last modified 4/7/94 */
/*
This subroutine is linked to fdmenu and creates an output file called
"antdim.par" which is read into fdtd3d during execution. The file
"antdim.par" contains a 2-D array of floating point numbers which
specify the antenna geometry used in the FDTD model.
*/
#include <stdio.h>
#include <math.h>
#include <string.h>
#include "findif.h"
FILE *fant,*fpar,*fantdim;
/* OSU ANTENNA BELOW */
#define ANTWDIM 60
#define ANTLDIM 60
/* GSSI ANTENNA BELOW */
/*
#define ANTWDIM 30
#define ANTLDIM 30
*/
float Exval[ANTWDIM][ANTLDIM],Eyval[ANTWDIM][ANTLDIM];
void antcalcs()
{
short int i,yintval,xintval,tipoff,cornoff,endvalt,anoffset,antsep;
short int endval,maxval,maxyval,yint,j,antl,antw,midyval,halflen,oppval;
float y,x,a1,a2,alpha,delx,flarang,angrad;
float flarangr,angradr,endvalr,offsetr;
short int midyvalr,midy2val;
/* ==========================================================================
OPEN FILE 'fdmenu.par' TO READ IN PARAMETERS SPECIFIED IN PROGRAM
'fdmenu'
========================================================================== */
if ((fpar=fopen("fdmenu.par","rb")) == NULL) {
printf("CAN'T OPEN fdmenu.PAR FILE\n");
}
else {
fread(&fd1,sizeof(struct fddat),1,fpar);
}
fclose(fpar);
if ((fantdim=fopen("antdim.par","wb")) == NULL) {
printf("CAN'T OPEN antdim.par OUTPUT FILE: \n");
}
/* ==========================================================================
MAKE 2-D ARRAY OF VALUES (0'S AND 1'S TO MULTIPLY WITH E-FIELD IN FDTD3D)
tipoff = offset of antenna tip from edge of grid (y direction)
midyval = offset of middle of antenna from grid (x direction)
endval = offset of center of antenna from edge of grid (y direction)
========================================================================== */
for (i=0;i<ANTWDIM;i++) {
for(j=0;j<ANTLDIM;j++) {
Eyval[i][j]=1.0;
Exval[i][j]=1.0;
}
}
printf("xcen= %f\n",fd1.xcen);
printf("ycen=%f\n",fd1.ycen);
printf("dx = %f\n",fd1.dx);
printf("ANTENNA CHOICE: %d\n",fd1.anttype);
/* ==========================================================================
OSU ANTENNA BELOW
========================================================================== */
if((fd1.anttype!=2)&&(fd1.anttype!=3)) {
tipoff=0.12/fd1.dx;
if(tipoff==0) tipoff=tipoff+1;
a1=1.907;
delx=fd1.dx;
a2=(-0.1749);
alpha=0.126;
midyval=0;
anoffset=23.*2.54/(fd1.dx*100)+midyval;
antsep=23.*2.54/(fd1.dx*100);
endval=tipoff+(18.*2.54/100.)/delx;
oppval=midyval+2*(antsep+0.5);
for(i=0;i<endval-tipoff;i++) {
x=i*delx*100.0/2.54;
y=(a1*x*exp(-1.*alpha*x)+a2*x)*2.54/100.0/delx;
x=i*delx;
yintval=y;
if((y-yintval)>0.5) yintval=yintval+1;
printf("%f %f %d\n",x,y,yintval);
/* -------------------------- ANTENNA #2 -------------------- */
/* i -> antenna length */
/* j -> antenna width */
if((fd1.anttype==25)||(fd1.anttype==12345)||(fd1.anttype==12346)) {
for(j=0;j<=yintval;j++) {
Eyval[midyval+j][endval+i+2]=0.0;
Eyval[midyval+j][endval-i-1]=0.0;
if(i>0) {
Exval[midyval+j][endval+i+1]=0.0;
Exval[midyval+j][endval+i+2]=0.0;
Exval[midyval+j][endval-i-1]=0.0;
Exval[midyval+j][endval-i-2]=0.0;
}
}
}
/* -------------------------- ANTENNA #4 -------------------- */
if((fd1.anttype==46)||(fd1.anttype==12345)||(fd1.anttype==12346)) {
for(j=0;j<=yintval;j++) {
Eyval[oppval-j][endval+i+2]=0.0;
Eyval[oppval-j][endval-i-1]=0.0;
if(i>0) {
Exval[oppval-j][endval+i+1]=0.0;
Exval[oppval-j][endval+i+2]=0.0;
Exval[oppval-j][endval-i-1]=0.0;
Exval[oppval-j][endval-i-2]=0.0;
}
}
}
/* -------------------------- ANTENNA #1 -------------------- */
/* i -> antenna length */
/* j -> antenna width */
if((fd1.anttype==16)||(fd1.anttype==12345)||(fd1.anttype==12346)) {
for(j=0;j<=yintval;j++) {
Exval[endval+i+2][midyval+j]=0.0;
Exval[endval-i-1][midyval+j]=0.0;
if(i>0) {
Eyval[endval+i+1][midyval+j]=0.0;
Eyval[endval+i+2][midyval+j]=0.0;
Eyval[endval-i-1][midyval+j]=0.0;
Eyval[endval-i-2][midyval+j]=0.0;
}
}
}
/* -------------------------- ANTENNA #3 -------------------- */
if((fd1.anttype==36)||(fd1.anttype==12345)||(fd1.anttype==12346)) {
for(j=0;j<=yintval;j++) {
Exval[endval+i+2][oppval-j]=0.0;
Exval[endval-i-1][oppval-j]=0.0;
if(i>0) {
Eyval[endval+i+1][oppval-j]=0.0;
Eyval[endval+i+2][oppval-j]=0.0;
Eyval[endval-i-1][oppval-j]=0.0;
Eyval[endval-i-2][oppval-j]=0.0;
}
}
}
}
endvalt=endval;
/* CENTER ANTENNAS BELOW */
a1=0.636;
a2=(-0.0586);
alpha=0.170;
endvalr=13.*2.54/100./delx;
for(i=0;i<endvalr;i++) {
x=i*delx;
y=(a1*x*exp(-1.*alpha*x)+a2*x)*2.54/100./delx;
x=x*2.54/100./delx;
yintval=y;
if((y-yintval)>0.5) yintval=yintval+1;
yint=y;
if(y-yint>0.5) yint=yint+1;
/*--------------------- ANTENNA #5 (PARALLEL TO #2) ---------------- */
if((fd1.anttype==25)||(fd1.anttype==12345)) {
for(j=0;j<=yintval;j++) {
Eyval[midyval+antsep][endvalt+i+2]=0.0;
Eyval[midyval+antsep][endvalt-i-1]=0.0;
}
}
/*--------------------- ANTENNA #6 (PARALLEL TO #1) ---------------- */
if((fd1.anttype==16)||(fd1.anttype==12346)) {
for(j=0;j<=yintval;j++) {
Exval[endvalt+i+2][midyval+antsep]=0.0;
Exval[endvalt-i-1][midyval+antsep]=0.0;
}
}
printf("%f %f %f\n",x,y,yintval);
}
midyvalr=anoffset;
printf("X - COORD OF RECEIVE ANTENNA = %d\n",anoffset);
}
/* ==========================================================================
GSSI ANTENNA BELOW
========================================================================== */
else if((fd1.anttype==2)||(fd1.anttype==3)) {
endval=fd1.xlen/fd1.dx/2+2;
flarang=fd1.xang;
angrad=flarang/180.*3.1415927;
midyval=(fd1.xlen/fd1.dx/2-1)*tan(angrad)/2;
for(i=0;i<endval-3;i++) {
x=i;
y=x*tan(angrad/2.0);
yint=y;
if(y-yint>0.5) yint=yint+1;
for(j=0;j<=yint;j++) {
Eyval[midyval+j][endval+i+2]=0.0;
Eyval[midyval-j][endval+i+2]=0.0;
Eyval[midyval+j][endval-i-1]=0.0;
Eyval[midyval-j][endval-i-1]=0.0;
if(i>0) {
Exval[midyval-j+1][endval+i+1]=0.0;
Exval[midyval-j+1][endval+i+2]=0.0;
Exval[midyval+j][endval+i+1]=0.0;
Exval[midyval+j][endval+i+2]=0.0;
Exval[midyval-j+1][endval-i-2]=0.0;
Exval[midyval-j+1][endval-i-1]=0.0;
Exval[midyval+j][endval-i-2]=0.0;
Exval[midyval+j][endval-i-1]=0.0;
}
if(fd1.anttype==3) {
offsetr=(fd1.xrcen-fd1.xcen)/fd1.dx;
endvalr=fd1.xrlen/fd1.dx/2-1;
flarangr=fd1.xrang;
angradr=flarangr/180.*3.1415927;
midyvalr=endvalr*tan(angrad)/2+offsetr;
Eyval[midyvalr+j][endval+i+2]=0.0;
Eyval[midyvalr-j][endval+i+2]=0.0;
Eyval[midyvalr+j][endval-i-1]=0.0;
Eyval[midyvalr-j][endval-i-1]=0.0;
if(i>0) {
Exval[midyvalr-j+1][endval+i]=0.0;
Exval[midyvalr-j+1][endval+i+1]=0.0;
Exval[midyvalr+j][endval+i]=0.0;
Exval[midyvalr+j][endval+i+1]=0.0;
Exval[midyvalr-j+1][endval-i]=0.0;
Exval[midyvalr-j+1][endval-i-1]=0.0;
Exval[midyvalr+j][endval-i]=0.0;
Exval[midyvalr+j][endval-i-1]=0.0;
}
}
}
}
antl=ANTLDIM;
antw=ANTWDIM;
printf("ANTENNA WIDTH = %d\n",antw);
printf("ANTENNA LENGTH = %d\n",antl);
} /* end of fd1.anttype==2,3 */
/* ==========================================================================
WRITE OUTPUT AND EXIT
========================================================================== */
printf("midyval = %d\n",midyval);
printf("endval = %d\n",endval);
antl=ANTLDIM;
antw=ANTWDIM;
printf("ANTENNA WIDTH = %d\n",antw);
printf("ANTENNA LENGTH = %d\n",antl);
fwrite(&antl,sizeof(short int),1,fantdim);
fwrite(&antw,sizeof(short int),1,fantdim);
fwrite(&midyval,sizeof(short int),1,fantdim);
fwrite(&endval,sizeof(short int),1,fantdim);
fwrite(&midyvalr,sizeof(short int),1,fantdim);
fwrite(&endval,sizeof(short int),1,fantdim);
fwrite(Exval,sizeof(float),antl*antw,fantdim);
fwrite(Eyval,sizeof(float),antl*antw,fantdim);
fclose(fantdim);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -