예제 #1
0
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
예제 #2
0
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
예제 #3
0
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)
예제 #6
0
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 = []
예제 #7
0
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()
예제 #8
0
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:
예제 #9
0
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"