Replies: 3 comments 3 replies
-
Hi Ta, In fact, the total correlation energy (from the standard "wave function functional") is calculated as a linear sum over fragment contributions. These can be found under The problem with "per fragment properties" is that they do not represent observables. This starts from the very beginning, from the ambiguous question of how electron density can be assigned to a fragment of a system. It then appears again, when splitting the interaction energy between fragments. In Vayesta, we do this splitting using ambiguous projections all the time, but as we only perform the splitting to apply individual, local approximations and look at the sum of the split quantity in the end, we can simply see it as a technique to speed up the calculation. It is possible that fragment quantities can be predictive, but this would need to be supported by data. |
Beta Was this translation helpful? Give feedback.
-
Just to add to this, local non-energetic expectation values can be obtained from N-representable RDMs once reconstructed from the fragmented wave functions (noting arbitrariness as discussed by Max's point above re. choice of projector). Examples of this can be found in e.g. |
Beta Was this translation helpful? Give feedback.
-
I think you just need to add the classical core-core repulsion energy
(`mf.energy_nuc()` if memory serves).
Even if the CCSD is not satisfactory for the system, the fragmented
energies should still add up correctly.
…On Tue, 6 Jun 2023, 06:02 kuitpo, ***@***.***> wrote:
Hi maxnus,
Okay, back to Vayesta for a while.
Summing the fragment energies doesn't give me anything close to the total.
"we=-1437.6" is more than double the total.
What am I doing wrong?
The CCSD D1 statistic is labelled unsatisfactory, but would that give rise
to such an error?
mol = gto.M(verbose=4, basis='cc-pVDZ', atom=atoms, \
max_memory=30000)
mf = pyscf.scf.RHF(mol)
mf.kernel()
emb = vayesta.ewf.EWF(mf, solver='CCSD', bath_options=dict(threshold=1e-6), solver_options=dict(init_guess='CISD'))
with emb.iaopao_fragmentation() as f:
f.add_atomic_fragment([1,5,4,6,7,8,0,9,10,11])
f.add_atomic_fragment([3,2,12,16])
f.add_atomic_fragment([13,17,18])
f.add_atomic_fragment([15,14,19,23])
f.add_atomic_fragment([20,24,22,25,26,27,21,28,29,30])
emb.kernel()
we = 0.0
for i, frag in enumerate(emb.get_fragments()):
ce = frag.results.e_corr
mfe = frag.get_fragment_mf_energy()
te = ce + mfe
te_kc = te * 627.509608
print(f'frag {i} ce={ce:.8f} mfe={mfe:.8f} te={te:.8f} te_kc={te_kc:.8f}')
we += te
print(f'we={we:.8f}')
print("E(HF)= %+16.8f Ha" % mf.e_tot)
print("E(Emb. CCSD)= %+16.8f Ha" % emb.e_tot)
output:
frag 0 ce=-0.48753144 mfe=-304.64289540 te=-305.13042683
te_kc=-191472.27453093
frag 1 ce=-0.48202677 mfe=-361.22611493 te=-361.70814170
te_kc=-226975.33421039
frag 2 ce=-0.15000890 mfe=-109.27879484 te=-109.42880374
te_kc=-68667.62574171
frag 3 ce=-0.48284956 mfe=-359.17003896 te=-359.65288852
te_kc=-225685.64308999
frag 4 ce=-0.48192401 mfe=-301.21879238 te=-301.70071639
te_kc=-189320.09827376
we=-1437.62097719
E(HF)= -610.01230739 Ha
E(Emb. CCSD)= -612.09664806 Ha
—
Reply to this email directly, view it on GitHub
<#90 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ADBNUNX5ACGMWWQKGFBIIM3XJ22WFANCNFSM6AAAAAAYETNFJM>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
While I gather Vayesta is aimed at speeding calculation of whole system properties rather than calculating fragment properties, I wonder if it is possible to obtain fragment properties such as energy and dipole? Ideally the sum of the fragment energies would sum to the whole system energy, but energy of a fragment and the energy of its interaction with its environment would also have its uses.
Ta.
Beta Was this translation helpful? Give feedback.
All reactions