error.gp: Add gnuplot script and rules to build an error-scaling plot
authorW. Trevor King <wking@tremily.us>
Wed, 13 Feb 2013 01:13:15 +0000 (20:13 -0500)
committerW. Trevor King <wking@tremily.us>
Wed, 13 Feb 2013 01:14:45 +0000 (20:14 -0500)
As requested in the homework.  I didn't bother writing a stand-alone
script for building the data files, although you could split my
error-%.data rule out into its own script if you wish.

.gitignore
Makefile
error.gp [new file with mode: 0644]

index 830e3663adf854bf658fdec9f791a644bc95c3f5..816ccacaad8965466a9bf57d8edba7b2e1988115 100644 (file)
@@ -1,3 +1,5 @@
 one_gaussian_bump
 error_analysis
 *.o
+*.data
+*.png
index d66f5f81f7a70e134dbb2e8ea1de25c5ef6bbb4e..44e3fe2a6c251de40294168eb9b6a5d0de71b9c3 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -75,7 +75,7 @@ help:
 
 # target: clean - remove automatically generated files
 clean:
-       $(RM) -rf $(PROGRAMS) *.o $(RELEASE)*
+       $(RM) -rf $(PROGRAMS) *.o *.data *.png $(RELEASE)*
 
 # target: dist - generate a tarball packaging the source
 # Here, we move the source into a temporary release directory, tar the
@@ -138,8 +138,19 @@ $(CXX_PROGRAMS): % : $$($$(*)_OBJECTS)
 #     gnuplot plot.gp
 # where plot.gp was a gnuplot script for plotting data generated by
 # RUN_PROGRAM.
-run: $(PROGRAMS)
-       ./$(RUN_PROGRAM)
+run: error.png
+
+.SECONDEXPANSION:
+error-%.data: $(PROGRAMS)
+       echo -e "# dt\terror" > "$@"
+       for dt in 0.00004 0.0002 0.001 0.005 0.025; do \
+               echo -en "$$dt\t" >> "$@"; \
+               ./one_gaussian_bump --time-step "$$dt" --$(@:error-%.data=%) | \
+                        ./error_analysis >> "$@"; \
+       done
+
+error.png: error.gp error-euler.data error-midpoint.data error-rk4.data
+       gnuplot "$<" > "$@"
 
 # Pattern rule for compiling object files from C++ source
 # There is an implicit rule for this in GNU make
diff --git a/error.gp b/error.gp
new file mode 100644 (file)
index 0000000..7975aee
--- /dev/null
+++ b/error.gp
@@ -0,0 +1,11 @@
+set term png
+set title 'Error scaling'
+set xlabel 'dt'
+set ylabel 'relative error'
+set key left top
+set logscale x
+set logscale y
+set style data linespoints
+plot 'error-euler.data' title 'Euler', \
+       'error-midpoint.data' title 'Midpoint', \
+       'error-rk4.data' title '4th order Runge-Kutta'