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
# 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 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))
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) s = sqa.index('s', [tag_h2_s], 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) s = sqa.index('s', [tag_h2_s], True)
print "HF Fermi expectation form" result = [] for t in Nterms2: tmp = sqa.HFFermi( t ) result.append( tmp ) 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 = 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 )
result1 = [] 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: