n2p2 - A neural network potential package
nnp::SymFncBaseCompAngWeighted Class Reference

Intermediate symmetry function class for weighted angular compact SFs. More...

#include <SymFncBaseCompAngWeighted.h>

Inheritance diagram for nnp::SymFncBaseCompAngWeighted:
Collaboration diagram for nnp::SymFncBaseCompAngWeighted:

Public Member Functions

virtual void setParameters (std::string const &parameterString)
 Set symmetry function parameters. More...
 
virtual void changeLengthUnit (double convLength)
 Change length unit. More...
 
virtual std::string getSettingsLine () const
 Get settings file line from currently set parameters. More...
 
void getCompactAngle (double const x, double &fx, double &dfx) const
 
void getCompactRadial (double const x, double &fx, double &dfx) const
 
virtual std::string parameterLine () const
 Give symmetry function parameters in one line. More...
 
virtual std::vector< std::string > parameterInfo () const
 Get description with parameter names and values. More...
 
double getAngleLeft () const
 Get private angleLeft member variable. More...
 
double getAngleRight () const
 Get private angleRight member variable. More...
 
virtual double calculateRadialPart (double distance) const
 Calculate (partial) symmetry function value for one given distance. More...
 
virtual double calculateAngularPart (double angle) const
 Calculate (partial) symmetry function value for one given angle. More...
 
virtual bool checkRelevantElement (std::size_t index) const
 Check whether symmetry function is relevant for given element. More...
 
virtual std::vector< std::string > getCacheIdentifiers () const
 Get unique cache identifiers. More...
 
- Public Member Functions inherited from nnp::SymFncBaseComp
virtual std::vector< std::string > parameterInfo () const
 Get description with parameter names and values. More...
 
void setCompactFunction (std::string subtype)
 Set radial compact function. More...
 
std::string getSubtype () const
 Get private subtype member variable. More...
 
double getRl () const
 Get private rl member variable. More...
 
- Public Member Functions inherited from nnp::SymFnc
virtual ~SymFnc ()
 Virtual destructor. More...
 
virtual bool operator== (SymFnc const &rhs) const =0
 Overload == operator. More...
 
virtual bool operator< (SymFnc const &rhs) const =0
 Overload < operator. More...
 
bool operator!= (SymFnc const &rhs) const
 Overload != operator. More...
 
bool operator> (SymFnc const &rhs) const
 Overload > operator. More...
 
bool operator<= (SymFnc const &rhs) const
 Overload <= operator. More...
 
bool operator>= (SymFnc const &rhs) const
 Overload >= operator. More...
 
virtual void setParameters (std::string const &parameterString)=0
 Set parameters. More...
 
virtual void changeLengthUnit (double convLength)=0
 Change length unit. More...
 
virtual std::string getSettingsLine () const =0
 Get settings file line from currently set parameters. More...
 
virtual void calculate (Atom &atom, bool const derivatives) const =0
 Calculate symmetry function for one atom. More...
 
virtual std::string parameterLine () const =0
 Give symmetry function parameters in one line. More...
 
virtual std::vector< std::string > parameterInfo () const
 Get description with parameter names and values. More...
 
void setScalingType (ScalingType scalingType, std::string statisticsLine, double Smin, double Smax)
 Set symmetry function scaling type. More...
 
double scale (double value) const
 Apply symmetry function scaling and/or centering. More...
 
double unscale (double value) const
 Undo symmetry function scaling and/or centering. More...
 
std::size_t getType () const
 Get private type member variable. More...
 
std::size_t getIndex () const
 Get private index member variable. More...
 
std::size_t getLineNumber () const
 Get private lineNumber member variable. More...
 
std::size_t getEc () const
 Get private ec member variable. More...
 
std::size_t getMinNeighbors () const
 Get private minNeighbors member variable. More...
 
double getRc () const
 Get private rc member variable. More...
 
double getGmin () const
 Get private Gmin member variable. More...
 
double getGmax () const
 Get private Gmax member variable. More...
 
double getScalingFactor () const
 Get private scalingFactor member variable. More...
 
double getConvLength () const
 Get private convLength member variable. More...
 
std::set< std::string > getParameters () const
 Get private parameters member variable. More...
 
std::vector< std::size_t > getIndexPerElement () const
 Get private indexPerElement member variable. More...
 
void setIndex (std::size_t index)
 Set private index member variable. More...
 
void setIndexPerElement (std::size_t elementIndex, std::size_t index)
 Set private indexPerElement member variable. More...
 
void setLineNumber (std::size_t lineNumber)
 Set line number. More...
 
std::string scalingLine () const
 Get string with scaling information. More...
 
virtual double calculateRadialPart (double distance) const =0
 Calculate (partial) symmetry function value for one given distance. More...
 
virtual double calculateAngularPart (double angle) const =0
 Calculate (partial) symmetry function value for one given angle. More...
 
virtual bool checkRelevantElement (std::size_t index) const =0
 Check whether symmetry function is relevant for given element. More...
 
virtual std::vector< std::string > getCacheIdentifiers () const
 Get unique cache identifiers. More...
 
void addCacheIndex (std::size_t element, std::size_t cacheIndex, std::string cacheIdentifier)
 Add one cache index for given neighbor element and check identifier. More...
 
std::vector< std::vector< std::size_t > > getCacheIndices () const
 Getter for cacheIndices. More...
 

Protected Member Functions

 SymFncBaseCompAngWeighted (std::size_t type, ElementMap const &)
 Constructor, initializes type. More...
 
- Protected Member Functions inherited from nnp::SymFncBaseComp
 SymFncBaseComp (std::size_t type, ElementMap const &)
 Constructor, initializes type. More...
 
- Protected Member Functions inherited from nnp::SymFnc
 SymFnc (std::size_t type, ElementMap const &)
 Constructor, initializes type. More...
 
std::string getPrintFormat () const
 Generate format string for symmetry function parameter printing. More...
 

Protected Attributes

double angleLeft
 Left angle boundary. More...
 
double angleRight
 Right angle boundary. More...
 
double angleLeftRadians
 Left angle boundary in radians. More...
 
double angleRightRadians
 Right angle boundary in radians. More...
 
CompactFunction ca
 Compact function member for angular part. More...
 
- Protected Attributes inherited from nnp::SymFncBaseComp
bool asymmetric
 If asymmetric version of polynomials should be used. More...
 
double rl
 Lower bound of compact function, \(r_{l}\). More...
 
std::string subtype
 Subtype string (specifies e.g. polynom type). More...
 
CompactFunction cr
 Compact function for radial part. More...
 
- Protected Attributes inherited from nnp::SymFnc
std::size_t type
 Symmetry function type. More...
 
ElementMap elementMap
 Copy of element map. More...
 
std::size_t index
 Symmetry function index (per element). More...
 
std::size_t lineNumber
 Line number. More...
 
std::size_t ec
 Element index of center atom. More...
 
std::size_t minNeighbors
 Minimum number of neighbors required. More...
 
double Smin
 Minimum for scaling range. More...
 
double Smax
 Maximum for scaling range. More...
 
double Gmin
 Minimum unscaled symmetry function value. More...
 
double Gmax
 Maximum unscaled symmetry function value. More...
 
double Gmean
 Mean unscaled symmetry function value. More...
 
double Gsigma
 Sigma of unscaled symmetry function values. More...
 
double rc
 Cutoff radius \(r_c\). More...
 
double scalingFactor
 Scaling factor. More...
 
double convLength
 Data set normalization length conversion factor. More...
 
ScalingType scalingType
 Symmetry function scaling type used by this symmetry function. More...
 
std::set< std::string > parameters
 Set with symmetry function parameter IDs (lookup for printing). More...
 
std::vector< std::size_t > indexPerElement
 Per-element index for derivative memory in Atom::Neighbor::dGdr arrays. More...
 
std::vector< std::vector< std::size_t > > cacheIndices
 Cache indices for each element. More...
 

Additional Inherited Members

- Public Types inherited from nnp::SymFnc
enum  ScalingType {
  ST_NONE , ST_SCALE , ST_CENTER , ST_SCALECENTER ,
  ST_SCALESIGMA
}
 List of available scaling types. More...
 
- Protected Types inherited from nnp::SymFnc
typedef std::map< std::string, std::pair< std::string, std::string > > PrintFormat
 
typedef std::vector< std::string > PrintOrder
 
- Static Protected Member Functions inherited from nnp::SymFnc
static PrintFormat const initializePrintFormat ()
 Initialize static print format map for all possible parameters. More...
 
static PrintOrder const initializePrintOrder ()
 Initialize static print order vector for all possible parameters. More...
 
- Static Protected Attributes inherited from nnp::SymFnc
static std::size_t const sfinfoWidth = 12
 Width of the SFINFO parameter description field (see parameterInfo()). More...
 
static PrintFormat const printFormat = initializePrintFormat()
 Map of parameter format strings and empty strings. More...
 
static PrintOrder const printOrder = initializePrintOrder()
 Vector of parameters in order of printing. More...
 

Detailed Description

Intermediate symmetry function class for weighted angular compact SFs.

Definition at line 30 of file SymFncBaseCompAngWeighted.h.

Constructor & Destructor Documentation

◆ SymFncBaseCompAngWeighted()

SymFncBaseCompAngWeighted::SymFncBaseCompAngWeighted ( std::size_t  type,
ElementMap const &   
)
protected

Constructor, initializes type.

Definition at line 31 of file SymFncBaseCompAngWeighted.cpp.

32 :
34 angleLeft (0.0),
35 angleRight (0.0),
36 angleLeftRadians (0.0),
38{
39 minNeighbors = 2;
40 parameters.insert("angleLeft");
41 parameters.insert("angleRight");
42}
double angleLeft
Left angle boundary.
double angleLeftRadians
Left angle boundary in radians.
double angleRight
Right angle boundary.
double angleRightRadians
Right angle boundary in radians.
SymFncBaseComp(std::size_t type, ElementMap const &)
Constructor, initializes type.
std::size_t type
Symmetry function type.
Definition: SymFnc.h:268
std::set< std::string > parameters
Set with symmetry function parameter IDs (lookup for printing).
Definition: SymFnc.h:300
ElementMap elementMap
Copy of element map.
Definition: SymFnc.h:270
std::size_t minNeighbors
Minimum number of neighbors required.
Definition: SymFnc.h:278

References nnp::SymFnc::minNeighbors, and nnp::SymFnc::parameters.

Member Function Documentation

◆ setParameters()

void SymFncBaseCompAngWeighted::setParameters ( std::string const &  parameterString)
virtual

Set symmetry function parameters.

Parameters
[in]parameterStringString containing weighted angular symmetry function parameters.

Implements nnp::SymFnc.

Definition at line 44 of file SymFncBaseCompAngWeighted.cpp.

45{
46 vector<string> splitLine = split(reduce(parameterString));
47
48 if (type != (size_t)atoi(splitLine.at(1).c_str()))
49 {
50 throw runtime_error("ERROR: Incorrect symmetry function type.\n");
51 }
52
53 ec = elementMap[splitLine.at(0)];
54 rl = atof(splitLine.at(2).c_str());
55 rc = atof(splitLine.at(3).c_str());
56 angleLeft = atof(splitLine.at(4).c_str());
57 angleRight = atof(splitLine.at(5).c_str());
58 subtype = splitLine.at(6);
59
60 // Radial part.
61 if (rl > rc)
62 {
63 throw runtime_error("ERROR: Lower radial boundary >= upper "
64 "radial boundary.\n");
65 }
66 //if (rl < 0.0 && abs(rl + rc) > numeric_limits<double>::epsilon())
67 //{
68 // throw runtime_error("ERROR: Radial function not symmetric "
69 // "w.r.t. origin.\n");
70 //}
71
74
75 // Angular part.
76 if (angleLeft >= angleRight)
77 {
78 throw runtime_error("ERROR: Left angle boundary right of or equal to "
79 "right angle boundary.\n");
80 }
81
82 double const center = (angleLeft + angleRight) / 2.0;
83 if ( (angleLeft < 0.0 && center != 0.0) ||
84 (angleRight > 180.0 && center != 180.0) )
85 {
86 throw runtime_error("ERROR: Angle boundary out of [0,180] and "
87 "center of angular function /= 0 or /= 180.\n");
88 }
89 if (angleRight - angleLeft > 360.0)
90 {
91 throw runtime_error("ERROR: Periodic symmetry function cannot spread "
92 "over domain > 360 degrees\n");
93 }
94
96 angleLeftRadians = angleLeft * M_PI / 180.0;
97 angleRightRadians = angleRight * M_PI / 180.0;
99
100 return;
101}
void setCoreFunction(CoreFunction::Type const type)
Set type.
CoreFunction::Type getCoreFunctionType() const
Getter for #type.
void setLeftRight(double left, double right)
Set left and right boundary.
CompactFunction ca
Compact function member for angular part.
double rl
Lower bound of compact function, .
CompactFunction cr
Compact function for radial part.
std::string subtype
Subtype string (specifies e.g. polynom type).
void setCompactFunction(std::string subtype)
Set radial compact function.
double rc
Cutoff radius .
Definition: SymFnc.h:292
std::size_t ec
Element index of center atom.
Definition: SymFnc.h:276
vector< string > split(string const &input, char delimiter)
Split string at each delimiter.
Definition: utility.cpp:33
string reduce(string const &line, string const &whitespace, string const &fill)
Replace multiple whitespaces with fill.
Definition: utility.cpp:60

References angleLeft, angleLeftRadians, angleRight, angleRightRadians, ca, nnp::SymFncBaseComp::cr, nnp::SymFnc::ec, nnp::SymFnc::elementMap, nnp::CompactFunction::getCoreFunctionType(), nnp::SymFnc::rc, nnp::reduce(), nnp::SymFncBaseComp::rl, nnp::SymFncBaseComp::setCompactFunction(), nnp::CompactFunction::setCoreFunction(), nnp::CompactFunction::setLeftRight(), nnp::split(), nnp::SymFncBaseComp::subtype, and nnp::SymFnc::type.

Here is the call graph for this function:

◆ changeLengthUnit()

void SymFncBaseCompAngWeighted::changeLengthUnit ( double  convLength)
virtual

Change length unit.

Parameters
[in]convLengthMultiplicative length unit conversion factor.

Implements nnp::SymFnc.

Definition at line 103 of file SymFncBaseCompAngWeighted.cpp.

104{
105 this->convLength = convLength;
106 rc *= convLength;
107 rl *= convLength;
108
110
111 return;
112}
double convLength
Data set normalization length conversion factor.
Definition: SymFnc.h:296

References nnp::SymFnc::convLength, nnp::SymFncBaseComp::cr, nnp::SymFnc::rc, nnp::SymFncBaseComp::rl, and nnp::CompactFunction::setLeftRight().

Here is the call graph for this function:

◆ getSettingsLine()

string SymFncBaseCompAngWeighted::getSettingsLine ( ) const
virtual

Get settings file line from currently set parameters.

Returns
Settings file string ("symfunction_short ...").

Implements nnp::SymFnc.

Definition at line 114 of file SymFncBaseCompAngWeighted.cpp.

115{
116 string s = strpr("symfunction_short %2s %2zu %16.8E %16.8E "
117 "%16.8E %16.8E %s\n",
118 elementMap[ec].c_str(),
119 type,
120 rl / convLength,
121 rc / convLength,
122 angleLeft,
124 subtype.c_str());
125
126 return s;
127}
string strpr(const char *format,...)
String version of printf function.
Definition: utility.cpp:90

References angleLeft, angleRight, nnp::SymFnc::convLength, nnp::SymFnc::ec, nnp::SymFnc::elementMap, nnp::SymFnc::rc, nnp::SymFncBaseComp::rl, nnp::strpr(), nnp::SymFncBaseComp::subtype, and nnp::SymFnc::type.

Here is the call graph for this function:

◆ getCompactAngle()

void nnp::SymFncBaseCompAngWeighted::getCompactAngle ( double const  x,
double &  fx,
double &  dfx 
) const
inline

Definition at line 133 of file SymFncBaseCompAngWeighted.h.

136{
137 ca.fdf(x, fx, dfx);
138 return;
139}
void fdf(double a, double &fa, double &dfa) const
Calculate compact function and derivative at once.

References ca, and nnp::CompactFunction::fdf().

Referenced by nnp::SymGrpCompAngnWeighted::calculate(), and nnp::SymGrpCompAngwWeighted::calculate().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getCompactRadial()

void nnp::SymFncBaseCompAngWeighted::getCompactRadial ( double const  x,
double &  fx,
double &  dfx 
) const
inline

Definition at line 141 of file SymFncBaseCompAngWeighted.h.

144{
145 cr.fdf(x, fx, dfx);
146 return;
147}

References nnp::SymFncBaseComp::cr, and nnp::CompactFunction::fdf().

Referenced by nnp::SymGrpCompAngnWeighted::calculate(), and nnp::SymGrpCompAngwWeighted::calculate().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ parameterLine()

string SymFncBaseCompAngWeighted::parameterLine ( ) const
virtual

Give symmetry function parameters in one line.

Returns
String containing symmetry function parameter values.

Implements nnp::SymFnc.

Definition at line 129 of file SymFncBaseCompAngWeighted.cpp.

130{
131 return strpr(getPrintFormat().c_str(),
132 index + 1,
133 elementMap[ec].c_str(),
134 type,
135 subtype.c_str(),
136 rl / convLength,
137 rc / convLength,
138 angleLeft,
140 lineNumber + 1);
141}
std::size_t index
Symmetry function index (per element).
Definition: SymFnc.h:272
std::size_t lineNumber
Line number.
Definition: SymFnc.h:274
std::string getPrintFormat() const
Generate format string for symmetry function parameter printing.
Definition: SymFnc.cpp:285

References angleLeft, angleRight, nnp::SymFnc::convLength, nnp::SymFnc::ec, nnp::SymFnc::elementMap, nnp::SymFnc::getPrintFormat(), nnp::SymFnc::index, nnp::SymFnc::lineNumber, nnp::SymFnc::rc, nnp::SymFncBaseComp::rl, nnp::strpr(), nnp::SymFncBaseComp::subtype, and nnp::SymFnc::type.

Here is the call graph for this function:

◆ parameterInfo()

vector< string > SymFncBaseCompAngWeighted::parameterInfo ( ) const
virtual

Get description with parameter names and values.

Returns
Vector of parameter description strings.

Reimplemented from nnp::SymFncBaseComp.

Definition at line 143 of file SymFncBaseCompAngWeighted.cpp.

144{
145 vector<string> v = SymFncBaseComp::parameterInfo();
146 string s;
147 size_t w = sfinfoWidth;
148
149 s = "angleLeft";
150 v.push_back(strpr((pad(s, w) + "%14.8E").c_str(), angleLeft));
151 s = "angleRight";
152 v.push_back(strpr((pad(s, w) + "%14.8E").c_str(), angleRight));
153
154 return v;
155}
virtual std::vector< std::string > parameterInfo() const
Get description with parameter names and values.
static std::size_t const sfinfoWidth
Width of the SFINFO parameter description field (see parameterInfo()).
Definition: SymFnc.h:309
string pad(string const &input, size_t num, char fill, bool right)
Definition: utility.cpp:79

References angleLeft, angleRight, nnp::pad(), nnp::SymFncBaseComp::parameterInfo(), nnp::SymFnc::sfinfoWidth, and nnp::strpr().

Here is the call graph for this function:

◆ getAngleLeft()

double nnp::SymFncBaseCompAngWeighted::getAngleLeft ( ) const
inline

Get private angleLeft member variable.

Definition at line 123 of file SymFncBaseCompAngWeighted.h.

124{
125 return angleLeft;
126}

References angleLeft.

◆ getAngleRight()

double nnp::SymFncBaseCompAngWeighted::getAngleRight ( ) const
inline

Get private angleRight member variable.

Definition at line 128 of file SymFncBaseCompAngWeighted.h.

129{
130 return angleRight;
131}

References angleRight.

◆ calculateRadialPart()

double SymFncBaseCompAngWeighted::calculateRadialPart ( double  distance) const
virtual

Calculate (partial) symmetry function value for one given distance.

Parameters
[in]distanceDistance between two atoms.
Returns
\(\left(e^{-\eta r^2} f_c(r)\right)^2\)

Implements nnp::SymFnc.

Definition at line 157 of file SymFncBaseCompAngWeighted.cpp.

158{
159 double const& r = distance * convLength;
160
161 return cr.f(r);
162}
double f(double a) const
Compact function .

References nnp::SymFnc::convLength, nnp::SymFncBaseComp::cr, and nnp::CompactFunction::f().

Here is the call graph for this function:

◆ calculateAngularPart()

double SymFncBaseCompAngWeighted::calculateAngularPart ( double  angle) const
virtual

Calculate (partial) symmetry function value for one given angle.

Parameters
[in]angleAngle between triplet of atoms (in radians).
Returns
\(1\)

Implements nnp::SymFnc.

Definition at line 164 of file SymFncBaseCompAngWeighted.cpp.

165{
166 return ca.f(angle);
167}

References ca, and nnp::CompactFunction::f().

Here is the call graph for this function:

◆ checkRelevantElement()

bool SymFncBaseCompAngWeighted::checkRelevantElement ( std::size_t  index) const
virtual

Check whether symmetry function is relevant for given element.

Parameters
[in]indexIndex of given element.
Returns
True if symmetry function is sensitive to given element, false otherwise.

Implements nnp::SymFnc.

Definition at line 169 of file SymFncBaseCompAngWeighted.cpp.

170{
171 return true;
172}

◆ getCacheIdentifiers()

vector< string > SymFncBaseCompAngWeighted::getCacheIdentifiers ( ) const
virtual

Get unique cache identifiers.

Returns
Vector of string identifying the type of cache this symmetry function requires.

Reimplemented from nnp::SymFnc.

Definition at line 175 of file SymFncBaseCompAngWeighted.cpp.

176{
177 vector<string> v;
178 string s("");
179
180 s += subtype;
181 s += " ";
182 s += strpr("rl = %16.8E", rl / convLength);
183 s += " ";
184 s += strpr("rc = %16.8E", rc / convLength);
185
186 for (size_t i = 0; i < elementMap.size(); ++i)
187 {
188 v.push_back(strpr("%zu f ", i) + s);
189 v.push_back(strpr("%zu df ", i) + s);
190 }
191
192 return v;
193}
std::size_t size() const
Get element map size.
Definition: ElementMap.h:140

References nnp::SymFnc::convLength, nnp::SymFnc::elementMap, nnp::SymFnc::rc, nnp::SymFncBaseComp::rl, nnp::ElementMap::size(), nnp::strpr(), and nnp::SymFncBaseComp::subtype.

Here is the call graph for this function:

Member Data Documentation

◆ angleLeft

◆ angleRight

◆ angleLeftRadians

double nnp::SymFncBaseCompAngWeighted::angleLeftRadians
protected

Left angle boundary in radians.

Definition at line 108 of file SymFncBaseCompAngWeighted.h.

Referenced by nnp::SymFncCompAngnWeighted::calculate(), nnp::SymFncCompAngwWeighted::calculate(), and setParameters().

◆ angleRightRadians

double nnp::SymFncBaseCompAngWeighted::angleRightRadians
protected

Right angle boundary in radians.

Definition at line 110 of file SymFncBaseCompAngWeighted.h.

Referenced by nnp::SymFncCompAngnWeighted::calculate(), nnp::SymFncCompAngwWeighted::calculate(), and setParameters().

◆ ca

CompactFunction nnp::SymFncBaseCompAngWeighted::ca
protected

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