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

📄 fdtd3d.c

📁 matlab编写的三维FDTD程序 pml边界条件 实现电磁波传播数值模拟和仿真
💻 C
📖 第 1 页 / 共 5 页
字号:
     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 + -