Exemplo n.º 1
0
def build_X_vector_U3(N_value, L_value, xi_value):
    import numpy as np
    from energy_basis_elements_I import energy_basis_I
    #
    n_vec = np.arange(L_value, N_value + 1, 2)
    #
    x_vec = []
    #
    for n in n_vec: 
        x_vec.append(energy_basis_I(N_value, n, L_value, xi_value))
    #
    return np.array(x_vec)/N_value
print "N = ", Nval, ", L = ", Lval, ", xi = ", xi
## Read eigenvalues (absolute eigenvalues) and eigenvectors
Eigenvalues = read_energy_data("../../test/eigval_"+basis+"_N"+str(Nval)+"_L"+str(Lval)+".dat")
Eigenstates = read_eigenstates("../../test/eigvec_"+basis+"_N"+str(Nval)+"_L"+str(Lval)+".dat")
E0 = Eigenvalues[0]
Eigenvalues = Eigenvalues - E0 # Escitation energies
# Computing survival probability
print "Computing survival probability ... "
#
sp=np.zeros((time_grid.shape[0],len(basis_states_indexes)+1),order="F") # +1 for the abscyssa values
#
for index, index_state in enumerate(basis_states_indexes):
    if (index == -1):
        # Find basis state close to separatrix
        if basis is "u3":
            basisen = energy_basis_I(Nval,np.arange(0,Nval+1,2), Lval, xi)
        else:
            basisen = energy_basis_II(Nval,np.arange(0,Nval+1,2), Lval, xi)
        #
        ecrit = (1-5*xi)**2/(16*xi)
        # Note that basisen is not normalized
        diffen = (basisen-E0)/Nval-ecrit
        ##
        crit_index = np.abs(diffen).argmin() + 1
        if (crit_index <=1):
            crit_index = np.abs(diffen[2:]).argmin()+3
        print "crit_index = ", crit_index 
        sp[:,index_state] = survival_probability_basis_states(Eigenvalues,Eigenstates,crit_index,crit_index,time_grid=time_grid)[0] # Last column
    else:
        sp[:,index+1] = survival_probability_basis_states(Eigenvalues,Eigenstates,index_state,index_state,time_grid=time_grid)[0] # index + 1 to leave space for time abscyssa
##