00001
00002
00003
00004
00005
00006
00007
00008
00010
00011 #ifndef HAPSEUDOPOT_H
00012 #define HAPSEUDOPOT_H
00013
00014 #include "hastl.h"
00015 #include "hastring.h"
00016
00017
00018 class PseudoTerm
00019 {
00020 public:
00021
00022 PseudoTerm();
00023 PseudoTerm(int new_npower, double new_expon, double new_coef);
00024 ~PseudoTerm();
00025
00026 int npower;
00027 double expon;
00028 double coef;
00029 };
00030
00031 class PseudoBlock
00032 {
00033 public:
00034 PseudoBlock();
00035 ~PseudoBlock();
00036
00037 HaString description;
00038 vector<PseudoTerm> terms;
00039
00040 };
00041
00042
00043 class HaPseudoPot
00044
00045
00046 {
00047 public:
00048 HaPseudoPot();
00049 virtual ~HaPseudoPot();
00050
00051 bool SaveGaussInp(ostream& os) const;
00052 int GetNCoreEl() const { return ncore_el; }
00053
00054 bool Print_info(ostream& sout, const int level) const;
00055
00056 friend class HaPseudoPotDB;
00057 protected:
00058
00059 HaString pot_name;
00060 HaString at_symbol;
00061 unsigned int max_angm;
00062 unsigned int ncore_el;
00063
00064 vector<PseudoBlock> blocks;
00065
00066
00067
00068 };
00069
00070 class HaPseudoPotRef
00071 {
00072 public:
00073 HaPseudoPotRef();
00074 HaPseudoPotRef(const HaString & new_pot_name, const HaString & new_at_label);
00075 virtual ~HaPseudoPotRef();
00076
00077 friend class HaPseudoPotDB;
00078
00079 bool operator == (const HaPseudoPotRef & rhs) const ;
00080 bool operator < (const HaPseudoPotRef & rhs) const ;
00081
00082 protected:
00083
00084 HaString pot_name;
00085 HaString at_label;
00086
00087 };
00088
00089
00090 class HaPseudoPotDB
00091 {
00092 public:
00093 HaPseudoPotDB();
00094 ~HaPseudoPotDB();
00095
00096 HaPseudoPot* Extract(const HaString & pot_name, const HaString & at_label);
00097 bool Init();
00098
00099
00100 protected:
00101 map<HaPseudoPotRef,HaPseudoPot*, less<HaPseudoPotRef> > dat;
00102
00103 bool InitHayWadt_1();
00104 };
00105
00106
00107 #endif