#include #include #include $input int NXB = 5; // upper bound on nx $input int nx; // global number of points excl. boundary $assume(1<=nx && nx<=NXB); $input double U_INIT[nx+2]; // initial values for temperature incl. boundary $input double k; // the constant D*dt/(dx*dx) $assume(k>0 && k<.5); $input int NSTEPS_BOUND=5; // upper bound on nsteps $input int nsteps; // number of time steps $assume(1<=nsteps && nsteps<=NSTEPS_BOUND); $input int wstep; // write frame every this many time steps $assume(1<=wstep && wstep<=nsteps); $output double output[nsteps][nx+2]; // solution computed sequentially, proc 0 only double *u; /* temperature function, local */ double *u_new; /* second copy of temperature function, local */ int initialize() { u = (double*)malloc((nx+2)*sizeof(double)); assert(u); u_new = (double*)malloc((nx+2)*sizeof(double)); assert(u_new); for (int i=1; i