Beispiel #1
0
def P_irrep_o_l(shell, l, I, lblock=False):
    nnk_list = defns.shell_nnk_list(shell)
    Lk = GT.little_group(shell)
    d_I = GT.irrep_dim(I)

    P_shell = []
    for k2 in nnk_list:
        R20 = GT.Rvec(k2, shell)
        P_k2 = []
        for k1 in nnk_list:
            R01 = GT.Rvec(shell, k1)

            P_block = np.zeros((6, 6))
            for R in Lk:
                RRR = GT.R_prod(R20, R, R01)
                if l == 0:
                    P_block[0, 0] += GT.chi(RRR, I)
                elif l == 2:
                    P_block[1:, 1:] += GT.chi(RRR, I) * GT.Dmat(RRR)[1:, 1:]
                    P_block = defns.chop(P_block)

            P_k2.append(P_block)
        P_shell.append(P_k2)

    out = d_I / 48 * np.block(P_shell)
    if lblock == True:
        if l == 0:
            return l0_proj(out)
        elif l == 2:
            return l2_proj(out)
    else:
        return out
Beispiel #2
0
def A1_little_group_sum(shell):
    Lk = GT.little_group(shell)
    Usum = np.zeros((6, 6))
    for R in Lk:
        Usum += GT.Dmat(R)
    Usum = defns.chop(Usum / len(Lk))
    return Usum
Beispiel #3
0
def P_A1_o_naive(shell):
    Nk = len(defns.shell_nnk_list(shell))
    P_shell = np.zeros((6 * Nk, 6 * Nk))
    for R in GT.Oh_list():
        P_shell += np.kron(GT.Smat(R, shell).T, GT.Dmat(R))
    P_shell = P_shell / 48

    return P_shell
Beispiel #4
0
def P_A1_o(shell):
    shell = list(shell)
    No = len(defns.shell_nnk_list(shell))

    one_mat = np.ones((No, No)) / No
    Pk = A1_little_group_sum(shell)

    U_block_list = []
    for p in defns.shell_nnk_list(shell):
        p = list(p)
        U_block_list.append(GT.Dmat(GT.Rvec(p, shell)))
    U = block_diag(*U_block_list)

    return U @ np.kron(one_mat, Pk) @ U.T