1 fdtd code error,pls help me

Status
Not open for further replies.

abdoeng

Advanced Member level 2
Joined
Feb 22, 2004
Messages
647
Helped
76
Reputation
152
Reaction score
63
Trophy points
1,308
Activity points
3,812
hi i try to understand fdtd code,here 1 d code but it is error,any buddy help me
thanks regards
code
# include <math.h>
# include <stdlib.h>
# include <stdio.h>
#define ke 200
main()
{
kc = ke/2;
to = 40.0;
spread = 12;
t=0;
nsteps = 1;
float ex[ke],hy[ke];
int n,k,kc,ke,nsteps;
float t;
float to,spread,pulse;
FILE *ftp, *fopen();
for ( k = 1;k < ke;k++ )
{ ex[k] = 0;
hy[k] = 0.}
kc = ke/2;
to = 40.0;
spread = 12;
t=0;
nsteps = 1;
while ( nsteps > 0 ){
printf("nsteps-->");
scanf("%d",&nsteps);
printf("%d\n",nsteps);
n=0;
for (n=1;n<=nsteps;n++)
{
t=t+1;
for (k=1;k<ke;k++)
{ex[k]=ex[k]+.5*(hy[k-1]-hy[k]);}
pulse=exp(-.5*(pow((to-t)/spread,2)));
ex[kc]=pulse;
printf("%5.1f %6.2f\n",to-t,ex[kc]);
for (k=0;k<ke-1;k++)
{hy[k]=hy[k]+.5*(ex[k]-ex[k+1]);}
}
for (k=1;k<=ke;k++)
{print ("%3d %6.2f %6.2\n",k,ex[k],hy[k]);}
fp=fopen("ex","w");
for (k=1;k<=ke;k++)
{fprintf(fp," %6.2f \n",ex[k]);}
fclose(fp)
fp=fopen("hy","w");
for (k=1;k<=ke;k++)
{fprintf(fp," %6.2f \n",hy[k]);}
fclose(fp)
print ( "t= %5f\n",t);
}
}
 

I don't know what that program is suppose to do, but it's full of C syntax errors.
I fixed the obvious errors, but I don't know if it the output is correct or not:
Code:
#include <math.h>
#include <stdlib.h>
#include <stdio.h>

#define ke 200

int main(void)
{
  float ex[ke], hy[ke];
  int n, k, kc, nsteps;
  float t;
  float to, spread, pulse;
  FILE *fp;

  kc = ke / 2;
  to = 40.0;
  spread = 12;
  t = 0;
  nsteps = 1;
  for (k = 1; k < ke; k++)
  {
    ex[k] = 0;
    hy[k] = 0;
  }
  kc = ke / 2;
  to = 40.0;
  spread = 12;
  t = 0;
  nsteps = 1;
  while (nsteps > 0)
  {
    printf("nsteps-->");
    scanf("%d", &nsteps);
    printf("%d\n", nsteps);
    n = 0;
    for (n = 1; n <= nsteps; n++)
    {
      t = t + 1;
      for (k = 1; k < ke; k++)
      {
        ex[k] = ex[k] + .5 * (hy[k - 1] - hy[k]);
      }
      pulse = exp(-.5 * (pow((to - t) / spread, 2)));
      ex[kc] = pulse;
      printf("%5.1f %6.2f\n", to - t, ex[kc]);
      for (k = 0; k < ke - 1; k++)
      {
        hy[k] = hy[k] + .5 * (ex[k] - ex[k + 1]);
      }
    }
    for (k = 1; k <= ke; k++)
    {
      printf("%3d %6.2f %6.2f\n", k, ex[k], hy[k]);
    }
    fp = fopen("ex", "w");
    for (k = 1; k <= ke; k++)
    {
      fprintf(fp, " %6.2f \n", ex[k]);
    }
    fclose(fp);
    fp = fopen("hy", "w");
    for (k = 1; k <= ke; k++)
    {
      fprintf(fp, " %6.2f \n", hy[k]);
    }
    fclose(fp);
    printf("t= %5f\n", t);
  }
  return 0;
}
 

hi ech47,thanks ,that program in sullivan book,in first chapter,it is simple but after i run it,it has more error,that iignore it
regards
 

I grabbed the Sullivan book.

The program has array indexing bugs. Try changing the first loop from this:
for (k = 1; k < ke; k++)
to this:
for (k = 0; k < ke; k++)

Those final printf statements probably need to be ex[k-1] and hy[k-1] instead of ex[k] and hy[k].

There may be more similar bugs. Looks like Sullivan translated it (poorly) from FORTRAN or something like that.
 

Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…