devinamatthews / aquarius

Aquarius is a parallel quantum chemistry package built on the Cyclops Tensor Framework which provides high-performance structured tensor operations. Aquarius is primarily focused on iterative methods such as CC, CI, and EOMCC.
BSD 3-Clause "New" or "Revised" License
27 stars 11 forks source link

separable benchmarking capability #12

Open solomonik opened 8 years ago

solomonik commented 8 years ago

It would be convenient and would save many cpu hours to have unit benchmarks for integrals, SCF, and CCSD/T/Q.

devinamatthews commented 8 years ago

For CC at least, I just added the fakemoints task:

fakemoints
{
    noa = ...,
    nob = ..., #optional, defaults to noa
    nva = ...,
    nvb = ... #optional, defaults to nva
},
ccsd ...
solomonik commented 8 years ago

Thanks, should noa and nva be set to #electrons and #orbitals generally?

Also, just in case anyone uses this for reference, I think it should be

fakemoints { noa ..., nob ..., #optional, defaults to noa nva ..., nvb ... #optional, defaults to nva },

Would be great to have something similar for 1e/2eints.

devinamatthews commented 8 years ago

{nelec, mult, norb} would also work as a specification; the conversion is noa = (nelec+mult)/2, nob = (nelec-mult+1)/2, nva = norb-noa, nvb = norb-nob (but nelec and mult have to have the same parity). And yes I should not have put the "=" in there...

The problem with the 1e/2e ints is the sparsity. Real molecules have a very inhomogeneous sparsity, and also the coulomb operator is positive semi-definite which is taken into account in many algorithms. Since these things affect timings they have to be handled carefully.

solomonik commented 8 years ago

Ok, I see. I started changing the test/water_clusters/make_input.py script to have an option to use fakemoints, but I've realized I don't know how to determine norb there, to do it generally it seems one needs to parse the basis file. Also, what is mult? Would it be possible to automate this determination? Seems like it would be easier to figure out n{o,v}{a,b} once AQ is running and has parsed the basis.

devinamatthews commented 8 years ago

mult = multiplicity: 1 = singlet (noa=nob), 2 = doublet (noa=nob+1), 3 = triplet, etc. For norb, you can either hard-code how many basis functions for H, O, etc. in a few basis sets, or I could just make fakemoints optionally read from a molecule task.

solomonik commented 8 years ago

I would prefer not to hardcode anything if it is not too hard to do generally. Seems perfectly plausible that it would at some point be desirable to benchmark without aomoints a non-pure-water system or a large range of basis sets. Let me know if you can augment fakemoints or if I should hack the water generator script, which I think would also take some time to get right.

Thanks, Edgar

On Mon, Jul 4, 2016 at 5:06 PM, Devin Matthews notifications@github.com wrote:

mult = multiplicity: 1 = singlet (noa=nob), 2 = doublet (noa=nob+1), 3 = triplet, etc. For norb, you can either hard-code how many basis functions for H, O, etc. in a few basis sets, or I could just make fakemoints optionally read from a molecule task.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/devinamatthews/aquarius/issues/12#issuecomment-230310273, or mute the thread https://github.com/notifications/unsubscribe/ACPc9n2Tj_8RT_8VAM_9p3IlYHVHFFczks5qSSFqgaJpZM4HCagV .

devinamatthews commented 8 years ago

I'll augment fakemoints.

On 7/4/16 10:18 AM, Edgar Solomonik wrote:

I would prefer not to hardcode anything if it is not too hard to do generally. Seems perfectly plausible that it would at some point be desirable to benchmark without aomoints a non-pure-water system or a large range of basis sets. Let me know if you can augment fakemoints or if I should hack the water generator script, which I think would also take some time to get right.

Thanks, Edgar

On Mon, Jul 4, 2016 at 5:06 PM, Devin Matthews notifications@github.com wrote:

mult = multiplicity: 1 = singlet (noa=nob), 2 = doublet (noa=nob+1), 3 = triplet, etc. For norb, you can either hard-code how many basis functions for H, O, etc. in a few basis sets, or I could just make fakemoints optionally read from a molecule task.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub

https://github.com/devinamatthews/aquarius/issues/12#issuecomment-230310273, or mute the thread

https://github.com/notifications/unsubscribe/ACPc9n2Tj_8RT_8VAM_9p3IlYHVHFFczks5qSSFqgaJpZM4HCagV .

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/devinamatthews/aquarius/issues/12#issuecomment-230312517, or mute the thread https://github.com/notifications/unsubscribe/AFAMoUEf7MtKCksaaRcm6BpkrDiAHZGSks5qSSRJgaJpZM4HCagV.