• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Aucun tag

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Commit MetaInfo

Révision812e934b205f76ca1f8c7c934f688c43fa70750a (tree)
l'heure2011-09-27 22:40:44
AuteurMikiya Fujii <mikiya.fujii@gmai...>
CommiterMikiya Fujii

Message de Log

First derivative of Nishimoto-Mataga in ZindoS.h is implemented.

git-svn-id: https://svn.sourceforge.jp/svnroot/molds/MolDS/trunk@141 1136aad2-a195-0410-b898-f5ea1d11b9d8

Change Summary

Modification

--- a/src/zindo/ZindoS.h
+++ b/src/zindo/ZindoS.h
@@ -47,7 +47,10 @@ private:
4747 OrbitalType orbital2,
4848 Atom* atom); // Apendix in [BZ_1979]
4949 double GetNishimotoMatagaTwoEleInt(Atom* atomA, OrbitalType orbitalA,
50- Atom* atomB, OrbitalType orbitalB); // ref. [MN_1957] and (5a) in [AEZ_1986]
50+ Atom* atomB, OrbitalType orbitalB); // ref. [MN_1957] and (5a) in [AEZ_1986]
51+ double GetNishimotoMatagaTwoEleIntFirstDerivative(Atom* atomA, OrbitalType orbitalA,
52+ Atom* atomB, OrbitalType orbitalB,
53+ CartesianType axisA);
5154 double nishimotoMatagaParamA;
5255 double nishimotoMatagaParamB;
5356 struct MoEnergy{
@@ -580,6 +583,69 @@ double ZindoS::GetNishimotoMatagaTwoEleInt(Atom* atomA, OrbitalType orbitalA,
580583
581584 }
582585
586+// First derivative of Nishimoto-Mataga related to the coordinate of atom A.
587+// For Nishimoto-Mataga, See ZindoS::GetNishimotoMatagaTwoEleInt
588+// or ref. [MN_1957] and (5a) in [AEZ_1986]
589+double ZindoS::GetNishimotoMatagaTwoEleIntFirstDerivative(Atom* atomA, OrbitalType orbitalA,
590+ Atom* atomB, OrbitalType orbitalB,
591+ CartesianType axisA){
592+ double gammaAA;
593+ if(orbitalA == s ||
594+ orbitalA == px ||
595+ orbitalA == py ||
596+ orbitalA == pz ){
597+ gammaAA = atomA->GetZindoF0ss();
598+ }
599+ /*
600+ else if(orbitalA == dxy ||
601+ orbitalA == dyz ||
602+ orbitalA == dzz ||
603+ orbitalA == dzx ||
604+ orbitalA == dxxyy ){
605+ gammaAA = atomA->GetZindoF0dd();
606+ }
607+ */
608+ else{
609+ stringstream ss;
610+ ss << this->errorMessageNishimotoMataga;
611+ ss << this->errorMessageAtomType << AtomTypeStr(atomA->GetAtomType()) << "\n";
612+ ss << this->errorMessageOrbitalType << OrbitalTypeStr(orbitalA) << "\n";
613+ throw MolDSException(ss.str());
614+ }
615+
616+ double gammaBB;
617+ if(orbitalB == s ||
618+ orbitalB == px ||
619+ orbitalB == py ||
620+ orbitalB == pz ){
621+ gammaBB = atomB->GetZindoF0ss();
622+ }
623+ /*
624+ else if(orbitalB == dxy ||
625+ orbitalB == dyz ||
626+ orbitalB == dzz ||
627+ orbitalB == dzx ||
628+ orbitalB == dxxyy ){
629+ gammaBB = atomB->GetZindoF0dd();
630+ }
631+ */
632+ else{
633+ stringstream ss;
634+ ss << this->errorMessageNishimotoMataga;
635+ ss << this->errorMessageAtomType << AtomTypeStr(atomB->GetAtomType()) << "\n";
636+ ss << this->errorMessageOrbitalType << OrbitalTypeStr(orbitalB) << "\n";
637+ throw MolDSException(ss.str());
638+ }
639+
640+ double r = this->molecule->GetDistanceAtoms(atomA, atomB);
641+ double dCartesian = atomA->GetXyz()[axisA] - atomB->GetXyz()[axisA];
642+ double value = -1.0*dCartesian/r;
643+ value *= this->nishimotoMatagaParamA;
644+ value *= pow( r+this->nishimotoMatagaParamB/(gammaAA+gammaBB) ,-2.0);
645+ return value;
646+
647+}
648+
583649 void ZindoS::CalcDiatomicOverlapInDiatomicFrame(double** diatomicOverlap, Atom* atomA, Atom* atomB){
584650
585651 MolDS_cndo::Cndo2::CalcDiatomicOverlapInDiatomicFrame(diatomicOverlap, atomA, atomB);