README.md 6.69 KB
Newer Older
Roger Kaeppeli's avatar
Roger Kaeppeli committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# Programming Techniques for Scientific Simulations I ([402-0811-00L](http://www.vvz.ethz.ch/Vorlesungsverzeichnis/lerneinheit.view?semkez=2021W&ansicht=KATALOGDATEN&lerneinheitId=148080&lang=en))

### General information

The course will take place in a **hybrid presence / online** format:

  * **Presence**: Thursday 13:45 - 17:30, [HCI](http://www.mapsearch.ethz.ch/map/mapSearchPre.do?gebaeudeMap=HCI&geschossMap=G&raumMap=3&farbcode=c010&lang=en) [J 3](http://www.rauminfo.ethz.ch/Rauminfo/grundrissplan.gif?gebaeude=HCI&geschoss=J&raumNr=3&lang=en) [>>](http://www.rauminfo.ethz.ch/Rauminfo/RauminfoPre.do?gebaeude=HCI&geschoss=J&raumNr=3&lang=en)

  * **Online**: Live stream over Zoom. All Meeting IDs can be found
    [here](http://www.sam.math.ethz.ch/~karoger/pt/hs2021/)
    (Login credentials were sent by Email on Monday, September 20.
    If you were not enrolled in the course then, please
    send an email to the mailing list [below](#questions)).

  * **Recordings**: All recordings can be found [here](http://www.sam.math.ethz.ch/~karoger/pt/hs2021/).
    (See remark above for the login credentials.)

We kindly ask **all participants** to comply with the up-to-date Coronavirus
COVID-19 measures:

  * <https://ethz.ch/services/en/news-and-events/coronavirus.html>

### Summary

This lecture provides an overview of programming techniques for scientific
simulations.
The focus is on advanced C++ programming techniques and scientific software
libraries.
Based on an overview over the hardware components of PCs and supercomputers,
optimization methods for scientific simulation codes are explained.

### Questions

For questions or remarks we have a mailing list where you can reach us:
<pt1_hs21@sympa.ethz.ch >.

## Lecture slides, script, exercises and solutions

Lecture slides, exercise sheets and solutions will be provided as part of this
git repository.

## Submission

If you want to receive feedback on your exercises, please push your solutions
to your own git repository before **Monday night** of the week after we hand
out the exercise sheet.
Then send a notification / request for correction email (possibly with specific
questions) to the mailing list.
Advanced users may use `GitLab` issues (make sure to tag all the assistants,
but not the professor, with their @name in the issue description).

Your exercise will then be corrected before the next exercise session.
Make sure to give *maintainer* access to the following people:
Roger Kaeppeli's avatar
Roger Kaeppeli committed
54
@karoger, @engelerp, @ilabarca, @luna_bloin, @msudwoj and @rworreby.
Roger Kaeppeli's avatar
Roger Kaeppeli committed
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144

Of course, working in small groups is allowed (and even encouraged using a
collaborative workflow with `git` and `GitLab`).
However, please make sure that you understand every part of the group's
proposed solution (you will have to e.g., at the exam!).
If several group members submit the exercises, please indicate clearly in the
notification/request for correction email all the group members and indicate
which parts of the solution you would like to have looked at individually
(although we try to run data comparison tools carefully during the correction,
we may miss some individual solution of group members).

## Course confirmation (Testat)

For students needing the confirmation (Testat) for this course, we require
that 70% of the exercises have been solved reasonably (sinnvoll).
The submission deadline is every Wednesday midnight (Zurich time!).

Please announce that you want the confirmation (Testat) for this course
explicitly at the beginning of the semester. Contact us either in person or
through the mailing list.

## Exam information

* For general information, see the performance assessment tab in the course
  catalogue [here](http://www.vvz.ethz.ch/Vorlesungsverzeichnis/lerneinheit.view?semkez=2021W&ansicht=LEISTUNGSKONTROLLE&lerneinheitId=148080&lang=en).

* The exam will have two parts: A written theoretical part, and a programming
  part that you will solve on the exam computers.

* The exam computers will run Fedora Linux, similar to those that you find in
  the computer rooms in the ETH main building.
  The system language of the computers is English.
  A list of the installed software can be found [here](https://www.ethz.ch/services/en/it-services/catalogue/managed-client/computer-rooms.html).

* By default, the keyboards will have the Swiss layout.
  There will be a poll for those who want to get a US keyboard instead.

* Provided on the computers are:
    * The full lecture repository
    * The C++ standard ([draft version](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf))
    * An offline version of http://www.cppreference.com
      (See *Html book* https://en.cppreference.com/w/Cppreference:Archives)  
      We recommend that you try it out before the exam.
      Also note that the search function is absent: use the Index page and the
      search function of the browser.
    * An offline version of [the Python documentation](https://docs.python.org/3.8/index.html)
      (See https://docs.python.org/3.8/download.html)
      We recommend that you try it out before the exam.
    * As needed, offline versions of the documentation for Python libraries.

* This is an open-book exam, which means that you can bring any written
  material (books, notes, printed code, ...).
  However, you may **not** use any digital devices (other than the exam
  computer) during the exam.

* Don't forget to bring your student card (Legi).

## Useful resources

### Literature

C/C++ primers and references:

* Stroustrup, "The C++ Programming Language", 2013.
  Available online within the ETH network [here](https://search.library.ethz.ch/permalink/f/823s1o/nebis_sfx3280000000036330).

* Kernighan and Ritchie, "C Programming Language", 1988.
  Available online within the ETH network [here](https://search.library.ethz.ch/permalink/f/13kse66/nebis_sfx3710000000220165).

Practical/Advanced C++ programming:

* Meyers, "Effective STL", 2001.
  Available online within the ETH network [here](https://search.library.ethz.ch/permalink/f/13kse66/nebis_sfx1000000000385265).

* Meyers, "Effective C : 50 Specific Ways to Improve Your Programs and
  Designs", 2005.
  Available online within the ETH network [here](https://search.library.ethz.ch/permalink/f/823s1o/ebi01_prod009837972).

* Meyers, "Effective Modern C++", 2014.
  Available online within the ETH network [here](https://search.library.ethz.ch/permalink/f/13kse66/nebis_sfx3800000000006955).

* Vandevoorde, Gregor, and Josuttis, "C++ Templates: The Complete Guide", 2017.
  Available online within the ETH network [here](https://search.library.ethz.ch/permalink/f/823s1o/nebis_sfx4100000000880644).


### Web resources

* [C++ reference](https://en.cppreference.com)
* [C++ standard](https://isocpp.org/)
* [C++ core guidelines](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines)