|
16 | 16 | from functools import reduce
|
17 | 17 | from pyscf import ao2mo
|
18 | 18 | from pyscf import scf
|
| 19 | +from pyscf.cc.addons import spatial2spin |
19 | 20 | from openfermion.hamiltonians import MolecularData
|
20 | 21 |
|
21 | 22 |
|
@@ -249,36 +250,36 @@ def fci_two_rdm(self):
|
249 | 250 |
|
250 | 251 | @property
|
251 | 252 | def ccsd_single_amps(self):
|
252 |
| - r"""A 2-dimension array t[a,i] for RCCSD single excitation amplitudes |
| 253 | + r"""A 2-dimension array t[a,i] for CCSD single excitation amplitudes |
253 | 254 | where a is virtual index and i is occupied index.
|
254 | 255 | """
|
255 | 256 | if self._ccsd_single_amps is None:
|
256 | 257 | ccsd = self._pyscf_data.get('ccsd', None)
|
257 | 258 | if ccsd is None:
|
258 | 259 | return None
|
259 | 260 |
|
260 |
| - mf = self._pyscf_data.get('scf', None) |
261 |
| - if isinstance(mf, (scf.rohf.ROHF, scf.uhf.UHF)): |
262 |
| - #raise ValueError('UCCSD t1 amplitudes not available.') |
263 |
| - return None |
| 261 | + t1 = spatial2spin(ccsd.t1) |
| 262 | + no, nv = t1.shape |
| 263 | + nmo = no + nv |
| 264 | + self._ccsd_single_amps = numpy.zeros((nmo, nmo)) |
| 265 | + self._ccsd_single_amps[no:,:no] = t1.T |
264 | 266 |
|
265 |
| - self._ccsd_single_amps = ccsd.t1.T |
266 | 267 | return self._ccsd_single_amps
|
267 | 268 |
|
268 | 269 | @property
|
269 | 270 | def ccsd_double_amps(self):
|
270 |
| - r"""A 4-dimension array t[a,b,i,j] for RCCSD double excitation amplitudes |
| 271 | + r"""A 4-dimension array t[a,i,b,j] for CCSD double excitation amplitudes |
271 | 272 | where a, b are virtual indices and i, j are occupied indices.
|
272 | 273 | """
|
273 | 274 | if self._ccsd_double_amps is None:
|
274 | 275 | ccsd = self._pyscf_data.get('ccsd', None)
|
275 | 276 | if ccsd is None:
|
276 | 277 | return None
|
277 | 278 |
|
278 |
| - mf = self._pyscf_data.get('scf', None) |
279 |
| - if isinstance(mf, (scf.rohf.ROHF, scf.uhf.UHF)): |
280 |
| - #raise ValueError('UCCSD t2 amplitudes not available.') |
281 |
| - return None |
| 279 | + t2 = spatial2spin(ccsd.t2) |
| 280 | + no, nv = t2.shape[1:3] |
| 281 | + nmo = no + nv |
| 282 | + self._ccsd_single_amps = numpy.zeros((nmo, nmo, nmo, nmo)) |
| 283 | + self._ccsd_single_amps[no:,:no,no:,:no] = t2.transpose(2,0,3,1) |
282 | 284 |
|
283 |
| - self._ccsd_double_amps = ccsd.t2.transpose(2, 3, 0, 1) |
284 | 285 | return self._ccsd_double_amps
|
0 commit comments