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

📄 fdtd_1.1.c

📁 一维FDTD
💻 C
字号:
/* FDTD_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=0; 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("NSTEPS --> ");	/* NSTEPS is the number of times the */
		scanf("%d", &NSTEPS);	/* main loop has executed */
		printf("%d \n", NSTEPS);
		n = 0;
		
		for (n = 1; n <=NSTEPS; n++) {
			T = T + 1;	/* T keeps track of the total number */
						/* of times the main loop is executed */
			/* Main FDTD Loop */
			
			/* Calculate the Ex field */
			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("%f	%f\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 fields */
		for (k = 1; k < KE - 1; k++)
			printf("%d		%f	%f\n", k, ex[k], hy[k]);
		
		/* Write the E field out to a file "Ex" */
		fp = fopen("Ex", "w");
		for (k = 1; k < KE - 1; k++)
			fprintf(fp, "%f\n", ex[k]);
		fclose(fp);
		
		/* Write the H field out to a file "Hy" */
		fp = fopen("Hy", "w");
		for (k = 1; k < KE-1; k++)
			fprintf(fp,"%f \n", hy[k]);
		fclose(fp);
		
		printf("T = %5.0f\n", T);
	}
}

⌨️ 快捷键说明

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