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

SAPT(DFT) MO disk I/O optimization & Exchange-Dispersion scaling scheme update #2481

Merged
merged 46 commits into from
Nov 22, 2022

Conversation

yxie326
Copy link
Contributor

@yxie326 yxie326 commented Mar 16, 2022

Description

Optimizes the integral transformation step of SAPT(DFT), in which the transformed MO needs to be written to the disk. The STORE scheme in src/psi4/lib3index/dfhelper.cc has problem in writing blocks of integrals efficiently, and this PR changes it to direct_iaQ to optimize the writing process. Also fixed a few memory related bugs and modified a few timer tags.
The deafult scaling scheme of SAPT(DFT) exchange-dispersion energy is now changed from DISP to FIXED. It scales the uncoupled Exch-Disp2 by 0.769848. Deeper details are discussed in the paper [Y. Xie, D. G. A. Smith, and C. D. Sherrill, J. Chem. Phys. 157, 024801 (2022)].
The SAPT(DFT) procedure is also optimized for the case that SAPT_DFT_FUNCTIONAL = HF, i.e. running SAPT0 with the SAPT(DFT) driver, to avoid redundant SCF calculations.

Todos

  • Optimization of disk I/O in SAPT(DFT) integral transformation
  • Fixed minor memory related bugs and modified timer tags
  • Switched default exch-disp scaling scheme to FIXED (default factor 0.769848)
  • Optimization of SAPT(HF) procedure

Questions

  • Question1

Checklist

Status

  • Ready for review
  • Ready for merge

@JonathonMisiewicz
Copy link
Contributor

This PR includes your work-in-progress implementation of automatic GRAC shifts, which is not ready for review. Please revise the PR to only include the code that is actually supposed to be part of the PR.

@JonathonMisiewicz JonathonMisiewicz added dft For issues specific to DFT and their many functionals. efficiency For issues about code in Psi needing a disturbing amount of time and/or memory. sapt For issues about SAPT and its many flavors. labels Mar 16, 2022
@yxie326
Copy link
Contributor Author

yxie326 commented Mar 16, 2022

This PR includes your work-in-progress implementation of automatic GRAC shifts, which is not ready for review. Please revise the PR to only include the code that is actually supposed to be part of the PR.

Done. I've completely removed the automatic GRAC shift computations, because this could be non-trivial due to uncertain SCF converging issues, and I and Dr. Sherrill have agreed to postpone this feature until we find a better solution.

psi4/src/read_options.cc Show resolved Hide resolved
psi4/src/psi4/libsapt_solver/fdds_disp.cc Outdated Show resolved Hide resolved
@@ -232,6 +232,7 @@ void DFHelper::AO_core() {
required_core_size_ += 3 * nbf_ * nbf_ * Qshell_max_;

// a fraction of memory to use, do we want it as an option?
// Set mem_frac to 0.5 when a direct metric contraction is needed (last part of DFHelper::transform()) to save memory for M and F
Copy link
Contributor

Choose a reason for hiding this comment

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

Why is this comment here? mem_frac isn't even set here.

Copy link
Contributor Author

@yxie326 yxie326 Mar 17, 2022

Choose a reason for hiding this comment

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

I later decided that this should not be set. Removed the comment (not yet committed, planning to commit it along with clear_AO())

psi4/src/psi4/lib3index/dfhelper.h Outdated Show resolved Hide resolved
psi4/driver/procrouting/sapt/sapt_proc.py Show resolved Hide resolved
@JonathonMisiewicz
Copy link
Contributor

Ping me for review again when you have this passing tests.

@JonathonMisiewicz
Copy link
Contributor

While I appreciate that tests are now passing, I still request changes.

  • Comments that refer to methods that no longer exist need to be removed.
  • The comment on dfhelper's release_AO is vague. What does it mean to "release AO"? Are you clearing memory used to store some AO-basis quantity?
  • Naming a method "release_AO" that does not actually release AO is confusing. You need to change this.
  • The title of this PR is misleading. This PR is not just optimizing I/O. This PR is changing the values that Psi gives for SAPT(DFT) due to the options edits. Are these edits supposed to be part of the PR or not? That's going to determine how the rest of this review process goes.

@yxie326 yxie326 changed the title SAPT(DFT) MO disk I/O optimization SAPT(DFT) MO disk I/O optimization & Exchange-Dispersion scaling scheme update May 9, 2022
@yxie326
Copy link
Contributor Author

yxie326 commented May 9, 2022

Comments that refer to methods that no longer exist need to be removed.

I'm not quite sure what do they refer to...

Copy link
Contributor

@JonathonMisiewicz JonathonMisiewicz left a comment

Choose a reason for hiding this comment

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

I want @CDSherrill to confirm that these changes to the SAPT parameters are meant to come in now.

The fact that you can change this parameter without breaking tests indicate that our SAPT(DFT) tests are not good enough.

psi4/src/psi4/lib3index/dfhelper.cc Outdated Show resolved Hide resolved
@@ -2015,7 +2016,13 @@ void DFHelper::transform() {

// transformations complete, time for metric contractions
Copy link
Contributor

Choose a reason for hiding this comment

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

What is the transform function trying to accomplish? The function isn't properly documented, and I can't review the code without that.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This transform function converts 3-index integrals with AO functions (pq|Q) to those with MO functions. The details of how they should be transformed are configured via other functions like add_space() and add_transformation(), and transform() performs the actual transformation with the configurations defined above.

Copy link
Member

@loriab loriab left a comment

Choose a reason for hiding this comment

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

partial review.

@@ -105,6 +105,9 @@ class PSI_API DFHelper {
void set_AO_core(bool core) { AO_core_ = core; }
bool get_AO_core() { return AO_core_; }

/// Switch flag for releasing AO (for SAPT(DFT))
Copy link
Member

Choose a reason for hiding this comment

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

More guidance in the comment would be helpful. Why would you want it released or when would you want it preserved?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The function transform() consists of 2 steps:

  1. Transforms 3-index integrals with AO basis (pq|Q) to those with MO basis such as (ia|Q)
  2. Contract it with a power of metric (since it will be useful in some density fitting algorithms). Most common choice of power would be -1/2 and this contraction would yield (ia|Q)(Q|Q')^(-1/2).

In SAPT(DFT) hybrid dispersion, when in-core AO is turned on, the AO integral (pq|Q) is saved in the memory after step 1, but it is not needed in step 2, and releasing it allows much better blockings in step 2. (In fact what actually happened is that the memory limit was exceeded when trying to run large calculations before allowing the release of (pq|Q) after step 1)

However, it seems that when we release it, it will cause some other modules to fail, in particular Rob's FISAPT program for computing exchange-dispersion energy. This might be because in FISAPT (pq|Q) are still needed in step 2, but I have not figured out why this is the case. To avoid further complexity, I decided to release (pq|Q) only in SAPT(DFT) hybrid dispersion by using this switch flag.

psi4/src/psi4/libsapt_solver/fdds_disp.cc Outdated Show resolved Hide resolved
psi4/src/read_options.cc Outdated Show resolved Hide resolved
psi4/src/psi4/lib3index/dfhelper.h Outdated Show resolved Hide resolved
@yxie326
Copy link
Contributor Author

yxie326 commented Jun 24, 2022

I want @CDSherrill to confirm that these changes to the SAPT parameters are meant to come in now.

The fact that you can change this parameter without breaking tests indicate that our SAPT(DFT) tests are not good enough.

I think we have manually set set SAPT_DFT_EXCH_DISP_SCALE_SCHEME disp in the previous SAPT(DFT) tests, and that's why changing the default value of SAPT_DFT_EXCH_DISP_SCALE_SCHEME from disp to fixed won't break the tests.
Should we update these tests with SAPT_DFT_EXCH_DISP_SCALE_SCHEME set to fixed?

@JonathonMisiewicz
Copy link
Contributor

Leave those tests as they are, and create new tests for the fixed option.

I also insist that you include a warning about those keyword changes in the documentation for SAPT(DFT), and in the output or logging file whenever SAPT(DFT) runs. This could cause users to get different numbers with the exact same input file.

@yxie326
Copy link
Contributor Author

yxie326 commented Oct 15, 2022

Created new test cases in the same input file, i.e. doing non-hybrid/hybrid+DISP/hybrid+FIXED in the same test file. I think this is the way to go since it is what we did when adding in the hybrid feature.

Warning messages added in documentation and SAPT(DFT) output.

@JonathonMisiewicz
Copy link
Contributor

Is this PR ready for another round of review? If so, please mark the "ready for review" option on the first post here. That's how core developers can tell if a PR is ready or not.

@yxie326
Copy link
Contributor Author

yxie326 commented Oct 17, 2022

core developers

Ready for review now, thanks.

@CDSherrill
Copy link
Member

I've discussed this PR with Yi. This is just to confirm that we want to change the default exch-disp scaling scheme, as the new one appears to be more reliable. Apparently the previous test case didn't break because the exch-disp scheme was manually selected in the test case, rather than utilizing the (updated) default.

Copy link
Contributor

@JonathonMisiewicz JonathonMisiewicz left a comment

Choose a reason for hiding this comment

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

We have no test coverage on the DFT_DO_DHF keyword, and this PR changes its behavior.

I'm going to request a separate PR that adds this test coverage. That PR must be merged in first, so that we can be sure this PR is not changing the results from that keyword.

@@ -1459,7 +1459,8 @@ void Matrix::axpy(double a, SharedMatrix X) {
}
for (int h = 0; h < nirrep_; h++) {
size_t size = colspi_[h ^ symmetry()] * (size_t)rowspi_[h];
if (size != (X->rowspi()[h] * X->colspi()[h ^ X->symmetry()])) {
size_t size_X = X->colspi()[h ^ X->symmetry()] * (size_t)X->rowspi()[h];
Copy link
Contributor

Choose a reason for hiding this comment

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

Why is this change necessary? Was there some issue with type casting?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes. If I remembered it correctly this some how broke down when large vectors were passed in.

doc/sphinxman/source/sapt.rst Show resolved Hide resolved
@yxie326
Copy link
Contributor Author

yxie326 commented Oct 18, 2022

We have no test coverage on the DFT_DO_DHF keyword, and this PR changes its behavior.

I'm going to request a separate PR that adds this test coverage. That PR must be merged in first, so that we can be sure this PR is not changing the results from that keyword.

Is a few new test cases everything that new PR should have, or should I cherry-pick the changes related to the DFT_DO_DHF keyword in this PR and apply to that one?

Copy link
Member

@loriab loriab left a comment

Choose a reason for hiding this comment

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

Thanks for the updates, Yi. Here's a few suggestions on notating the defaults changes.

tests/sapt-dft2/input.dat Outdated Show resolved Hide resolved
tests/sapt-dft1/input.dat Outdated Show resolved Hide resolved
psi4/src/read_options.cc Outdated Show resolved Hide resolved
psi4/src/read_options.cc Show resolved Hide resolved
doc/sphinxman/source/sapt.rst Outdated Show resolved Hide resolved
doc/sphinxman/source/sapt.rst Outdated Show resolved Hide resolved
@JonathonMisiewicz
Copy link
Contributor

The new PR should only have test changes. The point of me asking for this is to make sure that this PR does not change the DFT_DO_DHF results that the new PR will test.

@loriab
Copy link
Member

loriab commented Oct 19, 2022

Hi Yi,

Thanks for your work and the comments. I've been discussing some with Jonathon, and I think if you could do the below, that will clarify all the scaling factor and testing aspects of the PR, so we can move on to the I/O optimization and routing logic parts. Please let me know of any concerns.

  • accept the various GH suggestions clarifying the scaling scheme changes (only if you agree with them, of course). Feel free to make the changes locally, rather than through the GH interface, if that makes the git operations easier.
  • edit sapt-dft1 test to be something like the below. This adds an extra section without the deltaHF correction. The analogous value in test sapt-dft2 is DHF = -1.42620815. This passes on master for me, so having the dHF=False pass on your PR will help verify the separate routing logic you added. With this in place, there won't be a need to separate out tests into another PR.
#! SAPT(DFT) aug-cc-pVDZ interaction energy between Ne and Ar atoms.

DHF = -0.01189736  #TEST
Eref_nh = {"SAPT ELST ENERGY":  -0.10190449, #TEST
           "SAPT EXCH ENERGY":   0.36545706, #TEST
           "SAPT IND ENERGY":   -0.00840483, #TEST
           "SAPT DISP ENERGY":  -0.24398704, #TEST
           "CURRENT ENERGY":     0.01122234} #TEST

Eref_h_disp = {"SAPT ELST ENERGY":  -0.10197193, #TEST
               "SAPT EXCH ENERGY":   0.36569812, #TEST
               "SAPT IND ENERGY":   -0.00840370, #TEST
               "SAPT DISP ENERGY":  -0.26658499, #TEST
               "CURRENT ENERGY":    -0.01126250} #TEST

Eref_h_fixed = {"SAPT ELST ENERGY":  -0.10197193, #TEST
                "SAPT EXCH ENERGY":   0.36569812, #TEST
                "SAPT IND ENERGY":   -0.00840370, #TEST
                "SAPT DISP ENERGY":  -0.26605283, #TEST
                "CURRENT ENERGY":    -0.01073034} #TEST

molecule dimer {
  Ne
  --
  Ar 1 6.5
  units bohr
}

set {
    basis         aug-cc-pvdz
    scf_type      df
    sapt_dft_grac_shift_a 0.203293
    sapt_dft_grac_shift_b 0.138264
}

# No hybrid kernel & no exch-disp scaling & no deltaHF
set SAPT_DFT_DO_DHF False
set SAPT_DFT_DO_HYBRID False
set SAPT_DFT_EXCH_DISP_SCALE_SCHEME none
energy('sapt(dft)', molecule=dimer)
for k, v in Eref_nh.items():                           #TEST
    if k in ["SAPT IND ENERGY", "CURRENT ENERGY"]:
        ref = (v - DHF) / 1000.0
    else:
        ref = v / 1000.0
    compare_values(ref, psi4.variable(k), 6, "!hyb, xd=none, !dHF: " + k) #TEST

# No hybrid kernel & no exch-disp scaling
set SAPT_DFT_DO_DHF True
set SAPT_DFT_DO_HYBRID False
set SAPT_DFT_EXCH_DISP_SCALE_SCHEME none
energy('sapt(dft)', molecule=dimer)
for k, v in Eref_nh.items():                           #TEST
    compare_values(v / 1000.0, psi4.variable(k), 6, "!hyb, xd=none, dHF: " + k) #TEST

# Hybrid kernel & exch-disp scaling (DISP)
set SAPT_DFT_DO_HYBRID True
set SAPT_DFT_EXCH_DISP_SCALE_SCHEME disp
energy('sapt(dft)', molecule=dimer)
for k, v in Eref_h_disp.items():                       #TEST
    compare_values(v / 1000.0, psi4.variable(k), 6, "hyb, xd=disp, dHF: " + k) #TEST

# Hybrid kernel & exch-disp scaling (FIXED)
set SAPT_DFT_DO_HYBRID True
set SAPT_DFT_EXCH_DISP_SCALE_SCHEME fixed 
set SAPT_DFT_EXCH_DISP_FIXED_SCALE 0.770
energy('sapt(dft)', molecule=dimer)
for k, v in Eref_h_fixed.items():                      #TEST
    compare_values(v / 1000.0, psi4.variable(k), 6, "hyb, xd=fixed, dHF: " + k) #TEST

  • I think it should be clear from the output file what exch-disp scheme/scale is applied. So perhaps add a couple lines to the printout like below. This should also satisfy Jonathon's request that the output file show the change in scaling defaults.
  ==> E20 Dispersion (MP2) <==


    Disp20 (MP2)                     -0.37881730 [mEh]
    Exch-Disp20,u                     0.02037338 [mEh]
    Scaling Scheme:                   Disp
    Scaling Factor:                   0.707

   SAPT(DFT) Results
  ---------------------------------------------------------------------------------------------------------
    Electrostatics                   -0.10197192 [mEh]     -0.06398835 [kcal/mol]     -0.26772724 [kJ/mol]
      Elst1,r                        -0.10197192 [mEh]     -0.06398835 [kcal/mol]     -0.26772724 [kJ/mol]

@yxie326
Copy link
Contributor Author

yxie326 commented Oct 19, 2022

Hi Yi,

Thanks for your work and the comments. I've been discussing some with Jonathon, and I think if you could do the below, that will clarify all the scaling factor and testing aspects of the PR, so we can move on to the I/O optimization and routing logic parts. Please let me know of any concerns.

  • accept the various GH suggestions clarifying the scaling scheme changes (only if you agree with them, of course). Feel free to make the changes locally, rather than through the GH interface, if that makes the git operations easier.
  • edit sapt-dft1 test to be something like the below. This adds an extra section without the deltaHF correction. The analogous value in test sapt-dft2 is DHF = -1.42620815. This passes on master for me, so having the dHF=False pass on your PR will help verify the separate routing logic you added. With this in place, there won't be a need to separate out tests into another PR.
#! SAPT(DFT) aug-cc-pVDZ interaction energy between Ne and Ar atoms.

DHF = -0.01189736  #TEST
Eref_nh = {"SAPT ELST ENERGY":  -0.10190449, #TEST
           "SAPT EXCH ENERGY":   0.36545706, #TEST
           "SAPT IND ENERGY":   -0.00840483, #TEST
           "SAPT DISP ENERGY":  -0.24398704, #TEST
           "CURRENT ENERGY":     0.01122234} #TEST

Eref_h_disp = {"SAPT ELST ENERGY":  -0.10197193, #TEST
               "SAPT EXCH ENERGY":   0.36569812, #TEST
               "SAPT IND ENERGY":   -0.00840370, #TEST
               "SAPT DISP ENERGY":  -0.26658499, #TEST
               "CURRENT ENERGY":    -0.01126250} #TEST

Eref_h_fixed = {"SAPT ELST ENERGY":  -0.10197193, #TEST
                "SAPT EXCH ENERGY":   0.36569812, #TEST
                "SAPT IND ENERGY":   -0.00840370, #TEST
                "SAPT DISP ENERGY":  -0.26605283, #TEST
                "CURRENT ENERGY":    -0.01073034} #TEST

molecule dimer {
  Ne
  --
  Ar 1 6.5
  units bohr
}

set {
    basis         aug-cc-pvdz
    scf_type      df
    sapt_dft_grac_shift_a 0.203293
    sapt_dft_grac_shift_b 0.138264
}

# No hybrid kernel & no exch-disp scaling & no deltaHF
set SAPT_DFT_DO_DHF False
set SAPT_DFT_DO_HYBRID False
set SAPT_DFT_EXCH_DISP_SCALE_SCHEME none
energy('sapt(dft)', molecule=dimer)
for k, v in Eref_nh.items():                           #TEST
    if k in ["SAPT IND ENERGY", "CURRENT ENERGY"]:
        ref = (v - DHF) / 1000.0
    else:
        ref = v / 1000.0
    compare_values(ref, psi4.variable(k), 6, "!hyb, xd=none, !dHF: " + k) #TEST

# No hybrid kernel & no exch-disp scaling
set SAPT_DFT_DO_DHF True
set SAPT_DFT_DO_HYBRID False
set SAPT_DFT_EXCH_DISP_SCALE_SCHEME none
energy('sapt(dft)', molecule=dimer)
for k, v in Eref_nh.items():                           #TEST
    compare_values(v / 1000.0, psi4.variable(k), 6, "!hyb, xd=none, dHF: " + k) #TEST

# Hybrid kernel & exch-disp scaling (DISP)
set SAPT_DFT_DO_HYBRID True
set SAPT_DFT_EXCH_DISP_SCALE_SCHEME disp
energy('sapt(dft)', molecule=dimer)
for k, v in Eref_h_disp.items():                       #TEST
    compare_values(v / 1000.0, psi4.variable(k), 6, "hyb, xd=disp, dHF: " + k) #TEST

# Hybrid kernel & exch-disp scaling (FIXED)
set SAPT_DFT_DO_HYBRID True
set SAPT_DFT_EXCH_DISP_SCALE_SCHEME fixed 
set SAPT_DFT_EXCH_DISP_FIXED_SCALE 0.770
energy('sapt(dft)', molecule=dimer)
for k, v in Eref_h_fixed.items():                      #TEST
    compare_values(v / 1000.0, psi4.variable(k), 6, "hyb, xd=fixed, dHF: " + k) #TEST
  • I think it should be clear from the output file what exch-disp scheme/scale is applied. So perhaps add a couple lines to the printout like below. This should also satisfy Jonathon's request that the output file show the change in scaling defaults.
  ==> E20 Dispersion (MP2) <==


    Disp20 (MP2)                     -0.37881730 [mEh]
    Exch-Disp20,u                     0.02037338 [mEh]
    Scaling Scheme:                   Disp
    Scaling Factor:                   0.707

   SAPT(DFT) Results
  ---------------------------------------------------------------------------------------------------------
    Electrostatics                   -0.10197192 [mEh]     -0.06398835 [kcal/mol]     -0.26772724 [kJ/mol]
      Elst1,r                        -0.10197192 [mEh]     -0.06398835 [kcal/mol]     -0.26772724 [kJ/mol]

Added the !dHF cases in sapt-dft1 and sapt-dft2. For sapt-dft-api, the dHF feature is intrinsically unsupported, because the dHF calculation is not fully contained in the sapt_dft() call; a part of it is in the run_sapt_dft() call.

Added the scaling scheme/factor output lines in the output file.

Copy link
Member

@loriab loriab left a comment

Choose a reason for hiding this comment

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

Thanks! here's a couple more GH suggestions on the exch-disp.

psi4/driver/procrouting/sapt/sapt_proc.py Outdated Show resolved Hide resolved
psi4/src/read_options.cc Outdated Show resolved Hide resolved
@loriab loriab added this to the Psi4 1.7 milestone Oct 26, 2022
yxie326 and others added 14 commits October 27, 2022 16:09
Co-authored-by: Lori A. Burns <lori.burns@gmail.com>
Co-authored-by: Lori A. Burns <lori.burns@gmail.com>
Co-authored-by: Lori A. Burns <lori.burns@gmail.com>
Co-authored-by: Lori A. Burns <lori.burns@gmail.com>
Co-authored-by: Lori A. Burns <lori.burns@gmail.com>
Co-authored-by: Lori A. Burns <lori.burns@gmail.com>
Co-authored-by: Lori A. Burns <lori.burns@gmail.com>
Co-authored-by: Lori A. Burns <lori.burns@gmail.com>
@loriab
Copy link
Member

loriab commented Oct 27, 2022

Apologies, please add quick; to the sapt-compare/test_input.py also.

Copy link
Member

@loriab loriab left a comment

Choose a reason for hiding this comment

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

lgtm, thanks for all the improvements!

Copy link
Contributor

@JonathonMisiewicz JonathonMisiewicz left a comment

Choose a reason for hiding this comment

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

[Original comment removed after Lori clarified my confusion.]


.. warning:: Since Nov 2022, the defaults of options |sapt__sapt_dft_exch_disp_scale_scheme| and |sapt__sapt_dft_exch_disp_fixed_scale|
have been changed. Before, the former defaulted to ``FIXED`` with Hesselmann value of 0.686 for the latter. Now, the former defaults to ``DISP`` and should you instead select ``FIXED``, the default for the latter is the Xie value of 0.770. This might cause
Copy link
Contributor

Choose a reason for hiding this comment

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

Link to the Xie paper the first time you mention it. (The first mention may be in one of my suggestions.)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Added the paper. Rephrased a bit on "Hesselmann appraoch" and "Xie approach"; I would call them "Podeszwa approach" and "Hesselmann approach" respectively instead (see references).

doc/sphinxman/source/sapt.rst Outdated Show resolved Hide resolved
@JonathonMisiewicz
Copy link
Contributor

While I did not give this a very careful pass, I've given it enough of a pass to merge it in once the previous two comments I made are addressed.

@hokru, did you want another pass of this?

yxie326 and others added 3 commits November 3, 2022 22:32
Co-authored-by: Jonathon Misiewicz <jonathon.paul.misiewicz@emory.edu>
@loriab loriab merged commit 073833c into psi4:master Nov 22, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
dft For issues specific to DFT and their many functionals. efficiency For issues about code in Psi needing a disturbing amount of time and/or memory. sapt For issues about SAPT and its many flavors.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants