FDTD Code Patch
FDTD Code Patch
cpp
/* www.antenna-theory.com */
/*Pete Bevelacqua - EE 517 */
*/
#include<stdio.h>
#include<math.h>
#define PI 3.14159265358979
#define MU0 1.25663706e-6
#define EPS0 8.854e-12
#define EPSR 2.2
FILE *out;
/* declaration of functions */
void Initialize();
void UpdateEfields();
void Conductors();
void Source();
void FirstABC();
void UpdateHfields();
void SecondABC();
main()
https://www.antenna-theory.com/antennas/patches/fdtd.cpp 1/11
5/18/24, 10:10 AM https://www.antenna-theory.com/antennas/patches/fdtd.cpp
FILE *in;
char basename[80]="junk", filename[100];
char outputF[20]="Incident.txt";
/* Define H coefficients */
tMUX = delT/MU0/delX;
tMUY = delT/MU0/delY;
tMUZ = delT/MU0/delZ;
/* E Coefficients (Dielectric) */
tERX = delT/EPS0/EPSR/delX;
tERY = delT/EPS0/EPSR/delY;
tERZ = delT/EPS0/EPSR/delZ;
/* E Coefficients (Boundary) */
tEBX = delT/EPS0*2./(EPSR+1)/delX;
tEBY = delT/EPS0*2./(EPSR+1)/delY;
tEBZ = delT/EPS0*2./(EPSR+1)/delZ;
https://www.antenna-theory.com/antennas/patches/fdtd.cpp 2/11
5/18/24, 10:10 AM https://www.antenna-theory.com/antennas/patches/fdtd.cpp
UpdateEfields();
FirstABC();
Conductors();
Source();
UpdateHfields();
SecondABC();
fclose(in);
}
fclose(out);
}
https://www.antenna-theory.com/antennas/patches/fdtd.cpp 3/11
5/18/24, 10:10 AM https://www.antenna-theory.com/antennas/patches/fdtd.cpp
/* Function: UpdateEfields() */
/**********************************
/* Updates Ex, Ey, and Ez.
*
***********************************/
void UpdateEfields(){
/*Update Ex Field */
for(i=0; i<LIMX; i++)
for(j=1; j<LIMY-1; j++)
for(k=1; k<LIMZ; k++){
if(k>3){
Ex[i][j][k] += tEPY*(Hz[i][j][k] - Hz[i][j-1][k])
- tEPZ*(Hy[i][j][k] - Hy[i][j][k-1]);
}else if(k==3){
Ex[i][j][k] += tEBY*(Hz[i][j][k] - Hz[i][j-1][k])
- tEBZ*(Hy[i][j][k] - Hy[i][j][k-1]);
}else{
Ex[i][j][k] += tERY*(Hz[i][j][k] - Hz[i][j-1][k])
- tERZ*(Hy[i][j][k] - Hy[i][j][k-1]);
}
}
https://www.antenna-theory.com/antennas/patches/fdtd.cpp 4/11
5/18/24, 10:10 AM https://www.antenna-theory.com/antennas/patches/fdtd.cpp
/* Updating Ez fields */
for(i=1; i<LIMX; i++)
for(j=1; j<LIMY-1; j++)
for(k=0; k<LIMZ; k++){
if(k>2){
Ez[i][j][k] += tEPX*(Hy[i][j][k] - Hy[i-1][j][k])
- tEPY*(Hx[i][j][k] - Hx[i][j-1][k]);
}else if(k<3){
Ez[i][j][k] += tERX * (Hy[i][j][k] - Hy[i-1][j][k])
- tERY*(Hx[i][j][k] - Hx[i][j-1][k]);
}
}
/* Function: Conductors () */
/******************************
/* Zeros the tangential (Ex, Ey) fields on the conductor
surfaces (ground plane, microstrip, antenna)
/**************************************/
void Conductors(){
/* When you ONLY have the microstrip transmission line, you have this uncommented and
comment out the other uStrip and patch antenna sections *
k=3;
for(i=19; i<25; i++)
https://www.antenna-theory.com/antennas/patches/fdtd.cpp 5/11
5/18/24, 10:10 AM https://www.antenna-theory.com/antennas/patches/fdtd.cpp
k=3;
i=25;
for(j=0; j<LIMY; j++){
Ey[i][j][k] = 0.;
}
/* *******I add the above nodes to be zero to make the strip symmetric********** */
k=3;
i=25;
for(j=0; j<50; j++){
Ey[i][j][k] = 0.;
}
/**%%Above nodes zerod to make the strip symmetric, or fields look odd **/
i=46;
for(j=50; j<89; j++){
Ey[i][j][k] = 0.;
}
//questionable here
j=89;
for(i=14; i<=46; i++){
Ex[i][j][k] = 0.;
}
/*********************************************/
}
/* Source */
//if(ntime < SWITCH1){
j=0;
for(i=19; i<=25; i++)
for(k=0; k<3; k++){
temp = (ntime*delT - T0)/T;
//Ez[i][j][k] = exp( -temp*temp );
https://www.antenna-theory.com/antennas/patches/fdtd.cpp 6/11
5/18/24, 10:10 AM https://www.antenna-theory.com/antennas/patches/fdtd.cpp
/*
for(i=19; i<25; i++)
for(k=0; k<3; k++){
Ex[i][j][k] = 0.;
}*/
//}
//fprintf(out, "%lf\n", exp( - ( (ntime*delT - T0 )/T ) * ( (ntime*delT-T0)/T ) ) );
fprintf(out, "%lf\n", (1 - exp( - ntime/1000. ) )*cos( 2*PI* 6.32e9 * delT*ntime) );
https://www.antenna-theory.com/antennas/patches/fdtd.cpp 7/11
5/18/24, 10:10 AM https://www.antenna-theory.com/antennas/patches/fdtd.cpp
[k]);
}else if(k==3){
Ex[i][j][k] = ExABC5[i][k] + abcBy * (Ex[i][j-1][k] - Ex[i][j]
[k]);
Ez[i][j][k] = EzABC5[i][k] + abcFSy * (Ez[i][j-1][k] - Ez[i][j]
[k]);
}else{
Ex[i][j][k] = ExABC5[i][k] + abcDIy * (Ex[i][j-1][k] - Ex[i][j]
[k]);
Ez[i][j][k] = EzABC5[i][k] + abcDIy * (Ez[i][j-1][k] - Ez[i][j]
[k]);
}
}
}
/* End Function: FirstABC *******************************/
}
/* End Function: UpdateHfields() ***********************/
https://www.antenna-theory.com/antennas/patches/fdtd.cpp 8/11
5/18/24, 10:10 AM https://www.antenna-theory.com/antennas/patches/fdtd.cpp
[k]);
Hz[i][j][k] = HzABC1[i][k] + abcFSy * (Hz[i][j-1][k] - Hz[i][j]
[k]);
}else if(k==3){
Hx[i][j][k] = HxABC1[i][k] + abcFSy * (Hx[i][j-1][k] - Hx[i][j]
[k]);
Hz[i][j][k] = HzABC1[i][k] + abcBy * (Hz[i][j-1][k] - Hz[i][j]
[k]);
}else{
Hx[i][j][k] = HxABC1[i][k] + abcDIy * (Hx[i][j-1][k] - Hx[i][j]
[k]);
Hz[i][j][k] = HzABC1[i][k] + abcDIy * (Hz[i][j-1][k] - Hz[i][j]
[k]);
}
}
https://www.antenna-theory.com/antennas/patches/fdtd.cpp 9/11
5/18/24, 10:10 AM https://www.antenna-theory.com/antennas/patches/fdtd.cpp
[k]);
}else if(k==3){
Hx[i][j][k] = HxABC4[i][k] + ABCcoef * (Hx[i][j+1][k] - Hx[i][j]
[k]);
Hz[i][j][k] = HzABC4[i][k] + ABCcoefB * (Hz[i][j+1][k] - Hz[i][j]
[k]);
}else{
Hx[i][j][k] = HxABC4[i][k] + ABCcoefD * (Hx[i][j+1][k] - Hx[i][j]
[k]);
Hz[i][j][k] = HzABC4[i][k] + ABCcoefD * (Hz[i][j+1][k] - Hz[i][j]
[k]);
}
}
}
/* Saving */
k=LIMZ-1;
for(i=0; i<LIMX; i++)
for(j=0; j<LIMY; j++){
HxABC5[i][j] = Hx[i][j][k-1];
HyABC5[i][j] = Hy[i][j][k-1];
}
/* Save fields */
i=0;
for(j=0; j<LIMY; j++)
for(k=0; k<LIMZ; k++){
HyABC2[j][k] = Hy[i+1][j][k];
HzABC2[j][k] = Hz[i+1][j][k];
}
/* Save fields */
i=LIMX-1;
for(j=0; j<LIMY; j++)
for(k=0; k<LIMZ; k++){
HyABC3[j][k] = Hy[i-1][j][k];
HzABC3[j][k] = Hz[i-1][j][k];
}
https://www.antenna-theory.com/antennas/patches/fdtd.cpp 10/11
5/18/24, 10:10 AM https://www.antenna-theory.com/antennas/patches/fdtd.cpp
}
/* End Function: SecondABC() *****************************/
https://www.antenna-theory.com/antennas/patches/fdtd.cpp 11/11