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

📄 antcalcs.c

📁 matlab编写的三维FDTD程序 pml边界条件 实现电磁波传播数值模拟和仿真
💻 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 + -