2
$\begingroup$

I have a background in Computational Mechanics but my knowledge remains very user-oriented. What I mean by that is that I have a fairely good knowledge about how to use a commercial engineering simulation software such as Ansys. I also have good understanding on the mechanism on how a simulation works: we have a physical penomenon such as fluid flow then using conservation laws (mechanical principles) we model it to PDEs then these PDEs are solved numerically using different schemes such as FEM or FVM then the results are visualized and so on and so forth.

I have never been familiar with the whole process of developing a scientific tool from scratch myself. I have seen different tutorials online on how to solve a simple beam in deflection using a couple of lines of python and that doesn't interest me. I have also seen lots of books on computational science by Prof. Lang and etc. those kind of theoretical ressources don't interest me either.

What I am looking for is a more pratical hands on tutorial where I can learn about the different steps I need to consider for developing a scientific computing standalone tool either for solid mechanics or fluid dynamics or heat transfer with solid step by step implementation discussion.

Let's say I would like to continue my career as a sceintific computing code developer. What are the sources or online courses you have to suggest (please don't say "go take courses on computer science").

I have been looking all over internet using key words such as "scientific computing code development" and all I find is either courses about FEM or Numerical Analysis with some very general simple codes implemented in matlab or python.

I have a PhD in Computational Mechanics and I am proficient in Python and good in C++.

PS : Strangely enough the tag "computational-science" which is the name of this community does not exist among the suggested tags by the page!

$\endgroup$
5
  • 5
    $\begingroup$ About your PS: if the whole site is about computational science, in my view it is not a good idea to have a tag with the same name; otherwise we'd have to tag all questions with it... $\endgroup$ Jun 17 at 17:05
  • $\begingroup$ @FedericoPoloni Fair enough $\endgroup$
    – Dude
    Jun 17 at 18:58
  • 1
    $\begingroup$ I think PETSc has summer schools, online courses, etc. On top of that organizations like XSEDE in the US, ComputeCanada, Sharcnet, SciNet, Westgrid, etc. in Canada, PRACE in the EU have amazing online resources going over many topics, Scientific Software development being one of them. I am in Canada, so I am more familiar with Canadian resources, but afaik, XSEDE and PRACE share the online resources with everyone. You don't have to be a citizen/member citizen of those zones. $\endgroup$ Jun 17 at 22:19
  • $\begingroup$ @AbdullahAliSivas Thanks I'll check out the ressources you mentioned. $\endgroup$
    – Dude
    Jun 18 at 7:20
  • $\begingroup$ My personal experience is that even if you are an expert coder and know all the fundamentals of computing science and numerical methods (in addition to being an expert in computational mechanics) you will not be considered for any software writing position unless you know the people involved in those few places where people develop for a living. It's easy to pick up what you need for any task, but you can develop good judgement only after decades of work in developing software. $\endgroup$ Jun 18 at 19:37
6
$\begingroup$

If you're interested in the process of developing scientific software for the simulation of continua based on the finite element method, you might be interested in the deal.II library (https://www.dealii.org/) and its extensive suite of tutorial programs that walk you step-by-step through how these simulators are developed (https://dealii.org/developer/doxygen/deal.II/Tutorial.html). There are also a large series of video lectures that go through this process (https://www.math.colostate.edu/~bangerth/videos.html).

Disclaimer: I'm one of the developers of deal.II, and the author of the video lectures.

$\endgroup$
2
  • $\begingroup$ Seems to be a very comprehensive ressource, thanks. $\endgroup$
    – Dude
    Jun 18 at 7:19
  • 1
    $\begingroup$ Can confirm, I learned a ton about scientific software development by first using and then contributing to deal.II for a while, although what I did was quite small. Wolfgang & company are an example to us all about how to manage a large software project. $\endgroup$ Jun 18 at 17:57
1
$\begingroup$

After all, a scientific computing project is a code development project, in which the domain expertise comes from, well, scientific computing. You'll need:

  • Beforehand, some sort of requirements analysis. What are the goals, how many people will contribute, are there any deadlines, etc.

  • Some kind of project management : how will you develop, e.g. in a waterfall or agile style, what are release frequencies, ow is the coopoeration going to work, etc.? This is particularly important in a project with more contributors. Once you're alone and just begin to code it might look as overhead, but even then it can help you to work disciplined towards your goals.

  • A review of available tools and libraries that already attack your problem or contribute as helpers (e.g. BLAS for linear algebra). And maybe also a story, in which way your code is going to improve the avalaible stuff ... but frankly, the joy of coding and by this learning things thoroughly was most of the times sufficient for me.

  • A choice of the toolchain, including the code language and the development environment (IDE). And of course, a bit of proficiency in these things. (As you seemed to be interested in deal.II, I'll give examples for C++ below)

  • A code repository, such as git, and likely also an online store such as github, bitbucket, etc.

  • A building tool, e.g. CMake (--so that many users can apply your tool in the end).

  • Documentation of your code, both outside the code to give a reference and also within the code to explain tricky parts of your algorithms. You can use, e.g., doxygen for that.

  • A suitable user interface. If you're coding a library, this means eposure of the required functionality and intutive function names. If it's more a scientific application, you'll need a way to pass parameters, e.g. via command-line arguments, files (txt, json, xml) or via GUI.

  • Unit testing, e.g. via the library catch2.

  • Other software quality measures: code review, pair programming, static code analysis by specialized tools, runtime analysis, etc.

As mentioned, you can read up any of these components in the literature on software development. Have fun!

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.