Effective Analysis Programming 1

From Gridkaschool
Revision as of 18:18, 27 August 2012 by Stadie (talk | contribs) (Implement a 3D-Vector)

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 Int1.png 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 Sum1.png.

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.

  1. Complete the class implementation with the following files: File:Vector.hh,File:Vector.cc,File:Vektortest.cc
  2. Adapt cylinder.cc to use the new Vector class

Makefile

Class with overloaded operator()

Inheritance