README.md 7.15 KB
Newer Older
Roger Kaeppeli's avatar
Roger Kaeppeli committed
1
2
3
4
5
6
7
8
9
# 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
Roger Kaeppeli's avatar
Roger Kaeppeli committed
10
                [here](https://gitlab.ethz.ch/pt1_hs21/online).
Roger Kaeppeli's avatar
Roger Kaeppeli committed
11
                (You need your ETH LDAP credentials to login.
Roger Kaeppeli's avatar
Roger Kaeppeli committed
12
13
                Please send an email to the mailing list [below](#questions)
                in case of problems.)
Roger Kaeppeli's avatar
Roger Kaeppeli committed
14

Roger Kaeppeli's avatar
Roger Kaeppeli committed
15
16
17
  * **Recordings**: All recordings can be found
                    [here](https://gitlab.ethz.ch/pt1_hs21/online).
                    (See remark above for the login credentials.)
Roger Kaeppeli's avatar
Roger Kaeppeli committed
18

19
20
21
22
23
24
25
26
27
28
29
To comply with the ETHZ safety concept hygiene measures and room ventilation
regulations, the course will proceed in two 90 minutes blocks with an extended
30 minutes break in between:

  * Lecture   13:45 - 15:15
  * Ventilation break 15:15 - 15:45
  * Exercises 15:45 - 17:15

All **presence** participants must leave the room during the break and must
return to the same places as before (of course, only if you choose to return!).

Roger Kaeppeli's avatar
Roger Kaeppeli committed
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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
66
@karoger, @engelerp, @ilabarca,  @ivanalsina, @msudwoj and @rworreby.
Roger Kaeppeli's avatar
Roger Kaeppeli committed
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
145
146
147
148
149
150
151
152
153
154
155
156

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)