Advice for students

I 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. Most students do not demonstrate any credible knowledge or background that is needed for such work. 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, C/C++ and Chapel. 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.
  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.

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 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, you should be able to satisfy 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. nek5000: A spectral element code for incompressible Navier-Stokes equations in fortran
  6. Gmsh: A mesh generation tool
  7. Salome: An open-source software that provides a generic platform for Pre- and Post-Processing for numerical simulation.