Submit through Canvas by Thursday, 5th June 2025, 17.30 CEST.
General remarks on the worksheets:
Start to work together as a group; figure out all the logistics, specially in cases where not all members of the group can be present throughout the course, so that you can still contribute equally to the discussions and the collaborative work. Note that attendance in person is a formal requirement - we do not enforce it, but it is then the responsibility of those not attending in person to make sure that they are still able to participate in a regular way.
Set up at least a shared repository for the work on your code, for example using github. That will also make it easier to document that (or whether) all have contributed their fair share to the coding. You do not have to do all the work only via git, but are encouraged to use other environments for collaborative work in addition to that, for purposes other than the immediate code development.
Start writing the code for your programming project. Use Python language, and write it directly in the form of *.py files that can be interpreted with the python3 interpreter (i.e., do not write it as a Jupyter notebook). In the first step, create two classes: One called Molecule, representing a point mass (each with unit mass m = 1) with coordinates in a three-dimensional volume; and one called Box, representing a cuboid control volume with periodic boundary conditions, containing the molecules.
Make it so that you the extension of the box in x, z and in y directions can be specified; i.e. the length L
Recommendation: Create three files: ./src/ljts/molecule.py and ./src/ljts/box.py for the two classes, and ./main.py for the script to be run through the interpreter. This is not a requirement, but if the codes have a similar structure, that will make it easier to compare codes, discuss them, and give you feedback.
For the present instance, create a box with the dimension 5 x 40 x 5, and use the initial densities ρ'
Now you have created an initial configuration. Write code that, for the given configuration (i.e., positions of all the point masses), computes the potential energy E
Here, the potential energy is given as a sum over all pairs of molecules E
Therein, r
Note that periodic boundary conditions are to be used; e.g., where you leave the box to the right, you directly enter it from the left, or in other words, a molecule directly at the right boundary of the box is very close to a molecule directly at the left boundary of the box. This applies in all three dimensions.
Make sure that you seed your random number generator e.g. using the clock (default seeding mechanism), so that every time you run the code, the positions and the potential energy are different. What values do you typically get for the potential energy? The value should normally be a very large positive number, since you have positioned the molecules at random coordinates (not physically realistic), where some are extremely close to each other. This is not a problem, because further on, we will implement a Monte Carlo algorithm, by which this high-energy state automatically relaxes to physically realistic configurations.
Set up a spreadsheet for requirements in the form of epics and user stories, following the methodology from agile requirements analysis. Define at least three personas, i.e., kinds of persons who may interact with your code in different ways. Specify at least four user stories. Classify them according to MoSCoW priority levels, i.e., must (M), should (S), could (C), won't (W).
Once you have set up your requirements register, maintain it throughout your project, adding requirements or improving the way in which they are formulated.
At this stage, it is not necessary to submit any additional text document explaining things, but you can do so if you think it helps. For the final submission, you will need to submit a report/documentation. For this purpose, use LaTeX.