Overview
I extended DualSPHysics, an open-source smoothed particle hydrodynamics (SPH) solver, in C++/CUDA. The project introduced surface-tension and aerodynamic-drag effects for GPU-accelerated automotive rainwater simulations.
The work formed part of a collaboration between SAIC Volkswagen and Northwestern Polytechnical University. I led a team of four, working on model implementation and code structure, with academic supervision from Prof. Zhe Ji.
Engineering problem
Rainwater can travel along a vehicle surface and enter areas where it causes an unwanted experience. One example is opening a wet trunk after rainfall. Predicting this motion helps engineers assess water-management behavior during design.

Water trajectories over the vehicle body.
Aerodynamic drag
The air-drag extension enabled one-way air–water coupling. The implementation calculates particle drag using the exposed area and the local flow information. The algorithm includes a treatment of occluded area when estimating the area exposed to the surrounding air.

Particle drag calculation, including exposed area and occlusion.
The comparisons below examine the effect of including air drag in a falling droplet and an injected water jet.

Droplet velocity and terminal-velocity comparison.

Water-jet trajectories with and without air drag.
Surface tension and wetting
I also implemented surface-tension effects and calibrated contact angles using a droplet-on-plate case. These tests check the wetting behavior before applying the model to a vehicle surface.
| 60° contact angle | 90° contact angle | 120° contact angle |
|---|---|---|
![]() | ![]() | ![]() |

Water movement on the trunk surface during opening.
Methods
DualSPHysics, C++, CUDA, SPH, surface tension, wetting, and particle drag. The figures document the implementation and its test cases.


