The torus network topology is a graph that consists of a mesh and additionally wrap-around edges. A torus topology implies that each switch is being connected in multiple directions to other switches. 3D torus means that the communication takes places in 6 different directions: X+, X-, Y+, Y-, Z+, Z-. Each switch junction is connected to 6 other switches, and the graph of the connections resembles a tri-dimensional matrix. In the case of 2D torus there are 4 connections, and in cases of higher dimensions (4D, 5D, 6D) there will be more connections between the switch junctions.
The torus configuration makes it easier to support future system extensions, and it is a good fit for applications where the majority of the communications are local and do not spread across the entire system (for example LQCD). On the other hand, Torus is an oversubscribed fabric, and the worse case latency between two arbitrary nodes is much higher compared to a Fat Tree topology.
In general, for low-mid size systems, fat-tree is my preferred option. Even for large node count, I would go with fat tree, but this is where economics plays its role and for the right applications torus can be the better, more cost effective option.