- Sign-in to Github (i.e., create an account)
- Ask for invitation to BadiaLab Github organization. How? Write an e-mail either to
alberto.martin@monash.eduorsantiago.badia@monash.eduwith your Github user. - Generate a pair of ssh keys on your local computer, and install the public key in Github. See instructions here for more details.
- Follow the introduction to the Unix Shell tutorial. here (if not familiarized)
- Follow the introduction to version control with Git tutorial here (if not familiarized)
- Install Julia. here
- Introduction to Julia programming language here . Free course, although you have to register before. Also it is a good resource the Julia documentation, but highly advanced! here
- In order to write "good" (e.g., performant, general, abstract, etc.) code with Julia is very important that you familiarize with two main concepts: (1) multiple type dispatching (see here and references therein.). (2) Performance pitfalls caused by the so-called type instability problem (see here and here). The "performance tips" page on the Julia documentation is also very useful and well worths a detailed read and incorporation of the strategies there to your coding. Understanding these two concepts will help you a lot, among others, in determining when it is needed/convenient from the performance POV to annotate function arguments with their types (and type parameters, if any).
- Set up a development workflow (coding, testing, debugging, etc.) for Julia using Visual Studio Code. here. VERY IMPORTANT: Install
Revise.jlJulia package early so that you can re-compile code dynamically while developing, without the need to close and re-open the Julia REPL. See here for instructions needed for installing packages. - Clean scientific software workshop https://github.com/JuliaDynamics/GoodScientificCodeWorkshop
The script jill.py available on their GitHub repos here can help in automatically updating Julia by a single line of command on the terminal. The only thing we need to do after installing the jill.py package (using the instructions given on the jill.py GitHub page) is to check the version of Julia we would like to install from the Julia Downloads section here (usually either the LTS release or the current stable release.), and then run (taking the example of version 1.6.5 of Julia)
$ jill install 1.6.5At the the time of writing, the other commands mentioned on the jill.py GitHub page (especially $ jill install, $ jill install 1.6 (need a specific version like 1.6.5, like the command above which works!)) don't work.
The script keeps the earlier versions of Julia present on the machine.
- Ern & Guermond book. here. PDF available with Monash credentials.
- Santi's Lecture notes on Finite Element methods. MTH-4321, MTH-5321
- Gentle introduction to FEM Lecture notes here. Chapters 1-5.
- Claes Johnson book on Finite Elements. here
- Imperial College FEM course. Available here
Use the code available at the following repository: https://github.com/BadiaLab/BibHandler.jl
(only when you need it)
- Apply for an account. How? Follow the instructions here. In step number 3., you have to join the
pMona0083project. - Follow the instructions here
- Remote extension for VSCode (https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh) for interactive code development on a cluster at Monash. When you do not have not enough computational resources your my local machine, even for development.The Julia REPL integrated with VSCode also runs remotely with remote resources. The only caveat is that there is a time limit on the login node for commands (around 30 mins), it might be nice to integrate the REPL with an interactive SLURM job
- We have a LaTeX template here that you can use to write your articles/reports. The template uses the
biblatexpackage, and is to be compiled withlualatex+biber, - We highly recommend to use VSCode with the Latex Workshop extension to edit tex source files.
- We strongly encourage you to keep some research diary or notes about meetings, discussions, etc. LaTeX is probably too much for these purposes. One nice solution is to write the notes in markdown using
Markdown+Mathpackage inVSCodefor math. Click here for an example.
- We recommend DrWatson.jl for systematically managing the numerical simulations, storing and sharing the results, etc. Please refer to DrWatson work flow tutorial as a crash course and this Gridap tutorial as an introduction to using DrWatson in Gridap.
- Pluto.jl is an interactive tool for exploring, analysing, and explaining simulation results. Please refer to a Pluto example for Stokes equation provided by Eric Neiva and Francesc Verdugo.
- Makie.jl is a data visualization ecosystem with high performance and extensibility. Eric Neiva has provided a script to generate interactive plots for the purpose of comparing modal basis and Lagrangian bases using Makie.jl.
- AutoExperimentsProjectTemplate.jl contains a Julia project template that illustrates an integrated workflow among DrWatson.jl and Pluto.jl. The idea is to adapt this template workflow to the particular needs of your own projects.
ScaLAPACK is a library of high-performance linear algebra routines for parallel distributed memory machines.
On Gadi, ScaLAPACK is precompiled and included in Intel Math Kernel Library (intel-mkl) module, e.g., /apps/intel-tools/intel-mkl/2025.0.1/lib/libmkl_scalapack_ilp64.so. However, the library is not dynamically linked to its dependencies, such as lapack and blas.
[wl0925@gadi-login-04 lib]$ ldd libmkl_scalapack_ilp64.so
statically linkedWe can alternatively compile a new ScaLAPACK library from source code. The following steps are required on Gadi:
- Load the required modules on Gadi
module purge
module load intel-compiler-llvm/2025.0.4
module load intel-mpi/2021.14.1
module load intel-mkl/2025.0.1- Download and unzip the ScaLAPACK source code
wget https://github.com/Reference-ScaLAPACK/scalapack/archive/v2.2.2.tar.gz
tar -xvf v2.2.2.tar.gz- Compile ScaLAPACK
cd scalapack-2.2.2
cmake . -DBUILD_SHARED_LIBS=onIf we call make directly, we will get the following error:
[wl0925@gadi-login-04 scalapack-2.2.2]$ make
...
[ 1%] Building C object CMakeFiles/scalapack.dir/BLACS/SRC/igsum2d_.c.o
scalapack-2.2.2/BLACS/SRC/igsum2d_.c:154:7: error: call to undeclared function 'BI_imvcopy'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
154 | BI_imvcopy(Mpval(m), Mpval(n), A, tlda, bp->Buff);
| ^
...
4 errors generated.
...This error is caused by the standard C compiler in intel-compiler-llvm module. We use an older version of the compiler by adding the flag -std=c89 in the CMakeCache.txt file.
//Flags used by the C compiler during all build types.
CMAKE_C_FLAGS:STRING=-std=c89- Check the compiled files
[wl0925@gadi-login-04 scalapack-2.2.2]$ ldd lib/libscalapack.so
linux-vdso.so.1 (0x00007fff2b7ba000)
libmkl_intel_lp64.so.2 => /apps/intel-tools/intel-mkl/2025.0.1/lib/libmkl_intel_lp64.so.2 (0x00007fe6e248c000)
...
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fe6ceeba000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe6e3bf0000)Now libscalapack.so is dynmically linked to its dependencies and can be used in Julia.