import secondQuantizationAlgebra as sqa from tools_for_sqa import * from tools_for_pt import * sqa.options.verbose = False # Make H0 H = h0('NEVPT', df=True) # Define Omu list1 = gimme('vaaa') list2 = [list1[i] for i in [0, 2]] list3 = [list1[i] for i in [1, 3]] pvec = sqa.tensor('p', list1, []) #symm(list1)) Omu = sqa.term(1.0, [''], [pvec, sqa.sfExOp(list2), sqa.sfExOp(list3)]) # Define Onu list1 = gimme('vaaa') list2 = [list1[i] for i in [3, 1]] list3 = [list1[i] for i in [2, 0]] Apvec = sqa.tensor('Ap', list1, []) #symm(list1)) Onu = sqa.term(1.0, [''], [Apvec, sqa.sfExOp(list2), sqa.sfExOp(list3)]) # Define the normal-ordered A matrix: # Apvec_nu = < O^T_nu [H,O_mu] >.pvec_mu commutator = [] for Hterm in H: commutator += sqa.commutator(Hterm, Omu) result = [] for t in commutator: result += sqa.normalOrder(sqa.multiplyTerms(Onu, t)) result = simplify_all(result, [deltaC, deltaA, deltaV], cumulantE4=True)
[gimme('va'), gimme('va')], # vvaa [gimme('ac'), gimme('ac')], # ccaa [gimme('vc'), gimme('aa')], # vaca [gimme('ac'), gimme('va')], # avca [gimme('va'), gimme('aa')], # vaaa [gimme('ac'), gimme('aa')] ] # caaa # Construct |Psi_1> and <Psi_1| psi1_right = [] psi1_left = [] for i in range(9): basis1 = sqa.sfExOp(basis[i][0]) basis2 = sqa.sfExOp(basis[i][1]) unique = unique_tensor(reorga_two_to_one(basis1, basis2)) tensor = sqa.tensor('D' + class_names[i], unique, []) #symm(unique)) #NO! psi1_right.append(sqa.term(1.0, [''], [tensor, basis1, basis2])) basis1 = sqa.sfExOp([basis[i][1][t] for t in [1, 0]]) basis2 = sqa.sfExOp([basis[i][0][t] for t in [1, 0]]) unique = unique_tensor(reorga_two_to_one(basis1, basis2)) tensor = sqa.tensor('D' + class_names[i], unique, []) #symm(unique)) #NO! psi1_left.append(sqa.term(1.0, [''], [tensor, basis1, basis2])) # (LOG if want to debug) if print_log: print '//' print '// With the unique tensors found, |Psi1> is:' for right_term in psi1_right: print '// d_{:5} E_{:2} E_{:2} Class:{:6} OccPattern:{:9}'.format(\ code(indices_of_Tensor(right_term)[0]),\
i4 = sqa.index('Cp', [tag_core], True) a1 = sqa.index('Vg', [tag_virtual], True) a2 = sqa.index('Vh', [tag_virtual], True) a3 = sqa.index('Ve', [tag_virtual], True) a4 = sqa.index('Vf', [tag_virtual], True) L = sqa.index('La', [tag_auxiliary], True) # Define symmetry classes hsym = sqa.symmetry((1,0), 1) Dsym_a = sqa.symmetry((2,1, 0,3), 1) Dsym_b = sqa.symmetry((0,3, 2,1), 1) Dsym_c = sqa.symmetry((1,0, 3,2), 1) # Define tensors K_C = sqa.tensor('int1c', [i1,i2], [hsym]) K_A = sqa.tensor('int1a', [x1,x2], [hsym]) K_V = sqa.tensor('int1v', [a1,a2], [hsym]) V_Al = sqa.tensor('int2Laa', [L,x1,x3], []) V_Ar = sqa.tensor('int2Laa', [L,x2,x4], []) deltaC = sqa.tensor('deltac', [i1,i2], [hsym]) deltaA = sqa.tensor('deltaa', [x1,x2], [hsym]) deltaV = sqa.tensor('deltav', [a1,a2], [hsym]) # Define Hamilonian terms T_C = sqa.term( 1.0, [''], [K_C, sqa.sfExOp([i1,i2])] ) T_A = sqa.term( 1.0, [''], [K_A, sqa.sfExOp([x1,x2])] ) T_V = sqa.term( 1.0, [''], [K_V, sqa.sfExOp([a1,a2])] ) HD_A = sqa.term( 0.5, [''], [V_Al,V_Ar, sqa.sfExOp([x1,x2,x3,x4])] ) # Define the normal-ordered A matrix:
import secondQuantizationAlgebra as sqa from tools_for_sqa import * from tools_for_pt import * sqa.options.verbose = False # Make H0 H=h0('MRLCC',df=True) # Define Omu list1=gimme('caav') list2=[list1[i] for i in [3,0]] list3=[list1[i] for i in [1,2]] pvec1 = sqa.tensor('p1', list1, symm(list1)) OmuA = sqa.term(1.0, [''], [pvec1, sqa.sfExOp(list2), sqa.sfExOp(list3)]) list2=[list1[i] for i in [1,0]] list3=[list1[i] for i in [3,2]] pvec2 = sqa.tensor('p2', list1, symm(list1)) OmuB = sqa.term(1.0, [''], [pvec2, sqa.sfExOp(list2), sqa.sfExOp(list3)]) # Define Onu list1=gimme('caav') list2=[list1[i] for i in [2,1]] list3=[list1[i] for i in [0,3]] Apvec1 = sqa.tensor('Ap1', list1, symm(list1)) OnuA = sqa.term(1.0, [''], [Apvec1, sqa.sfExOp(list2), sqa.sfExOp(list3)]) list2=[list1[i] for i in [2,3]] list3=[list1[i] for i in [0,1]] Apvec2 = sqa.tensor('Ap2', list1, symm(list1)) OnuB = sqa.term(1.0, [''], [Apvec2, sqa.sfExOp(list2), sqa.sfExOp(list3)]) # Define the normal-ordered A matrix:
sqa.options.verbose = False # definitions tg_c = sqa.options.core_type tg_a = sqa.options.active_type tg_v = sqa.options.virtual_type tg_t = tg_c + tg_a + tg_v i = [sqa.index('i%i' %j, [tg_c], True) for j in range(8)] r = [sqa.index('r%i' %j, [tg_a], True) for j in range(8)] a = [sqa.index('a%i' %j, [tg_v], True) for j in range(8)] m = [sqa.index('m%i' %j, [tg_t], True) for j in range(8)] t_sym = [ sqa.symmetry((1,0,3,2),1) ] W_sym = [ sqa.symmetry((1,0,3,2),1), sqa.symmetry((0,3,2,1),1) ] t_ts_ket_1 = [ sqa.tensor('t2', [a[0], a[3], i[0], i[1]], t_sym) ] t_ops_ket_1= [ sqa.sfExOp([i[0], i[1], a[0], a[3]]) ] W_ts_ket_1 = [ sqa.tensor('W', [a[1], a[2], a[3], i[2]], W_sym) ] W_ops_ket_1= [ sqa.sfExOp([a[3], i[2], a[1], a[2]]) ] t_ts_ket_2 = [ sqa.tensor('t2', [a[0], a[1], i[0], i[3]], t_sym) ] t_ops_ket_2= [ sqa.sfExOp([i[0], i[3], a[0], a[1]]) ] W_ts_ket_2 = [ sqa.tensor('W', [i[3], a[2], i[1], i[2]], W_sym) ] W_ops_ket_2= [ sqa.sfExOp([i[1], i[2], i[3], a[2]]) ] t_ts_bra_1 = [ sqa.tensor('t2', [i[4], i[5], a[4], a[7]], t_sym) ] t_ops_bra_1= [ sqa.sfExOp([a[4], a[7], i[4], i[5]]) ] W_ts_bra_1 = [ sqa.tensor('W', [a[7], i[6], a[5], a[6]], W_sym) ] W_ops_bra_1= [ sqa.sfExOp([a[5], a[6], a[7], i[6]]) ] t_ts_bra_2 = [ sqa.tensor('t2', [i[4], i[7], a[4], a[5]], t_sym) ]
" ( 1.00000) cre(j3) cre(j4) des(j1) des(j2) \n" print "Test 1 output:" print test1_string_output if test1_string_output == test1_correct_answer: print "Test 1 passed", else: print "Test 1 failed", print " (%.3f seconds)\n" % (time.time() - startTime) # Test 2: Commutator of all alpha 1e hamiltonian with all alpha 2 electron amplitude (without index types) # The result is transpose equated, so that symmetrization is required in the resulting Hamiltonian print "" print "Starting test 2" print "" startTime = time.time() h1 = sqa.tensor('h1', dummyInd[0:2], h1sym) a2 = sqa.tensor('a2', dummyInd[2:6], a2sym_aaaa) h1_term = sqa.term(1.0, [], [h1, sqa.creOp(dummyInd[0]), sqa.desOp(dummyInd[1])]) a2_terms = [] a2_terms.append( sqa.term(1.0, [], [ a2, sqa.creOp(dummyInd[2]), sqa.creOp(dummyInd[3]), sqa.desOp(dummyInd[5]), sqa.desOp(dummyInd[4]) ])) a2_terms.append( sqa.term(-1.0, [], [
'ccaa','vaca','avca','vaaa','caaa'] basis=[[gimme('vc'),gimme('vc')],\ [gimme('vc'),gimme('va')],\ [gimme('ac'),gimme('vc')],\ [gimme('va'),gimme('va')],\ [gimme('ac'),gimme('ac')],\ [gimme('vc'),gimme('aa')],\ [gimme('ac'),gimme('va')],\ [gimme('va'),gimme('aa')],\ [gimme('ac'),gimme('aa')]] Psi1Right = [] Psi1Left = [] for i in range(9): basis1 = sqa.sfExOp(basis[i][0]) basis2 = sqa.sfExOp(basis[i][1]) tensor = sqa.tensor('D' + ClassNames[i], unique_tensor(from_basis(basis1, basis2)), []) Psi1Right.append(sqa.term(1.0, [''], [tensor, basis1, basis2])) basis1 = sqa.sfExOp([basis[i][1][t] for t in [1, 0]]) basis2 = sqa.sfExOp([basis[i][0][t] for t in [1, 0]]) tensor = sqa.tensor('D' + ClassNames[i], unique_tensor(from_basis(basis1, basis2)), []) Psi1Left.append(sqa.term(1.0, [''], [tensor, basis1, basis2])) # PRINT OUT STUFF print '//' print '// With the unique tensors found, |Psi1> is:' for el in Psi1Right: print '// d_{:5} E_{:2} E_{:2} Class:{:6} OccPattern:{:9}'.format(\ code([i.indices for i in el.tensors if not isinstance(i,sqa.sfExOp)][0]),\ code([i.indices for i in el.tensors if isinstance(i,sqa.sfExOp)][0]),\
basis=[[gimme('vc'),gimme('vc')],\ [gimme('vc'),gimme('va')],\ [gimme('ac'),gimme('vc')],\ [gimme('va'),gimme('va')],\ [gimme('ac'),gimme('ac')],\ [gimme('vc'),gimme('aa')],\ [gimme('ac'),gimme('va')],\ [gimme('va'),gimme('aa')],\ [gimme('ac'),gimme('aa')]] Psi1Right = [] Psi1Left = [] for i in range(9): basis1 = sqa.sfExOp(basis[i][0]) basis2 = sqa.sfExOp(basis[i][1]) unique = unique_tensor(reorga_two_to_one(basis1, basis2)) tensor = sqa.tensor('D' + ClassNames[i], unique, symm(unique)) Psi1Right.append(sqa.term(1.0, [''], [tensor, basis1, basis2])) basis1 = sqa.sfExOp([basis[i][1][t] for t in [1, 0]]) basis2 = sqa.sfExOp([basis[i][0][t] for t in [1, 0]]) unique = unique_tensor(reorga_two_to_one(basis1, basis2)) tensor = sqa.tensor('D' + ClassNames[i], unique, symm(unique)) Psi1Left.append(sqa.term(1.0, [''], [tensor, basis1, basis2])) # PRINT OUT STUFF if print_log: print '//' print '// With the unique tensors found, |Psi1> is:' for el in Psi1Right: print '// d_{:5} E_{:2} E_{:2} Class:{:6} OccPattern:{:9}'.format(\ code([i.indices for i in el.tensors if not isinstance(i,sqa.sfExOp)][0]),\
x4 = sqa.index('Ax', [tag_active], True) i1 = sqa.index('Cm', [tag_core], True) i2 = sqa.index('Cn', [tag_core], True) i3 = sqa.index('Co', [tag_core], True) i4 = sqa.index('Co1', [tag_core], True) a1 = sqa.index('Vg', [tag_virtual], True) a2 = sqa.index('Vh', [tag_virtual], True) a3 = sqa.index('Ve', [tag_virtual], True) a4 = sqa.index('Vf', [tag_virtual], True) #h0 one body term hsym = sqa.symmetry((1, 0), 1) Dsym_a = sqa.symmetry((2, 1, 0, 3), 1) Dsym_b = sqa.symmetry((0, 3, 2, 1), 1) Dsym_c = sqa.symmetry((1, 0, 3, 2), 1) K_C = sqa.tensor('int1', [i1, i2], [hsym]) K_A = sqa.tensor('int1', [x1, x2], [hsym]) K_V = sqa.tensor('int1', [a1, a2], [hsym]) V_A = sqa.tensor('int2', [x1, x2, x3, x4], [Dsym_a, Dsym_b, Dsym_c]) HD_A = sqa.term(0.5, [""], [V_A, sqa.sfExOp([x1, x2, x3, x4])]) T_C = sqa.term(1.0, [""], [K_C, sqa.sfExOp([i1, i2])]) T_A = sqa.term(1.0, [""], [K_A, sqa.sfExOp([x1, x2])]) T_V = sqa.term(1.0, [""], [K_V, sqa.sfExOp([a1, a2])]) #first excitation E_aiEbj1a = sqa.term(1.0, [""], [sqa.sfExOp([a, i]), sqa.sfExOp([p, q])]) E_aiEbj1b = sqa.term(1.0, [""], [sqa.sfExOp([p, i]), sqa.sfExOp([a, q])]) E_aiEbj2a = sqa.term(1.0, [""], [sqa.sfExOp([s, r]), sqa.sfExOp([j, b])]) E_aiEbj2b = sqa.term(1.0, [""], [sqa.sfExOp([s, b]), sqa.sfExOp([j, r])])
i2 = sqa.index('Cn', [tag_core], True) i3 = sqa.index('Co', [tag_core], True) i4 = sqa.index('Cp', [tag_core], True) a1 = sqa.index('Vg', [tag_virtual], True) a2 = sqa.index('Vh', [tag_virtual], True) a3 = sqa.index('Ve', [tag_virtual], True) a4 = sqa.index('Vf', [tag_virtual], True) # Define symmetry classes hsym = sqa.symmetry((1, 0), 1) Dsym_a = sqa.symmetry((2, 1, 0, 3), 1) Dsym_b = sqa.symmetry((0, 3, 2, 1), 1) Dsym_c = sqa.symmetry((1, 0, 3, 2), 1) # Define tensors K_C = sqa.tensor('Wcc', [i1, i2], [hsym]) K_A = sqa.tensor('Waa', [x1, x2], [hsym]) K_V = sqa.tensor('Wvv', [a1, a2], [hsym]) V_A = sqa.tensor('Waaaa', [x1, x2, x3, x4], [Dsym_a, Dsym_b, Dsym_c]) deltaC = sqa.tensor('deltac', [i1, i2], [hsym]) deltaA = sqa.tensor('deltaa', [x1, x2], [hsym]) deltaV = sqa.tensor('deltav', [a1, a2], [hsym]) # Define Hamilonian terms T_C = sqa.term(1.0, [''], [K_C, sqa.sfExOp([i1, i2])]) T_A = sqa.term(1.0, [''], [K_A, sqa.sfExOp([x1, x2])]) T_V = sqa.term(1.0, [''], [K_V, sqa.sfExOp([a1, a2])]) HD_A = sqa.term(0.5, [''], [V_A, sqa.sfExOp([x1, x2, x3, x4])]) # Define the normal-ordered A matrix: # Apvec_nu = < O^T_nu [H,O_mu] >.pvec_mu
x1 = sqa.index('Au', [tag_active], True) x2 = sqa.index('Av', [tag_active], True) i1 = sqa.index('Cm', [tag_core], True) i2 = sqa.index('Cn', [tag_core], True) a1 = sqa.index('Vg', [tag_virtual], True) a2 = sqa.index('Vh', [tag_virtual], True) # Define symmetry classes hsym = sqa.symmetry((1, 0), 1) Dsym_a = sqa.symmetry((2, 1, 0, 3), 1) Dsym_b = sqa.symmetry((0, 3, 2, 1), 1) Dsym_c = sqa.symmetry((1, 0, 3, 2), 1) # Define tensors deltaC = sqa.tensor('deltac', [i1, i2], [hsym]) deltaA = sqa.tensor('deltaa', [x1, x2], [hsym]) deltaV = sqa.tensor('deltav', [a1, a2], [hsym]) # Define the normal-ordered overlap Cin = sqa.tensor('V', [a, p, q, r], []) Cout = sqa.tensor('b', [b, u, v, w], []) if (withC): Op1 = sqa.term(1.0, [''], [Cin, sqa.sfExOp([a, q]), sqa.sfExOp([p, r])]) Op2 = sqa.term(1.0, [''], [Cout, sqa.sfExOp([w, u]), sqa.sfExOp([v, b])]) else: Op1 = sqa.term(1.0, [''], [sqa.sfExOp([a, q]), sqa.sfExOp([p, r])]) Op2 = sqa.term(1.0, [''], [sqa.sfExOp([w, u]), sqa.sfExOp([v, b])]) result = sqa.normalOrder(sqa.multiplyTerms(Op2, Op1)) # Simplify the result
sqa.options.verbose = False # definitions tg_c = sqa.options.core_type tg_a = sqa.options.active_type tg_v = sqa.options.virtual_type tg_t = tg_c + tg_a + tg_v i = [sqa.index('i%i' %j, [tg_c], True) for j in range(8)] r = [sqa.index('r%i' %j, [tg_a], True) for j in range(8)] a = [sqa.index('a%i' %j, [tg_v], True) for j in range(8)] m = [sqa.index('m%i' %j, [tg_t], True) for j in range(8)] t_sym = [ sqa.symmetry((1,0,3,2),1) ] W_sym = [ sqa.symmetry((1,0,3,2),1), sqa.symmetry((0,3,2,1),1) ] tW_ts_ket_1 = [ sqa.tensor('t2Wk', [a[0], a[1], a[2], i[0], i[1], i[2]], []) ] tW_ops_ket_1= [ sqa.sfExOp([i[0], i[1], i[2], a[0], a[1], a[2]]) ] tW_ts_bra_1 = [ sqa.tensor('t2Wb', [i[3], i[4], i[5], a[3], a[4], a[5]], []) ] tW_ops_bra_1= [ sqa.sfExOp([a[3], a[4], a[5], i[3], i[4], i[5]]) ] # #t_ts_ket_2 = [ sqa.tensor('t2', [a[0], a[1], i[0], i[3]], []) ] #t_ops_ket_2= [ sqa.sfExOp([i[0], i[3], a[0], a[1]]) ] #W_ts_ket_2 = [ sqa.tensor('W', [i[3], a[2], i[1], i[2]], W_sym) ] #W_ops_ket_2= [ sqa.sfExOp([i[1], i[2], i[3], a[2]]) ] # #t_ts_bra_1 = [ sqa.tensor('t2', [i[4], i[5], a[4], a[7]], t_sym) ] #t_ops_bra_1= [ sqa.sfExOp([a[4], a[7], i[4], i[5]]) ] #W_ts_bra_1 = [ sqa.tensor('W', [a[7], i[6], a[5], a[6]], W_sym) ] #W_ops_bra_1= [ sqa.sfExOp([a[5], a[6], a[7], i[6]]) ]
i4 = sqa.index('Cp', [tag_core], True) a1 = sqa.index('Vg', [tag_virtual], True) a2 = sqa.index('Vh', [tag_virtual], True) a3 = sqa.index('Ve', [tag_virtual], True) a4 = sqa.index('Vf', [tag_virtual], True) L = sqa.index('La', [tag_auxiliary], True) # Define symmetry classes hsym = sqa.symmetry((1, 0), 1) Dsym_a = sqa.symmetry((2, 1, 0, 3), 1) Dsym_b = sqa.symmetry((0, 3, 2, 1), 1) Dsym_c = sqa.symmetry((1, 0, 3, 2), 1) # Define tensors K_C = sqa.tensor('int1c', [i1, i2], [hsym]) K_A = sqa.tensor('int1a', [x1, x2], [hsym]) K_V = sqa.tensor('int1v', [a1, a2], [hsym]) V_CA1l = sqa.tensor('int2Lcc', [L, i1, i2], []) V_CA1r = sqa.tensor('int2Laa', [L, x1, x2], []) V_CA2l = sqa.tensor('int2Lca', [L, i1, x2], []) V_CA2r = sqa.tensor('int2Lac', [L, x1, i2], []) V_CV1l = sqa.tensor('int2Lcc', [L, i1, i2], []) V_CV1r = sqa.tensor('int2Lvv', [L, a1, a2], []) V_CV2l = sqa.tensor('int2Lcv', [L, i1, a2], []) V_CV2r = sqa.tensor('int2Lvc', [L, a1, i2], []) V_AV1l = sqa.tensor('int2Laa', [L, x1, x2], []) V_AV1r = sqa.tensor('int2Lvv', [L, a1, a2], []) V_AV2l = sqa.tensor('int2Lav', [L, x1, a2], []) V_AV2r = sqa.tensor('int2Lva', [L, a1, x2], []) V_Cl = sqa.tensor('int2Lcc', [L, i1, i3], [])
# definitions tg_c = sqa.options.core_type tg_a = sqa.options.active_type tg_v = sqa.options.virtual_type tg_t = tg_c + tg_a + tg_v i = [sqa.index('i%i' % j, [tg_c], True) for j in range(8)] r = [sqa.index('r%i' % j, [tg_a], True) for j in range(8)] a = [sqa.index('a%i' % j, [tg_v], True) for j in range(8)] m = [sqa.index('m%i' % j, [tg_t], True) for j in range(8)] n = [sqa.index('n%i' % j, [tg_t], True) for j in range(8)] #t_sym = [ sqa.symmetry((1,0,3,2),1) ] #W_sym = [ sqa.symmetry((1,0,3,2),1), sqa.symmetry((0,3,2,1),1) ] W_ts_ket = [sqa.tensor('W', [a[1], i[1]], [])] W_ops_ket = [sqa.sfExOp([i[1], a[1]])] t_ts_bra = [sqa.tensor('t2', [i[0], a[0]], [])] t_ops_bra = [sqa.sfExOp([a[0], i[0]])] terms = [] #Op1 = t_ts_ket_1 + t_ops_ket_1 + W_ts_ket_1 + W_ops_ket_1 + W_ts_bra_1 + W_ops_bra_1 + t_ts_bra_1 + t_ops_bra_1 #terms.append( sqa.term( 1.0, [], Op1) ) #Op2 = t_ts_ket_2 + t_ops_ket_2 + W_ts_ket_2 + W_ops_ket_2 + W_ts_bra_1 + W_ops_bra_1 + t_ts_bra_1 + t_ops_bra_1 #terms.append( sqa.term( 1.0, [], Op2) ) #Op3 = t_ts_ket_1 + t_ops_ket_1 + W_ts_ket_1 + W_ops_ket_1 + W_ts_bra_2 + W_ops_bra_2 + t_ts_bra_2 + t_ops_bra_2 #terms.append( sqa.term( 1.0, [], Op3) ) #Op4 = t_ts_ket_2 + t_ops_ket_2 + W_ts_ket_2 + W_ops_ket_2 + W_ts_bra_2 + W_ops_bra_2 + t_ts_bra_2 + t_ops_bra_2 #Op4 = t_ops_ket_2 + W_ops_ket_2 + W_ops_bra_2 + t_ops_bra_2 #Op4 = t_ops_ket_2 + W_ops_ket_2
tag_active = sqa.options.active_type tag_virtual = sqa.options.virtual_type k = sqa.index('Ak', [tag_active], True) l = sqa.index('Al', [tag_active], True) m = sqa.index('Am', [tag_active], True) c = sqa.index('Vc', [tag_virtual], True) hsym = sqa.symmetry((1, 0), 1) Dsym_a = sqa.symmetry((2, 1, 0, 3), 1) Dsym_b = sqa.symmetry((0, 3, 2, 1), 1) Dsym_c = sqa.symmetry((1, 0, 3, 2), 1) Tsym = sqa.symmetry((0, 1, 2, 3), 1) E_cmlk = [sqa.sfExOp([c, m, l, k])] T_klmc = [sqa.tensor('T2', [k, l, m, c], [Tsym])] print "" print "Evaluation of the IC-MRCI Hamiltonian elements" print "based on the spin-free generator" print "" print "!!!!! The operator space is L: <Psi|", E_cmlk[0], "|Psi>: R !!!!!" print "@@@ SIGMA_0 <-- sum_{klcd} H(0; Vd, Vc, Al, Ak) T(Ak, Al, Vc, Vd)" print "" result = [] for tag_h1_p in [tag_active, tag_virtual]: for tag_h1_q in [tag_active, tag_virtual]: p = sqa.index('p', [tag_h1_p], True) q = sqa.index('q', [tag_h1_q], True)
a = sqa.index('Va', [tag_virtual], False) l = sqa.index('Al', [tag_active], True) m = sqa.index('Am', [tag_active], True) n = sqa.index('An', [tag_active], True) b = sqa.index('Vb', [tag_virtual], True) hsym = sqa.symmetry((1, 0), 1) Dsym_a = sqa.symmetry((2, 1, 0, 3), 1) Dsym_b = sqa.symmetry((0, 3, 2, 1), 1) Dsym_c = sqa.symmetry((1, 0, 3, 2), 1) E_ijka = [sqa.sfExOp([i, j, k, a])] E_bnml = [sqa.sfExOp([b, n, m, l])] T_bnml = [sqa.tensor('T2', [l, m, n, b])] print "" print "Evaluation of the IC-MRCI Hamiltonian elements based on" print "the spin-free generator and the commutator technique" print "" print "!!!!! The operator space is L: <Psi|", E_ijka[0], ", ", E_bnml[ 0], "|Psi>: R !!!!!" print "@@@ SIGMA(Ai, Aj, Ak, Va) <-- H(Ai, Aj, Ak, Va; Vb, Am, Al, Ak) T(Ak, Al, Am, Vb)" print "" result = [] # One-body part for tag_h1_p in [tag_active, tag_virtual]: for tag_h1_q in [tag_active, tag_virtual]:
tc = sqa.options.core_type tt = sqa.options.active_type tv = sqa.options.virtual_type # Define core indices ac = [sqa.index('c%i' %i, [ta,tc], False) for i in range(10)] bc = [sqa.index('c%i' %i, [tb,tc], False) for i in range(10)] # Define active indices at = [sqa.index('a%i' %i, [ta,tt], True) for i in range(10)] bt = [sqa.index('a%i' %i, [tb,tt], True) for i in range(10)] terms = [] terms.append(sqa.term(1.0, [], [sqa.creOp(ac[0]), sqa.desOp(ac[0])])) terms.append(sqa.term(1.0, [], [sqa.creOp(ac[0]), sqa.creOp(ac[1]), sqa.desOp(ac[1])])) terms.append(sqa.term(1.0, [], [sqa.creOp(at[0]), sqa.creOp(ac[0]), sqa.tensor('r0', [at[0], at[1]], []), sqa.creOp(ac[1]), \ sqa.desOp(ac[0]), sqa.desOp(at[1])])) terms.append(sqa.term(1.0, [], [sqa.creOp(at[0]), sqa.creOp(ac[0]), sqa.creOp(ac[1]), \ sqa.desOp(ac[0]), sqa.desOp(at[1]), sqa.desOp(ac[1])])) terms.append(sqa.term(1.0, [], [sqa.creOp(ac[0]), sqa.creOp(ac[1]), sqa.creOp(ac[0]), \ sqa.desOp(ac[0]), sqa.desOp(at[1]), sqa.desOp(ac[1])])) terms.append(sqa.term(1.0, [], [sqa.creOp(at[0]), sqa.creOp(ac[1]), sqa.creOp(ac[0]), \ sqa.desOp(ac[1]), sqa.desOp(ac[0]), sqa.desOp(ac[1])])) print "" print "Testing removeCoreOpPairs function." print "" print "Core indices labeled with c." print "Active indices labeled with a." print ""
x1 = sqa.index('Au', [tag_active], True) x2 = sqa.index('Av', [tag_active], True) i1 = sqa.index('Cm', [tag_core], True) i2 = sqa.index('Cn', [tag_core], True) a1 = sqa.index('Vg', [tag_virtual], True) a2 = sqa.index('Vh', [tag_virtual], True) # Define symmetry classes hsym = sqa.symmetry((1,0), 1) Dsym_a = sqa.symmetry((2,1, 0,3), 1) Dsym_b = sqa.symmetry((0,3, 2,1), 1) Dsym_c = sqa.symmetry((1,0, 3,2), 1) # Define tensors deltaC = sqa.tensor('deltac', [i1,i2], [hsym]) deltaA = sqa.tensor('deltaa', [x1,x2], [hsym]) deltaV = sqa.tensor('deltav', [a1,a2], [hsym]) # Define the normal-ordered overlap Cin = sqa.tensor('V', [a,b,i,q], []) Cout = sqa.tensor('b', [c,d,j,r], []) if (withC): Op1 = sqa.term( 1.0, [''], [Cin, sqa.sfExOp([a, i]) , sqa.sfExOp([b, q])]) Op2 = sqa.term( 1.0, [''], [Cout, sqa.sfExOp([r, d]) , sqa.sfExOp([j, c])]) else: Op1 = sqa.term( 1.0, [''], [sqa.sfExOp([a, i]) , sqa.sfExOp([b, q])]) Op2 = sqa.term( 1.0, [''], [sqa.sfExOp([r, d]) , sqa.sfExOp([j, c])]) result = sqa.normalOrder(sqa.multiplyTerms(Op2, Op1)) # Simplify the result
i2 = sqa.index('Cn', [tag_core], True) i3 = sqa.index('Co', [tag_core], True) i4 = sqa.index('Cp', [tag_core], True) a1 = sqa.index('Vg', [tag_virtual], True) a2 = sqa.index('Vh', [tag_virtual], True) a3 = sqa.index('Ve', [tag_virtual], True) a4 = sqa.index('Vf', [tag_virtual], True) # Define symmetry classes hsym = sqa.symmetry((1, 0), 1) Dsym_a = sqa.symmetry((2, 1, 0, 3), 1) Dsym_b = sqa.symmetry((0, 3, 2, 1), 1) Dsym_c = sqa.symmetry((1, 0, 3, 2), 1) # Define tensors K_C = sqa.tensor('Wcc', [i1, i2], [hsym]) K_A = sqa.tensor('Waa', [x1, x2], [hsym]) K_V = sqa.tensor('Wvv', [a1, a2], [hsym]) V_A = sqa.tensor('Waaaa', [x1, x2, x3, x4], [Dsym_a, Dsym_b, Dsym_c]) deltaC = sqa.tensor('deltac', [i1, i2], [hsym]) deltaA = sqa.tensor('deltaa', [x1, x2], [hsym]) deltaV = sqa.tensor('deltav', [a1, a2], [hsym]) # Define Hamilonian terms T_C = sqa.term(1.0, [''], [K_C, sqa.sfExOp([i1, i2])]) T_A = sqa.term(1.0, [''], [K_A, sqa.sfExOp([x1, x2])]) T_V = sqa.term(1.0, [''], [K_V, sqa.sfExOp([a1, a2])]) HD_A = sqa.term(0.5, [''], [V_A, sqa.sfExOp([x1, x2, x3, x4])]) # Define the normal-ordered A matrix: # Apvec_nu = < O^T_nu [H,O_mu] >.pvec_mu
print "" print "Evaluation of the IC-MRCI Hamiltonian elements" print "based on the spin-free generator" print "" print "!!!!! The operator space is L: <Psi|", E_iajb[0], E_dlck[0], "|Psi>: R !!!!!" print "" result = [] for tag_h1_p in [tag_active, tag_virtual]: for tag_h1_q in [tag_active, tag_virtual]: p = sqa.index('p', [tag_h1_p], True) q = sqa.index('q', [tag_h1_q], True) E_pq = [sqa.sfExOp([p, q])] h_pq = sqa.tensor('h', [p, q], [hsym]) term1 = sqa.term( 1.0, [], E_iajb + [h_pq] + E_pq + E_dlck) batch1 = sqa.normalOrder(term1) sqa.removeVirtOps_sf(batch1) for t in batch1: t.contractDeltaFuncs_new() sqa.combineTerms(batch1) sqa.termChop(batch1) result += batch1
i3 = sqa.index('Co', [tag_core], True) i4 = sqa.index('Cp', [tag_core], True) a1 = sqa.index('Vg', [tag_virtual], True) a2 = sqa.index('Vh', [tag_virtual], True) a3 = sqa.index('Ve', [tag_virtual], True) a4 = sqa.index('Vf', [tag_virtual], True) # Define symmetry classes hsym = sqa.symmetry((1,0), 1) Dsym_a = sqa.symmetry((2,1, 0,3), 1) Dsym_b = sqa.symmetry((0,3, 2,1), 1) Dsym_c = sqa.symmetry((1,0, 3,2), 1) # Define tensors K_C = sqa.tensor('int1c', [i1,i2], [hsym]) K_A = sqa.tensor('int1a', [x1,x2], [hsym]) K_V = sqa.tensor('int1v', [a1,a2], [hsym]) V_A = sqa.tensor('int2a', [x1,x2, x3,x4], [Dsym_a, Dsym_b, Dsym_c]) V_C = sqa.tensor('int2c', [i1,i2, i3,i4], [Dsym_a, Dsym_b, Dsym_c]) V_V = sqa.tensor('int2v', [a1,a2, a3,a4], [Dsym_a, Dsym_b, Dsym_c]) V_CA1 = sqa.tensor('int2ca1', [i1,x1, i2,x2], [Dsym_a, Dsym_b]) V_CA2 = sqa.tensor('int2ca2', [i1,x1, x2,i2], []) V_CV1 = sqa.tensor('int2cv1', [i1,a1, i2,a2], [Dsym_a, Dsym_b]) V_CV2 = sqa.tensor('int2cv2', [i1,a1, a2,i2], []) V_AV1 = sqa.tensor('int2av1', [x1,a1, x2,a2], [Dsym_a, Dsym_b]) V_AV2 = sqa.tensor('int2av2', [x1,a1, a2,x2], []) deltaC = sqa.tensor('deltac', [i1,i2], [hsym]) deltaA = sqa.tensor('deltaa', [x1,x2], [hsym]) deltaV = sqa.tensor('deltav', [a1,a2], [hsym])
lX = sqa.index('ClX', [tag_core], True) pX = sqa.index('ApX', [tag_active], True) qX = sqa.index('AqX', [tag_active], True) rX = sqa.index('ArX', [tag_active], True) sX = sqa.index('AsX', [tag_active], True) aX = sqa.index('VaX', [tag_virtual], True) bX = sqa.index('VbX', [tag_virtual], True) cX = sqa.index('VcX', [tag_virtual], True) dX = sqa.index('VdX', [tag_virtual], True) # Define delta functions hsym = sqa.symmetry((1, 0), 1) Dsym_a = sqa.symmetry((2, 1, 0, 3), 1) Dsym_b = sqa.symmetry((0, 3, 2, 1), 1) Dsym_c = sqa.symmetry((1, 0, 3, 2), 1) deltaC = sqa.tensor('deltac', [id1, id2], [hsym]) deltaA = sqa.tensor('deltaa', [pd1, pd2], [hsym]) deltaV = sqa.tensor('deltav', [ad1, ad2], [hsym]) # Occupation pattern of the classes ClassNames = [ 'vvcc', 'vvca', 'ccav', 'vvaa', 'ccaa', 'vaca', 'avca', 'vaaa', 'caaa' ] occupations = {} occupations['vvcc'] = [-2, 0, 2] occupations['vvca'] = [-1, -1, 2] occupations['ccav'] = [-2, 1, 1] occupations['vvaa'] = [0, -2, 2] occupations['ccaa'] = [-2, 2, 0] occupations['vaca'] = [-1, 0, 1]
print "the spin-free generator and the commutator technique" print "" print "!!!!! The operator space is L: <Psi|", E_ijka[0], ", ", E_bnml[ 0], "|Psi>: R !!!!!" print "@@@ SIGMA(Ai, Aj, Ak, Va) <-- H(Ai, Aj, Ak, Va; Vb, Am, Al, Ak) T(Ak, Al, Am, Vb)" print "" result = [] # One-body part .... for tag_h1_p in [tag_active, tag_virtual]: for tag_h1_q in [tag_active, tag_virtual]: p = sqa.index('p', [tag_h1_p], True) q = sqa.index('q', [tag_h1_q], True) E_pq = [sqa.sfExOp([p, q])] h_pq = sqa.tensor('h', [p, q], [hsym]) term1 = sqa.term(1.0, [], E_ijka + [h_pq] + E_pq + E_bnml) batch1 = sqa.normalOrder(term1) sqa.removeVirtOps_sf(batch1) for t in batch1: t.contractDeltaFuncs_new() sqa.combineTerms(batch1) sqa.termChop(batch1) result += batch1
[gimme('va'), gimme('va')], # vvaa [gimme('ac'), gimme('ac')], # ccaa [gimme('vc'), gimme('aa')], # vaca [gimme('ac'), gimme('va')], # avca [gimme('va'), gimme('aa')], # vaaa [gimme('ac'), gimme('aa')] ] # caaa # Construct |Psi_1> and <Psi_1| psi1_right = [] psi1_left = [] for i in range(9): basis1 = sqa.sfExOp(basis[i][0]) basis2 = sqa.sfExOp(basis[i][1]) unique = unique_tensor(reorga_two_to_one(basis1, basis2)) tensor = sqa.tensor('D' + class_names[i], unique, []) #symm(unique)) #NO! psi1_right.append(sqa.term(1.0, [''], [tensor, basis1, basis2])) basis1 = sqa.sfExOp([basis[i][1][t] for t in [1, 0]]) basis2 = sqa.sfExOp([basis[i][0][t] for t in [1, 0]]) unique = unique_tensor(reorga_two_to_one(basis1, basis2)) tensor = sqa.tensor('D' + class_names[i], unique, []) #symm(unique)) #NO! psi1_left.append(sqa.term(1.0, [''], [tensor, basis1, basis2])) # (LOG if want to debug) if print_log: print '//' print '// With the unique tensors found, |Psi1> is:' for right_term in psi1_right: print '// d_{:5} E_{:2} E_{:2} Class:{:6} OccPattern:{:9}'.format(\ code(indices_of_Tensor(right_term)[0]),\
k = sqa.index('Ak', [tag_active], True) l = sqa.index('Al', [tag_active], True) c = sqa.index('Vc', [tag_virtual], True) d = sqa.index('Vd', [tag_virtual], True) hsym = sqa.symmetry((1,0), 1) Dsym_a = sqa.symmetry((2,1, 0,3), 1) Dsym_b = sqa.symmetry((0,3, 2,1), 1) Dsym_c = sqa.symmetry((1,0, 3,2), 1) Tsym = sqa.symmetry((0,1, 2,3), 1) E_ijab = [sqa.sfExOp([i, j, a, b])] E_dclk = [sqa.sfExOp([d, c, l, k])] T_dclk = [sqa.tensor('T2', [k, l, c, d], [Tsym])] print "" print "Evaluation of the IC-MRCI Hamiltonian elements" print "based on the spin-free generator" print "" print "!!!!! The operator space is L: <Psi|", E_ijab[0], E_dclk[0], "|Psi>: R !!!!!" print "@@@ SIGMA(Ai, Aj, Va, Vb) <-- sum_{klcd} H(Ai, Aj, Va, Vb; Vd, Vc, Al, Ak) T(Ak, Al, Vc, Vd)" print "" result = [] for tag_h1_p in [tag_active, tag_virtual]: for tag_h1_q in [tag_active, tag_virtual]: p = sqa.index('p', [tag_h1_p], True) q = sqa.index('q', [tag_h1_q], True)
x1 = sqa.index('Au', [tag_active], True) x2 = sqa.index('Av', [tag_active], True) i1 = sqa.index('Cm', [tag_core], True) i2 = sqa.index('Cn', [tag_core], True) a1 = sqa.index('Vg', [tag_virtual], True) a2 = sqa.index('Vh', [tag_virtual], True) # Define symmetry classes hsym = sqa.symmetry((1, 0), 1) Dsym_a = sqa.symmetry((2, 1, 0, 3), 1) Dsym_b = sqa.symmetry((0, 3, 2, 1), 1) Dsym_c = sqa.symmetry((1, 0, 3, 2), 1) # Define tensors deltaC = sqa.tensor('deltac', [i1, i2], [hsym]) deltaA = sqa.tensor('deltaa', [x1, x2], [hsym]) deltaV = sqa.tensor('deltav', [a1, a2], [hsym]) # Define the normal-ordered overlap Cin = sqa.tensor('V', [a, b, i, j], [Dsym_c]) Cout = sqa.tensor('b', [c, d, l, k], [Dsym_c]) if (withC): Op1 = sqa.term(1.0, [''], [Cin, sqa.sfExOp([a, i]), sqa.sfExOp([b, j])]) Op2 = sqa.term(1.0, [''], [Cout, sqa.sfExOp([k, d]), sqa.sfExOp([l, c])]) else: Op1 = sqa.term(1.0, [''], [sqa.sfExOp([a, i]), sqa.sfExOp([b, j])]) Op2 = sqa.term(1.0, [''], [sqa.sfExOp([k, d]), sqa.sfExOp([l, c])]) result = sqa.normalOrder(sqa.multiplyTerms(Op2, Op1)) # Simplify the result
tag_active = sqa.options.active_type tag_virtual = sqa.options.virtual_type k = sqa.index('Ak', [tag_active], True) l = sqa.index('Al', [tag_active], True) m = sqa.index('Am', [tag_active], True) c = sqa.index('Vc', [tag_virtual], True) hsym = sqa.symmetry((1,0), 1) Dsym_a = sqa.symmetry((2,1, 0,3), 1) Dsym_b = sqa.symmetry((0,3, 2,1), 1) Dsym_c = sqa.symmetry((1,0, 3,2), 1) Tsym = sqa.symmetry((0,1, 2,3), 1) E_cmlk = [sqa.sfExOp([c, m, l, k])] T_klmc = [sqa.tensor('T2', [k, l, m, c], [Tsym])] print "" print "Evaluation of the IC-MRCI Hamiltonian elements" print "based on the spin-free generator" print "" print "!!!!! The operator space is L: <Psi|", E_cmlk[0], "|Psi>: R !!!!!" print "@@@ SIGMA_0 <-- sum_{klcd} H(0; Vd, Vc, Al, Ak) T(Ak, Al, Vc, Vd)" print "" result = [] for tag_h1_p in [tag_active, tag_virtual]: for tag_h1_q in [tag_active, tag_virtual]: p = sqa.index('p', [tag_h1_p], True) q = sqa.index('q', [tag_h1_q], True)
i4 = sqa.index('Cp', [tag_core], True) a1 = sqa.index('Vg', [tag_virtual], True) a2 = sqa.index('Vh', [tag_virtual], True) a3 = sqa.index('Ve', [tag_virtual], True) a4 = sqa.index('Vf', [tag_virtual], True) L = sqa.index('La', [tag_auxiliary], True) # Define symmetry classes hsym = sqa.symmetry((1,0), 1) Dsym_a = sqa.symmetry((2,1, 0,3), 1) Dsym_b = sqa.symmetry((0,3, 2,1), 1) Dsym_c = sqa.symmetry((1,0, 3,2), 1) # Define tensors K_C = sqa.tensor('int1c', [i1,i2], [hsym]) K_A = sqa.tensor('int1a', [x1,x2], [hsym]) K_V = sqa.tensor('int1v', [a1,a2], [hsym]) V_CA1l = sqa.tensor('int2Lcc', [L,i1,i2], []) V_CA1r = sqa.tensor('int2Laa', [L,x1,x2], []) V_CA2l = sqa.tensor('int2Lca', [L,i1,x2], []) V_CA2r = sqa.tensor('int2Lac', [L,x1,i2], []) V_CV1l = sqa.tensor('int2Lcc', [L,i1,i2], []) V_CV1r = sqa.tensor('int2Lvv', [L,a1,a2], []) V_CV2l = sqa.tensor('int2Lcv', [L,i1,a2], []) V_CV2r = sqa.tensor('int2Lvc', [L,a1,i2], []) V_AV1l = sqa.tensor('int2Laa', [L,x1,x2], []) V_AV1r = sqa.tensor('int2Lvv', [L,a1,a2], []) V_AV2l = sqa.tensor('int2Lav', [L,x1,a2], []) V_AV2r = sqa.tensor('int2Lva', [L,a1,x2], []) V_Cl = sqa.tensor('int2Lcc', [L,i1,i3], [])
i1 = sqa.index('Cm', [tag_core], True) i2 = sqa.index('Cn', [tag_core], True) i3 = sqa.index('Co', [tag_core], True) i4 = sqa.index('Co1', [tag_core], True) a1 = sqa.index('Vg', [tag_virtual], True) a2 = sqa.index('Vh', [tag_virtual], True) a3 = sqa.index('Ve', [tag_virtual], True) a4 = sqa.index('Vf', [tag_virtual], True) #h0 one body term hsym = sqa.symmetry((1,0), 1) Dsym_a = sqa.symmetry((2,1, 0,3), 1) Dsym_b = sqa.symmetry((0,3, 2,1), 1) Dsym_c = sqa.symmetry((1,0, 3,2), 1) K_C = sqa.tensor('int1c', [i1,i2], [hsym]) K_A = sqa.tensor('int1a', [x1,x2], [hsym]) K_V = sqa.tensor('int1v', [a1,a2], [hsym]) V_CA1 = sqa.tensor('int2ca1', [i1,x1, i2,x2], [Dsym_a, Dsym_b]) V_CA2 = sqa.tensor('int2ca2', [i1,x1, x2,i2], []) V_CV1 = sqa.tensor('int2cv1', [i1,a1, i2,a2], [Dsym_a, Dsym_b]) V_CV2 = sqa.tensor('int2cv2', [i1,a1, a2,i2], []) V_AV1 = sqa.tensor('int2av1', [x1,a1, x2,a2], [Dsym_a, Dsym_b]) V_AV2 = sqa.tensor('int2av2', [x1,a1, a2,x2], []) V_C = sqa.tensor('int2c', [i1,i2, i3,i4], [Dsym_a, Dsym_b, Dsym_c]) V_A = sqa.tensor('int2a', [x1,x2, x3,x4], [Dsym_a, Dsym_b, Dsym_c]) V_V = sqa.tensor('int2v', [a1,a2, a3,a4], [Dsym_a, Dsym_b, Dsym_c])
'ccaa','vaca','avca','vaaa','caaa'] basis=[[gimme('vc'),gimme('vc')],\ [gimme('vc'),gimme('va')],\ [gimme('ac'),gimme('vc')],\ [gimme('va'),gimme('va')],\ [gimme('ac'),gimme('ac')],\ [gimme('vc'),gimme('aa')],\ [gimme('ac'),gimme('va')],\ [gimme('va'),gimme('aa')],\ [gimme('ac'),gimme('aa')]] Psi1Right = [] Psi1Left = [] for i in range(9): basis1 = sqa.sfExOp(basis[i][0]) basis2 = sqa.sfExOp(basis[i][1]) tensor = sqa.tensor('D' + names[i], unique_tensor(from_basis(basis1, basis2)), []) print '1:',code(unique_tensor (from_basis(basis1,basis2))),\ code(unique_tensor_old(from_basis(basis1,basis2))) Psi1Right.append(sqa.term(1.0, [''], [tensor, basis1, basis2])) basis1 = sqa.sfExOp([basis[i][1][t] for t in [1, 0]]) basis2 = sqa.sfExOp([basis[i][0][t] for t in [1, 0]]) tensor = sqa.tensor('D' + names[i], unique_tensor(from_basis(basis1, basis2)), []) print '1:',code(unique_tensor (from_basis(basis1,basis2))),\ code(unique_tensor_old(from_basis(basis1,basis2))) Psi1Left.append(sqa.term(1.0, [''], [tensor, basis1, basis2])) # H ----------------------------------------------------------------------------------------------- # H = t E2 + w E4 # where for "E4":
i2 = sqa.index('Cn', [tag_core], True) i3 = sqa.index('Co', [tag_core], True) i4 = sqa.index('Cp', [tag_core], True) a1 = sqa.index('Vg', [tag_virtual], True) a2 = sqa.index('Vh', [tag_virtual], True) a3 = sqa.index('Ve', [tag_virtual], True) a4 = sqa.index('Vf', [tag_virtual], True) # Define symmetry classes hsym = sqa.symmetry((1, 0), 1) Dsym_a = sqa.symmetry((2, 1, 0, 3), 1) Dsym_b = sqa.symmetry((0, 3, 2, 1), 1) Dsym_c = sqa.symmetry((1, 0, 3, 2), 1) # Define tensors K_C = sqa.tensor('Wcc', [i1, i2], [hsym]) K_A = sqa.tensor('Waa', [x1, x2], [hsym]) K_V = sqa.tensor('Wvv', [a1, a2], [hsym]) V_A = sqa.tensor('Waaaa', [x1, x2, x3, x4], [Dsym_a, Dsym_b, Dsym_c]) V_C = sqa.tensor('Wcccc', [i1, i2, i3, i4], [Dsym_a, Dsym_b, Dsym_c]) V_V = sqa.tensor('Wvvvv', [a1, a2, a3, a4], [Dsym_a, Dsym_b, Dsym_c]) V_CA1 = sqa.tensor('Wcaca', [i1, x1, i2, x2], [Dsym_a, Dsym_b]) V_CA2 = sqa.tensor('Wcaac', [i1, x1, x2, i2], []) V_CV1 = sqa.tensor('Wcvcv', [i1, a1, i2, a2], [Dsym_a, Dsym_b]) V_CV2 = sqa.tensor('Wcvvc', [i1, a1, a2, i2], []) V_AV1 = sqa.tensor('Wavav', [x1, a1, x2, a2], [Dsym_a, Dsym_b]) V_AV2 = sqa.tensor('Wavva', [x1, a1, a2, x2], []) deltaC = sqa.tensor('deltac', [i1, i2], [hsym]) deltaA = sqa.tensor('deltaa', [x1, x2], [hsym]) deltaV = sqa.tensor('deltav', [a1, a2], [hsym])
# definitions tg_c = sqa.options.core_type tg_a = sqa.options.active_type tg_v = sqa.options.virtual_type tg_t = tg_c + tg_a + tg_v i = [sqa.index('i%i' % j, [tg_c], True) for j in range(8)] r = [sqa.index('r%i' % j, [tg_a], True) for j in range(8)] a = [sqa.index('a%i' % j, [tg_v], True) for j in range(8)] m = [sqa.index('m%i' % j, [tg_t], True) for j in range(8)] n = [sqa.index('n%i' % j, [tg_t], True) for j in range(8)] t_sym = [sqa.symmetry((1, 0, 3, 2), 1)] W_sym = [sqa.symmetry((1, 0, 3, 2), 1), sqa.symmetry((0, 3, 2, 1), 1)] W_ts_ket = [sqa.tensor('W', [a[2], a[3], i[2], i[3]], W_sym)] W_ops_ket = [sqa.sfExOp([i[2], i[3], a[2], a[3]])] t_ts_bra = [sqa.tensor('t2', [i[0], i[1], a[0], a[1]], t_sym)] t_ops_bra = [sqa.sfExOp([a[0], a[1], i[0], i[1]])] terms = [] #Op1 = t_ts_ket_1 + t_ops_ket_1 + W_ts_ket_1 + W_ops_ket_1 + W_ts_bra_1 + W_ops_bra_1 + t_ts_bra_1 + t_ops_bra_1 #terms.append( sqa.term( 1.0, [], Op1) ) #Op2 = t_ts_ket_2 + t_ops_ket_2 + W_ts_ket_2 + W_ops_ket_2 + W_ts_bra_1 + W_ops_bra_1 + t_ts_bra_1 + t_ops_bra_1 #terms.append( sqa.term( 1.0, [], Op2) ) #Op3 = t_ts_ket_1 + t_ops_ket_1 + W_ts_ket_1 + W_ops_ket_1 + W_ts_bra_2 + W_ops_bra_2 + t_ts_bra_2 + t_ops_bra_2 #terms.append( sqa.term( 1.0, [], Op3) ) #Op4 = t_ts_ket_2 + t_ops_ket_2 + W_ts_ket_2 + W_ops_ket_2 + W_ts_bra_2 + W_ops_bra_2 + t_ts_bra_2 + t_ops_bra_2 #Op4 = t_ops_ket_2 + W_ops_ket_2 + W_ops_bra_2 + t_ops_bra_2 #Op4 = t_ops_ket_2 + W_ops_ket_2
x1 = sqa.index('Au', [tag_active], True) x2 = sqa.index('Av', [tag_active], True) i1 = sqa.index('Cm', [tag_core], True) i2 = sqa.index('Cn', [tag_core], True) a1 = sqa.index('Vg', [tag_virtual], True) a2 = sqa.index('Vh', [tag_virtual], True) # Define symmetry classes hsym = sqa.symmetry((1,0), 1) Dsym_a = sqa.symmetry((2,1, 0,3), 1) Dsym_b = sqa.symmetry((0,3, 2,1), 1) Dsym_c = sqa.symmetry((1,0, 3,2), 1) # Define tensors deltaC = sqa.tensor('deltac', [i1,i2], [hsym]) deltaA = sqa.tensor('deltaa', [x1,x2], [hsym]) deltaV = sqa.tensor('deltav', [a1,a2], [hsym]) # Define the normal-ordered overlap Cin = sqa.tensor('V', [i,j,p,a], []) Cout = sqa.tensor('b', [k,l,q,b], []) if (withC): Op1 = sqa.term( 1.0, [''], [Cin, sqa.sfExOp([p, i]) , sqa.sfExOp([a, j])]) Op2 = sqa.term( 1.0, [''], [Cout, sqa.sfExOp([l, b]) , sqa.sfExOp([k, q])]) else: Op1 = sqa.term( 1.0, [''], [sqa.sfExOp([p, i]) , sqa.sfExOp([a, j])]) Op2 = sqa.term( 1.0, [''], [sqa.sfExOp([l, b]) , sqa.sfExOp([k, q])]) result = sqa.normalOrder(sqa.multiplyTerms(Op2, Op1)) # Simplify the result
print "" print "Evaluation of the IC-MRCI Hamiltonian elements" print "based on the spin-free generator" print "" print "!!!!! The operator space is L: <Psi|", E_ijka , "|Psi>: R !!!!!" print "@@@ SIGMA(Ai, Aj, Ak, Va) <-- H(Ai, Aj, Ak, Va;0) T(0)" print "" result = [] for tag_h1_p in [tag_active, tag_virtual]: for tag_h1_q in [tag_active, tag_virtual]: p = sqa.index('p', [tag_h1_p], True) q = sqa.index('q', [tag_h1_q], True) E_pq = [sqa.sfExOp([p, q])] h_pq = sqa.tensor('h', [p, q], [hsym]) term1 = sqa.term( 1.0, ["T0"], E_ijka + [h_pq] + E_pq) batch1 = sqa.normalOrder(term1) sqa.removeVirtOps_sf(batch1) for t in batch1: t.contractDeltaFuncs_new() sqa.combineTerms(batch1) sqa.termChop(batch1) result += batch1