def build_sys(u_over_j, j_tunn, trap_freq, drive_freq, basis_states, floquet_radius, gamma): drive_y = drive_coefficients.y(gamma) drive_freq = drive_coefficients.crit_drive_freq(drive_y, trap_freq) m_list = np.arange(-floquet_radius, floquet_radius + 1) raw_int = fock_basis.onsite_interactions(basis_states) raw_hop = -j_tunn * fock_basis.nearest_neighbor_hopping(basis_states) raw_jsq_onsite = fock_basis.onsite_offset( fock_basis.jsq_offset(basis_states.shape[1]), basis_states) scale_idxs = np.abs( np.arange((2 * floquet_radius + 1))[np.newaxis, :] - np.arange((2 * floquet_radius + 1))[:, np.newaxis]) small_xi_blocks = drive_coefficients.n_small_xis(2 * floquet_radius + 1, drive_y)[scale_idxs] big_xi_blocks = drive_coefficients.n_big_xis(2 * floquet_radius + 1, drive_y)[scale_idxs] jsq_prescale = tpf * (np.square(trap_freq * small_xi_blocks) - np.square(drive_freq * big_xi_blocks)) chi = drive_coefficients.all_chis(drive_y) chi_blocks = (np.diag(np.full(2 * floquet_radius + 1, chi[0])) + np.diag(np.full(2 * floquet_radius, chi[1]), k=1) + np.diag(np.full(2 * floquet_radius, chi[1]), k=-1) + np.diag(np.full(2 * floquet_radius - 1, chi[2]), k=2) + np.diag(np.full(2 * floquet_radius - 1, chi[2]), k=-2)) floquet_interactions = 0.5 * u_over_j * j_tunn * np.kron( chi_blocks, raw_int) floquet_diag = np.kron(np.diag(m_list), np.diag(np.full(basis_states.shape[0], drive_freq))) floquet_tunneling = np.kron(chi_blocks, raw_hop) floquet_offsets = np.kron(jsq_prescale, raw_jsq_onsite) return floquet_interactions + floquet_diag + floquet_tunneling + floquet_offsets
def build_sys(u_over_j, drive_over_j, k_over_drive, basis_states, floquet_radius): m_list = np.arange(-floquet_radius, floquet_radius+1) raw_int = fock_basis.onsite_interactions(basis_states) raw_hop = -fock_basis.nearest_neighbor_hopping(basis_states) floquet_interactions = 0.5*u_over_j * np.kron(np.diag(np.ones(2*floquet_radius+1)), raw_int) floquet_diag = np.kron(np.diag(m_list), np.diag(np.full(basis_states.shape[0], drive_over_j))) tun_blocks = scaling_blocks(floquet_radius, k_over_drive, s_matrix(basis_states, raw_hop), raw_hop) return floquet_interactions + floquet_diag + tun_blocks
# In[10]: fock_basis.jsq_offset(5) # In[11]: # Try to reproduce arXiv:cond-mat/0601020 # In[12]: n_scan = 65 n_sites = 5 j_sc = 20 u_sc = np.linspace(0.0, 10.0, n_scan, endpoint=True) basis = fock_basis.unit_filling(n_sites).copy() hopping_mi = -j_sc * fock_basis.nearest_neighbor_hopping(basis) unscaled_interactions = fock_basis.onsite_interactions(basis) print(basis.shape, basis.shape[0] * 9) # In[13]: get_ipython().run_cell_magic( 'time', '', 'mi_energies = np.empty((n_scan, basis.shape[0]))\nfor idx, this_u_sc in progbar(enumerate(u_sc), every=1, size=n_scan):\n ham = hopping_mi + 0.5 * this_u_sc * j_sc * unscaled_interactions\n mi_energies[idx] = np.linalg.eigvalsh(ham)' ) # In[14]: for idx, this_u_sc in enumerate(u_sc): plt.plot(np.full(basis.shape[0], this_u_sc),
# In[11]: # Try to reproduce arXiv:cond-mat/0601020 # In[12]: n_scan = 65 n_sites = 5 j_sc = 20 u_sc = np.linspace(0.0, 10.0, n_scan, endpoint=True) basis = fock_basis.unit_filling(n_sites).copy() hopping_mi = -j_sc*fock_basis.nearest_neighbor_hopping(basis) unscaled_interactions = fock_basis.onsite_interactions(basis) print(basis.shape, basis.shape[0]*9) # In[13]: get_ipython().run_cell_magic('time', '', 'mi_energies = np.empty((n_scan, basis.shape[0]))\nfor idx, this_u_sc in progbar(enumerate(u_sc), every=1, size=n_scan):\n ham = hopping_mi + 0.5 * this_u_sc * j_sc * unscaled_interactions\n mi_energies[idx] = np.linalg.eigvalsh(ham)') # In[14]: for idx, this_u_sc in enumerate(u_sc):