#include #include #include #include #include #include //#include typedef complex double Complex; void ksintegrate(Complex* u, int Nx, double Lx, double dt, int Nt); double ksnorm(Complex* u, int Nx); const double pi = 3.14159265358979323846; /* why doesn't M_PI from math.j work? :-( */ int main(int argc, char* argv[]) { /* to be set as command-line args */ int Nx = 0; /* number of x gridpoints */ int Nruns = 5; /* number of benchmarking runs */ int printnorms = 0; /* can't figure out C bool type :-( */ if (argc < 2) { printf("please provide one integer argument Nx\n"); exit(1); } Nx = atoi(argv[1]); if (argc >= 3) Nruns = atoi(argv[2]); if (argc >= 4) printnorms = atoi(argv[3]); printf("Nx == %d\n", Nx); double dt = 1.0/16.0; double T = 200.0; double Lx = (pi/16.0)*Nx; double dx = Lx/Nx; int Nt = (int)(T/dt); double* x = malloc(Nx*sizeof(double)); Complex* u0 = malloc(Nx*sizeof(Complex)); Complex* u = malloc(Nx*sizeof(Complex)); for (int n=0; n= skip) avgtime += cputime; printf("cputtime == %f\n", cputime); } printf("norm(u(0)) == %f\n", ksnorm(u0, Nx)); printf("norm(u(T)) == %f\n", ksnorm(u, Nx)); avgtime /= (Nruns-skip); printf("avgtime == %f\n", avgtime); free(u0); free(u); free(x); } void ksintegrate(Complex* u, int Nx, double Lx, double dt, int Nt) { int* kx = malloc(Nx*sizeof(int)); double* alpha = malloc(Nx*sizeof(double)); Complex* D = malloc(Nx*sizeof(Complex)); Complex* G = malloc(Nx*sizeof(Complex)); double* L = malloc(Nx*sizeof(double)); for (int n=0; n spectral */ for (int n=0; n