I see now, you're modifying the propagating modes, but not touching the stabilized ones. Solvers, in turn, only use stabilized modes. In order for everything to work the way you want, you need to modify the stabilized modes in the same way. This means that you need to multiply the first entries in StabilizedModes.vecs and StabilizedModes.vecslambdainv by the same phase factors you've used for the propagating modes.

Hope that helps,

Anton

On Mon, Jan 25, 2016, 13:50 Fahriye Nur Gursoy <fahriyetortop@sabanciuniv.edu> wrote:

Hello Anton,I checked my code, I think the problem is still about the modes of the leads.I can modify the phase of the modes in the leads. When I call the modes (using lead.info), I obtain modified wave functions but the scattering matrix is the same. I guess,the scattering matrix is still calculated with original wave functions.I posted my code below.Thank youNurimport sys as systemCommandsimport kwantimport numpy as npclass WavefunctionLead(kwant.builder.InfiniteSystem):def __init__(self, lead):self.__dict__ = lead.__dict__def modes(self, energy, args=()):prop_modes_fix, stab_modes_fix = \super(WavefunctionLead, self).modes(energy=0.4, args=args)size_fix = prop_modes_fix.wave_functions.shape[1]fix = []for i in range(size_fix):fix0 = prop_modes_fix.wave_functions[0][i]fix.append(fix0)prop_modes, stab_modes = \super(WavefunctionLead, self).modes(energy=energy, args=args)wf_size = prop_modes.wave_functions.shape[0] #number of orbitalnum_modes = prop_modes.wave_functions.shape[1]#number of modes (2*num_modes)## change of the phasefor i in range(wf_size):for j in range(num_modes):f = fix[j]prop_modes.wave_functions[i,j]=prop_modes.wave_functions[i,j]*(prop_modes.wave_functions[i,j]/f)if prop_modes.wave_functions[i,j].real >= 0 :prop_modes.wave_functions[i,j] = -1 * prop_modes.wave_functions[i,j]else :continuereturn prop_modes, stab_modesdef make_system(a, t, L, f, r, rcc, kso, w):lat = kwant.lattice.square(a)sys = kwant.Builder()def myShape(pos):(x, y) = posif (L/2-f<= y < L/2+f) and (0<=x <2):return Trueelif (L/2-f<= y < L/2+f) and (L-1<= x< L+1):return Trueelif ( 2 <= x < L-1 ) and ( 0 <= y < L-1) and rcc ** 2 <(x ** 2 + y ** 2) and (3*r ** 2 < ((x-(L/2)) ** 2 + (y-(L/2)) ** 2)):return Truedef onsite(site1, tm):## Electric field in x directionx1 =site1.pos[0]y1 = site1.pos[1]return 4*t + np.sin(w*tm)*w*x1*ksosys[lat.shape(myShape, (0, L/2))] = onsitesys[kwant.builder.HoppingKind((1, 0), lat, lat)] = -tsys[kwant.builder.HoppingKind((0, 1), lat, lat)] = -t##leads##lead0 = kwant.Builder(kwant.TranslationalSymmetry((-a, 0)))def lead_shape_0(pos):(x, y) = posreturn ( L/2-f <= y < L/2+f)lead0[lat.shape(lead_shape_0, (0, L/2))] = 4*tlead0[kwant.builder.HoppingKind((1, 0), lat, lat)] = -tlead0[kwant.builder.HoppingKind((0, 1), lat, lat)] = -tlead1 = kwant.Builder(kwant.TranslationalSymmetry((a, 0)))def lead_shape_1(pos):(x, y) = posreturn ( L/2-f <= y < L/2+f)lead1[lat.shape(lead_shape_1, (0, L/2))] = 4*tlead1[kwant.builder.HoppingKind((1, 0), lat, lat)] = -tlead1[kwant.builder.HoppingKind((0, 1), lat, lat)] = -tsys.attach_lead(lead0)sys.attach_lead(lead1)fsys = sys.finalized()###fsys.leads = [WavefunctionLead(lead) for lead in fsys.leads]###return fsysdef main():## w = frequency## kso = Rashba spin orbit couplingsys = make_system(a=1, t=1, L=50, f=2, r=6, rcc=5, kso = 0.3/50, w = 0.001)energies=[0.00001 * i+0.40 for i in xrange(300)]tm =1000 #time parameterfor energy in energies:S = kwant.smatrix(sys, energy, args=[tm])mode = S.lead_infowf =mode[0].wave_functionsprint wfif __name__ == '__main__':main()On 24 January 2016 at 22:52, Anton Akhmerov <anton.akhmerov+kd@gmail.com> wrote:Hi Nur,

I don't think you need to do anything inside the scattering region to

modify the phase of the scattering matrix. Are you sure this is the

problem?

Best,

Anton

On Sun, Jan 24, 2016 at 6:04 PM, Fahriye Nur Gursoy

<fahriyetortop@sabanciuniv.edu> wrote:

> Hello all,

>

> My question is about modifying the phase of wave functions. I want to

> calculate derivative of scattering matrix with respect to energy and they

> come out to be discontinuous because of the phases.

>

> To remedy this I need to modify these phases. Following the suggestion of

> Anton Akhmerov in this mail group I understood how to modify the phase of

> modes in the leads.

>

> But I also need to change the phase of wave functions in the scattering

> region to obtain continuous scattering matrices at different energies.

>

> I wonder if there is an another way to call wave functions in the scattering

> region (apart from kwant.solvers.default.wave_function) or a method to

> modify these phases.

>

> Thank you in advance.

>

> Nur