I see that used in many books but none of them defines what this actually means, since $\nabla$ is typically seen as a vector, but plain vector-vector multiplication does not exist.
For instance, in the identity:
$\nabla \times \nabla \times A = \nabla \nabla \cdot A - \nabla ^ 2 A$
Or in Green's dyadic function:
$\bar{G}(\mathbf{r},\mathbf{r}') = \left[\bar{I} + \frac{\nabla \nabla}{k_0^2}\right] \frac{e^{i k_0 |\mathbf{r} - \mathbf{r}'|}}{4 \pi |\mathbf{r} - \mathbf{r}'|}$
As this reminded me of the ever confusion for many years by the different notations, I would like to share my notes and hope to be useful.
If we take the double gradients, i.e., the gradient of the gradient, we obtain the so-called Hessian matrix, here donated by $\nabla\!\nabla$ in stead of $\nabla^2$. However, not only a few mathematicians like to use $\nabla^2$, which becomes to bewilder many engineers due to the fact that $\nabla^2$ stands for the Laplacian were already deeply ingrained in the education. Especially, when some writers do not differentiate the scalar notations with vector/matrix ones. So to avoid any confusion, the Laplacian is donated by $\nabla^2=\nabla\cdot\nabla$, the divergent of the gradient and is a scalar, while the Hessian Matrix is the gradient of the gradient, therefore explicitly expressed as $\nabla\!\nabla$. From the word-width point of view, $\nabla^2$ can save spaces for $\nabla\cdot\nabla$, but not for $\nabla\!\nabla$. Really, really wish that a dedicated campaign for unified notation can be populated to the students! Then life would be much easier.
For instance, if we take the gradient of \begin{align} \nabla^\mathrm{T}f(\mathbf x)=(\mathbf{A}^T+\mathbf{A})\mathbf{x}, \end{align} it then arrives at \begin{align} \nabla\!\nabla f(\mathbf x)&=\nabla\!\nabla\left(\mathbf x^T\mathbf{A}\mathbf x\right)\\ &=\nabla\left[(\mathbf{A}^T+\mathbf{A})\mathbf{x}\right]\\ &=\left(\mathbf{A}^T+\mathbf{A}\right)^T\\ &=\mathbf{A}+\mathbf{A}^T. \end{align}