S
sixfu
Guest
Aš mokymosi FDTD per Sullivan knyga --- Elektromagnetinio Modeliavimas naudojant FDTD metodas, ir aš negaliu gauti tinkamą rezultatą iš kodas nurodytas knygos fd2d_3.2.c.Aš atsisiųsti šį kodą savo svetainėje, ji neveikia per.Ar bet kuri įstaiga man padėti skaičių it out!
Thanks a lot!
Žemiau kodą iš knygos:
************************************************** *****
/ * Fd2d_3.2.c.2D TM programa su PDL * /
#
Include <math.h>
#
Include <stdlib.h>
#
Include <stdio.h>
# define IE 140
# define JE 140
main ()
(
flotacinio ga [IE] [V], dz [IE] [V] Ez [IE] [V] Gu [IE] [V], he [IE] [V];
int l, n, i, j, ic, jc, nsteps, npml;
flotacinio ddx, dt, T, epsz, pi, epsilon, sigma, EAF;
flotacinio Xn, xxn, xnum, Xd, curl_e;
flotacinio t0, platinti, impulso;
flotacinio gi2 [IE], gi3 [IE];
flotacinio gj2 [JE], GJ3 [IE];
flotacinio fi1 [IE], fi2 [IE], fi3 [JE];
flotacinio fj1 [JE], fj2 [JE], fj3 [JE];
flotacinio ihx [IE] [V], ihy [IE] [V];
FILE * fp, * fopen ();
ic = IE/2-20;
jc = JE/2-20;
ddx = ,01 / * Ląstelių dydis * /
dt = ddx/6e8 / * Laikas veiksmus * /
epsz = 8.8e-12;
Pi = 3,14159;
/ * Initialize į matricas * /
for (j = 0; j <JE j ) (
printf ( "% 2d", j);
for (i = 0; i <IE; i ) (
dz [j] = 0.0;
hx [j] = 0.0;
pr [j] = 0.0;
ihx [j] = 0.0;
ihy [j] = 0.0;
ga [j] = 1.0;
printf ( "% 5.2f", ga [j]);
)
printf ( "\ n");
)
/ * Apskaičiuokite PDL parametrus * /
for (i = 0; i <IE; i ) (
gi2 = 1.0;
gi3 = 1.0;
fi1 = 0.0;
fi2 = 1.0;
fi3 = 1.0;
)
for (j = 0; j <IE j ) (
gj2 [j] = 1.0;
GJ3 [j] = 1.0;
fj1 [j] = 0.0;
fj2 [j] = 1.0;
fj3 [j] = 1.0;
)
printf ( "skaičius PDL ląstelės ->");
scanf ( "% d", & npml);
for (i = 0; i <= npml; i ) (
xnum = npml - i;
Xd = npml;
xxn = xnum / Xd;
Xn = 0,25 * pow (xxn, 3,0);
printf ( "% d% 7.4f% 7.4f \ n", i, xxn, xn);
gi2 = 1,0 / (1,0 xn);
gi2 [IE-1-i] = 1,0 / (1,0 xn);
gi3 = (1,0 - xn) / (1,0 xn);
gi3 [IE-i-1] = (1,0 - xn) / (1,0 xn);
xxn = (xnum-.5) / Xd;
Xn = 0,25 * pow (xxn, 3,0);
fi1 = Xn;
fi1 [IE-2-i] = Xn;
fi2 = 1,0 / (1,0 xn);
fi2 [IE-2-i] = 1,0 / (1,0 xn);
fi3 = (1,0 - xn) / (1,0 xn);
fi3 [IE-2-i] = (1,0 - xn) / (1,0 xn);
)
for (j = 0; j <= npml j ) (
xnum = npml - j;
Xd = npml;
xxn = xnum / Xd;
Xn = 0,25 * pow (xxn, 3,0);
printf ( "% d% 7.4f% 7.4f \ n", i, xxn, xn);
gj2 [j] = 1,0 / (1,0 xn);
gj2 [V-1-j] = 1,0 / (1,0 xn);
GJ3 [j] = (1,0 - xn) / (1,0 xn);
GJ3 [JE-j-1] = (1,0 - xn) / (1,0 xn);
xxn = (xnum-.5) / Xd;
Xn = 0,25 * pow (xxn, 3,0);
fj1 [j] = Xn;
fj1 [JE-2-j] = Xn;
fj2 [j] = 1,0 / (1,0 xn);
fj2 [JE-2-j] = 1,0 / (1,0 xn);
fj3 [j] = (1,0 - xn) / (1,0 xn);
fj3 [JE-2-j] = (1,0 - xn) / (1,0 xn);
)
printf ( "gi fi \ n");
for (i = 0; i <IE; i ) (
printf ( "% 2d% 5.2f% 5.2f \ n"
i gi2 , gi3 ),
printf ( "% 5.2f% 5.2f% 5.2f \ n"
fi1 , fi2 , fi3 );
)
printf ( "GJ Fj \ n");
for (j = 0; j <JE j ) (
printf ( "% 2d% 5.2f% 5.2f \ n"
j, gj2 [j], GJ3 [j]),
printf ( "% 5.2f% 5.2f% 5.2f \ n"
fj1 [j], fj2 [j], fj3 [j]);
)
t0 = 40,0;
plitimo = 12,0;
T = 0;
nsteps = 1;
while (nsteps> 0) (
printf ( "nsteps ->");
scanf ( "% d", & nsteps);
printf ( "% d \ n" nsteps);
for (n = 1, n <= nsteps n ) (
T = T 1;
/ * ---- Pradėti Pagrindinis FDTD linija ---- * /
/ * Apskaičiuokite Dz srityje * /
for (j = 1; j <IE j ) (
for (i = 1, i <IE; i ) (
dz [j] = gi3 * GJ3 [j] * dz [j]
Gi2 * gj2 [j] *. 5 * (pr [j] - he [i-1] [j]
- Gu [j] hx [j-1]);
)
)
/ * Sinusoidinės šaltinio * /
/ * Impulso = sin (2 * pi * 1500 * 1e6 * dt * T); * /
impulso = exp (-. 5 * pow ((t-t0) / plitimu, 2.));
dz [ic] [jc] = impulso;
/ * Apskaičiuokite Ez srityje * /
/ * Palikite Ez kraštai iki 0, kaip ir PDL * /
for (j = 1; j <JE-1, j ) (
for (i = 1, i <IE-1; i ) (
Ez [j] = ga [j] * dz [j];
)
)
printf ( "% 3f% 6.2f \ n" T ez [ic] [jc]);
/ * Apskaičiuokite Hx srityje * /
for (j = 0; j <JE-1, j ) (
for (i = 0; i <IE; i ) (
curl_e = ez [j] - ez [j 1];
ihx [j] = ihx [j] fi1 * curl_e;
hx [j] = fj3 [j] * hx [j]
Fj2 [j] *. 5 * (curl_e ihx [j]);
)
)
/ * Apskaičiuokite Hy srityje * /
for (j = 0; j <= V-1, j ) (
for (i = 0; i <IE-1; i ) (
curl_e = ez [i 1] [j] - ez [j];
ihy [j] = ihy [j] fj1 [j] * curl_e;
pr [j] = fi3 * pr [j]
Fi2 *. 5 * (curl_e ihy [j]);
)
)
)
/ * ---- Pabaiga pagrindinių FDTD linija ---- * /
for (j = 1; j <JE j ) (
printf ( "% 2d", j);
for (i = 1, i <= IE; i ) (
printf ( "% 4.1f", ez [j]);
)
printf ( "\ n");
)
/ * Parašyti E srityje į failą "Ez" * /
fp = fopen ( "Ez", "w");
for (j = 0; j <JE j ) (
for (i = 0; i <IE; i ) (
fprintf (fp, "% 6.3f", ez [j]);
)
fprintf (fp, "\ n");
)
fclose (fp);
printf ( "T" = "% 6.0f \ n", T);
)
)
Thanks a lot!
Žemiau kodą iš knygos:
************************************************** *****
/ * Fd2d_3.2.c.2D TM programa su PDL * /
#
Include <math.h>
#
Include <stdlib.h>
#
Include <stdio.h>
# define IE 140
# define JE 140
main ()
(
flotacinio ga [IE] [V], dz [IE] [V] Ez [IE] [V] Gu [IE] [V], he [IE] [V];
int l, n, i, j, ic, jc, nsteps, npml;
flotacinio ddx, dt, T, epsz, pi, epsilon, sigma, EAF;
flotacinio Xn, xxn, xnum, Xd, curl_e;
flotacinio t0, platinti, impulso;
flotacinio gi2 [IE], gi3 [IE];
flotacinio gj2 [JE], GJ3 [IE];
flotacinio fi1 [IE], fi2 [IE], fi3 [JE];
flotacinio fj1 [JE], fj2 [JE], fj3 [JE];
flotacinio ihx [IE] [V], ihy [IE] [V];
FILE * fp, * fopen ();
ic = IE/2-20;
jc = JE/2-20;
ddx = ,01 / * Ląstelių dydis * /
dt = ddx/6e8 / * Laikas veiksmus * /
epsz = 8.8e-12;
Pi = 3,14159;
/ * Initialize į matricas * /
for (j = 0; j <JE j ) (
printf ( "% 2d", j);
for (i = 0; i <IE; i ) (
dz [j] = 0.0;
hx [j] = 0.0;
pr [j] = 0.0;
ihx [j] = 0.0;
ihy [j] = 0.0;
ga [j] = 1.0;
printf ( "% 5.2f", ga [j]);
)
printf ( "\ n");
)
/ * Apskaičiuokite PDL parametrus * /
for (i = 0; i <IE; i ) (
gi2 = 1.0;
gi3 = 1.0;
fi1 = 0.0;
fi2 = 1.0;
fi3 = 1.0;
)
for (j = 0; j <IE j ) (
gj2 [j] = 1.0;
GJ3 [j] = 1.0;
fj1 [j] = 0.0;
fj2 [j] = 1.0;
fj3 [j] = 1.0;
)
printf ( "skaičius PDL ląstelės ->");
scanf ( "% d", & npml);
for (i = 0; i <= npml; i ) (
xnum = npml - i;
Xd = npml;
xxn = xnum / Xd;
Xn = 0,25 * pow (xxn, 3,0);
printf ( "% d% 7.4f% 7.4f \ n", i, xxn, xn);
gi2 = 1,0 / (1,0 xn);
gi2 [IE-1-i] = 1,0 / (1,0 xn);
gi3 = (1,0 - xn) / (1,0 xn);
gi3 [IE-i-1] = (1,0 - xn) / (1,0 xn);
xxn = (xnum-.5) / Xd;
Xn = 0,25 * pow (xxn, 3,0);
fi1 = Xn;
fi1 [IE-2-i] = Xn;
fi2 = 1,0 / (1,0 xn);
fi2 [IE-2-i] = 1,0 / (1,0 xn);
fi3 = (1,0 - xn) / (1,0 xn);
fi3 [IE-2-i] = (1,0 - xn) / (1,0 xn);
)
for (j = 0; j <= npml j ) (
xnum = npml - j;
Xd = npml;
xxn = xnum / Xd;
Xn = 0,25 * pow (xxn, 3,0);
printf ( "% d% 7.4f% 7.4f \ n", i, xxn, xn);
gj2 [j] = 1,0 / (1,0 xn);
gj2 [V-1-j] = 1,0 / (1,0 xn);
GJ3 [j] = (1,0 - xn) / (1,0 xn);
GJ3 [JE-j-1] = (1,0 - xn) / (1,0 xn);
xxn = (xnum-.5) / Xd;
Xn = 0,25 * pow (xxn, 3,0);
fj1 [j] = Xn;
fj1 [JE-2-j] = Xn;
fj2 [j] = 1,0 / (1,0 xn);
fj2 [JE-2-j] = 1,0 / (1,0 xn);
fj3 [j] = (1,0 - xn) / (1,0 xn);
fj3 [JE-2-j] = (1,0 - xn) / (1,0 xn);
)
printf ( "gi fi \ n");
for (i = 0; i <IE; i ) (
printf ( "% 2d% 5.2f% 5.2f \ n"
i gi2 , gi3 ),
printf ( "% 5.2f% 5.2f% 5.2f \ n"
fi1 , fi2 , fi3 );
)
printf ( "GJ Fj \ n");
for (j = 0; j <JE j ) (
printf ( "% 2d% 5.2f% 5.2f \ n"
j, gj2 [j], GJ3 [j]),
printf ( "% 5.2f% 5.2f% 5.2f \ n"
fj1 [j], fj2 [j], fj3 [j]);
)
t0 = 40,0;
plitimo = 12,0;
T = 0;
nsteps = 1;
while (nsteps> 0) (
printf ( "nsteps ->");
scanf ( "% d", & nsteps);
printf ( "% d \ n" nsteps);
for (n = 1, n <= nsteps n ) (
T = T 1;
/ * ---- Pradėti Pagrindinis FDTD linija ---- * /
/ * Apskaičiuokite Dz srityje * /
for (j = 1; j <IE j ) (
for (i = 1, i <IE; i ) (
dz [j] = gi3 * GJ3 [j] * dz [j]
Gi2 * gj2 [j] *. 5 * (pr [j] - he [i-1] [j]
- Gu [j] hx [j-1]);
)
)
/ * Sinusoidinės šaltinio * /
/ * Impulso = sin (2 * pi * 1500 * 1e6 * dt * T); * /
impulso = exp (-. 5 * pow ((t-t0) / plitimu, 2.));
dz [ic] [jc] = impulso;
/ * Apskaičiuokite Ez srityje * /
/ * Palikite Ez kraštai iki 0, kaip ir PDL * /
for (j = 1; j <JE-1, j ) (
for (i = 1, i <IE-1; i ) (
Ez [j] = ga [j] * dz [j];
)
)
printf ( "% 3f% 6.2f \ n" T ez [ic] [jc]);
/ * Apskaičiuokite Hx srityje * /
for (j = 0; j <JE-1, j ) (
for (i = 0; i <IE; i ) (
curl_e = ez [j] - ez [j 1];
ihx [j] = ihx [j] fi1 * curl_e;
hx [j] = fj3 [j] * hx [j]
Fj2 [j] *. 5 * (curl_e ihx [j]);
)
)
/ * Apskaičiuokite Hy srityje * /
for (j = 0; j <= V-1, j ) (
for (i = 0; i <IE-1; i ) (
curl_e = ez [i 1] [j] - ez [j];
ihy [j] = ihy [j] fj1 [j] * curl_e;
pr [j] = fi3 * pr [j]
Fi2 *. 5 * (curl_e ihy [j]);
)
)
)
/ * ---- Pabaiga pagrindinių FDTD linija ---- * /
for (j = 1; j <JE j ) (
printf ( "% 2d", j);
for (i = 1, i <= IE; i ) (
printf ( "% 4.1f", ez [j]);
)
printf ( "\ n");
)
/ * Parašyti E srityje į failą "Ez" * /
fp = fopen ( "Ez", "w");
for (j = 0; j <JE j ) (
for (i = 0; i <IE; i ) (
fprintf (fp, "% 6.3f", ez [j]);
)
fprintf (fp, "\ n");
)
fclose (fp);
printf ( "T" = "% 6.0f \ n", T);
)
)