Skip to content

Commit

Permalink
revised component names
Browse files Browse the repository at this point in the history
  • Loading branch information
loriab committed Oct 29, 2023
1 parent 55097ce commit fbd1d97
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 13 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/cmake.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ jobs:
- name: Install prerequisite MacOS packages
if: ${{ steps.skip_check.outputs.should_skip != 'true' && matrix.os == 'macos-latest' }}
run: |
brew install ninja gcc@10 boost eigen bison ccache automake python3 numpy scipy
brew install ninja gcc@10 boost eigen bison ccache automake [email protected] numpy scipy
echo "FC=/usr/local/bin/gfortran-10" >> $GITHUB_ENV
echo "EIGEN3_INCLUDE_DIR=/usr/local/include/eigen3" >> $GITHUB_ENV
Expand Down
5 changes: 5 additions & 0 deletions CHANGES
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
Following is a brief summary of changes made in each release of Libint.

- 2022-xx-yy: 2.8.0-beta.1
- UNMERGED PR #271: Add `libint2::configuration_accessor` and `libint2::supports` functions. If
library source is patched, these provides codes for what integrals a library instance can supply.
- UNMERGED PR #271: Small pkgconfig and cmake detection improvements. Enable unity build.
Testing of solid harmonics runtime switchable from #269.
- PR #270: For Windows, basis sets with a star have been renamed to "s" on the filesystem,
Expand All @@ -17,6 +19,9 @@ Following is a brief summary of changes made in each release of Libint.
- PR #269: Solid harmonics ordering is runtime switchable in the library. Issue
`libint2::set_solid_harmonics_ordering(libint2::SHGShellOrdering_Gaussian)` or `_Standard` after
initialization. Similarly, prefer new `INT_SOLIDHARMINDEX(sho, l, m)` to usual `(l, m)` version.
- PR #269: The ordering for spherical multipole integrals has been fixed at Standard, rather than
Gaussian or Standard as previously. Note that between this and the next item above, the
`--with-shgauss-ordering=standard|gaussian` has been rendered pointless for the C++ interface.
- PR #268: Python detection (relevant to Python bindings, Fortran, and some tests) now uses modern
`find_package(Python)`. Specify with `Python_EXECUTABLE` (note change in case) or
https://cmake.org/cmake/help/latest/module/FindPython.html for details .
Expand Down
58 changes: 46 additions & 12 deletions INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,24 @@
Functions are provided to check the library configuration and solid harmonics orderings at runtime:

Note: As of v2.8.0 (libtool-based), the configuration_accessor() function will return `(nyi)` by default.
Packagers are encouraged to patch a generated configuration string into file `configuration.cc` to
Packagers are encouraged to patch a generated configuration string into file `configuration.cc.cmake.in` to
imitate future cmake-based behavior. See sample patch below.

```
libint2::initialize();
printf("SHGShell: %d\n", libint2::solid_harmonics_ordering());
libint2::set_solid_harmonics_ordering(libint2::SHGShellOrdering_Gaussian);
printf("SHGShell: %d\n", libint2::solid_harmonics_ordering());
// if patched as described above
printf("Configuration: %s\n", libint2::configuration_accessor().c_str());
printf("Supports: dddd=%d mmmm=%d\n", libint2::supports("eri_dddd_d0"), libint2::supports("eri_mmmm_d0"));
libint2::finalize();
```
```
SHGShell: 1
SHGShell: 2
Configuration: eri_c4_d0_l2;eri_c4_d0_l3;ss;...
Configuration: eri_dddd_d0_l2;eri_ffff_d0;ss;...
Supports: dddd=1 mmmm=0
```

For the C library, a similar function is available:
Expand All @@ -26,7 +29,7 @@ For the C library, a similar function is available:
printf("CMake Configuration (C) : %s\n", configuration_accessor());
```
```
CMake Configuration (C) : eri_c4_d0_l2;eri_c4_d0_l3;ss;...
CMake Configuration (C) : eri_dddd_d0;eri_ffff_d0;ss;...
```

If you have a built libint2 library whose history you don't know, a command like this on Linux can provide the same information:
Expand All @@ -35,7 +38,7 @@ If you have a built libint2 library whose history you don't know, a command like
strings -n80 /a/random/L2/lying/around/libint2.so
```
```
eri_c2_d0_l2;eri_c2_d0_l3;eri_c2_d1_l2;eri_c3_d0_l2;eri_c3_d0_l3;eri_c3_d1_l2;eri_c4_d0_l2;eri_c4_d1_l2;impure_sh;onebody_d0_l2;onebody_d0_l3;onebody_d1_l2;ss
ss;onebody_i_d0;onebody_h_d0;eri_iiI_d0;eri_iii_d0;eri_II_d0;eri_ii_d0;eri_hhhh_d0;eri_hhH_d0;eri_hhh_d0;eri_HH_d0;eri_hh_d0;eri_gggg_d1;eri_dddd_d1
```

A patch like the following is suitable for an export tarball generated from the next following.
Expand All @@ -49,8 +52,8 @@ A patch like the following is suitable for an export tarball generated from the
const char * configuration_accessor() {
//return "@Libint2_CONFIG_COMPONENTS@";
- return "(nyi)";
+ return "eri_c2_d0_l2;eri_c2_d0_l3;eri_c2_d0_l4;eri_c2_d0_l5;eri_c2_d0_l6;eri_c2_d1_l2;eri_c2_d1_l3;eri_c2_d1_l4;eri_c2_d1_l5;eri_c3_d0_l2;eri_c3_d0_l3;eri_c3_d0_l4;eri_c3_d0_l5;eri_c3_d0_l6;eri_c3_d1_l2;eri_c3_d1_l3;eri_c3_d1_l4;eri_c3_d1_l5;eri_c4_d0_l2;eri_c4_d0_l3;eri_c4_d0_l4;eri_c4_d0_l5;eri_c4_d1_l2;eri_c4_d1_l3;eri_c4_d1_l4;g12_d0_l2;g12_d0_l3;g12_d0_l4;g12_d1_l2;g12_d1_l3;g12_d1_l4;impure_sh;onebody_d0_l2;onebody_d0_l3;onebody_d0_l4;onebody_d0_l5;onebody_d0_l6;onebody_d1_l2;onebody_d1_l3;onebody_d1_l4;onebody_d1_l5;onebody_d2_l2;onebody_d2_l3;onebody_d2_l4;ss";
}
+ return "ss;multipole_n;multipole_m;multipole_l;multipole_k;multipole_i;multipole_h;multipole_g;multipole_f;multipole_d;onebody_i_d0;onebody_h_d0;onebody_g_d0;onebody_f_d0;onebody_d_d0;onebody_h_d1;onebody_g_d1;onebody_f_d1;onebody_d_d1;onebody_g_d2;onebody_f_d2;onebody_d_d2;eri_hhhh_d0;eri_gggg_d0;eri_ffff_d0;eri_dddd_d0;eri_gggg_d1;eri_ffff_d1;eri_dddd_d1;eri_iiI_d0;eri_hhI_d0;eri_hhH_d0;eri_ggI_d0;eri_ggH_d0;eri_ggG_d0;eri_ffI_d0;eri_ffH_d0;eri_ffG_d0;eri_ffF_d0;eri_ddI_d0;eri_ddH_d0;eri_ddG_d0;eri_ddF_d0;eri_ddD_d0;eri_hhH_d1;eri_ggH_d1;eri_ggG_d1;eri_ffH_d1;eri_ffG_d1;eri_ffF_d1;eri_ddH_d1;eri_ddG_d1;eri_ddF_d1;eri_ddD_d1;eri_iii_d0;eri_hhi_d0;eri_hhh_d0;eri_ggi_d0;eri_ggh_d0;eri_ggg_d0;eri_ffi_d0;eri_ffh_d0;eri_ffg_d0;eri_fff_d0;eri_ddi_d0;eri_ddh_d0;eri_ddg_d0;eri_ddf_d0;eri_ddd_d0;eri_hhh_d1;eri_ggh_d1;eri_ggg_d1;eri_ffh_d1;eri_ffg_d1;eri_fff_d1;eri_ddh_d1;eri_ddg_d1;eri_ddf_d1;eri_ddd_d1;eri_II_d0;eri_HH_d0;eri_GG_d0;eri_FF_d0;eri_DD_d0;eri_HH_d1;eri_GG_d1;eri_FF_d1;eri_DD_d1;eri_ii_d0;eri_hh_d0;eri_gg_d0;eri_ff_d0;eri_dd_d0;eri_hh_d1;eri_gg_d1;eri_ff_d1;eri_dd_d1;g12_g_d0;g12_f_d0;g12_d_d0;g12_g_d1;g12_f_d1;g12_d_d1";
}
```
```
./configure \
Expand All @@ -60,24 +63,55 @@ A patch like the following is suitable for an export tarball generated from the
--enable-1body=2 \
--enable-g12=1 \
--disable-1body-property-derivs \
--with-multipole-max-order=4 \
--with-multipole-max-order=10 \
--with-g12-max-am=4 \
--with-eri-max-am=5,4 \
--with-eri3-max-am=6,5 \
--with-eri2-max-am=6,5 \
--with-max-am=6,5
```


#### Configuration Codes

Evenually, these will be CMake Components, too.

```
onebody_dD_lL - library includes 1-body integrals with derivative order D (D=0,1,2,...) and max angular momentum up to L (L=2,3,4,...)
eri_cC_dD_lL - library includes 2-body integrals with C (C=2,3,4) centers, derivative order D (D=0,1,2,...), and max angular momentum up to L (L=2,3,4,...)
g12_dD-lL - library includes F12 integrals with Gaussian factors with derivative order D and max angular momentum up to L
impure_sh - library doesn't assume that 2- and 3-center integrals involve pure solid harmonics
multipole_h - library includes spherical multipole integrals with max angular momentum up to
"h" (h=(sp)dfghikl...; s,p not enumerated).
For example, the presence of "multipole_i" means mpole ints are available for L=6.
onebody_h_dD - library includes 1-body integrals with max angular momentum up to "h"
(h=(sp)dfghikl...; s,p not enumerated) and derivative order "D" (D=0,1,2,...).
For example, the presence of "onebody_i_d1" means onebody gradient ints are
available for L=6.
eri_hhhh_dD - library includes 2-body integrals with 4 centers and max angular momentum up to
"h" (h=(sp)dfghikl...; s,p not enumerated) and derivative order "D" (D=0,1,2,...).
For example, the presence of "eri_ffff_d1" means 4-center gradient ints are
available for L=3. That is, the library was configured with at least
"--enable-eri=1 --with-eri-max-am=?,>=3".
eri_hhL_dD - library includes 2-body integrals with 3 centers and max angular momentum up to
eri_hhl_dD Cartesian "h" for the two paired centers and Cartesian "l" or solid harmonics "L"
for the unpaired/fitting center, (h/l=(sp)dfghikl..., L=(SP)DFGHIKL...; l>=h
enumerated; s,p not enumerated) and derivative order "D" (D=0,1,2,...). The
"eri_hhL_dD" component is always available when 3-center ints are present. When pure
solid harmonics are assumed for 3-center ints, "eri_hhl_dD" will *not be available*.
For example, the presence of "eri_ffG_d0" means 3-center energy ints are
available for L=3 (paired centers) and L=4 (fitting center). That is, the library
was configured with at least "--enable-eri3=0 --with-max-am=3 --with-eri3-max-am=4".
The presence of "eri_ffg_d0" means the library configuration did not additionally
include "--enable-eri3-pure-sh[=yes]".
eri_HH_dD - library includes 2-body integrals with 2 centers and max angular momentum up to
eri_hh_dD Cartesian "h" or solid harmonics "H", (h=(sp)dfghikl..., H=(SP)DFGHIKL...; s,p not
enumerated) and derivative order "D" (D=0,1,2,...). The "eri_HH_dD" component is
always available when 2-center ints are present. When pure solid harmonics are
assumed for 2-center ints, "eri_hh_dD" will *not be available*.
For example, the presence of "eri_FF_d2" means 2-center Hessian ints are
available for L=3. That is, the library was configured with at least
"--enable-eri2=2 --with-eri2-max-am=?,?,>=3". The presence of "eri_ff_d2" means the
library configuration did not additionally include "--enable-eri2-pure-sh[=yes]".
g12_h_dD - library includes F12 integrals with Gaussian factors max angular momentum up to
"h" (h=(sp)dfghikl...; s,p not enumerated) and derivative order "D" (D=0,1,2,...).
For example, the presence of "g12_i_d2" means g12 Hessian ints are available for L=6.
cart shell_set used_by
-------- --------- -------
Expand Down
15 changes: 15 additions & 0 deletions include/libint2/util/configuration.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ const char * configuration_accessor();

#ifdef _libint2_src_lib_libint_cxxapi_h_
#include <string>
#include <sstream>
#include <vector>

namespace libint2 {

Expand All @@ -38,6 +40,19 @@ namespace libint2 {
std::string components = ::configuration_accessor();
return components;
}

/// Runtime accessor for individual library configuration components:
/// integral derivatives, AM, orderings, etc.
/// @param[in] target CMake component with maximally uniform AM
/// @return whether target component available
inline bool supports(std::string component) {
std::string segment;
std::vector<std::string> seglist;
std::stringstream ca(configuration_accessor());
while(std::getline(ca, segment, ';')) { seglist.push_back(segment); }
bool tf = (std::find(seglist.begin(), seglist.end(), component) != seglist.end());
return tf;
}
}
#endif /* cxxapi guard */

Expand Down
1 change: 1 addition & 0 deletions tests/unit/test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ int main( int argc, char* argv[] )
libint2::initialize();
libint2::set_solid_harmonics_ordering(libint2::SHGShellOrdering_Standard); // redundant
printf("Configuration S: sho=%d components=%s\n", libint2::solid_harmonics_ordering(), libint2::configuration_accessor().c_str());
printf("Supports: dddd=%d mmmm=%d FF=%d\n", libint2::supports("eri_dddd_d0"), libint2::supports("eri_mmmm_d0"), libint2::supports("eri_FF_d0"));

#ifdef LIBINT_HAS_MPFR
// default to 256 bits of precision for mpf_class
Expand Down

0 comments on commit fbd1d97

Please sign in to comment.