Актуален въпрос относно Съливан книга за 2D PML

S

sixfu

Guest
Аз съм FDTD учене чрез Съливан книгата --- Електромагнитна Симулационни Използвайки FDTD метод, и аз мога да получа правото резултат от кода, описани в книгата за fd2d_3.2.c.Също така Свалих този код от неговия уебсайт, тя не работи също.Може ли тялото ми помогне да разбера това!

Много благодаря!

По-долу е сорс кода от книгата:

************************************************** *****

/ * Fd2d_3.2.c.2D TM програма с PML * /
# Включват <math.h>
# Включват <stdlib.h>
# Включват <stdio.h>

# определят IE 140
# определят JE 140

Основната ()
(
плувка GA [IE] [JE], dz [IE] [JE], EZ [IE] [JE], HX [IE] [JE], Hy [IE] [JE];
INT л, Н, I, J, IC, JC, nsteps, npml;
плувка ddx, DT, T, epsz, пи, буква епсилон, сигма, eaf;
плувка Xn, xxn, xnum, XD, curl_e;
плувка T0, разпространението, пулс;
плувка gi2 [IE], gi3 [IE];
плувка gj2 [JE], gj3 [IE];
плувка fi1 [IE], fi2 [IE], fi3 [JE];
плувка fj1 [JE], fj2 [JE], fj3 [JE];
плувка ihx [IE] [JE], ihy [IE] [JE];
ФАЙЛ * РП, * fopen ();

IC = IE/2-20;
JC = JE/2-20;
ddx = ,01; / * Cell размер * /
DT = ddx/6e8; / * Време стъпки * /
epsz = 8.8e-12;
пи = 3,14159;

/ * Инициализиране на масиви * /
за (к = 0; J <JE; J ) (
printf ( "% 2D", J);
за (I = 0; I <IE; I ) (
dz [J] = 0,0;
HX [J] = 0,0;
Hy [J] = 0,0;
ihx [J] = 0,0;
ihy [J] = 0,0;
GA [J] = 1,0;
printf ( "% 5.2f", GA [J]);
)
printf ( "\ N");
)

/ * Изчислете PML параметри * /

за (I = 0; I <IE; I ) (
gi2 = 1,0;
gi3 = 1,0;
fi1 = 0,0;
fi2 = 1,0;
fi3 = 1,0;
)
за (к = 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 ( "Брой на PML клетки ->");
scanf ( "% г", & npml);

за (I = 0; I <= npml; I ) (
xnum = npml - I;
XD = npml;
xxn = xnum / XD;
Xn = 0,25 * pow (xxn, 3.0);
printf ( "% г% 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);
)

за (к = 0; J <= npml; J ) (
xnum = npml - J;
XD = npml;
xxn = xnum / XD;
Xn = 0,25 * pow (xxn, 3.0);
printf ( "% г% 7.4f% 7.4f \ N", I, xxn, Xn);
gj2 [J] = 1,0 / (1,0 Xn);
gj2 [JE-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 ( "ГИ FI \ N");
за (I = 0; I <IE; I ) (
printf ( "% 2d% 5.2f% 5.2f \ N",
Аз, gi2 , gi3 ),
printf ( "% 5.2f% 5.2f% 5.2f \ N",
fi1 , fi2 , fi3 );
)

printf ( "GJ FJ \ N");
за (к = 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;
разпространението = 12,0;
T = 0;
nsteps = 1;

докато (nsteps> 0) (
printf ( "nsteps ->");
scanf ( "% г", & nsteps);
printf ( "% г \ н", nsteps);

за (N = 1; N <= nsteps; N ) (
T = T 1;

/ * ---- Старт на Главна FDTD цикъл ---- * /

/ * Изчислете Dz областта * /
за (к = 1; J <IE; J ) (
за (I = 1; I <IE; I ) (
dz [J] = gi3 * gj3 [J] dz [J]
Gi2 * gj2 [J] *. 5 * (Hy [J] - Hy [I-1] [J]
- HX [J] HX [J-1]);
)
)

/ * Синусоидална Източник * /

/ * = Пулса греха (2 * пи * 1500 * 1e6 * * DT T); * /
импулс = EXP (-. 5 * pow ((T-T0) / разпространение, 2.));
dz [IC] [JC] = пулс;

/ * Изчислете Ez областта * /
/ * Оставете Ez ръбове до 0, като част от PML * /
за (к = 1; J <JE-1; J ) (
за (I = 1; I <IE-1; I ) (
EZ [J] = GA [J] * dz [J];
)
)

printf ( "% 3е% 6.2f \ N", T, EZ [IC] [JC]);

/ * Изчислете HX областта * /
за (к = 0; J <JE-1; J ) (
за (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]);
)
)

/ * Изчислете Hy областта * /
за (к = 0; J <= JE-1; J ) (
за (I = 0; I <IE-1; I ) (
curl_e = EZ [I 1] [J] - EZ [J];
ihy [J] = ihy [J] fj1 [J] * curl_e;
Hy [J] = fi3 * Hy [J]
Fi2 *. 5 * (curl_e ihy [J]);
)
)

)
/ * ---- Краят на основните FDTD цикъл ---- * /

за (к = 1; J <JE; J ) (
printf ( "% 2D", J);
за (I = 1; I <= IE; I ) (
printf ( "% 4.1f", EZ [J]);
)
printf ( "\ N");
)

/ * Напишете E областта изложени във файл "Ez" * /
РП = fopen ( "Ez", "w");
за (к = 0; J <JE; J ) (
за (I = 0; I <IE; I ) (
fprintf (РП, "% 6.3f", EZ [J]);
)
fprintf (РП, "\ N");
)

fclose (РП);

printf ( "T =% 6.0f \ N", T);

)

)

 
Скъп,
Pls определят множество области, преди основното () функцията.
Мисля, че вашата програма ще работи.
всичко най-хубаво!Добавен след 21 секунди:Скъп,
Pls определят множество области, преди основното () функцията.
Мисля, че вашата програма ще работи.
всичко най-хубаво!

 
кодът е никакъв проблем, само в началото на декларацията, вместо
ФАЙЛ FP * * fopen ();

пиша само
Файл * FP

съставяне на програма, няма да има грешка

Изпълни програмата и поставите вашия вход

благодарности

 
Здравейте, аз трябва да се намери този алгоритъм (FDTD 2D TM режими с PML условия), matlab код!
Има ли някой, който може да ми помогне?

Благодаря!

 
pippopamp написа:

Здравейте, аз трябва да се намери този алгоритъм (FDTD 2D TM режими с PML условия), matlab код!

Има ли някой, който може да ми помогне?Благодаря!
 

Welcome to EDABoard.com

Sponsor

Back
Top