It is much harder to converge the system at finite gate voltage, and this is why you use the zero-bias as starting point. However, the way you set up the scan over the gate voltage, it starts at the hardest case, -2 V. What you need is to split the positive and negative voltages, and start with the lowest voltage and climb up.
So, one run with
gate_voltage_list=numpy.linspace(0,2.0,8)*Volt
and another with
gate_voltage_list=numpy.linspace(0,-2.0,8)*Volt
I would also save the converged calculation of each gate voltage, in case you want to compute any other quantity (or increase for instance the k-point sampling) later. Otherwise you will have to recompute the whole thing again. So, add
nlsave('/home/it2/suxxx172/ATKSIMS/nc_files/gatescan_%s.nc' % voltage, device_configuration)
Note how this splits it up by saving in separate NC files, the calculation files can be quite large. But the transmission can go into one file so it's easier to plot the i-v curve.
You should also always have the ".nc" extension on the nlsave file.
The other problem is unclear to me...
Well, before the transmission yes, but you should also add an "update" statement, instead of relying on the transmission to do that for you.
So, add
device_configuration.update()
nlsave('/home/it2/suxxx172/ATKSIMS/nc_files/gatescan_%s.nc' % voltage, device_configuration)
(indented correctly) between the setCalculator() and the transmission. That's all, you don't need to worry about reading the configuration.
The LDOS for zero bias is probably not very informative since most likely the current is zero (well, it is by definition). The point of the LDOS plot is to analyze the current, but you need a finite current for that. It looks from the picture that you need a bit of bias before there will be much current.