def cleanup_normalordered(result, deltas): t0 = time.clock() length = len(result) for t in result: t.contractDeltaFuncs_new() sqa.removeVirtOps_sf(result) sqa.termChop(result) sqa.combineTerms(result) result2 = [] for t in result: result2 += sqa.contractCoreOps_sf(t) for t in result2: t.contractDeltaFuncs_new() sqa.termChop(result2) sqa.combineTerms(result2) result = [] for r in result2: item1 = geraldCode.replaceRepeatIndicesWithDeltas(r, deltas) item2 = geraldCode.replaceSingleKdeltaWithDeltas(item1, deltas) result.append(geraldCode.replaceAllKdeltaWithDeltas(item2, deltas)) print 'cleanup time: (', length, '->', len(result), ')', time.clock() - t0 del result2
def simplify_all(result, deltas, cumulantE4=False, cumulantE3=False): for t in result: t.contractDeltaFuncs_new() sqa.removeVirtOps_sf(result) sqa.termChop(result) sqa.combineTerms(result) extendedR = [] for t in result: extendedR += sqa.contractCoreOps_sf(t) for t in extendedR: t.contractDeltaFuncs_new() sqa.termChop(extendedR) sqa.combineTerms(extendedR) result = [] for r in extendedR: item1 = replaceRepeatIndicesWithDeltas(r, deltas) item2 = replaceSingleKdeltaWithDeltas(item1, deltas) result.append(replaceAllKdeltaWithDeltas(item2, deltas)) if (cumulantE4): x1 = sqa.index('Ax1', [sqa.options.active_type], True) x2 = sqa.index('Ax2', [sqa.options.active_type], True) x3 = sqa.index('Ax3', [sqa.options.active_type], True) x4 = sqa.index('Ax4', [sqa.options.active_type], True) x5 = sqa.index('Ax5', [sqa.options.active_type], True) x6 = sqa.index('Ax6', [sqa.options.active_type], True) sqa.decomp_4rdms_to_3rdms_sf(result, 'E4', sqa.sfExOp([x1, x2]), sqa.sfExOp([x1, x2, x3, x4]), sqa.sfExOp([x1, x2, x3, x4]), sqa.sfExOp([x1, x2, x3, x4]), sqa.sfExOp([x1, x2, x3, x4, x5, x6])) if (cumulantE3): x1 = sqa.index('Ax1', [sqa.options.active_type], True) x2 = sqa.index('Ax2', [sqa.options.active_type], True) x3 = sqa.index('Ax3', [sqa.options.active_type], True) x4 = sqa.index('Ax4', [sqa.options.active_type], True) sqa.decomp_3rdms_to_2rdms_sf(result, 'E3', sqa.sfExOp([x1, x2]), sqa.sfExOp([x1, x2, x3, x4])) return result
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 for t in result: t.contractDeltaFuncs_new() sqa.removeVirtOps_sf(result) sqa.termChop(result) sqa.combineTerms(result) extendedR=[] for t in result: extendedR += sqa.contractCoreOps_sf(t) for t in extendedR: t.contractDeltaFuncs_new() sqa.termChop(extendedR) sqa.combineTerms(extendedR) result = [] rdmDelta = [deltaC, deltaA, deltaV] for r in extendedR: item1=geraldCode.replaceRepeatIndicesWithDeltas(r, rdmDelta) item2=geraldCode.replaceSingleKdeltaWithDeltas(item1, rdmDelta) result.append(geraldCode.replaceAllKdeltaWithDeltas(item2, rdmDelta)) # Write out the equation for A.p
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, [], [h_pq] + E_pq + T_klmc + E_cmlk) batch1 = sqa.normalOrder(term1) sqa.removeVirtOps_sf(batch1) for t in batch1: t.contractDeltaFuncs_new() sqa.combineTerms(batch1) sqa.termChop(batch1) result += batch1 sqa.combineTerms(result) sqa.termChop(result) for tag_h2_p in [tag_active, tag_virtual]: for tag_h2_q in [tag_active, tag_virtual]: for tag_h2_r in [tag_active, tag_virtual]: for tag_h2_s in [tag_active, tag_virtual]: p = sqa.index('p', [tag_h2_p], True) q = sqa.index('q', [tag_h2_q], True) r = sqa.index('r', [tag_h2_r], True)
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, [], [h_pq] + E_pq + T_klmc + E_cmlk) batch1 = sqa.normalOrder(term1) sqa.removeVirtOps_sf(batch1) for t in batch1: t.contractDeltaFuncs_new() sqa.combineTerms(batch1) sqa.termChop(batch1) result += batch1 sqa.combineTerms(result) sqa.termChop(result) for tag_h2_p in [tag_active, tag_virtual]: for tag_h2_q in [tag_active, tag_virtual]: for tag_h2_r in [tag_active, tag_virtual]: for tag_h2_s in [tag_active, tag_virtual]: p = sqa.index('p', [tag_h2_p], True) q = sqa.index('q', [tag_h2_q], True) r = sqa.index('r', [tag_h2_r], True)
print "" print "contract form" for t in result: t.contractDeltaFuncs() print t print "" print "remove near zero terms" sqa.termChop(result) for t in result: print t print "" #sqa.combineTerms(result, maxThreads = 5) sqa.combineTerms(result) print "combined terms" for t in result: print t print "" print "change idx" result2 = [] for t in result: tmp = sqa.idxname( t ) result2.append( tmp ) print tmp print "" #print "obtain weight factors" #result3 = []
result2 = [] result3 = [] result4 = [] for t in commutator1: result1 += sqa.normalOrder(sqa.multiplyTerms(E_aiEbj2a, t)) result2 += sqa.normalOrder(sqa.multiplyTerms(E_aiEbj2b, t)) for t in commutator2: result3 += sqa.normalOrder(sqa.multiplyTerms(E_aiEbj2a, t)) result4 += sqa.normalOrder(sqa.multiplyTerms(E_aiEbj2b, t)) for t in result1+result2+result3+result4: t.contractDeltaFuncs_new() sqa.removeVirtOps_sf(result1) sqa.termChop(result1) sqa.combineTerms(result1) sqa.removeVirtOps_sf(result2) sqa.termChop(result2) sqa.combineTerms(result2) sqa.removeVirtOps_sf(result3) sqa.termChop(result3) sqa.combineTerms(result3) sqa.removeVirtOps_sf(result4) sqa.termChop(result4) sqa.combineTerms(result4) extendedR1=[] for t in result1: extendedR1 += sqa.contractCoreOps_sf(t) for t in extendedR1: t.contractDeltaFuncs_new()
for i in range(20): fixedInd.append(sqa.index('j%i' % i, [], False)) # Test 1: Normal ordering of a(j1) a(j2) a+(j3) a+(j4) print "" print "Starting test 1" print "" startTime = time.time() test1_tensors = [] test1_tensors.append(sqa.desOp(fixedInd[1])) test1_tensors.append(sqa.desOp(fixedInd[2])) test1_tensors.append(sqa.creOp(fixedInd[3])) test1_tensors.append(sqa.creOp(fixedInd[4])) test1_term = sqa.term(1.0, [], test1_tensors) test1_output = sqa.normalOrder(test1_term) sqa.combineTerms(test1_output) test1_string_output = '' for t in test1_output: test1_string_output += str(t) + '\n' test1_correct_answer = " ( -1.00000) kdelta(j1,j3) kdelta(j2,j4) \n" + \ " ( 1.00000) kdelta(j1,j4) kdelta(j2,j3) \n" + \ " ( 1.00000) kdelta(j1,j3) cre(j4) des(j2) \n" + \ " ( -1.00000) kdelta(j1,j4) cre(j3) des(j2) \n" + \ " ( -1.00000) kdelta(j2,j3) cre(j4) des(j1) \n" + \ " ( 1.00000) kdelta(j2,j4) cre(j3) des(j1) \n" + \ " ( 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:
sqa.options.verbose = False # definitions tg_core = sqa.options.core_type tg_active = sqa.options.active_type tg_virtual = sqa.options.virtual_type a1 = sqa.index('a1', [tg_active], False) b1 = sqa.index('b1', [tg_active], False) a2 = sqa.index('a2', [tg_active], False) b2 = sqa.index('b2', [tg_active], False) a3 = sqa.index('a3', [tg_active], False) b3 = sqa.index('b3', [tg_active], False) a4 = sqa.index('a4', [tg_active], False) b4 = sqa.index('b4', [tg_active], False) a = sqa.index('a', [tg_active], True) result = [] term = sqa.term(1.0, [], [sqa.sfExOp([a1,b1])] + [sqa.sfExOp([a2,b2])] + [sqa.sfExOp([a3,b3])]) result += sqa.normalOrder(term) for t in result: t.contractDeltaFuncs() sqa.combineTerms(result) print "results" for t in result: print t
print tmp print "" print "contract form" for t in result: t.contractDeltaFuncs() print t print "" print "remove near zero terms" sqa.termChop(result) for t in result: print t print "" sqa.combineTerms(result, maxThreads=10) #sqa.combineTerms(result) print "combined terms" for t in result: print t print "" print "change idx" result2 = [] for t in result: tmp = sqa.idxname(t) result2.append(tmp) print tmp print "" print "obtain weight factors"