Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion include/gauxc/c/enums.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,17 @@ enum GauXC_AtomicGridSizeDefault {
GauXC_AtomicGridSizeDefault_UltraFineGrid, ///< Ultrafine grid (appropriate accuracy)
GauXC_AtomicGridSizeDefault_SuperFineGrid, ///< Superfine grid (most accurate)
GauXC_AtomicGridSizeDefault_GM3, ///< Treutler-Ahlrichs GM3
GauXC_AtomicGridSizeDefault_GM5 ///< Treutler-Ahlrichs GM5
GauXC_AtomicGridSizeDefault_GM5, ///< Treutler-Ahlrichs GM5
GauXC_AtomicGridSizeDefault_PySCF0, ///< PySCF default level 0
GauXC_AtomicGridSizeDefault_PySCF1, ///< PySCF default level 1
GauXC_AtomicGridSizeDefault_PySCF2, ///< PySCF default level 2 (angular points ~ fine grid)
GauXC_AtomicGridSizeDefault_PySCF3, ///< PySCF default level 3
GauXC_AtomicGridSizeDefault_PySCF4, ///< PySCF default level 4 (radial points ~ fine grid, angular points ~ ultrafine grid)
GauXC_AtomicGridSizeDefault_PySCF5, ///< PySCF default level 5
GauXC_AtomicGridSizeDefault_PySCF6, ///< PySCF default level 6 (radial points ~ ultrafine grid, angular points ~ superfine grid)
GauXC_AtomicGridSizeDefault_PySCF7, ///< PySCF default level 7
GauXC_AtomicGridSizeDefault_PySCF8, ///< PySCF default level 8
GauXC_AtomicGridSizeDefault_PySCF9 ///< PySCF default level 9 (radial points ~ superfine grid)
};

/**
Expand Down
12 changes: 11 additions & 1 deletion include/gauxc/enums.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,17 @@ enum class AtomicGridSizeDefault {
UltraFineGrid, ///< Ultrafine grid (appropriate accuracy)
SuperFineGrid, ///< Superfine grid (most accurate)
GM3, ///< Treutler-Ahlrichs GM3
GM5 ///< Treutler-Ahlrichs GM5
GM5, ///< Treutler-Ahlrichs GM5
PySCF0, ///< PySCF default level 0
PySCF1, ///< PySCF default level 1
PySCF2, ///< PySCF default level 2 (angular points ~ fine grid)
PySCF3, ///< PySCF default level 3
PySCF4, ///< PySCF default level 4 (radial points ~ fine grid, angular points ~ ultrafine grid)
PySCF5, ///< PySCF default level 5
PySCF6, ///< PySCF default level 6 (radial points ~ ultrafine grid, angular points ~ superfine grid)
PySCF7, ///< PySCF default level 7
PySCF8, ///< PySCF default level 8
PySCF9 ///< PySCF default level 9 (radial points ~ superfine grid)
};

/**
Expand Down
64 changes: 64 additions & 0 deletions src/molgrid_defaults.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,40 @@

namespace GauXC {

namespace detail {

inline RadialSize get_pyscf_radial_size( AtomicNumber Z, int level ) {
if (level < 0 || level > 8)
GAUXC_GENERIC_EXCEPTION("Invalid PySCF grid level: " + std::to_string(level) + ". Valid levels are 0-8.");

if ( Z.get() <= 2 ) {
if (level == 0) return RadialSize( 10 );
return RadialSize( 20 + 10*level ); // ..., 30, 40, 50, ...
} else if ( Z.get() <= 10 ) {
if (level == 0) return RadialSize( 15 );
if (level == 1) return RadialSize( 40 );
return RadialSize( 30 + 15 * level ); // ..., 60, 75, 90, ...
} else if ( Z.get() <= 18 ) {
if (level == 0) return RadialSize( 20 );
return RadialSize( 35 + 15 * level ); // ..., 50, 65, 80, ...
} else if ( Z.get() <= 36 ) {
if (level == 0) return RadialSize( 30 );
return RadialSize( 45 + 15 * level ); // ..., 60, 75, 90, ...
} else if ( Z.get() <= 54 ) {
if (level == 0) return RadialSize( 35 );
return RadialSize( 50 + 15 * level ); // ..., 65, 80, 95, ...
} else if ( Z.get() <= 86 ) {
if (level == 0) return RadialSize( 40 );
return RadialSize( 55 + 15 * level ); // ..., 70, 85, 100, ...
} else if ( Z.get() <= 118 ) {
if (level == 0) return RadialSize( 50 );
return RadialSize( 60 + 15 * level ); // ..., 75, 90, 105, ...
} else {
GAUXC_GENERIC_EXCEPTION("Z > 118 Not Supported for PySCF Grid Defaults");
}
}
}

RadialScale default_mk_radial_scaling_factor( AtomicNumber _Z ) {
auto Z = _Z.get();
switch(Z) {
Expand Down Expand Up @@ -117,6 +151,36 @@ std::tuple<RadialSize,AngularSize>
case AtomicGridSizeDefault::GM5:
return std::make_tuple( RadialSize(50), AngularSize(302) );

case AtomicGridSizeDefault::PySCF0:
return std::make_tuple( detail::get_pyscf_radial_size(Z, 0), Z.get() <= 2 ? AngularSize(50) : (Z.get() <= 10 ? AngularSize(86) : AngularSize(110)));

case AtomicGridSizeDefault::PySCF1:
return std::make_tuple( detail::get_pyscf_radial_size(Z, 1), Z.get() <= 2 ? AngularSize(110) : AngularSize(194));

case AtomicGridSizeDefault::PySCF2:
return std::make_tuple( detail::get_pyscf_radial_size(Z, 2), Z.get() <= 2 ? AngularSize(194) : AngularSize(302));

case AtomicGridSizeDefault::PySCF3:
return std::make_tuple( detail::get_pyscf_radial_size(Z, 3), Z.get() <= 10 ? AngularSize(302) : AngularSize(434));

case AtomicGridSizeDefault::PySCF4:
return std::make_tuple( detail::get_pyscf_radial_size(Z, 4), Z.get() <= 2 ? AngularSize(434) : AngularSize(590));

case AtomicGridSizeDefault::PySCF5:
return std::make_tuple( detail::get_pyscf_radial_size(Z, 5), Z.get() <= 2 ? AngularSize(590) : AngularSize(770));

case AtomicGridSizeDefault::PySCF6:
return std::make_tuple( detail::get_pyscf_radial_size(Z, 6), Z.get() <= 2 ? AngularSize(770) : AngularSize(974));

case AtomicGridSizeDefault::PySCF7:
return std::make_tuple( detail::get_pyscf_radial_size(Z, 7), Z.get() <= 2 ? AngularSize(974) : AngularSize(1202));

case AtomicGridSizeDefault::PySCF8:
return std::make_tuple( detail::get_pyscf_radial_size(Z, 8), AngularSize(1202));

case AtomicGridSizeDefault::PySCF9:
return std::make_tuple( RadialSize(200), AngularSize(1454) );

case AtomicGridSizeDefault::FineGrid:
return std::make_tuple( RadialSize(75), AngularSize(302) );

Expand Down
20 changes: 20 additions & 0 deletions tests/c_api_test.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,26 @@ TEST_CASE("C-API Enum Correspondence", "[c-api]") {
== static_cast<int>(GauXC_AtomicGridSizeDefault_GM3));
CHECK(static_cast<int>(AtomicGridSizeDefault::GM5)
== static_cast<int>(GauXC_AtomicGridSizeDefault_GM5));
CHECK(static_cast<int>(AtomicGridSizeDefault::PySCF0)
== static_cast<int>(GauXC_AtomicGridSizeDefault_PySCF0));
CHECK(static_cast<int>(AtomicGridSizeDefault::PySCF1)
== static_cast<int>(GauXC_AtomicGridSizeDefault_PySCF1));
CHECK(static_cast<int>(AtomicGridSizeDefault::PySCF2)
== static_cast<int>(GauXC_AtomicGridSizeDefault_PySCF2));
CHECK(static_cast<int>(AtomicGridSizeDefault::PySCF3)
== static_cast<int>(GauXC_AtomicGridSizeDefault_PySCF3));
CHECK(static_cast<int>(AtomicGridSizeDefault::PySCF4)
== static_cast<int>(GauXC_AtomicGridSizeDefault_PySCF4));
CHECK(static_cast<int>(AtomicGridSizeDefault::PySCF5)
== static_cast<int>(GauXC_AtomicGridSizeDefault_PySCF5));
CHECK(static_cast<int>(AtomicGridSizeDefault::PySCF6)
== static_cast<int>(GauXC_AtomicGridSizeDefault_PySCF6));
CHECK(static_cast<int>(AtomicGridSizeDefault::PySCF7)
== static_cast<int>(GauXC_AtomicGridSizeDefault_PySCF7));
CHECK(static_cast<int>(AtomicGridSizeDefault::PySCF8)
== static_cast<int>(GauXC_AtomicGridSizeDefault_PySCF8));
CHECK(static_cast<int>(AtomicGridSizeDefault::PySCF9)
== static_cast<int>(GauXC_AtomicGridSizeDefault_PySCF9));
}

// --- XCWeightAlg ---
Expand Down
Loading
Loading