source: src/molecules.hpp@ 51c910

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 51c910 was d067d45, checked in by Frederik Heber <heber@…>, 16 years ago

Merge branch 'MultipleMolecules'

Conflicts:

molecuilder/src/analyzer.cpp
molecuilder/src/atom.cpp
molecuilder/src/boundary.cpp
molecuilder/src/boundary.hpp
molecuilder/src/builder.cpp
molecuilder/src/config.cpp
molecuilder/src/datacreator.hpp
molecuilder/src/helpers.cpp
molecuilder/src/joiner.cpp
molecuilder/src/moleculelist.cpp
molecuilder/src/molecules.cpp
molecuilder/src/molecules.hpp
molecuilder/src/parser.cpp
molecuilder/src/parser.hpp
molecuilder/src/vector.cpp
molecuilder/src/verbose.cpp

merges:

compilation fixes:

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