Programming on parallel architectures or on multicores machines is becoming a necessity nowadays that computation capability is growing through the addition of processors or/and cores. I always refused in the past to really work on these topics, because my souls has been sold to “the physics” of the processes and not to computation intricacies. I saw young people spend their youngness on experimental computer architectures that never became mainstream. The progress was vehement and impressive and cancelled most of those efforts of who, not being computer scientists, also lost their own identity as hydrologists or environmental scientists.
With the years, standard parallelization tools sprout out as OpenMP and MPI (for C/C++ and FORTRAN) that entered in the common baggage of modellers.
Since my idiosyncrasies with parallel computing what I looked for was actually to use languages that implement natively the idea of parallell, i.e. multithread languages, like Java, Go, C#, Scala (for a list, look for instance here). At the same time my attention was attracted by skeletons (see skeletal Parallelism here) or high level structured parallel programming enablers, i.e. infrastructure that, at the price of some performance loss, offer a simplified scheme for parallelism.
My very first approach, more than ten years ago, was with the Assist scheme promoted by Marco Vanneschi and his group in Pisa. That approach failed because the project that would intended to finance got through but we were warned not to use it (not because Assist was bad, but because, parallel computing strategies were pertinent to another project in the Agency that was funding us, and they did not want to have something that could potentially disturbing it).
Finally, recently, along courses and resorts, I came back to it to see how Assist story has grown. I googled and I had the kind answers of Professor Marco Danelutto (GS) of the Parallel Programming Models group at the University of Pisa (Italy).
Actually I was asking him about one of the new creatures, Muskel, which was supposed (by me) to be a modern implementation in Java of their ideas. He, however, told me that Muskel was obsolete, but there was the new work of one of his Master student who just finished a new effort that could have been defined Muskel2 and was pretty integrated with Java 8.
The student is Christian Simonelli, his thesis is here. The infrastructure developed is on GitHub: https://github.com/chrysimo/muskel2/ . The wiki is here.
So, after all, you have something to investigate and to learn from.