Advice for students

I am happy to receive applications from students asking for internships, for thesis guidance and project assistant positions in scientific computing. All of my work involves computations and requires proficiency in working with computers and coding. Here is some advice on what you can do to improve your chances of success in scientific computing.

  1. You need to know some theory. Here is a list of books I recommend.
  2. Learn a programming language really well, e.g., Fortran and C/C++. I would recommend learning all three of these. (Matlab is not a programming language.)
  3. Learn Python, which is great for scripting, data analysis and visualization.
  4. Learn to work on Unix/Linux and the command line. Use a proper text editor like Vi/Vim or Emacs. If you have only worked on Windows, please do not write to me.
  5. Learn to use some visualization tools like gnuplot, Paraview and VisIt. Python also has good support for visualization.
  6. Learn to use a version control system like git.
  7. Learn parallel programming concepts and MPI.
  8. Learn linear algebra libraries like Petsc and/or Trilinos.
  9. Learn Latex. Write your reports/cv/application using Latex. (Video)
  10. Put up your scientific computing project work on github, gitlab or bitbucket.
  11. Take the many online courses being offered these days on scientific computing topics. Do all the assignments and exams and show me what grade you scored in the course.
  12. Finally, send your cv/application in PDF format ONLY.

When you write to me, it is highly desirable if you can show me some proof for all/some of the above in terms of actual code, results and project reports. In your CV, mention all the courses, in person or online, that you have done in Physics, Applied Math, Numerical Methods, Scientific Computing, etc.

To work with me

The above advice is fairly general for anybody wanting to work in scientific computing, numerical solution of PDE, finite element methods, computational fluid dynamics, etc. If you want to work with me, it will help if you are able to satisfy some of the above requirements. In addition, you will have a better chance if you have worked with any of the following.

  1. Deal.II: This is a finite element library written in C++. Work through the tutorials and watch the videos.
  2. PETSc: A suite of data structures and routines for the scalable (parallel) solution of scientific applications modeled by partial differential equations.
  3. Chapel: A parallel programming language which is great for solving PDEs.
  4. FEniCS: This is an automated FEM system in python and C++
  5. Gmsh: A mesh generation tool
  6. Salome: An open-source software that provides a generic platform for Pre- and Post-Processing for numerical simulation.