/* From: "COMPUTATIONAL PHYSICS, 2nd Ed" by RH Landau, MJ Paez, and CC Bordeianu Copyright Wiley-VCH, 2007. Electronic Materials copyright: R Landau, Oregon State Univ, 2007; MJ Paez, Univ Antioquia, 2007; and CC Bordeianu, Univ Bucharest, 2007. Support by National Science Foundation */ // Shock.java: Formation of Shockwave from Burger's eqnt import java.io.*; public class shock { public static void main(String[] argv) throws IOException, FileNotFoundException { PrintWriter w = new PrintWriter // Output into Shock.dat (new FileOutputStream("Shock.dat"), true); PrintWriter q = // initial conditions in file new PrintWriter(new FileOutputStream("initial.dat"), true); int m = 100; // number of grid points double u[] = new double[m+1]; // Final solution double u0[] = new double[m+1]; // Initial data double epsilon = 1.0; // Wave speed double beta = 0.1; // CFL number double x, dx, dt, T_final; int i, j, n; dx = 2.0/m; // Space step dt = beta*dx/epsilon; // Time step T_final = 0.15; n=(int)(T_final/dt);System.out.println(""+n+""); // Initial solution for ( i=0; i < m-1; i++ ) { x = i*dx; u0[i] = 3.0*Math.sin(3.2*x); q.println(""+0.01*i+" "+u0[i]+" "); } // Lax-Wendroff scheme for ( j=1;j < n;j++) { for ( i=0;i < m-1;i++ ) { u[i+1] = u0[i+1]-(u0[i+2]*u0[i+2] - u0[i]*u0[i])*(0.25*beta)+ +(((u0[i+2]+u0[i+1])/2.0)*(u0[i+2]*u0[i+2]-u0[i+1]*u0[i+1])- ((u0[i+1]+u0[i])/2.0)*(u0[i+1]*u0[i+1]-u0[i]*u0[i])) *0.25*beta*beta; u[0]=0.0; u[m-1]=0.0; if ( j%5==0 && i%4==0 ) w.println(" "+u[i]); // Shift new to old u0[i] = u[i]; } if ( j%5 == 0) w.println(""); } System.out.println("Numerical solution data saved in Shock.dat"); } // Main } // Class