def get_transop(loc, pos): # get dipole transition operator in local axis dop = edrixs.get_trans_oper('t2gp32') dop_g = np.zeros((2, 3, 6, 4), dtype=np.complex) # transform to golobal axis for i in range(2): for j in range(3): for k in range(3): dop_g[i, j] += loc[i, j, k] * dop[k] # RIXS settings thin, thout, phi = 30 / 180.0 * np.pi, 60 / 180.0 * np.pi, 0.0 ein, eout = 11215.0, 11215.0 # eV # Wavevector kin, kout = edrixs.get_wavevector_rixs(thin, thout, phi, ein, eout) # polarization pi-pi and pi-sigma for key, alpha, beta in [('pp', 0, 0), ('ps', 0, np.pi / 2.0)]: ei, ef = edrixs.dipole_polvec_rixs(thin, thout, phi, alpha, beta) T_i = np.zeros((2, 6, 4), dtype=np.complex) T_f = np.zeros((2, 4, 6), dtype=np.complex) for i in range(2): for j in range(3): T_i[i] += dop_g[i, j] * ei[j] T_f[i] += np.conj(np.transpose(dop_g[i, j] * ef[j])) # multiply phase factor T_i[i] = T_i[i] * np.exp(+1j * np.dot(pos[i], kin)) T_f[i] = T_f[i] * np.exp(-1j * np.dot(pos[i], kout)) transop_rixs_i = np.zeros((20, 20), dtype=np.complex) transop_rixs_f = np.zeros((20, 20), dtype=np.complex) for i in range(2): off1, off2 = i * 6, 12 + i * 4 transop_rixs_i[off1:off1 + 6, off2:off2 + 4] = T_i[i] transop_rixs_f[off2:off2 + 4, off1:off1 + 6] = T_f[i] # write to file edrixs.write_emat(transop_rixs_i, "rixs_" + key + "/transop_rixs_i.in") edrixs.write_emat(transop_rixs_f, "rixs_" + key + "/transop_rixs_f.in") # For XAS, use isotropic polarization ei = np.array([1, 1, 1]) / np.sqrt(3.0) T_i = np.zeros((2, 6, 4), dtype=np.complex) for i in range(2): for j in range(3): T_i[i] += dop_g[i, j] * ei[j] transop_xas = np.zeros((20, 20), dtype=np.complex128) for i in range(2): off1, off2 = i * 6, 12 + i * 4 transop_xas[off1:off1 + 6, off2:off2 + 4] = T_i[i] edrixs.write_emat(transop_xas, "xas/transop_xas.in")
def get_transop(loc, pos): dop = edrixs.get_trans_oper('t2gp') dop_g = np.zeros((2, 3, 6, 6), dtype=np.complex) for i in range(2): dop_g[i, 0] = loc[i, 0, 0] * dop[0] + loc[i, 0, 1] * dop[1] + loc[ i, 0, 2] * dop[2] dop_g[i, 1] = loc[i, 1, 0] * dop[0] + loc[i, 1, 1] * dop[1] + loc[ i, 1, 2] * dop[2] dop_g[i, 2] = loc[i, 2, 0] * dop[0] + loc[i, 2, 1] * dop[1] + loc[ i, 2, 2] * dop[2] # for RIXS thin, thout, phi = 30 / 180.0 * np.pi, 60 / 180.0 * np.pi, 0.0 ein, eout = 11215.0, 11215.0 # eV kin, kout = edrixs.get_wavevector_rixs(thin, thout, phi, ein, eout) # polarization pi-pi and pi-sigma for key, alpha, beta in [('pp', 0, 0), ('ps', 0, np.pi)]: ei, ef = edrixs.dipole_polvec_rixs(thin, thout, phi, alpha, beta) T_i = np.zeros((2, 6, 6), dtype=np.complex) T_o = np.zeros((2, 6, 6), dtype=np.complex) for i in range(2): T_i[i] = (dop_g[i, 0] * ei[0] + dop_g[i, 1] * ei[1] + dop_g[i, 2] * ei[2]) * np.exp(1j * np.dot(pos[i], kin)) T_o[i] = np.exp(-1j * np.dot(pos[i], kout)) * np.conj( np.transpose(dop_g[i, 0] * ef[0] + dop_g[i, 1] * ef[1] + dop_g[i, 2] * ef[2])) transop_rixs_i = np.zeros((24, 24), dtype=np.complex) transop_rixs_f = np.zeros((24, 24), dtype=np.complex) for i in range(2): off1, off2 = i * 6, 12 + i * 6 transop_rixs_i[off1:off1 + 6, off2:off2 + 6] = T_i[i] transop_rixs_f[off2:off2 + 6, off1:off1 + 6] = T_o[i] edrixs.write_emat(transop_rixs_i, "rixs_" + key + "/transop_rixs_i.in") edrixs.write_emat(transop_rixs_f, "rixs_" + key + "/transop_rixs_f.in") # For XAS ei = np.array([1, 1, 1]) / np.sqrt(3.0) T_i = np.zeros((2, 6, 6), dtype=np.complex) for i in range(2): T_i[i] = dop_g[i, 0] * ei[0] + dop_g[i, 1] * ei[1] + dop_g[i, 2] * ei[2] transop_xas = np.zeros((24, 24), dtype=np.complex128) for i in range(2): off1, off2 = i * 6, 12 + i * 6 transop_xas[off1:off1 + 6, off2:off2 + 6] = T_i[i] edrixs.write_emat(transop_xas, "xas/transop_xas.in")
emi_trans = copy.deepcopy(trans_mat_emi[i]) Ffg_Ir[i] = edrixs.scattering_mat(eval_gs, eval_ex[i], abs_trans[:, :, gs_list], emi_trans, omi, gamma_c) print('------------------------') for ipol, (alpha, beta) in enumerate(pol_vec): ein, eout = omi + omi_shift, omi + omi_shift ei, ef = edrixs.dipole_polvec_rixs(thin, thout, phi, alpha, beta, local_axis=np.eye(3)) kin, kout = edrixs.get_wavevector_rixs(thin, thout, phi, ein, eout, local_axis=np.eye(3)) Q = kout - kin phase_Ir = np.zeros(2, dtype=np.complex128) for i in range(0, 2): phase_Ir[i] = np.exp(-1j * np.dot(Q, Ir_pos[i])) Ffg = np.zeros((ncfgs_gs, len(gs_list)), dtype=np.complex128) for i in range(0, 2): for j in range(3): for k in range(3): Ffg[:, :] += ef[j] * Ffg_Ir[i, j, k] * phase_Ir[i] * ei[k] for i in gs_list: for j in range(ncfgs_gs): rixs[ipol, :, omi_ind] += np.abs(