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

📄 fdtd.c

📁 用c语言仿真了FDTD算法,给大家提供一种思路
💻 C
字号:
/*FD1D_1.1.c  1D FDTD simulation in free space*/
#include <math.h>
#include <stdlib.h>
#include <stdio.h>

#define KE 200                /*KE is the number of cells to be used */

main ()
{
  float ex[KE],hy[KE];
  int n,k,kc,ke,NSTEPS;
  float T;
  float t0,spread,pulse;
  FILE *fp , *fopen();

  /*initialize*/
  for (k=1; k<KE;k++)
  {
    ex[k]=0;
    hy[k]=0;
    }
  kc=KE/2;	/*center of the problem space*/
  t0=40.0;	/*center of the incident pulse*/
  spread=12;	/*width of the incident pulse*/
  T=0;
  NSTEPS=1;

  while (NSTEPS>0) {
  printf("NETEPS --> ");	/*NETEPS is the center of times the main loop has excuted*/
  scanf ("%d",&NSTEPS);
  printf("%d\n",NSTEPS);
  n=0;

  for (n=1;n<=NSTEPS;n++)
  {
    
    T=T+1;    /*T keeps track of the totle number of times the main loop is excuted*/
 /*main FDTD loop*/
 /*calculate the EX filed*/
 for (k=1;k<KE;k++)
 {
   ex[k]=ex[k]+0.5*(hy[k-1]-hy[k]);}
   /*put a gaussian pulse in the middle*/
   pulse=exp(-0.5*(pow((t0-T)/spread,2.0)));
   ex[kc]=pulse;
   printf("%6.2f %6.3f\n",t0-T,ex[kc]);
   /*calculate the Hy field */
  for (k=0;k<KE-1;k++)
 {
   hy[k]=hy[k]+0.5*(ex[k]-ex[k+1]);
 }
 /*end of the main FDTD loop*/
 /*at the end of the calculation,print out the ex and hy field*/
 for (k=1;k<KE;k++)
 {
  printf("%3d %6.3f %6.3f\n",k,ex[k],hy[k]); }
  
  /*write the E filed out to a file "EX"*/
  fp=fopen("Ex","w");
  for (k=1;k<=KE;k++)
  {
    fprintf (fp,"%6.3f\n",ex[k]);}
    fclose(fp);
    fp=fopen("Hy","w");
  for (k=1;k<=KE;k++)
  {
    fprintf (fp,"%6.3f\n",hy[k]);}
    fclose(fp);
    printf("T=%5.0f\n",T);
  }
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -