author Isaac Dooley Thu, 16 Oct 2008 21:18:08 +0000 (21:18 +0000) committer Isaac Dooley Thu, 16 Oct 2008 21:18:08 +0000 (21:18 +0000)
 examples/charm++/wave2d/paper.pdf patch | blob | history examples/charm++/wave2d/paper.tex patch | blob | history examples/charm++/wave2d/screenshot.png [new file with mode: 0644] patch | blob examples/charm++/wave2d/wave2d.C patch | blob | history

Binary files a/examples/charm++/wave2d/paper.pdf and b/examples/charm++/wave2d/paper.pdf differ
index ff769bbb4f0444f1106231a9fac6b9f5ee200330..d2073897f1d6803b38167892ee47ed5f2515c5fe 100644 (file)
@@ -1,6 +1,8 @@

\documentclass{article}

+\usepackage{graphicx}
+
%-------------------------------------------------------------------------
\begin{document}

@@ -30,5 +32,14 @@ p_{x,y}^{t+1} = c^2 \left(p_{x+1,y}^{t}+p_{x-1,y}^{t}+p_{x,y+1}^{t}+p_{x,y-1}^{t
This update rule specifies how the $p$ value for each location in the grid should be computed, using $p$ values from the two previous time steps. This update rule is easy to code in an application. The application simply maintains two timesteps' worth of $p$ grids, and using these, the next timestep's $p$ grid can be computed. The $c$ term determines the wave speed. This value must be small enough such that the wave cannot move across more than one grid square in a single timestep. Smaller values for $c$ will make the simulation take longer to propagate a wave by a fixed distance, but larger values for $c$ can introduce dispersive and diffusive errors.

+\begin{figure}
+\begin{center}
+\includegraphics[width=5in]{screenshot}
+\caption{A screenshot of the wave2d program. Positive values of $p$ on the grid are colored red, while negative values are colored blue. The green lines show the parallel decomposition of the problem onto a 4x4 chare array.
+\label{screenshot}}
+\end{center}
+\end{figure}
+
+
\end{document}

diff --git a/examples/charm++/wave2d/screenshot.png b/examples/charm++/wave2d/screenshot.png
new file mode 100644 (file)
index 0000000..17a7890
Binary files /dev/null and b/examples/charm++/wave2d/screenshot.png differ
@@ -4,14 +4,7 @@
// Author: Isaac Dooley 2008

// This program solves the 2-d wave equation over a grid, displaying pretty results through liveViz
-// The program could be made more efficient, but is kept this way for simplicity.
-// Migration is not supported yet. Please add the PUP function if you get a chance!
-
-// This program is based on the description here:
-// http://www.mtnmath.com/whatrh/node66.html
-// "The wave equation is the universal equation of physics. It works for light,
-//  sound, waves on the surface of water and a great deal more"
-
+// The discretization used below is described in the accompanying pdf paper.pdf

@@ -250,15 +243,8 @@ public:
// Previous step's value for this array element
double old  = pressure_old[i*mywidth+j];

-         // Wave speed
-         double c = 0.4;
-
// Compute the new value
-         pressure_new[i*mywidth+j] = c*c*(left+right+up+down - 4.0*curr)-old+2.0*curr;
-
-         // Round any near-zero values to zero (avoid denorms)
-         //      if(pressure_new[i*mywidth+j] < 0.0001 && pressure_new[i*mywidth+j] >  -0.0001)
-         //  pressure_new[i*mywidth+j] = 0.0;
+         pressure_new[i*mywidth+j] = 0.4*0.4*(left+right+up+down - 4.0*curr)-old+2.0*curr;

}
}