Skip to content

2-electron reduced density matrices #281

@PaulWAyers

Description

@PaulWAyers

We should support 2-electron reduced density matrices from PySCF and PyCI.

Some (very old) work on 2-electron reduced density matrices was done by @matt-chan it seems:
#23

It would be useful to be able to include 2DMs (total and spin-resolved) in IOData, however, for interfacing with CI-postprocessing methods and ChemTools DM analysis tools. In the near(ish) term it would be helpful for the intracule/extracule stuff being looked at by @Ali-Tehrani and the EOM stuff being looked at by @gabrielasd .

There is already an object for this,

two_rdms

So the thing that is basically necessary is the ability to fill this field from PySCF and PyCI (and potentially other things). This might almost be an IOData script or it could entail more thorough support for PySCF and PyCI more generally.

It might also be nice to support GQCP, which includes density matrices:
https://github.com/GQCG/GQCP/blob/3e6fecc6589d6e971c7ff1062dd1b5cbd58431b8/gqcp/include/DensityMatrix/Orbital2DM.hpp
https://github.com/GQCG/GQCP/blob/54e6c178ff66716232105bb2aa8029fe4091a3bb/gqcp/include/DensityMatrix/G2DM.hpp

(@msricher might find these implementations especially interesting).

We should also be able to directly support two_rdms with MO basis. A name like two_rdms_mo would work fine.

In some sense, one thing we (may) need is to basically have wrappers for calculations that use Pythonic codes (PySCF, PyCI, GQCPy) which store the output as iodata objects.

  1. We need some new functionality for 1- and 2-electron integrals and reduced density matrices in AO and MO basis sets, plus perhaps interconversion between them. This is an update to the "core" of iodata. The MO-AO and AO-MO transformations are supported in gbasis but I would not add a gbasis dependence but just use the same (very short) code snippets.
  2. Separate: we should have some example scripts/wrappers that show how to use IOData to run PySCF, PyCI, GQCPy, Psi4Numpy, etc. etc. etc. and store/save the data as IOData objects. (Psi4Numpy a lot more boring since it already uses a form of JSON that, at least for now, we support.) This probably belongs in a separate \scripts\ folder since it is not core functionality of iodata and will break whenever these codes make API-breaking changes.

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions