Your code snippet results in the right hand side vector being initialized with all zeros, hence the result vector is all zeros as well. While you state that you've tried with an vector of all 20s, maybe this value hasn't been passed properly?
Also, I recommend to use separate vectors for the right hand side vector and the solution vector, because they have different meaning (in this context: the right hand side is a heat source vector, the solution vector is a temperature distribution).
In general, I recommend to first verify that the system is set up correctly on the CPU (e.g. using the Eigen types and Eigen solvers). Then, once everything is working properly there, move the data over to ViennaCL types, using the default CPU backend of ViennaCL. Only when everything is working there, enable the CUDA backend of ViennaCL. With such a step-by-step approach, it is easier to isolate failure points. Trying to do everything at once makes it hard to reason about the failure cause.