-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
This issue depends on NWChemEx/SimDE#40 and https://github.com/NWChemEx-Project/Mokup/issues/31.
Assuming the description in NWChemEx/SimDE#40 is correct, Libint will give us quantities like (one shell-pair at a time). This issue focuses on writing a module
LibintEKineticNuc which will:
- Satisfy the
EKinetic_NucPT defined in Property Type for Gradient of EKinetic SimDE#40 - Initialize Libint (see the tutorial link at the bottom of this issue)
- Create a lambda function which can be used to fill in a
TA::DistArrayDinstance viaTA::make_array(the signature for the lambda isdouble (TA::Tensor<double>& t, const TA::Range& range)where the return is the norm of the tile,tis the tile being filled in, andrangeis the range of the tile (the indices of the elements int). - Copy the TA tensor into a TW tensor and return the TW tensor.
Depending on when this issue is being worked on, NWChemEx/TensorWrapper#33 may have been resolved. If that's the case the lambda signature will change slightly and the copying of the TA tensor into the TW tensor will no longer need to happen.
The literal tasks:
- Write the
LibintEKineticNucmodule (I recommend putting it in a new filesrc/integrals/libint/ekinetic_nuc.hpp) - unit test the module (I recommend putting the test in a new file
tests/integrals/libint/test_ekinetic_nuc.cpp) the testing should be largely analogous to how we unit testEKineticitself (see here)
Additional Notes:
- We have some infrastructure in this repo for initializing and calling Libint. That infrastructure is heavily templated, and frankly, at this point a mess (it's built off a legacy version of what's now called PluginPlay and can be massively streamlined). It's recommended you ignore most of that infrastructure and follow the tutorials for Libint to implement
LibintEKineticNuc - For the purposes of this issue there's no need to worry about attempting to generalize the module for different operators, just hard-code everything to the electronic kinetic energy. We'll worry about generalizing in another issue.
- While I recommended ignoring most of the infrastructure in this repo, some of it is likely to still be very useful, particularly take a look at nwx_libint.hpp which will help convert from Chemist objects to Libint.
- As a first pass just worry about an implementation where the entire integral is stored in core memory. Direct is done by changing the tile types of the TA tensor and it should be possible to implement direct in a manner that is largely orthogonal to the filling in of the tensor handled by this module.
- At this stage I wouldn't worry too much about documentation. Any documentation that is written would probably need changed when the module gets generalized to other derivative types.
Metadata
Metadata
Assignees
Labels
No labels