Hello Alexandre,
I think the problem is the line:
which sets up a domain with length = 4 (due to the 4 processors used).
Then you initialize the temperature field to the value -y. Therefore, the top initial top temperature, considering the origin shifting of (-0.5,-0.5), will be -3.5.
When the simulation starts, it correctly sets the BCs to -0.5 on top, thus leading to a sort of heating on top compared to the initial condition.
If you avoid the line size (npe()), the problem looks reasonable.
Or maybe you can directly use dirichlet (y) and dirichlet (-y) for the temperature boundary conditions.
Hope this helps.
Cheers,
Edoardo