What is Dot Product? I am doing this Blenderguru tutorial on Making Fire and at some point he is adding the Vector Math node Dot Product to his material. And he says that he does not understand what he is doing but this seems the way how to do it (he is creating the material for a sphere that is used in the particle system).



Now I realise that I have applied this Dot Product for a number of times and to be honest... I also don't know what I am doing. I googled and found some complicated math about scalar products and it is too long ago for me that I did that kind of stuff on university. Can someone explain in "noob language" what Dot Product does in Blender?
Let's start with some definitions:

Vector: A list of values that are all contained under the same "roof" so to speak. For instance, the location of an object in 3D space is a vector of 3 values (the $X$, $Y$ and $Z$ location of that object).

All Vectors in blender are by definition lists of 3 values, since that's the most common and useful type in a 3D program, but in math a vector can have any number of values.

Dot Product: The dot product of two vectors is the sum of multiplications of each pair of corresponding elements from both vectors. Example:

$$
\begin{aligned}
\vec{V_1} &amp;= (1,2,5)\\
\vec{V_2} &amp;= (2,1,3)\\
\vec{V_1} \cdot \vec{V_2} &amp;= {V_{1}}_{x}{V_{2}}_{x}+{V_{1}}_{y}{V_{2}}_{y} +{V_{1}}_{z}{V_{2}}_{z}\\
               &amp;= 1\cdot2+2\cdot1+5\cdot 3\\
               &amp;= 2 + 2 + 15 = 19
\end{aligned}
$$

The particle velocity example:
In your original question, we see a dot product of the particle velocity with itself. The velocity is an XYZ vector since it has components in all 3 axes. 

In a smoke or fire simulation, some particles are going right ($+X$), some left ($-X$), some forward ($+Y$), some backward ($-Y$), but almost all are going up ($+Z$). The velocity data reflects this. If a particle is going straight up, its velocity will be, for instance, $(0,0,1)$. If it's going left, forward and up, its velocity can be something like $(-1,1,1)$.

When you calculate a dot product of the velocity with itself, you cancel out the negative values (negative values multiplied with themselves become positive), so this is a quick way to convert the velocity gradient over all particles from a 3D XYZ gradient to a mostly 2D gradient along the Z axis.



And now the velocity's dot product with itself:


Another Example: Parametric Geometry Input Node:



The Cycles Input --> Geometry node's Parametric option that's used here, generates a Vector (RGB) value for each point on the object's surface (image above). Each color channel's at each point has a value between 0 and 1. 

If you calculate the sum of each point's RGB values ($R+G+B$), you'll get a single (scalar) value (top image in the figure below) that ranges between 0 (R=0,G=0,B=0) and 3 (R=1,G=1,B=1). 

This is the same as the dot product of each RGB value and a Vector of $(1,1,1)$ (2nd Image in the figure below).



And eventually, if you calculate the dot product of the parametric RGB with itself, you essentially multiply each color with itself ($RR + BB + GG$) in each surface point (3rd Image in the figure above).

In this case it darkens the image significantly, because any value below 1 that's multiplied with itself produced a smaller number/value.