source: src/molecules.hpp@ 5466f3

Action_Thermostats Add_AtomRandomPerturbation Add_FitFragmentPartialChargesAction Add_RotateAroundBondAction Add_SelectAtomByNameAction Added_ParseSaveFragmentResults AddingActions_SaveParseParticleParameters Adding_Graph_to_ChangeBondActions Adding_MD_integration_tests Adding_ParticleName_to_Atom Adding_StructOpt_integration_tests AtomFragments Automaking_mpqc_open AutomationFragmentation_failures Candidate_v1.5.4 Candidate_v1.6.0 Candidate_v1.6.1 ChangeBugEmailaddress ChangingTestPorts ChemicalSpaceEvaluator CombiningParticlePotentialParsing Combining_Subpackages Debian_Package_split Debian_package_split_molecuildergui_only Disabling_MemDebug Docu_Python_wait EmpiricalPotential_contain_HomologyGraph EmpiricalPotential_contain_HomologyGraph_documentation Enable_parallel_make_install Enhance_userguide Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Example_ManyWaysToTranslateAtom Exclude_Hydrogens_annealWithBondGraph FitPartialCharges_GlobalError Fix_BoundInBox_CenterInBox_MoleculeActions Fix_ChargeSampling_PBC Fix_ChronosMutex Fix_FitPartialCharges Fix_FitPotential_needs_atomicnumbers Fix_ForceAnnealing Fix_IndependentFragmentGrids Fix_ParseParticles Fix_ParseParticles_split_forward_backward_Actions Fix_PopActions Fix_QtFragmentList_sorted_selection Fix_Restrictedkeyset_FragmentMolecule Fix_StatusMsg Fix_StepWorldTime_single_argument Fix_Verbose_Codepatterns Fix_fitting_potentials Fixes ForceAnnealing_goodresults ForceAnnealing_oldresults ForceAnnealing_tocheck ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion FragmentAction_writes_AtomFragments FragmentMolecule_checks_bonddegrees GeometryObjects Gui_Fixes Gui_displays_atomic_force_velocity ImplicitCharges IndependentFragmentGrids IndependentFragmentGrids_IndividualZeroInstances IndependentFragmentGrids_IntegrationTest IndependentFragmentGrids_Sole_NN_Calculation JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool JobMarket_unresolvable_hostname_fix MoreRobust_FragmentAutomation ODR_violation_mpqc_open PartialCharges_OrthogonalSummation PdbParser_setsAtomName PythonUI_with_named_parameters QtGui_reactivate_TimeChanged_changes Recreated_GuiChecks Rewrite_FitPartialCharges RotateToPrincipalAxisSystem_UndoRedo SaturateAtoms_findBestMatching SaturateAtoms_singleDegree StoppableMakroAction Subpackage_CodePatterns Subpackage_JobMarket Subpackage_LinearAlgebra Subpackage_levmar Subpackage_mpqc_open Subpackage_vmg Switchable_LogView ThirdParty_MPQC_rebuilt_buildsystem TrajectoryDependenant_MaxOrder TremoloParser_IncreasedPrecision TremoloParser_MultipleTimesteps TremoloParser_setsAtomName Ubuntu_1604_changes stable
Last change on this file since 5466f3 was 21c017, checked in by Frederik Heber <heber@…>, 16 years ago

molecule::CenterInBox puts atoms now periodically into the given box, new function molecule::TranslatePeriodically, BUGFIX: molecule::ReturnFullMatrixforSymmetrical()

  • molecule::CenterInBox() has no more a vector as a parameter, but instead enforces the periodicity of the simulation box, i.e. all atoms out of bounds are put back in with wrap-around at boundaries. Call of function was changed in everywhere.
  • in ParseCommandLineParameters() a SetBoxDimension was missing in certain Center...() commands.
  • new function molecule::TranslatePeriodically translates all atoms of a molecule while adhering to the periodicity of the domain
  • new function vector::InverseMatrix() returns the hard-encoded inverse of 3x3 real matrix
  • BUGFIX: molecule::ReturnFullMatrixforSymmetrical()'s assignment from 6-doubles to 9-doubles was all wrong (symmetric to full 3x3 matrix)
  • Property mode set to 100755
File size: 18.0 KB
Line 
1/** \file molecules.hpp
2 *
3 * Class definitions of atom and molecule, element and periodentafel
4 */
5
6#ifndef MOLECULES_HPP_
7#define MOLECULES_HPP_
8
9using namespace std;
10
11// GSL headers
12#include <gsl/gsl_multimin.h>
13#include <gsl/gsl_vector.h>
14#include <gsl/gsl_matrix.h>
15#include <gsl/gsl_eigen.h>
16#include <gsl/gsl_heapsort.h>
17
18// STL headers
19#include <map>
20#include <set>
21#include <deque>
22#include <list>
23#include <vector>
24
25#include "helpers.hpp"
26#include "parser.hpp"
27#include "periodentafel.hpp"
28#include "stackclass.hpp"
29#include "vector.hpp"
30
31class atom;
32class bond;
33class config;
34class molecule;
35class MoleculeListClass;
36class Verbose;
37
38/******************************** Some definitions for easier reading **********************************/
39
40#define KeyStack deque<int>
41#define KeySet set<int>
42#define NumberValuePair pair<int, double>
43#define Graph map <KeySet, NumberValuePair, KeyCompare >
44#define GraphPair pair <KeySet, NumberValuePair >
45#define KeySetTestPair pair<KeySet::iterator, bool>
46#define GraphTestPair pair<Graph::iterator, bool>
47
48#define DistancePair pair < double, atom* >
49#define DistanceMap multimap < double, atom* >
50#define DistanceTestPair pair < DistanceMap::iterator, bool>
51
52#define Boundaries map <double, DistancePair >
53#define BoundariesPair pair<double, DistancePair >
54#define BoundariesTestPair pair< Boundaries::iterator, bool>
55
56#define PointMap map < int, class BoundaryPointSet * >
57#define PointPair pair < int, class BoundaryPointSet * >
58#define PointTestPair pair < PointMap::iterator, bool >
59#define CandidateList list <class CandidateForTesselation *>
60
61#define LineMap multimap < int, class BoundaryLineSet * >
62#define LinePair pair < int, class BoundaryLineSet * >
63#define LineTestPair pair < LineMap::iterator, bool >
64
65#define TriangleMap map < int, class BoundaryTriangleSet * >
66#define TrianglePair pair < int, class BoundaryTriangleSet * >
67#define TriangleTestPair pair < TrianglePair::iterator, bool >
68
69#define DistanceMultiMap multimap <double, pair < PointMap::iterator, PointMap::iterator> >
70#define DistanceMultiMapPair pair <double, pair < PointMap::iterator, PointMap::iterator> >
71
72#define MoleculeList list <molecule *>
73#define MoleculeListTest pair <MoleculeList::iterator, bool>
74
75#define LinkedAtoms list <atom *>
76
77/******************************** Some small functions and/or structures **********************************/
78
79struct KeyCompare
80{
81 bool operator() (const KeySet SubgraphA, const KeySet SubgraphB) const;
82};
83
84struct Trajectory
85{
86 vector<Vector> R; //!< position vector
87 vector<Vector> U; //!< velocity vector
88 vector<Vector> F; //!< last force vector
89 atom *ptr; //!< pointer to atom whose trajectory we contain
90};
91
92//bool operator < (KeySet SubgraphA, KeySet SubgraphB); //note: this declaration is important, otherwise normal < is used (producing wrong order)
93inline void InsertFragmentIntoGraph(ofstream *out, struct UniqueFragments *Fragment); // Insert a KeySet into a Graph
94inline void InsertGraphIntoGraph(ofstream *out, Graph &graph1, Graph &graph2, int *counter); // Insert all KeySet's in a Graph into another Graph
95int CompareDoubles (const void * a, const void * b);
96
97
98/************************************* Class definitions ****************************************/
99
100
101// some algebraic matrix stuff
102#define RDET3(a) ((a)[0]*(a)[4]*(a)[8] + (a)[3]*(a)[7]*(a)[2] + (a)[6]*(a)[1]*(a)[5] - (a)[2]*(a)[4]*(a)[6] - (a)[5]*(a)[7]*(a)[0] - (a)[8]*(a)[1]*(a)[3]) //!< hard-coded determinant of a 3x3 matrix
103#define RDET2(a0,a1,a2,a3) ((a0)*(a3)-(a1)*(a2)) //!< hard-coded determinant of a 2x2 matrix
104
105
106/** Parameter structure for least square minimsation.
107 */
108struct LSQ_params {
109 Vector **vectors;
110 int num;
111};
112
113double LSQ(const gsl_vector * x, void * params);
114
115/** Parameter structure for least square minimsation.
116 */
117struct lsq_params {
118 gsl_vector *x;
119 const molecule *mol;
120 element *type;
121};
122
123/** Single atom.
124 * Class incoporates position, type
125 */
126class atom {
127 public:
128 Vector x; //!< coordinate array of atom, giving position within cell
129 Vector v; //!< velocity array of atom
130 element *type; //!< pointing to element
131 atom *previous; //!< previous atom in molecule list
132 atom *next; //!< next atom in molecule list
133 atom *father; //!< In many-body bond order fragmentations points to originating atom
134 atom *Ancestor; //!< "Father" in Depth-First-Search
135 char *Name; //!< unique name used during many-body bond-order fragmentation
136 int FixedIon; //!< config variable that states whether forces act on the ion or not
137 int *sort; //!< sort criteria
138 int nr; //!< continuous, unique number
139 int GraphNr; //!< unique number, given in DepthFirstSearchAnalysis()
140 int *ComponentNr;//!< belongs to this nonseparable components, given in DepthFirstSearchAnalysis() (if more than one, then is SeparationVertex)
141 int LowpointNr; //!< needed in DepthFirstSearchAnalysis() to detect nonseparable components, is the lowest possible number of an atom to reach via tree edges only followed by at most one back edge.
142 bool SeparationVertex; //!< whether this atom separates off subsets of atoms or not, determined in DepthFirstSearchAnalysis()
143 bool IsCyclic; //!< whether atom belong to as cycle or not, determined in DepthFirstSearchAnalysis()
144 unsigned char AdaptiveOrder; //!< current present bond order at site (0 means "not set")
145 bool MaxOrder; //!< whether this atom as a root in fragmentation still creates more fragments on higher orders or not
146
147 atom();
148 ~atom();
149
150 bool Output(int ElementNo, int AtomNo, ofstream *out, const char *comment = NULL) const;
151 bool OutputXYZLine(ofstream *out) const;
152 atom *GetTrueFather();
153 bool Compare(atom &ptr);
154
155 private:
156};
157
158ostream & operator << (ostream &ost, atom &a);
159
160/** Bonds between atoms.
161 * Class incorporates bonds between atoms in a molecule,
162 * used to derive tge fragments in many-body bond order
163 * calculations.
164 */
165class bond {
166 public:
167 atom *leftatom; //!< first bond partner
168 atom *rightatom; //!< second bond partner
169 bond *previous; //!< previous atom in molecule list
170 bond *next; //!< next atom in molecule list
171 int HydrogenBond; //!< Number of hydrogen atoms in the bond
172 int BondDegree; //!< single, double, triple, ... bond
173 int nr; //!< unique number in a molecule, updated by molecule::CreateAdjacencyList()
174 bool Cyclic; //!< flag whether bond is part of a cycle or not, given in DepthFirstSearchAnalysis()
175 enum EdgeType Type;//!< whether this is a tree or back edge
176
177 atom * GetOtherAtom(atom *Atom) const;
178 bond * GetFirstBond();
179 bond * GetLastBond();
180
181 bool MarkUsed(enum Shading color);
182 enum Shading IsUsed();
183 void ResetUsed();
184 bool Contains(const atom *ptr);
185 bool Contains(const int nr);
186
187 bond();
188 bond(atom *left, atom *right);
189 bond(atom *left, atom *right, int degree);
190 bond(atom *left, atom *right, int degree, int number);
191 ~bond();
192
193 private:
194 enum Shading Used; //!< marker in depth-first search, DepthFirstSearchAnalysis()
195};
196
197ostream & operator << (ostream &ost, bond &b);
198
199class MoleculeLeafClass;
200
201/** The complete molecule.
202 * Class incorporates number of types
203 */
204class molecule {
205 public:
206 double cell_size[6];//!< cell size
207 periodentafel *elemente; //!< periodic table with each element
208 atom *start; //!< start of atom list
209 atom *end; //!< end of atom list
210 bond *first; //!< start of bond list
211 bond *last; //!< end of bond list
212 bond ***ListOfBondsPerAtom; //!< pointer list for each atom and each bond it has
213 map<atom *, struct Trajectory> Trajectories; //!< contains old trajectory points
214 int MDSteps; //!< The number of MD steps in Trajectories
215 int *NumberOfBondsPerAtom; //!< Number of Bonds each atom has
216 int AtomCount; //!< number of atoms, brought up-to-date by CountAtoms()
217 int BondCount; //!< number of atoms, brought up-to-date by CountBonds()
218 int ElementCount; //!< how many unique elements are therein
219 int ElementsInMolecule[MAX_ELEMENTS]; //!< list whether element (sorted by atomic number) is alread present or not
220 int NoNonHydrogen; //!< number of non-hydrogen atoms in molecule
221 int NoNonBonds; //!< number of non-hydrogen bonds in molecule
222 int NoCyclicBonds; //!< number of cyclic bonds in molecule, by DepthFirstSearchAnalysis()
223 double BondDistance; //!< typical bond distance used in CreateAdjacencyList() and furtheron
224 bool ActiveFlag; //!< in a MoleculeListClass used to discern active from inactive molecules
225 Vector Center; //!< Center of molecule in a global box
226 char name[MAXSTRINGSIZE]; //!< arbitrary name
227 int IndexNr; //!< index of molecule in a MoleculeListClass
228
229 molecule(periodentafel *teil);
230 ~molecule();
231
232 /// remove atoms from molecule.
233 bool AddAtom(atom *pointer);
234 bool RemoveAtom(atom *pointer);
235 bool UnlinkAtom(atom *pointer);
236 bool CleanupMolecule();
237
238 /// Add/remove atoms to/from molecule.
239 atom * AddCopyAtom(atom *pointer);
240 bool AddXYZFile(string filename);
241 bool AddHydrogenReplacementAtom(ofstream *out, bond *Bond, atom *BottomOrigin, atom *TopOrigin, atom *TopReplacement, bond **BondList, int NumBond, bool IsAngstroem);
242 bond * AddBond(atom *first, atom *second, int degree);
243 bool RemoveBond(bond *pointer);
244 bool RemoveBonds(atom *BondPartner);
245
246 /// Find atoms.
247 atom * FindAtom(int Nr) const;
248 atom * AskAtom(string text);
249
250 /// Count and change present atoms' coordination.
251 void CountAtoms(ofstream *out);
252 void CountElements();
253 void CalculateOrbitals(class config &configuration);
254 bool CenterInBox(ofstream *out);
255 void CenterEdge(ofstream *out, Vector *max);
256 void CenterOrigin(ofstream *out, Vector *max);
257 void CenterGravity(ofstream *out, Vector *max);
258 void Translate(const Vector *x);
259 void TranslatePeriodically(const Vector *trans);
260 void Mirror(const Vector *x);
261 void Align(Vector *n);
262 void Scale(double **factor);
263 void DetermineCenter(Vector &center);
264 Vector * DetermineCenterOfGravity(ofstream *out);
265 Vector * DetermineCenterOfAll(ofstream *out);
266 void SetNameFromFilename(char *filename);
267 void SetBoxDimension(Vector *dim);
268 double * ReturnFullMatrixforSymmetric(double *cell_size);
269 void ScanForPeriodicCorrection(ofstream *out);
270 void PrincipalAxisSystem(ofstream *out, bool DoRotate);
271 double VolumeOfConvexEnvelope(ofstream *out, bool IsAngstroem);
272 Vector* FindEmbeddingHole(ofstream *out, molecule *srcmol);
273
274 bool VerletForceIntegration(char *file, double delta_t, bool IsAngstroem);
275
276 bool CheckBounds(const Vector *x) const;
277 void GetAlignvector(struct lsq_params * par) const;
278
279 /// Initialising routines in fragmentation
280 void CreateAdjacencyList2(ofstream *out, ifstream *output);
281 void CreateAdjacencyList(ofstream *out, double bonddistance, bool IsAngstroem);
282 void CreateListOfBondsPerAtom(ofstream *out);
283
284 // Graph analysis
285 MoleculeLeafClass * DepthFirstSearchAnalysis(ofstream *out, class StackClass<bond *> *&BackEdgeStack);
286 void CyclicStructureAnalysis(ofstream *out, class StackClass<bond *> *BackEdgeStack, int *&MinimumRingSize);
287 bool PickLocalBackEdges(ofstream *out, atom **ListOfLocalAtoms, class StackClass<bond *> *&ReferenceStack, class StackClass<bond *> *&LocalStack);
288 bond * FindNextUnused(atom *vertex);
289 void SetNextComponentNumber(atom *vertex, int nr);
290 void InitComponentNumbers();
291 void OutputComponentNumber(ofstream *out, atom *vertex);
292 void ResetAllBondsToUnused();
293 void ResetAllAtomNumbers();
294 int CountCyclicBonds(ofstream *out);
295 bool CheckForConnectedSubgraph(ofstream *out, KeySet *Fragment);
296 string GetColor(enum Shading color);
297
298 molecule *CopyMolecule();
299
300 /// Fragment molecule by two different approaches:
301 int FragmentMolecule(ofstream *out, int Order, config *configuration);
302 bool CheckOrderAtSite(ofstream *out, bool *AtomMask, Graph *GlobalKeySetList, int Order, int *MinimumRingSize, char *path = NULL);
303 bool StoreAdjacencyToFile(ofstream *out, char *path);
304 bool CheckAdjacencyFileAgainstMolecule(ofstream *out, char *path, atom **ListOfAtoms);
305 bool ParseOrderAtSiteFromFile(ofstream *out, char *path);
306 bool StoreOrderAtSiteFile(ofstream *out, char *path);
307 bool ParseKeySetFile(ofstream *out, char *filename, Graph *&FragmentList);
308 bool StoreKeySetFile(ofstream *out, Graph &KeySetList, char *path);
309 bool StoreForcesFile(ofstream *out, MoleculeListClass *BondFragments, char *path, int *SortIndex);
310 bool CreateMappingLabelsToConfigSequence(ofstream *out, int *&SortIndex);
311 bool ScanBufferIntoKeySet(ofstream *out, char *buffer, KeySet &CurrentSet);
312 void BreadthFirstSearchAdd(ofstream *out, molecule *Mol, atom **&AddedAtomList, bond **&AddedBondList, atom *Root, bond *Bond, int BondOrder, bool IsAngstroem);
313 /// -# BOSSANOVA
314 void FragmentBOSSANOVA(ofstream *out, Graph *&FragmentList, KeyStack &RootStack, int *MinimumRingSize);
315 int PowerSetGenerator(ofstream *out, int Order, struct UniqueFragments &FragmentSearch, KeySet RestrictedKeySet);
316 bool BuildInducedSubgraph(ofstream *out, const molecule *Father);
317 molecule * StoreFragmentFromKeySet(ofstream *out, KeySet &Leaflet, bool IsAngstroem);
318 void SPFragmentGenerator(ofstream *out, struct UniqueFragments *FragmentSearch, int RootDistance, bond **BondsSet, int SetDimension, int SubOrder);
319 int LookForRemovalCandidate(ofstream *&out, KeySet *&Leaf, int *&ShortestPathList);
320 int GuesstimateFragmentCount(ofstream *out, int order);
321
322 // Recognize doubly appearing molecules in a list of them
323 int * IsEqualToWithinThreshold(ofstream *out, molecule *OtherMolecule, double threshold);
324 int * GetFatherSonAtomicMap(ofstream *out, molecule *OtherMolecule);
325
326 // Output routines.
327 bool Output(ofstream *out);
328 bool OutputTrajectories(ofstream *out);
329 void OutputListOfBonds(ofstream *out) const;
330 bool OutputXYZ(ofstream *out) const;
331 bool OutputTrajectoriesXYZ(ofstream *out);
332 bool Checkout(ofstream *out) const;
333 bool OutputTemperatureFromTrajectories(ofstream *out, int startstep, int endstep, ofstream *output);
334
335 private:
336 int last_atom; //!< number given to last atom
337};
338
339/** A list of \a molecule classes.
340 */
341class MoleculeListClass {
342 public:
343 MoleculeList ListOfMolecules; //!< List of the contained molecules
344 int MaxIndex;
345
346 MoleculeListClass();
347 ~MoleculeListClass();
348
349 bool AddHydrogenCorrection(ofstream *out, char *path);
350 bool StoreForcesFile(ofstream *out, char *path, int *SortIndex);
351 bool insert(molecule *mol);
352 molecule * ReturnIndex(int index);
353 bool OutputConfigForListOfFragments(ofstream *out, config *configuration, int *SortIndex);
354 int NumberOfActiveMolecules();
355 void Enumerate(ofstream *out);
356 void Output(ofstream *out);
357
358 // merging of molecules
359 bool SimpleMerge(molecule *mol, molecule *srcmol);
360 bool SimpleAdd(molecule *mol, molecule *srcmol);
361 bool SimpleMultiMerge(molecule *mol, int *src, int N);
362 bool SimpleMultiAdd(molecule *mol, int *src, int N);
363 bool ScatterMerge(molecule *mol, int *src, int N);
364 bool EmbedMerge(molecule *mol, molecule *srcmol);
365
366 private:
367};
368
369
370/** A leaf for a tree of \a molecule class
371 * Wraps molecules in a tree structure
372 */
373class MoleculeLeafClass {
374 public:
375 molecule *Leaf; //!< molecule of this leaf
376 //MoleculeLeafClass *UpLeaf; //!< Leaf one level up
377 //MoleculeLeafClass *DownLeaf; //!< First leaf one level down
378 MoleculeLeafClass *previous; //!< Previous leaf on this level
379 MoleculeLeafClass *next; //!< Next leaf on this level
380
381 //MoleculeLeafClass(MoleculeLeafClass *Up, MoleculeLeafClass *Previous);
382 MoleculeLeafClass(MoleculeLeafClass *PreviousLeaf);
383 ~MoleculeLeafClass();
384
385 bool AddLeaf(molecule *ptr, MoleculeLeafClass *Previous);
386 bool FillBondStructureFromReference(ofstream *out, molecule *reference, int &FragmentCounter, atom ***&ListOfLocalAtoms, bool FreeList = false);
387 bool FillRootStackForSubgraphs(ofstream *out, KeyStack *&RootStack, bool *AtomMask, int &FragmentCounter);
388 bool AssignKeySetsToFragment(ofstream *out, molecule *reference, Graph *KeySetList, atom ***&ListOfLocalAtoms, Graph **&FragmentList, int &FragmentCounter, bool FreeList = false);
389 bool FillListOfLocalAtoms(ofstream *out, atom ***&ListOfLocalAtoms, const int FragmentCounter, const int GlobalAtomCount, bool &FreeList);
390 void TranslateIndicesToGlobalIDs(ofstream *out, Graph **FragmentList, int &FragmentCounter, int &TotalNumberOfKeySets, Graph &TotalGraph);
391 int Count() const;
392};
393
394/** The config file.
395 * The class contains all parameters that control a dft run also functions to load and save.
396 */
397class config {
398 public:
399 int PsiType;
400 int MaxPsiDouble;
401 int PsiMaxNoUp;
402 int PsiMaxNoDown;
403 int MaxMinStopStep;
404 int InitMaxMinStopStep;
405 int ProcPEGamma;
406 int ProcPEPsi;
407 char *configpath;
408 char *configname;
409 bool FastParsing;
410 double Deltat;
411 string basis;
412
413 char *databasepath;
414
415 private:
416 char *mainname;
417 char *defaultpath;
418 char *pseudopotpath;
419
420 int DoOutVis;
421 int DoOutMes;
422 int DoOutNICS;
423 int DoOutOrbitals;
424 int DoOutCurrent;
425 int DoFullCurrent;
426 int DoPerturbation;
427 int DoWannier;
428 int CommonWannier;
429 double SawtoothStart;
430 int VectorPlane;
431 double VectorCut;
432 int UseAddGramSch;
433 int Seed;
434
435 int MaxOuterStep;
436 int OutVisStep;
437 int OutSrcStep;
438 double TargetTemp;
439 int ScaleTempStep;
440 int MaxPsiStep;
441 double EpsWannier;
442
443 int MaxMinStep;
444 double RelEpsTotalEnergy;
445 double RelEpsKineticEnergy;
446 int MaxMinGapStopStep;
447 int MaxInitMinStep;
448 double InitRelEpsTotalEnergy;
449 double InitRelEpsKineticEnergy;
450 int InitMaxMinGapStopStep;
451
452 //double BoxLength[NDIM*NDIM];
453
454 double ECut;
455 int MaxLevel;
456 int RiemannTensor;
457 int LevRFactor;
458 int RiemannLevel;
459 int Lev0Factor;
460 int RTActualUse;
461 int AddPsis;
462
463 double RCut;
464 int StructOpt;
465 int IsAngstroem;
466 int RelativeCoord;
467 int MaxTypes;
468
469
470 int ParseForParameter(int verbose, ifstream *file, const char *name, int sequential, int const xth, int const yth, int type, void *value, int repetition, int critical);
471
472 public:
473 config();
474 ~config();
475
476 int TestSyntax(char *filename, periodentafel *periode, molecule *mol);
477 void Load(char *filename, periodentafel *periode, molecule *mol);
478 void LoadOld(char *filename, periodentafel *periode, molecule *mol);
479 void RetrieveConfigPathAndName(string filename);
480 bool Save(const char *filename, periodentafel *periode, molecule *mol) const;
481 bool SaveMPQC(const char *filename, molecule *mol) const;
482 void Edit();
483 bool GetIsAngstroem() const;
484 char *GetDefaultPath() const;
485 void SetDefaultPath(const char *path);
486};
487
488#endif /*MOLECULES_HPP_*/
489
Note: See TracBrowser for help on using the repository browser.