I tried to get my PhD on circuit simulation but ("sadly") ended up getting self employed .
However, doing "basic" circuits simulation isn't that complicated. I ended up doing a simulation core using eigen3 and boost libs. Those have more or less everything needed.
The real problem is the lack of common model standards.
For example, just the basic transistor models are standardized and you find convergence tricks for specific simulator implementations all over the place.
If you want, I can give you input on some dead-ends I found in my endeavours...
73