Effective Analysis Programming 1: Difference between revisions
Line 82: | Line 82: | ||
===Makefile=== |
===Makefile=== |
||
Add the following Makefile to your project: [[File:Makefile]] |
Add the following Makefile to your project: [[File:Makefile.junk]] and rename it to Makefile. |
||
===Class with overloaded operator()=== |
===Class with overloaded operator()=== |
Revision as of 18:31, 27 August 2012
Introduction
We give an introduction to advanced topics of C++. These include inheritance, templates, stable numerical calculations, debugging and profiling. The main focus is on rules and guidelines to write clear code and avoid common pitfalls.
Desirable Prerequisite: Basic knowledge of C/C++
Books
- Stroustrup: "The C++ Programming Language", 3rd edition
- Sutter, Alexandrescu: "C++ Coding Standards"
- Press et al.: "Numerical Recipes", 3rd edition
- Meyers: "Effective C++" etc.
Nodes
- gks-044.scc.kit.edu 141.52.174.44
- gks-246.scc.kit.edu 141.52.174.246
Lectures
- Floating point arithmetic, numerical algorithms
- Coding Guidelines 1(Organization and policy, Design style, Coding style, Function)
Exercises
Monte Carlo method for moment of inertia
Random numbers can be used to solve complex integrals. Here, you are asked to compute the moment of inertia of a thin cylindrical shell and a cylinder, with radius R and length l. View the body as a composition of points with equal mass and sum up each point's moment of inertia .
Start with the program: File:Cylinder.cc
To get started, execute:
mkdir inertia cd inertia wget https://wiki.scc.kit.edu/gridkaschool/index.php/File:Cylinder.cc mv Cylinder.cc cylinder.cc g++ -o cylinder cylinder.cc ./cylinder
Version Control
Create the root directory of CVS:
mkdir cvsroot cvs -d $PWD/cvsroot init
Point CVSROOT to the new directory:
export CVSROOT=<full path to cvsroot>
Import your project into CVS:
cd inertia cvs import -m "start" Inertia INITIAL start
Test it:
cd cvs co -d inertiawork Inertia
Other commands:
cvs diff cvs status cvs commit -m"precise description" <files> cvs diff --brief cvs up
Implement a 3D-Vector
In order to make our program more general (different bodies, different axis) we need a class for 3D vectors that can also compute the cross product.
- Complete the class implementation with the following files: File:Vector.hh,File:Vector.cc,File:Vectortest.cc
- Adapt cylinder.cc to use the new Vector class
Makefile
Add the following Makefile to your project: File:Makefile.junk and rename it to Makefile.