Revisión | 01c0d984120c38a35f02f8c46892792a660ef201 (tree) |
---|---|
Tiempo | 2011-01-26 17:49:57 |
Autor | Mikiya Fujii <mikiya.fujii@gmai...> |
Commiter | Mikiya Fujii |
Natom and Oatom are added.
git-svn-id: https://svn.sourceforge.jp/svnroot/molds/MolDS/trunk@64 1136aad2-a195-0410-b898-f5ea1d11b9d8
@@ -19,6 +19,8 @@ | ||
19 | 19 | #include"base/atoms/Atom.h" |
20 | 20 | #include"base/atoms/Hatom.h" |
21 | 21 | #include"base/atoms/Catom.h" |
22 | +#include"base/atoms/Natom.h" | |
23 | +#include"base/atoms/Oatom.h" | |
22 | 24 | #include"base/atoms/Liatom.h" |
23 | 25 | #include"base/atoms/Satom.h" |
24 | 26 | #include"base/MallocerFreer.h" |
@@ -215,6 +215,12 @@ void InputParser::Parse(Molecule* molecule){ | ||
215 | 215 | else if(inputTerms[j] == "c"){ |
216 | 216 | molecule->GetAtomVect()->push_back(new Catom(x, y, z)); |
217 | 217 | } |
218 | + else if(inputTerms[j] == "n"){ | |
219 | + molecule->GetAtomVect()->push_back(new Natom(x, y, z)); | |
220 | + } | |
221 | + else if(inputTerms[j] == "o"){ | |
222 | + molecule->GetAtomVect()->push_back(new Oatom(x, y, z)); | |
223 | + } | |
218 | 224 | else if(inputTerms[j] == "s"){ |
219 | 225 | molecule->GetAtomVect()->push_back(new Satom(x, y, z)); |
220 | 226 | } |
@@ -81,8 +81,8 @@ protected: | ||
81 | 81 | double effectiveNuclearChargeMsp; // Table 1.5 in J. A. Pople book |
82 | 82 | double effectiveNuclearChargeMd; // Table 1.5 in J. A. Pople book |
83 | 83 | int GetEffectivePrincipalQuantumNumber(ShellType shellType); // Table 1.4 in J. A. Pople book |
84 | - double indoF2; // (3.89) in J. A. Pople book | |
85 | - double indoG1; // (3.88) in J. A. Pople book | |
84 | + double indoF2; // Table 3.6 in J. A. Pople book | |
85 | + double indoG1; // Table 3.6 in J. A. Pople book | |
86 | 86 | double zindoF0ss; // Table 1 in ref. [RZ_1976], Table 1 in [AEZ_1986], or Table 1 in [GD_1972] |
87 | 87 | double zindoF0sd; // Table 1 in [AEZ_1986] |
88 | 88 | double zindoF0dd; // Table 1 in [AEZ_1986] |
@@ -0,0 +1,103 @@ | ||
1 | +#ifndef INCLUDED_NATOM | |
2 | +#define INCLUDED_NATOM | |
3 | +#include"Atom.h" | |
4 | + | |
5 | +using namespace std; | |
6 | +using namespace MolDS_base; | |
7 | + | |
8 | +namespace MolDS_base_atoms{ | |
9 | + | |
10 | +class Natom : public Atom { | |
11 | +public: | |
12 | + Natom(double x, double y, double z); | |
13 | + double GetCoreIntegral(OrbitalType orbital, double gamma, bool isGuess, TheoryType theory); | |
14 | +private: | |
15 | +}; | |
16 | + | |
17 | +Natom::Natom(double x, double y, double z) : Atom(x, y, z){ | |
18 | + this->atomType = N; | |
19 | + this->atomicMass = 14.00674*Parameters::GetInstance()->GetGMolin2AU(); | |
20 | + this->valence.push_back(s); | |
21 | + this->valence.push_back(py); | |
22 | + this->valence.push_back(pz); | |
23 | + this->valence.push_back(px); | |
24 | + this->bondingParameter = -25.0*Parameters::GetInstance()->GetEV2AU(); | |
25 | + this->bondingParameterSZindo = -26.0*Parameters::GetInstance()->GetEV2AU(); | |
26 | + this->bondingParameterDZindo = 0.0; | |
27 | + this->coreCharge = 5.0; | |
28 | + this->imuAmuS = 19.316*Parameters::GetInstance()->GetEV2AU(); | |
29 | + this->imuAmuP = 7.275*Parameters::GetInstance()->GetEV2AU(); | |
30 | + this->imuAmuD = 0.0; | |
31 | + this->valenceShellType = l; | |
32 | + this->effectiveNuclearChargeK = 6.7; | |
33 | + this->effectiveNuclearChargeL = 3.90; | |
34 | + this->effectiveNuclearChargeMsp = 0.0; | |
35 | + this->effectiveNuclearChargeMd = 0.0; | |
36 | + this->numberValenceElectrons = 5; | |
37 | + this->indoG1 = 0.346029; | |
38 | + this->indoF2 = 0.219055; | |
39 | + this->zindoF0ss = 12.01 * Parameters::GetInstance()->GetEV2AU(); | |
40 | + this->zindoF0sd = 0.0; | |
41 | + this->zindoF0dd = 0.0; | |
42 | + this->zindoG1sp = 72255*Parameters::GetInstance()->GetKayser2AU(); | |
43 | + this->zindoF2pp = 52100*Parameters::GetInstance()->GetKayser2AU(); | |
44 | + this->zindoG2sd = 0.0; | |
45 | + this->zindoG1pd = 0.0; | |
46 | + this->zindoF2pd = 0.0; | |
47 | + this->zindoG3pd = 0.0; | |
48 | + this->zindoF2dd = 0.0; | |
49 | + this->zindoF4dd = 0.0; | |
50 | + this->IonPotS = 25.69 * Parameters::GetInstance()->GetEV2AU(); | |
51 | + this->IonPotP = 14.05 * Parameters::GetInstance()->GetEV2AU(); | |
52 | + this->IonPotD = 0.0 * Parameters::GetInstance()->GetEV2AU(); | |
53 | +} | |
54 | + | |
55 | +double Natom::GetCoreIntegral(OrbitalType orbital, double gamma, bool isGuess, TheoryType theory){ | |
56 | + double value = 0.0; | |
57 | + | |
58 | + if(theory == INDO){ | |
59 | + if(orbital == s){ | |
60 | + value = -1.0*this->imuAmuS; | |
61 | + if(!isGuess){ | |
62 | + value -= (this->coreCharge-0.5)*gamma - (this->coreCharge - 1.5)*this->indoG1/6.0; | |
63 | + } | |
64 | + } | |
65 | + else if(orbital == px || orbital == py || orbital == pz){ | |
66 | + value = -1.0*this->imuAmuP; | |
67 | + if(!isGuess){ | |
68 | + value -= (this->coreCharge-0.5)*gamma | |
69 | + - this->indoG1/3.0 | |
70 | + - (this->coreCharge - 2.5)*this->indoF2*2.0/25.0; | |
71 | + } | |
72 | + } | |
73 | + else{ | |
74 | + stringstream ss; | |
75 | + ss << this->errorMessageIndoCoreIntegral; | |
76 | + ss << this->errorMessageAtomType << AtomTypeStr(this->atomType) << endl; | |
77 | + ss << this->errorMessageOrbitalType << OrbitalTypeStr(orbital) << endl; | |
78 | + throw MolDSException(ss.str()); | |
79 | + } | |
80 | + } | |
81 | + else if(theory == ZINDOS){ | |
82 | + if(orbital == s){ | |
83 | + value = this->GetZindoCoreIntegral(orbital, 2, 3, 0); | |
84 | + } | |
85 | + else if(orbital == px || orbital == py || orbital == pz){ | |
86 | + value = this->GetZindoCoreIntegral(orbital, 2, 3, 0); | |
87 | + } | |
88 | + else{ | |
89 | + stringstream ss; | |
90 | + ss << this->errorMessageZindoSCoreIntegral; | |
91 | + ss << this->errorMessageAtomType << AtomTypeStr(this->atomType) << endl; | |
92 | + ss << this->errorMessageOrbitalType << OrbitalTypeStr(orbital) << endl; | |
93 | + throw MolDSException(ss.str()); | |
94 | + } | |
95 | + } | |
96 | + | |
97 | + return value; | |
98 | +} | |
99 | + | |
100 | + | |
101 | + | |
102 | +} | |
103 | +#endif |
@@ -0,0 +1,103 @@ | ||
1 | +#ifndef INCLUDED_OATOM | |
2 | +#define INCLUDED_OATOM | |
3 | +#include"Atom.h" | |
4 | + | |
5 | +using namespace std; | |
6 | +using namespace MolDS_base; | |
7 | + | |
8 | +namespace MolDS_base_atoms{ | |
9 | + | |
10 | +class Oatom : public Atom { | |
11 | +public: | |
12 | + Oatom(double x, double y, double z); | |
13 | + double GetCoreIntegral(OrbitalType orbital, double gamma, bool isGuess, TheoryType theory); | |
14 | +private: | |
15 | +}; | |
16 | + | |
17 | +Oatom::Oatom(double x, double y, double z) : Atom(x, y, z){ | |
18 | + this->atomType = O; | |
19 | + this->atomicMass = 15.9994*Parameters::GetInstance()->GetGMolin2AU(); | |
20 | + this->valence.push_back(s); | |
21 | + this->valence.push_back(py); | |
22 | + this->valence.push_back(pz); | |
23 | + this->valence.push_back(px); | |
24 | + this->bondingParameter = -31.0*Parameters::GetInstance()->GetEV2AU(); | |
25 | + this->bondingParameterSZindo = -34.0*Parameters::GetInstance()->GetEV2AU(); | |
26 | + this->bondingParameterDZindo = 0.0; | |
27 | + this->coreCharge = 6.0; | |
28 | + this->imuAmuS = 25.390*Parameters::GetInstance()->GetEV2AU(); | |
29 | + this->imuAmuP = 9.111*Parameters::GetInstance()->GetEV2AU(); | |
30 | + this->imuAmuD = 0.0; | |
31 | + this->valenceShellType = l; | |
32 | + this->effectiveNuclearChargeK = 7.70; | |
33 | + this->effectiveNuclearChargeL = 4.55; | |
34 | + this->effectiveNuclearChargeMsp = 0.0; | |
35 | + this->effectiveNuclearChargeMd = 0.0; | |
36 | + this->numberValenceElectrons = 6; | |
37 | + this->indoG1 = 0.346029; | |
38 | + this->indoF2 = 0.219055; | |
39 | + this->zindoF0ss = 13.00 * Parameters::GetInstance()->GetEV2AU(); | |
40 | + this->zindoF0sd = 0.0; | |
41 | + this->zindoF0dd = 0.0; | |
42 | + this->zindoG1sp = 95298*Parameters::GetInstance()->GetKayser2AU(); | |
43 | + this->zindoF2pp = 55675*Parameters::GetInstance()->GetKayser2AU(); | |
44 | + this->zindoG2sd = 0.0; | |
45 | + this->zindoG1pd = 0.0; | |
46 | + this->zindoF2pd = 0.0; | |
47 | + this->zindoG3pd = 0.0; | |
48 | + this->zindoF2dd = 0.0; | |
49 | + this->zindoF4dd = 0.0; | |
50 | + this->IonPotS = 32.90 * Parameters::GetInstance()->GetEV2AU(); | |
51 | + this->IonPotP = 17.28 * Parameters::GetInstance()->GetEV2AU(); | |
52 | + this->IonPotD = 0.0 * Parameters::GetInstance()->GetEV2AU(); | |
53 | +} | |
54 | + | |
55 | +double Oatom::GetCoreIntegral(OrbitalType orbital, double gamma, bool isGuess, TheoryType theory){ | |
56 | + double value = 0.0; | |
57 | + | |
58 | + if(theory == INDO){ | |
59 | + if(orbital == s){ | |
60 | + value = -1.0*this->imuAmuS; | |
61 | + if(!isGuess){ | |
62 | + value -= (this->coreCharge-0.5)*gamma - (this->coreCharge - 1.5)*this->indoG1/6.0; | |
63 | + } | |
64 | + } | |
65 | + else if(orbital == px || orbital == py || orbital == pz){ | |
66 | + value = -1.0*this->imuAmuP; | |
67 | + if(!isGuess){ | |
68 | + value -= (this->coreCharge-0.5)*gamma | |
69 | + - this->indoG1/3.0 | |
70 | + - (this->coreCharge - 2.5)*this->indoF2*2.0/25.0; | |
71 | + } | |
72 | + } | |
73 | + else{ | |
74 | + stringstream ss; | |
75 | + ss << this->errorMessageIndoCoreIntegral; | |
76 | + ss << this->errorMessageAtomType << AtomTypeStr(this->atomType) << endl; | |
77 | + ss << this->errorMessageOrbitalType << OrbitalTypeStr(orbital) << endl; | |
78 | + throw MolDSException(ss.str()); | |
79 | + } | |
80 | + } | |
81 | + else if(theory == ZINDOS){ | |
82 | + if(orbital == s){ | |
83 | + value = this->GetZindoCoreIntegral(orbital, 2, 4, 0); | |
84 | + } | |
85 | + else if(orbital == px || orbital == py || orbital == pz){ | |
86 | + value = this->GetZindoCoreIntegral(orbital, 2, 4, 0); | |
87 | + } | |
88 | + else{ | |
89 | + stringstream ss; | |
90 | + ss << this->errorMessageZindoSCoreIntegral; | |
91 | + ss << this->errorMessageAtomType << AtomTypeStr(this->atomType) << endl; | |
92 | + ss << this->errorMessageOrbitalType << OrbitalTypeStr(orbital) << endl; | |
93 | + throw MolDSException(ss.str()); | |
94 | + } | |
95 | + } | |
96 | + | |
97 | + return value; | |
98 | +} | |
99 | + | |
100 | + | |
101 | + | |
102 | +} | |
103 | +#endif |
@@ -19,6 +19,9 @@ CIS | ||
19 | 19 | nstates 1000 |
20 | 20 | CIS_END |
21 | 21 | |
22 | + | |
23 | + | |
24 | + | |
22 | 25 | //INERTIA |
23 | 26 | // origin 1.0 2.0 30.0 |
24 | 27 | //INERTIA_END |
@@ -37,6 +40,22 @@ TRANSLATE | ||
37 | 40 | //difference 100.0 200.0 300.0 |
38 | 41 | TRANSLATE_END |
39 | 42 | |
43 | + | |
44 | +// NH3 | |
45 | +//GEOMETRY | |
46 | +// N 0.950135 0.471698 0.000000 | |
47 | +// H 1.283457 -0.471115 0.000000 | |
48 | +// H 1.283474 0.943098 0.816497 | |
49 | +// H 1.283474 0.943098 -0.816497 | |
50 | +//GEOMETRY_END | |
51 | + | |
52 | +// H2O | |
53 | +GEOMETRY | |
54 | + O 0.869272 0.767931 0.020109 | |
55 | + H 1.829272 0.767931 0.020109 | |
56 | + H 0.548818 1.672867 0.020109 | |
57 | +GEOMETRY_END | |
58 | + | |
40 | 59 | // S2 |
41 | 60 | //GEOMETRY |
42 | 61 | // S 0.424528 0.741240 0.000000 |
@@ -55,13 +74,13 @@ TRANSLATE_END | ||
55 | 74 | //GEOMETRY_END |
56 | 75 | |
57 | 76 | //metane |
58 | -GEOMETRY | |
59 | - C 0.647389 0.820131 0.000000 | |
60 | - H 1.004043 -0.188679 0.000000 | |
61 | - H 1.004062 1.324529 0.873652 | |
62 | - H 1.004062 1.324529 -0.873652 | |
63 | - H -0.422611 0.820144 0.000000 | |
64 | -GEOMETRY_END | |
77 | +//GEOMETRY | |
78 | +// C 0.647389 0.820131 0.000000 | |
79 | +// H 1.004043 -0.188679 0.000000 | |
80 | +// H 1.004062 1.324529 0.873652 | |
81 | +// H 1.004062 1.324529 -0.873652 | |
82 | +// H -0.422611 0.820144 0.000000 | |
83 | +//GEOMETRY_END | |
65 | 84 | |
66 | 85 | |
67 | 86 | // c2 |