Loading...
Searching...
No Matches
Chill

Namespaces

namespace  chill
 CHILL and CHILL+ structure classification.
namespace  sph
 Functions used for spherical harmonics.

Classes

struct  chill::YlmAtom
 This contains a complex vector of length \(2l+1\). More...
struct  chill::QlmAtom
 This is the local orientational bond order parameter \(q_{lm}\), of length \(2l+1\). More...
struct  chill::BondClassifier
 One rule set for classifying bond correlations \(c_{ij}\). More...
struct  chill::SteinhardtQl
 Per-particle Steinhardt order parameters of a single degree \(l\). More...

Functions

BondClassifier chill::chillRule ()
BondClassifier chill::chillPlusRule ()
BondClassifier chill::bondClassifier (const std::string &name)
void chill::registerBondClassifier (const std::string &name, const BondClassifier &rule)
std::vector< std::string > chill::bondClassifierNames ()
 Names of every registered rule set.
void chill::classifyBonds (molSys::PointCloud< molSys::Point< double >, double > &yCloud, const std::vector< std::vector< int > > &nList, const BondClassifier &rule, bool isSlice=false)
void chill::getCorrel (molSys::PointCloud< molSys::Point< double >, double > &yCloud, const std::vector< std::vector< int > > &nList, bool isSlice=false, int coordinationNumber=4)
 Function for getting the bond order correlations \(c_{ij}\) (or \(a_{ij}\) in some treatments) according to the CHILL algorithm.
void chill::getIceTypeNoPrint (molSys::PointCloud< molSys::Point< double >, double > &yCloud, const std::vector< std::vector< int > > &nList, bool isSlice=false)
 Function that classifies every particle's molSys::atom_state_type ice type, according to the CHILL algorithm.
void chill::getIceType (molSys::PointCloud< molSys::Point< double >, double > &yCloud, const std::vector< std::vector< int > > &nList, std::string path, int firstFrame, bool isSlice=false, std::string outputFileName="chill.txt")
 Function that classifies every particle's molSys::atom_state_type ice type, according to the CHILL algorithm.
void chill::getCorrelPlus (molSys::PointCloud< molSys::Point< double >, double > &yCloud, const std::vector< std::vector< int > > &nList, bool isSlice=false, int coordinationNumber=4)
void chill::getIceTypePlus (molSys::PointCloud< molSys::Point< double >, double > &yCloud, const std::vector< std::vector< int > > &nList, std::string path, int firstFrame, bool isSlice=false, std::string outputFileName="chillPlus.txt")
 Classifies each atom according to the CHILL+ algorithm.
void chill::getIceTypePlusNoPrint (molSys::PointCloud< molSys::Point< double >, double > &yCloud, const std::vector< std::vector< int > > &nList, bool isSlice=false)
 CHILL+ ice types on the cloud. Does not write a file.
std::vector< double > chill::getq6 (molSys::PointCloud< molSys::Point< double >, double > &yCloud, const std::vector< std::vector< int > > &nList, bool isSlice=false)
void chill::reclassifyWater (molSys::PointCloud< molSys::Point< double >, double > &yCloud, std::vector< double > &q6)
int chill::printIceType (molSys::PointCloud< molSys::Point< double >, double > &yCloud, std::string path, int firstFrame, bool isSlice=false, std::string outputFileName="superChill.txt")
 Prints out the iceType for a particular frame onto the terminal.
bool chill::isInterfacial (molSys::PointCloud< molSys::Point< double >, double > &yCloud, const std::vector< std::vector< int > > &nList, int iatom, int num_staggrd, int num_eclipsd, bool chillPlus=false)
int chill::numStaggered (molSys::PointCloud< molSys::Point< double >, double > &yCloud, const std::vector< std::vector< int > > &nList, int jatom)
 Finds the number of staggered bonds for a given atom of index jatom.
SteinhardtQl chill::steinhardtQl (const molSys::PointCloud< molSys::Point< double >, double > &yCloud, const std::vector< std::vector< int > > &nList, int orderL)
std::vector< std::complex< double > > sph::spheriHarmo (int orderL, std::array< double, 2 > radialCoord)
std::array< double, 2 > sph::radialCoord (std::array< double, 3 > cartCoord)
std::vector< std::complex< double > > sph::lookupTableQ3Vec (std::array< double, 2 > angles)
 Lookup table for Q3.
std::complex< double > sph::lookupTableQ3 (int m, std::array< double, 2 > angles)
 Lookup table for Q3 (m=0 to m=6).
std::vector< std::complex< double > > sph::lookupTableQ4Vec (std::array< double, 2 > angles)
 Lookup table for Q4.
std::complex< double > sph::lookupTableQ4 (int m, std::array< double, 2 > angles)
 Lookup table for Q4 (m=0 to m=8).
std::vector< std::complex< double > > sph::lookupTableQ6Vec (std::array< double, 2 > angles)
 Lookup table for Q6.
std::vector< std::complex< double > > sph::lookupTableQ8Vec (std::array< double, 2 > angles)
 Lookup table for Q8.
std::complex< double > sph::lookupTableQ8 (int m, std::array< double, 2 > angles)
 Lookup table for Q8 (m=0 to m=16).
std::complex< double > sph::lookupTableQ6 (int m, std::array< double, 2 > angles)
 Lookup table for Q6 (m=0 to m=12).

Variables

std::vector< std::complex< double > > chill::YlmAtom::ylm
std::vector< YlmAtomchill::QlmAtom::ptq
double chill::BondClassifier::staggeredMax
double chill::BondClassifier::eclipsedMin
 c_ij at or below this is staggered
double chill::BondClassifier::eclipsedMax
 Lower edge of the eclipsed band.
int chill::BondClassifier::coordinationNumber
 Upper edge of the eclipsed band.
std::vector< double > chill::SteinhardtQl::ql
std::vector< double > chill::SteinhardtQl::qlBar
 Local \(q_l(i)\).

Detailed Description

Function Documentation

◆ bondClassifier()

BondClassifier chill::bondClassifier ( const std::string & name)
nodiscard

Look up a registered rule set by name. "CHILL" and "CHILL+" are always present; registerBondClassifier adds more. Throws std::out_of_range for unknown names.

◆ bondClassifierNames()

std::vector< std::string > chill::bondClassifierNames ( )
nodiscard

Names of every registered rule set.

◆ chillPlusRule()

BondClassifier chill::chillPlusRule ( )
nodiscard

The CHILL+ rule set (Nguyen and Molinero, JPCB 119, 9369, 2015): wider eclipsed band for interfacial and clathrate recognition

◆ chillRule()

BondClassifier chill::chillRule ( )
nodiscard

The CHILL rule set (Moore et al., PCCP 12, 4124, 2010): strict staggered bound, narrow eclipsed band, four nearest neighbours

◆ classifyBonds()

void chill::classifyBonds ( molSys::PointCloud< molSys::Point< double >, double > & yCloud,
const std::vector< std::vector< int > > & nList,
const BondClassifier & rule,
bool isSlice = false )

Compute and classify the bond correlations c_ij under an arbitrary rule set, filling yCloud.pts[i].c_ij. getCorrel and getCorrelPlus are this engine under their canonical water rules.

◆ getCorrel()

void chill::getCorrel ( molSys::PointCloud< molSys::Point< double >, double > & yCloud,
const std::vector< std::vector< int > > & nList,
bool isSlice = false,
int coordinationNumber = 4 )

Function for getting the bond order correlations \(c_{ij}\) (or \(a_{ij}\) in some treatments) according to the CHILL algorithm.

Parameters
[in,out]yCloudThe output molSys::PointCloud
[in]nListThe row-ordered neighbour list, by ID. The first element of each row is the particle ID, followed by the IDs of the neighbours
[in]isSliceThis decides whether there is a slice or not
[in]coordinationNumberHow many nearest neighbours the bond sum runs over. The default of four is the coordination CHILL is defined and validated against (tetrahedral water); other values reuse the c_ij machinery for differently coordinated systems, and a non-positive value gives each atom its own count from its neighbour-list row. The ice-classification tables in getIceType remain four-bond rules

◆ getCorrelPlus()

void chill::getCorrelPlus ( molSys::PointCloud< molSys::Point< double >, double > & yCloud,
const std::vector< std::vector< int > > & nList,
bool isSlice = false,
int coordinationNumber = 4 )

Gets c_ij and then classifies bond types according to the CHILL+ algorithm. coordinationNumber as in getCorrel: four is the validated CHILL+ water scheme, non-positive keeps each atom's whole neighbour row

◆ getIceType()

void chill::getIceType ( molSys::PointCloud< molSys::Point< double >, double > & yCloud,
const std::vector< std::vector< int > > & nList,
std::string path,
int firstFrame,
bool isSlice = false,
std::string outputFileName = "chill.txt" )

Function that classifies every particle's molSys::atom_state_type ice type, according to the CHILL algorithm.

Parameters
[in,out]yCloudThe output molSys::PointCloud
[in]nListRow-ordered neighbour list by atom ID
[in]pathPath to the output directory to which ice types are written out to
[in]firstFrameFirst frame to be analyzed
[in]isSliceThis decides whether there is a slice or not
[in]outputFileNameName of the output file, to which the ice types will be written out.

◆ getIceTypeNoPrint()

void chill::getIceTypeNoPrint ( molSys::PointCloud< molSys::Point< double >, double > & yCloud,
const std::vector< std::vector< int > > & nList,
bool isSlice = false )

Function that classifies every particle's molSys::atom_state_type ice type, according to the CHILL algorithm.

Does not print out the information.

Parameters
[in,out]yCloudThe output molSys::PointCloud
[in]isSliceThis decides whether there is a slice or not
[in]nListRow-ordered neighbour list by atom ID

◆ getIceTypePlus()

void chill::getIceTypePlus ( molSys::PointCloud< molSys::Point< double >, double > & yCloud,
const std::vector< std::vector< int > > & nList,
std::string path,
int firstFrame,
bool isSlice = false,
std::string outputFileName = "chillPlus.txt" )

Classifies each atom according to the CHILL+ algorithm.

◆ getIceTypePlusNoPrint()

void chill::getIceTypePlusNoPrint ( molSys::PointCloud< molSys::Point< double >, double > & yCloud,
const std::vector< std::vector< int > > & nList,
bool isSlice = false )

CHILL+ ice types on the cloud. Does not write a file.

◆ getq6()

std::vector< double > chill::getq6 ( molSys::PointCloud< molSys::Point< double >, double > & yCloud,
const std::vector< std::vector< int > > & nList,
bool isSlice = false )

q6 can distinguish between water and ice. Use this for the largest ice cluster

◆ isInterfacial()

bool chill::isInterfacial ( molSys::PointCloud< molSys::Point< double >, double > & yCloud,
const std::vector< std::vector< int > > & nList,
int iatom,
int num_staggrd,
int num_eclipsd,
bool chillPlus = false )

Interfacial ice. Moore CHILL uses a neighbour with exactly two staggered bonds; Nguyen CHILL+ uses a neighbour with more than one. Pass chillPlus=true for the latter.

◆ lookupTableQ3()

std::complex< double > sph::lookupTableQ3 ( int m,
std::array< double, 2 > angles )

Lookup table for Q3 (m=0 to m=6).

◆ lookupTableQ3Vec()

std::vector< std::complex< double > > sph::lookupTableQ3Vec ( std::array< double, 2 > angles)

Lookup table for Q3.

◆ lookupTableQ4()

std::complex< double > sph::lookupTableQ4 ( int m,
std::array< double, 2 > angles )

Lookup table for Q4 (m=0 to m=8).

◆ lookupTableQ4Vec()

std::vector< std::complex< double > > sph::lookupTableQ4Vec ( std::array< double, 2 > angles)

Lookup table for Q4.

◆ lookupTableQ6()

std::complex< double > sph::lookupTableQ6 ( int m,
std::array< double, 2 > angles )

Lookup table for Q6 (m=0 to m=12).

◆ lookupTableQ6Vec()

std::vector< std::complex< double > > sph::lookupTableQ6Vec ( std::array< double, 2 > angles)

Lookup table for Q6.

◆ lookupTableQ8()

std::complex< double > sph::lookupTableQ8 ( int m,
std::array< double, 2 > angles )

Lookup table for Q8 (m=0 to m=16).

◆ lookupTableQ8Vec()

std::vector< std::complex< double > > sph::lookupTableQ8Vec ( std::array< double, 2 > angles)

Lookup table for Q8.

◆ numStaggered()

int chill::numStaggered ( molSys::PointCloud< molSys::Point< double >, double > & yCloud,
const std::vector< std::vector< int > > & nList,
int jatom )
nodiscard

Finds the number of staggered bonds for a given atom of index jatom.

◆ printIceType()

int chill::printIceType ( molSys::PointCloud< molSys::Point< double >, double > & yCloud,
std::string path,
int firstFrame,
bool isSlice = false,
std::string outputFileName = "superChill.txt" )
nodiscard

Prints out the iceType for a particular frame onto the terminal.

◆ radialCoord()

std::array< double, 2 > sph::radialCoord ( std::array< double, 3 > cartCoord)

◆ reclassifyWater()

void chill::reclassifyWater ( molSys::PointCloud< molSys::Point< double >, double > & yCloud,
std::vector< double > & q6 )

'Test' condition for classifying hexagonal ice using averaged q6 and q3 Checks water According to https://!pubs.rsc.org/en/content/articlehtml/2011/cp/c1cp22167a Gets c_ij and then classifies bond types according to the CHILL+ algorithm

◆ registerBondClassifier()

void chill::registerBondClassifier ( const std::string & name,
const BondClassifier & rule )

Register (or replace) a named rule set at runtime, making the material's thresholds available to every front end by name

◆ spheriHarmo()

std::vector< std::complex< double > > sph::spheriHarmo ( int orderL,
std::array< double, 2 > radialCoord )

◆ steinhardtQl()

SteinhardtQl chill::steinhardtQl ( const molSys::PointCloud< molSys::Point< double >, double > & yCloud,
const std::vector< std::vector< int > > & nList,
int orderL )
nodiscard

Local and neighbour-averaged Steinhardt parameters of degree 3, 4 or 6. Local ql is Steinhardt, Nelson and Ronchetti; qlBar is the Lechner-Dellago average of q_lm over the particle and its neighbours. The compute path flattens the neighbour list to CSR so the same kernel can run on the host (OpenMP), across MPI ranks (atom split plus Allgatherv of q_lm), or under OpenMP target offload when the build provides a device.

Variable Documentation

◆ coordinationNumber

int chill::BondClassifier::coordinationNumber

Upper edge of the eclipsed band.

Definition at line 182 of file bop.hpp.

◆ eclipsedMax

double chill::BondClassifier::eclipsedMax

Lower edge of the eclipsed band.

Definition at line 181 of file bop.hpp.

◆ eclipsedMin

double chill::BondClassifier::eclipsedMin

c_ij at or below this is staggered

Definition at line 180 of file bop.hpp.

◆ ptq

std::vector<YlmAtom> chill::QlmAtom::ptq

Definition at line 168 of file bop.hpp.

◆ ql

std::vector<double> chill::SteinhardtQl::ql

Definition at line 323 of file bop.hpp.

◆ qlBar

std::vector<double> chill::SteinhardtQl::qlBar

Local \(q_l(i)\).

Definition at line 324 of file bop.hpp.

◆ staggeredMax

double chill::BondClassifier::staggeredMax

Definition at line 179 of file bop.hpp.

◆ ylm

std::vector<std::complex<double> > chill::YlmAtom::ylm

Definition at line 147 of file bop.hpp.