Hi Marjan —
No, that's not quite right—it will only use as many cores as are available by default or if you ask it to. For example, if you were using CHPL_TASKS=qthreads on a 4-core system, setting CHPL_RT_NUM_THREADS_PER_LOCALE=2 would cause Chapel to only use 2 cores, leaving 2 free. We don't typically suggest users change this default, but in your case, it would be interesting to see whether or not it reduces interference with the external processes. As I mentioned before, the main downside would be that when Chapel code was running, it would only get to use half the cores. But if the heavy-lifting is in the external code in your case, that might be appropriate. Except that you then say:
The hydrological Model is multi-thread itself.
Oh, that's interesting, and may reduce the value of my experiment above. Specifically, if the hydro model was single-threaded, you could imagine it using one of the unused cores if Chapel left some open. But if hydro wants to use all four cores, Chapel would still be interfering with two of them, which would likely still hurt performance.
I would say that yes they take turns.
This is encouraging, though we don't have a great solution for it today. Specifically, we've talked about having a mechanism for Chapel's threads to be put to sleep before calling into an external routine (or, in this case, the spawnshell()), and then waking them back up after that section was done. But this feature isn't provided today. However, you may be able to approximate it as follows:
After I sent you the previous response with the link to the related issue I was remembering, I re-read it and noted that it had some suggestions that might help as well. Note that these are specific to CHPL_TASKS=qthreads, so if you've switched to CHPL_TASKS=fifo as suggested in your original message, you may want to switch back. Specifically, it suggests that if you set these in your environment:
export QT_AFFINITY=no
export QT_SPINCOUNT=300
then Chapel's interference with your hydro model may be reduced. If that does help, but hurt your Chapel code's performance significantly, this comment had some prototype code that you could call just before and after your spawnShell() call to reduce the interference just for that part of the program. Note, however, that I haven't tried this code to see if it still works, so this is slightly uncharted territory (though territory that Elliot may be able to help with when he's back next week).
I think your / Compute Canada's interpretation of spawnshell is right. Specifically, I think of spawnshell as being like C's system() command or typing a command at your shell's command prompt, where that process can do whatever it wants and Chapel has no real control over it or effect on how it runs. Except that, since the Chapel program is still running, it can have performance interference effects as you're seeing.
Asking an obvious but potentially annoying question: Is the hydro code so big that it would be a lot of effort to translate it into Chapel and avoid the need for mixing two computational models? 
-Brad