Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Third-order ISR properties #155

Open
wants to merge 27 commits into
base: master
Choose a base branch
from
Open

Conversation

RMaier1
Copy link

@RMaier1 RMaier1 commented Oct 5, 2022

Implemented with @BauerMarco

Features:
Consistent third order properties for

  • transition_dm
  • modified_transition_moments
  • state2state_transition_dm
  • diff_dm (ground and excited state)

Keywords:

  • properties_level

Additional comments:
Default property level for ADC(3) calculations remains ADC(3/2). Consistent third order properties can be requested using the properties_level keyword.
Testing procedure still has to be adapted.

Marco Bauer and others added 25 commits July 13, 2022 14:03
…rrected permutation symmetry in make_symmetry.cc
…of third order tdm and s2s. Second order triples amplitude will be added soon.#
…of third order tdm and s2s. Second order triples amplitude will be added soon.
…econd order triples MP amplitude, as well as the third order properties. No symmetry function is included yet, but since the second order triples MP amplitude doesn't provide symmetry by swapping two indices, only spin symmetry for restricted case should be included (tbd).
…ts, that use or return a tensor of maximum dimension 6
…of third order tdm and s2s. Includes Bugfixes.
…of third order tdm and s2s. Includes Bugfixes. Base version (working)
…hird order tdm and s2s. t-amps and tdm already sped up
@maxscheurer maxscheurer changed the title consistent third order one-particle properties Third-order ISR properties Oct 5, 2022
Copy link
Member

@maxscheurer maxscheurer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some initial comments. Regarding the implementation, this looks pretty good already. We'll figure out the test system changes, should not be too hard.

@cached_property
@mark_excitation_property()
@timed_member_call(timer="_property_timer")
def s2s_transition_dipole_moments(self):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should not be here, it's already implemented here.
BTW transition dipole moments should not include the permanent ground state dipole moment 😄

@cached_property
@mark_excitation_property()
@timed_member_call(timer="_property_timer")
def s2s_transition_dm(self):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See comment above.

def describe(self, oscillator_strengths=True, rotatory_strengths=False,
state_dipole_moments=False, transition_dipole_moments=False,
block_norms=True):
block_norms=True, s2s_transition_dipole_moments=False):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove this as per comment above.

adcc/LazyMp.py Outdated
@@ -93,6 +93,93 @@ def td2(self, space):
- 0.5 * self.t2eri(b.oovv, b.oo)
) / denom

@cached_member_function
def tt2(self, space):
"""Second prder triple amplitudes"""
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"""Second prder triple amplitudes"""
"""Second order triples amplitudes"""

Comment on lines 76 to 82
+ einsum('ib,ab->ia', ts3, dipop.vv)
- einsum('ja,ji->ia', ts3, dipop.oo)
- einsum('ijab,jb->ia', td3, dipop.ov)
+ einsum('ijab,kb,jk->ia', t2, p0.ov, dipop.oo)
+ einsum('jkab,kb,ji->ia', t2, p0.ov, dipop.oo)
- einsum('ijbc,jc,ab->ia', t2, p0.ov, dipop.vv)
- einsum('ijab,jc,cb->ia', t2, p0.ov, dipop.vv)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add the 1.0 prefactors for consistency with the rest of the code block. This is whay we (hopefully) do throughout adcc.

@@ -327,4 +327,76 @@ std::shared_ptr<Symmetry> make_symmetry_operator_basis(
return sym;
}

/**
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are these changes commented out? Are they required/will they be required for future work?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the libadcc backend I introduced two things, which I commented out.

The first one is straightforward, where we initially also wanted to include quadruples for testing purposes, and since they might be required by a certain other member of the group in the near future I just commented them out, instead of removing them. I agree however, since they are straightforward, to just leave them out, if you want me to.

The second one, which is also what you are pointing at, was an initial approach to build a proper object, which makes use of the symmetry (also regarding spin-symmetry) of the triples tensor. I wanted to come back to this symmetry object, but at least for the third order properties it's not worth it, as you will see from a benchmark, which will be published in the near future. However, I left it in there, because other approaches, which include triples, might be worth the effort.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants