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))
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, [], [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]:
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, [], [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]:
HD_AV1 = sqa.term( 1.0, [""], [V_AV1, sqa.sfExOp([x1,a1,x2,a2])] ) HD_AV2 = sqa.term( 1.0, [""], [V_AV2, sqa.sfExOp([x1,a1,a2,x2])] ) 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])]) ''' result = sqa.normalOrder(sqa.multiplyTerms(E_aiEbj2b, E_aiEbj1b)) for t in result: t.contractDeltaFuncs_new() sqa.removeVirtOps_sf(result) sqa.termChop(result) sqa.combineTerms(result) extendedR1=[] for t in result: extendedR1 += sqa.contractCoreOps_sf(t) for t in extendedR1: t.contractDeltaFuncs_new() sqa.termChop(extendedR1) sqa.combineTerms(extendedR1) for t in extendedR1: print t
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 term2 = sqa.term(-1.0, [], E_ijka + E_bnml + [h_pq] + E_pq) batch2 = sqa.normalOrder(term2) for t in batch2: t.contractDeltaFuncs_new()
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 term2 = sqa.term(-1.0, [], E_ijka + E_bnml + [h_pq] + E_pq) batch2 = sqa.normalOrder(term2) for t in batch2: t.contractDeltaFuncs_new()