|
|
This page explains how to build the examples on your personal laptop or on the [CECI](https://www.ceci-hpc.be/) supercomputers (e.g. [nic5](https://www.ceci-hpc.be/clusters.html#nic5) at ULiège).
|
|
|
|
|
|
As prerequisite, you must have verified that [git](Git), [a C++ compiler](C++ Compiler) and [CMake](CMake) are correctly installed on your system. Using [VS Code](Visual-Studio-Code) is recommended by not mandatory.
|
|
|
|
|
|
## Windows
|
|
|
* Clone the repository somewhere on your PC:
|
|
|
```
|
|
|
git clone git@gitlab.uliege.be:rboman/math0471.git
|
|
|
```
|
|
|
* In the terminal of VS Code, open VS Code and load ("File / Open Folder...") the `math0471` folder.
|
|
|
* Add the MinGW compiler (and the future zlib path) to your environment by running this script. This script assumes that the compiler has been installed in the default location proposed by the MinGW installer. Running this script should be done each time you re-open VS Code or a new terminal:
|
|
|
```
|
|
|
envs\windows.cmd
|
|
|
```
|
|
|
* Then, go to the `lib` folder and install "zlib" using the scripts `get_zlib.cmd`. This should be done only once per working copy of the repository:
|
|
|
```
|
|
|
cd math0471
|
|
|
cd lib
|
|
|
get_zlib.cmd
|
|
|
cd ..
|
|
|
```
|
|
|
* Next, in the same terminal, go to the `src` folder:
|
|
|
```
|
|
|
cd src
|
|
|
```
|
|
|
* Create a `build` folder in `src`:
|
|
|
```
|
|
|
mkdir build
|
|
|
```
|
|
|
* Go into this folder:
|
|
|
```
|
|
|
cd build
|
|
|
```
|
|
|
* Run CMake (if an error occurs at this stage, it usually means that you forgot to run `envs\windows.cmd` or you installed the programs at locations on your hard drive other than those recommended in this wiki):
|
|
|
```
|
|
|
cmake ..
|
|
|
```
|
|
|
* Start the compilation (with 4 parallel processes):
|
|
|
```
|
|
|
make
|
|
|
```
|
|
|
* Run the program:
|
|
|
```
|
|
|
solver.exe ..\simulation.json
|
|
|
```
|
|
|
* Open Paraview from the start menu and open the `.vtp` files that have been created by the solver.
|
|
|
|
|
|
You can also build the OpenMP and MPI examples from the `examples` folder using the same method:
|
|
|
```
|
|
|
cd examples\openmp
|
|
|
mkdir build
|
|
|
cd build
|
|
|
cmake .. && make
|
|
|
set OMP_NUM_THREADS=4
|
|
|
omp_hello.exe
|
|
|
```
|
|
|
|
|
|
```
|
|
|
cd examples\mpi
|
|
|
mkdir build
|
|
|
cd build
|
|
|
cmake .. && make
|
|
|
mpiexec -np 4 mpi_hello.exe
|
|
|
```
|
|
|
|
|
|
|
|
|
## CECI clusters / Linux / macOS
|
|
|
|
|
|
* Clone the repository:
|
|
|
```
|
|
|
git clone git@gitlab.uliege.be:rboman/math0471.git
|
|
|
```
|
|
|
* Go into the project folder:
|
|
|
```
|
|
|
cd math0471
|
|
|
```
|
|
|
* Build the source code:
|
|
|
```
|
|
|
cd src
|
|
|
mkdir build
|
|
|
cd build
|
|
|
cmake .. && make -j 4
|
|
|
./solver ../simulation.json
|
|
|
```
|
|
|
* Display the results with Paraview
|
|
|
|
|
|
You can also build the OpenMP and MPI examples from the `examples` folder using the same method:
|
|
|
```
|
|
|
cd examples/openmp
|
|
|
mkdir build
|
|
|
cd build
|
|
|
cmake .. && make
|
|
|
export OMP_NUM_THREADS=4
|
|
|
./omp_hello
|
|
|
```
|
|
|
|
|
|
```
|
|
|
cd examples/mpi
|
|
|
mkdir build
|
|
|
cd build
|
|
|
cmake .. && make
|
|
|
mpirun -np 4 ./mpi_hello
|
|
|
```
|
|
|
|
|
|
|
|
|
# "Debug" mode vs "Release" mode
|
|
|
|
|
|
The code is built in "*debug mode*" by default. It means that the compiler makes no optimisations at all. It also enables many runtime checks and makes debugging possible by embedding all the debug symbols (the name of your variables and functions) into the executable.
|
|
|
|
|
|
In debug mode, assertions (`assert()` command) are also enabled so that you can perform many verifications of the input and output of your functions while you code.
|
|
|
|
|
|
You should keep working in this mode as long as you implement your numerical method.
|
|
|
|
|
|
As soon as you want to run a large simulation, you should build your code in "*release mode*", which produces the fastest executable. In this mode, all the assertions are ignored and your code is optimised by the compiler. This is achieved by configuring your code with the following cmake command:
|
|
|
```
|
|
|
cmake -DCMAKE_BUILD_TYPE=Release ..
|
|
|
```
|
|
|
instead of
|
|
|
```
|
|
|
cmake ..
|
|
|
```
|
|
|
which is equivalent to
|
|
|
```
|
|
|
cmake -DCMAKE_BUILD_TYPE=Debug ..
|
|
|
```
|
|
|
|
|
|
# Note about environment scripts
|
|
|
|
|
|
The scripts in the `math0471/envs/` folder add several folders to 3 environment variables so that the system and CMake find the compiler and the libraries correctly:
|
|
|
* `PATH`: this variable should contain the location of the folder of your `g++` compiler, and the shared libraries you use in your program (`libzlib.dll/.so/.dylib`),
|
|
|
* `LIB`: points to the path of the folder containing `zlib.lib` (windows),
|
|
|
* `INCLUDE`: points to the path of the folder containing the `zlib.h` header.
|
|
|
|
|
|
Instead of using these scripts which should be loaded each time you start a new terminal, these 3 variables can be defined in your global user environment once and for all.
|
|
|
|
|
|
This is done by going to "Settings" on Windows, and typing "env" in the search bar. Then choose the appropriate menu ("modify environment variables").
|
|
|
|
|
|
On Linux/macOS, you can add/modify environment variables by editing `~/.bashrc` or `~/.profile`.
|
|
|
|