occ
Loading...
Searching...
No Matches
occ::mults::SFunctions Class Reference

S-functions for multipole interaction evaluation. More...

#include <sfunctions.h>

Classes

struct  SFunctionResult
 

Public Member Functions

 SFunctions (int max_rank=4)
 Constructor.
 
void set_coordinates (const Vec3 &ra, const Vec3 &rb)
 Set the coordinate system.
 
void set_coordinate_system (const CoordinateSystem &coords)
 Set the coordinate system directly.
 
const CoordinateSystemcoordinate_system () const
 Get the current coordinate system.
 
SFunctions swap_sites () const
 Create a new SFunctions object with swapped site coordinates.
 
void compute_with_swap (int t1, int t2, int j, int level, SFunctionResult &result, bool swap) const
 Compute S-function with automatic coordinate swapping.
 
SFunctionResult compute_s_function (int t1, int t2, int j, int level=0) const
 Compute S-function for given multipole indices.
 
std::vector< SFunctionResultcompute_s_functions (const std::vector< std::tuple< int, int, int > > &indices, int level=0) const
 Compute multiple S-functions in batch.
 
std::pair< int, int > index_to_lm (int index) const
 Convert linear multipole index to (l,m) quantum numbers.
 
double rax () const
 
double ray () const
 
double raz () const
 
double rbx () const
 
double rby () const
 
double rbz () const
 
double r () const
 
double raw_rax () const
 
double raw_ray () const
 
double raw_raz () const
 
double raw_rbx () const
 
double raw_rby () const
 
double raw_rbz () const
 
double dx () const
 
double dy () const
 
double dz () const
 
double cxx () const
 
double cxy () const
 
double cxz () const
 
double cyx () const
 
double cyy () const
 
double cyz () const
 
double czx () const
 
double czy () const
 
double czz () const
 

Static Public Attributes

static constexpr int MAX_S_FUNCTIONS = 400
 
static constexpr int NUM_FIRST_DERIVS = 15
 
static constexpr int NUM_SECOND_DERIVS = 120
 
static constexpr int S1_CXX = 6
 
static constexpr int S1_CXY = 7
 
static constexpr int S1_CXZ = 8
 
static constexpr int S1_CYX = 9
 
static constexpr int S1_CYY = 10
 
static constexpr int S1_CYZ = 11
 
static constexpr int S1_CZX = 12
 
static constexpr int S1_CZY = 13
 
static constexpr int S1_CZZ = 14
 

Detailed Description

S-functions for multipole interaction evaluation.

This class computes the S-functions used in multipole electrostatic interactions, following the formulation used in Orient.

The S-functions represent the geometric part of multipole interactions for different combinations of multipole ranks and orientations.

Coordinate system:

  • Site A coordinates: (rax, ray, raz)
  • Site B coordinates: (rbx, rby, rbz)
  • Distance vector: rb - ra

S-function notation: S(t1, t2, j)

  • t1: multipole index for site A
  • t2: multipole index for site B
  • j: combined rank parameter

Constructor & Destructor Documentation

◆ SFunctions()

occ::mults::SFunctions::SFunctions ( int  max_rank = 4)
explicit

Constructor.

Parameters
max_rankMaximum multipole rank to handle

Member Function Documentation

◆ compute_s_function()

SFunctionResult occ::mults::SFunctions::compute_s_function ( int  t1,
int  t2,
int  j,
int  level = 0 
) const

Compute S-function for given multipole indices.

Parameters
t1Multipole index for site A
t2Multipole index for site B
jCombined rank parameter
levelDerivative level (0=value only, 1=first derivs, 2=second derivs)
Returns
S-function result with value and derivatives

◆ compute_s_functions()

std::vector< SFunctionResult > occ::mults::SFunctions::compute_s_functions ( const std::vector< std::tuple< int, int, int > > &  indices,
int  level = 0 
) const

Compute multiple S-functions in batch.

Parameters
indicesVector of (t1, t2, j) triplets
levelDerivative level
Returns
Vector of S-function results

◆ compute_with_swap()

void occ::mults::SFunctions::compute_with_swap ( int  t1,
int  t2,
int  j,
int  level,
SFunctionResult result,
bool  swap 
) const

Compute S-function with automatic coordinate swapping.

This helper method automatically handles coordinate swapping when needed. If swap=true, it creates a swapped SFunctions object and computes S(t2, t1) instead of S(t1, t2), effectively reusing kernels for reverse orderings.

Parameters
t1First multipole index
t2Second multipole index
jCombined angular momentum
levelDerivative level (0=S0, 1=S0+S1, 2=S0+S1+S2)
resultOutput result structure
swapIf true, swap coordinates and call S(t2, t1)

◆ coordinate_system()

const CoordinateSystem & occ::mults::SFunctions::coordinate_system ( ) const
inline

Get the current coordinate system.

◆ cxx()

double occ::mults::SFunctions::cxx ( ) const
inline

◆ cxy()

double occ::mults::SFunctions::cxy ( ) const
inline

◆ cxz()

double occ::mults::SFunctions::cxz ( ) const
inline

◆ cyx()

double occ::mults::SFunctions::cyx ( ) const
inline

◆ cyy()

double occ::mults::SFunctions::cyy ( ) const
inline

◆ cyz()

double occ::mults::SFunctions::cyz ( ) const
inline

◆ czx()

double occ::mults::SFunctions::czx ( ) const
inline

◆ czy()

double occ::mults::SFunctions::czy ( ) const
inline

◆ czz()

double occ::mults::SFunctions::czz ( ) const
inline

◆ dx()

double occ::mults::SFunctions::dx ( ) const
inline

◆ dy()

double occ::mults::SFunctions::dy ( ) const
inline

◆ dz()

double occ::mults::SFunctions::dz ( ) const
inline

◆ index_to_lm()

std::pair< int, int > occ::mults::SFunctions::index_to_lm ( int  index) const

Convert linear multipole index to (l,m) quantum numbers.

Parameters
indexLinear index
Returns
(l,m) pair

◆ r()

double occ::mults::SFunctions::r ( ) const
inline

◆ raw_rax()

double occ::mults::SFunctions::raw_rax ( ) const
inline

◆ raw_ray()

double occ::mults::SFunctions::raw_ray ( ) const
inline

◆ raw_raz()

double occ::mults::SFunctions::raw_raz ( ) const
inline

◆ raw_rbx()

double occ::mults::SFunctions::raw_rbx ( ) const
inline

◆ raw_rby()

double occ::mults::SFunctions::raw_rby ( ) const
inline

◆ raw_rbz()

double occ::mults::SFunctions::raw_rbz ( ) const
inline

◆ rax()

double occ::mults::SFunctions::rax ( ) const
inline

◆ ray()

double occ::mults::SFunctions::ray ( ) const
inline

◆ raz()

double occ::mults::SFunctions::raz ( ) const
inline

◆ rbx()

double occ::mults::SFunctions::rbx ( ) const
inline

◆ rby()

double occ::mults::SFunctions::rby ( ) const
inline

◆ rbz()

double occ::mults::SFunctions::rbz ( ) const
inline

◆ set_coordinate_system()

void occ::mults::SFunctions::set_coordinate_system ( const CoordinateSystem coords)

Set the coordinate system directly.

Parameters
coordsCoordinateSystem (may include body-frame transformations)

◆ set_coordinates()

void occ::mults::SFunctions::set_coordinates ( const Vec3 ra,
const Vec3 rb 
)

Set the coordinate system.

Parameters
raPosition of site A
rbPosition of site B

◆ swap_sites()

SFunctions occ::mults::SFunctions::swap_sites ( ) const

Create a new SFunctions object with swapped site coordinates.

Returns a new SFunctions where site A and site B are swapped. This is used to compute S(t1@A, t2@B) as S(t2@B', t1@A') where A' and B' are the swapped positions.

Returns
SFunctions with ra and rb swapped

Member Data Documentation

◆ MAX_S_FUNCTIONS

constexpr int occ::mults::SFunctions::MAX_S_FUNCTIONS = 400
staticconstexpr

◆ NUM_FIRST_DERIVS

constexpr int occ::mults::SFunctions::NUM_FIRST_DERIVS = 15
staticconstexpr

◆ NUM_SECOND_DERIVS

constexpr int occ::mults::SFunctions::NUM_SECOND_DERIVS = 120
staticconstexpr

◆ S1_CXX

constexpr int occ::mults::SFunctions::S1_CXX = 6
staticconstexpr

◆ S1_CXY

constexpr int occ::mults::SFunctions::S1_CXY = 7
staticconstexpr

◆ S1_CXZ

constexpr int occ::mults::SFunctions::S1_CXZ = 8
staticconstexpr

◆ S1_CYX

constexpr int occ::mults::SFunctions::S1_CYX = 9
staticconstexpr

◆ S1_CYY

constexpr int occ::mults::SFunctions::S1_CYY = 10
staticconstexpr

◆ S1_CYZ

constexpr int occ::mults::SFunctions::S1_CYZ = 11
staticconstexpr

◆ S1_CZX

constexpr int occ::mults::SFunctions::S1_CZX = 12
staticconstexpr

◆ S1_CZY

constexpr int occ::mults::SFunctions::S1_CZY = 13
staticconstexpr

◆ S1_CZZ

constexpr int occ::mults::SFunctions::S1_CZZ = 14
staticconstexpr

The documentation for this class was generated from the following file: