n2p2 - A neural network potential package
Mode.h
Go to the documentation of this file.
1// n2p2 - A neural network potential package
2// Copyright (C) 2018 Andreas Singraber (University of Vienna)
3//
4// This program is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// This program is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with this program. If not, see <https://www.gnu.org/licenses/>.
16
17#ifndef MODE_H
18#define MODE_H
19
20#include "CutoffFunction.h"
21#include "Element.h"
22#include "ElementMap.h"
23#include "Log.h"
24#include "Settings.h"
25#include "Structure.h"
26#include "SymFnc.h"
27#include <cstddef> // std::size_t
28#include <string> // std::string
29#include <vector> // std::vector
30
31namespace nnp
32{
33
82class Mode
83{
84public:
85 enum class NNPType
86 {
88 SHORT_ONLY,
90 SHORT_CHARGE_NN
91 };
92
93 Mode();
96 void initialize();
101 void loadSettingsFile(std::string const& fileName
102 = "input.nn");
110 void setupGeneric(bool skipNormalize = false);
119 void setupNormalization(bool standalone = true);
125 virtual void setupElementMap();
131 virtual void setupElements();
139 void setupCutoff();
145 virtual void setupSymmetryFunctions();
163 virtual void setupSymmetryFunctionScaling(
164 std::string const& fileName = "scaling.data");
170 virtual void setupSymmetryFunctionGroups();
171#ifndef N2P2_NO_SF_CACHE
179 virtual void setupSymmetryFunctionCache(bool verbose = false);
180#endif
187 void setupSymmetryFunctionMemory(bool verbose = false);
204 bool collectStatistics,
205 bool collectExtrapolationWarnings,
206 bool writeExtrapolationWarnings,
207 bool stopOnExtrapolationWarnings);
215 virtual void setupNeuralNetwork();
228 virtual void setupNeuralNetworkWeights(
229 std::string const& fileNameFormatShort
230 = "weights.%03zu.data",
231 std::string const& fileNameFormatCharge
232 = "weightse.%03zu.data");
245 Structure& structure,
246 bool const derivatives);
260 Structure& structure,
261 bool const derivatives);
274 //void calculateAtomicNeuralNetwork(
275 // std::string const& nnId,
276 // Atom& atom,
277 // bool const derivatives);
289 Structure& structure,
290 bool const derivatives);
298 void calculateEnergy(Structure& structure) const;
306 void calculateCharge(Structure& structure) const;
314 void calculateForces(Structure& structure) const;
320 void addEnergyOffset(Structure& structure,
321 bool ref = true);
329 void removeEnergyOffset(Structure& structure,
330 bool ref = true);
337 double getEnergyOffset(Structure const& structure) const;
348 double getEnergyWithOffset(
349 Structure const& structure,
350 bool ref = true) const;
358 double normalized(std::string const& property,
359 double value) const;
367 double normalizedEnergy(
368 Structure const& structure,
369 bool ref = true) const;
377 double physical(std::string const& property,
378 double value) const;
386 double physicalEnergy(Structure const& structure,
387 bool ref = true) const;
393 Structure& structure) const;
399 Structure& structure) const;
405 std::size_t getNumExtrapolationWarnings() const;
413 NNPType getNnpType() const;
418 double getMeanEnergy() const;
423 double getConvEnergy() const;
428 double getConvLength() const;
435 double getMaxCutoffRadius() const;
442 std::size_t getNumElements() const;
447 std::vector<std::size_t> getNumSymmetryFunctions() const;
452 bool useNormalization() const;
460 std::string const& keyword) const;
467 std::string settingsGetValue(
468 std::string const& keyword) const;
477 std::vector<std::size_t> pruneSymmetryFunctionsRange(double threshold);
487 std::vector<std::size_t> pruneSymmetryFunctionsSensitivity(
488 double threshold,
489 std::vector<
490 std::vector<double> > sensitivity);
497 std::vector<std::size_t> prune,
498 std::string fileName
499 = "output.nn") const;
505 std::ofstream* const& file) const;
506
511
512protected:
517 std::size_t numElements;
518 std::vector<std::size_t> minNeighbors;
519 std::vector<double> minCutoffRadius;
528 std::vector<Element> elements;
529
535 void readNeuralNetworkWeights(std::string const& type,
536 std::string const& fileName);
537};
538
540// Inlined function definitions //
542
544{
545 return nnpType;
546}
547
548inline double Mode::getMeanEnergy() const
549{
550 return meanEnergy;
551}
552
553inline double Mode::getConvEnergy() const
554{
555 return convEnergy;
556}
557
558inline double Mode::getConvLength() const
559{
560 return convLength;
561}
562
563inline double Mode::getMaxCutoffRadius() const
564{
565 return maxCutoffRadius;
566}
567
568inline std::size_t Mode::getNumElements() const
569{
570 return numElements;
571}
572
573inline bool Mode::useNormalization() const
574{
575 return normalize;
576}
577
578}
579
580#endif
CutoffType
List of available cutoff function types.
Contains element map.
Definition: ElementMap.h:30
Logging class for library output.
Definition: Log.h:34
Base class for all NNP applications.
Definition: Mode.h:83
double physicalEnergy(Structure const &structure, bool ref=true) const
Undo normalization for a given energy of structure.
Definition: Mode.cpp:1557
bool checkExtrapolationWarnings
Definition: Mode.h:515
bool normalize
Definition: Mode.h:514
NNPType getNnpType() const
Getter for Mode::nnpType.
Definition: Mode.h:543
double convEnergy
Definition: Mode.h:523
Mode()
Definition: Mode.cpp:37
void setupNormalization(bool standalone=true)
Set up normalization.
Definition: Mode.cpp:218
ElementMap elementMap
Global element map, populated by setupElementMap().
Definition: Mode.h:508
NNPType nnpType
Definition: Mode.h:513
std::vector< double > minCutoffRadius
Definition: Mode.h:519
void addEnergyOffset(Structure &structure, bool ref=true)
Add atomic energy offsets to reference energy.
Definition: Mode.cpp:1461
void initialize()
Write welcome message with version information.
Definition: Mode.cpp:50
double convLength
Definition: Mode.h:524
virtual void setupElementMap()
Set up the element map.
Definition: Mode.cpp:273
std::size_t getNumElements() const
Getter for Mode::numElements.
Definition: Mode.h:568
virtual void setupNeuralNetwork()
Set up neural networks for all elements.
Definition: Mode.cpp:963
virtual void setupSymmetryFunctionCache(bool verbose=false)
Set up symmetry function cache.
Definition: Mode.cpp:804
double getConvLength() const
Getter for Mode::convLength.
Definition: Mode.h:558
double maxCutoffRadius
Definition: Mode.h:520
bool useChargeNN
Definition: Mode.h:516
NNPType
Definition: Mode.h:86
void readNeuralNetworkWeights(std::string const &type, std::string const &fileName)
Read in weights for a specific type of neural network.
Definition: Mode.cpp:1699
std::vector< std::size_t > pruneSymmetryFunctionsRange(double threshold)
Prune symmetry functions according to their range and write settings file.
Definition: Mode.cpp:1657
double meanEnergy
Definition: Mode.h:522
SymFnc::ScalingType scalingType
Definition: Mode.h:526
double physical(std::string const &property, double value) const
Undo normalization for a given property.
Definition: Mode.cpp:1549
void writePrunedSettingsFile(std::vector< std::size_t > prune, std::string fileName="output.nn") const
Copy settings file but comment out lines provided.
Definition: Mode.cpp:1633
virtual void setupSymmetryFunctionGroups()
Set up symmetry function groups.
Definition: Mode.cpp:662
std::vector< Element > elements
Definition: Mode.h:528
double getMaxCutoffRadius() const
Getter for Mode::maxCutoffRadius.
Definition: Mode.h:563
double normalized(std::string const &property, double value) const
Apply normalization to given property.
Definition: Mode.cpp:1527
std::size_t numElements
Definition: Mode.h:517
void calculateAtomicNeuralNetworks(Structure &structure, bool const derivatives)
Calculate a single atomic neural network for a given atom and nn type.
Definition: Mode.cpp:1310
bool useNormalization() const
Check if normalization is enabled.
Definition: Mode.h:573
virtual void setupNeuralNetworkWeights(std::string const &fileNameFormatShort="weights.%03zu.data", std::string const &fileNameFormatCharge="weightse.%03zu.data")
Set up neural network weights from files.
Definition: Mode.cpp:1126
void convertToNormalizedUnits(Structure &structure) const
Convert one structure to normalized units.
Definition: Mode.cpp:1570
void calculateEnergy(Structure &structure) const
Calculate potential energy for a given structure.
Definition: Mode.cpp:1366
void calculateSymmetryFunctionGroups(Structure &structure, bool const derivatives)
Calculate all symmetry function groups for all atoms in given structure.
Definition: Mode.cpp:1230
double getConvEnergy() const
Getter for Mode::convEnergy.
Definition: Mode.h:553
void setupSymmetryFunctionScalingNone()
Set up "empy" symmetry function scaling.
Definition: Mode.cpp:512
std::string settingsGetValue(std::string const &keyword) const
Get value for given keyword in Settings instance.
Definition: Mode.cpp:1627
virtual void setupSymmetryFunctionScaling(std::string const &fileName="scaling.data")
Set up symmetry function scaling from file.
Definition: Mode.cpp:532
std::vector< std::size_t > getNumSymmetryFunctions() const
Get number of symmetry functions per element.
Definition: Mode.cpp:1609
std::size_t getNumExtrapolationWarnings() const
Count total number of extrapolation warnings encountered for all elements and symmetry functions.
Definition: Mode.cpp:1595
void removeEnergyOffset(Structure &structure, bool ref=true)
Remove atomic energy offsets from reference energy.
Definition: Mode.cpp:1480
bool settingsKeywordExists(std::string const &keyword) const
Check if keyword was found in settings file.
Definition: Mode.cpp:1622
Log log
Global log file.
Definition: Mode.h:510
double getMeanEnergy() const
Getter for Mode::meanEnergy.
Definition: Mode.h:548
void resetExtrapolationWarnings()
Erase all extrapolation warnings and reset counters.
Definition: Mode.cpp:1584
double getEnergyWithOffset(Structure const &structure, bool ref=true) const
Add atomic energy offsets and return energy.
Definition: Mode.cpp:1512
void setupGeneric(bool skipNormalize=false)
Combine multiple setup routines and provide a basic NNP setup.
Definition: Mode.cpp:197
std::vector< std::size_t > minNeighbors
Definition: Mode.h:518
void convertToPhysicalUnits(Structure &structure) const
Convert one structure to physical units.
Definition: Mode.cpp:1577
void calculateCharge(Structure &structure) const
Calculate total charge for a given structure.
Definition: Mode.cpp:1379
Settings settings
Definition: Mode.h:525
virtual void setupSymmetryFunctions()
Set up all symmetry functions.
Definition: Mode.cpp:435
void calculateSymmetryFunctions(Structure &structure, bool const derivatives)
Calculate all symmetry functions for all atoms in given structure.
Definition: Mode.cpp:1150
double cutoffAlpha
Definition: Mode.h:521
void calculateForces(Structure &structure) const
Calculate forces for all atoms in given structure.
Definition: Mode.cpp:1392
void setupSymmetryFunctionStatistics(bool collectStatistics, bool collectExtrapolationWarnings, bool writeExtrapolationWarnings, bool stopOnExtrapolationWarnings)
Set up symmetry function statistics collection.
Definition: Mode.cpp:923
void setupCutoff()
Set up cutoff function for all symmetry functions.
Definition: Mode.cpp:340
void loadSettingsFile(std::string const &fileName="input.nn")
Open settings file and load all keywords into memory.
Definition: Mode.cpp:156
std::vector< std::size_t > pruneSymmetryFunctionsSensitivity(double threshold, std::vector< std::vector< double > > sensitivity)
Prune symmetry functions with sensitivity analysis data.
Definition: Mode.cpp:1678
double getEnergyOffset(Structure const &structure) const
Get atomic energy offset for given structure.
Definition: Mode.cpp:1499
void setupSymmetryFunctionMemory(bool verbose=false)
Extract required memory dimensions for symmetry function derivatives.
Definition: Mode.cpp:714
void writeSettingsFile(std::ofstream *const &file) const
Write complete settings file.
Definition: Mode.cpp:1650
double normalizedEnergy(Structure const &structure, bool ref=true) const
Apply normalization to given energy of structure.
Definition: Mode.cpp:1535
CutoffFunction::CutoffType cutoffType
Definition: Mode.h:527
virtual void setupElements()
Set up all Element instances.
Definition: Mode.cpp:294
Reads and analyzes settings file and stores parameters.
Definition: Settings.h:33
ScalingType
List of available scaling types.
Definition: SymFnc.h:44
Definition: Atom.h:28
Storage for one atomic configuration.
Definition: Structure.h:34