How to make 3Di models faster?
One of the unique features of 3Di is its fast simulations of 2D models using subgrid technique. In practice, complex and detailed 1D/2D models slow down and computational times become an issue. The question is how to solve this issue, especially for the more complex 1D/2D models? There are various ways to improve the computational time of a simulation. The first ones are steps in the hands of a model specialist. The others are in the hands of our software developers.
WHAT YOU CAN DO YOURSELF?
- The first one is to adapt your schematisation. The smallest detail can force the complete model to reduce the time step. Model elements with small volumes in combination with high discharges (high velocities in combination with small grid sizes) can become critical and force the model to reduce its time step. Instead of a 30 second time step, the time step can be reduced to 1 second. Your model becomes then 30 times slower. In the log files the model specialist can see where and when time step reduction is induced. (Time step reduction can slow down a model by a factor 10 tot 100).
- Another way to speed up computations, is by changing the resolution of your schematisation. Sometimes specific elements are defined with a very high resolution, while one is not interested in processes on that level of detail. By reducing the computational resolution, the computational cost is quadratically less, and also allows for larger time steps. One gains twice.
There are numerical parameter setting which you can tweak to accelerate you model computations. Please refer to the manual, or contact our specialist for further information. - Yet, another way to speed up the calculation time is to use the API. This minimize the administrative tasks during each simulation step as in the interactive interface, various tasks are performed, beside the computational core.
Instead of changing the schematization, we are doing research on various options for improving the computational times of 3Di.
- We are currently investigating if we can change the numerical scheme used by the computational core to solve the equations. 3Di uses a numerical scheme, that forces the time step to be limited by the Courant condition. Due to the non-linear character of certain terms, the time step size needs to be reduced to avoid undesired fluctuations. By using a different numerical technique, we can avoid the time step reduction, with a minimal reduction of accuracy. We think this a promising solution as time step reductions have a major impact on the model performance. By avoiding time step reduction, we can speed up a model by a factor 10, depending on model used.
- Currently, the 3Di development team also works on a back-end refactoring to improve the data management behind the scenes. This will definitely result in faster livesite and headless computations.
- We are also investigating the possibilities for parallelization of the computations. Last year Guus Stelling made already significant progress and we plan to finalize this year with a prototype. Deep in the computational core, a matrix is solved. The time to solve this matrix is related to its size by a quadratic relation and is the most time consuming part of the computation. If the matrix becomes twice as big, the computational time is quadrupled. This time could be reduced by using parallel processors. The problem however is how to solve a matrix, using multiple processors? The solution is to divide the big matrix in various smaller ones, each one solved on a different processor. This is called parallelization and we are currently working on this technique. Thereby, we concentrate on CPU cores and not yet on GPU cores.