• 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évision1c08913bd87dff3cf01e841552c14fece60cd54f (tree)
l'heure2013-08-20 18:47:29
AuteurMikiya Fujii <mikiya.fujii@gmai...>
CommiterMikiya Fujii

Message de Log

Refactoring: pow is replaced. #31850

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

Change Summary

Modification

--- a/src/cndo/Cndo2.cpp
+++ b/src/cndo/Cndo2.cpp
@@ -356,7 +356,7 @@ double Cndo2::GetDiatomCoreRepulsion1stDerivative(int indexAtomA, int indexAtomB
356356 double distance = this->molecule->GetDistanceAtoms(indexAtomA, indexAtomB);
357357 value = atomA.GetCoreCharge()*atomB.GetCoreCharge();
358358 value *= (atomA.GetXyz()[axisA] - atomB.GetXyz()[axisA])/distance;
359- value *= -1.0/pow(distance,2.0);
359+ value *= -1.0/(distance*distance);
360360 return value;
361361 }
362362
@@ -393,7 +393,8 @@ double Cndo2::GetVdwDampingValue1stDerivative(double vdWDistance, double distanc
393393 double dampingFactor = Parameters::GetInstance()->GetVdWDampingFactorSCF();
394394 return (dampingFactor/vdWDistance)
395395 *exp(-1.0*dampingFactor*(distance/vdWDistance - 1.0))
396- *pow(1.0+exp(-1.0*dampingFactor*(distance/vdWDistance - 1.0)),-2.0);
396+ /(1.0+exp(-1.0*dampingFactor*(distance/vdWDistance - 1.0)))
397+ /(1.0+exp(-1.0*dampingFactor*(distance/vdWDistance - 1.0)));
397398 }
398399
399400 // See damping function in (2) in [G_2004] ((11) in [G_2006])
@@ -402,8 +403,8 @@ double Cndo2::GetVdwDampingValue2ndDerivative(double vdWDistance, double distanc
402403 double exponent = -1.0*dampingFactor*(distance/vdWDistance - 1.0);
403404 double pre = dampingFactor/vdWDistance;
404405 double dominator = 1.0+exp(exponent);
405- return 2.0*pow(dominator,-3.0)*pre*pre*exp(2.0*exponent)
406- - pow(dominator,-2.0)*pre*pre*exp( exponent);
406+ return 2.0*pre*pre*exp(2.0*exponent)/(dominator*dominator*dominator)
407+ - pre*pre*exp( exponent)/(dominator*dominator);
407408 }
408409
409410 // See (2) in [G_2004] ((11) in [G_2006])
@@ -416,7 +417,8 @@ double Cndo2::GetDiatomVdWCorrectionEnergy(int indexAtomA, int indexAtomB) const
416417 /(atomA.GetVdWCoefficient()+atomB.GetVdWCoefficient());
417418 double damping = this->GetVdwDampingValue(vdWDistance, distance);
418419 double scalingFactor = Parameters::GetInstance()->GetVdWScalingFactorSCF();
419- return -1.0*scalingFactor*vdWCoefficients*pow(distance,-6.0)*damping;
420+ return -1.0*scalingFactor*vdWCoefficients*damping
421+ /(distance*distance*distance*distance*distance*distance);
420422 }
421423
422424 // First derivative of the vdW correction related to the coordinate of atom A.
@@ -433,7 +435,9 @@ double Cndo2::GetDiatomVdWCorrection1stDerivative(int indexAtomA, int indexAtomB
433435 double damping = this->GetVdwDampingValue(vdWDistance, distance);
434436 double damping1stDerivative = this->GetVdwDampingValue1stDerivative(vdWDistance, distance);
435437 double value=0.0;
436- value += 6.0*pow(distance,-7.0)*damping - pow(distance,-6.0)*damping1stDerivative;
438+ double tmp = distance*distance*distance*distance*distance*distance;
439+ value += 6.0*damping/(tmp*distance)
440+ -damping1stDerivative/tmp;
437441 value *= vdWCoefficients;
438442 value *= Parameters::GetInstance()->GetVdWScalingFactorSCF();
439443 value *= (atomA.GetXyz()[axisA] - atomB.GetXyz()[axisA])/distance;
@@ -461,24 +465,25 @@ double Cndo2::GetDiatomVdWCorrection2ndDerivative(int indexAtomA,
461465 double damping1stDerivative = this->GetVdwDampingValue1stDerivative(vdWDistance, distance);
462466 double damping2ndDerivative = this->GetVdwDampingValue2ndDerivative(vdWDistance, distance);
463467
464- double temp1 = -6.0*pow(distance,-7.0)*damping
465- + pow(distance,-6.0)*damping1stDerivative;
466- double temp2 = 42.0*pow(distance,-8.0)*damping
467- -12.0*pow(distance,-7.0)*damping1stDerivative
468- + pow(distance,-6.0)*damping2ndDerivative;
468+ double dis6 = distance*distance*distance*distance*distance*distance;
469+ double tmp1 = -6.0*damping /(dis6*distance)
470+ + damping1stDerivative/dis6;
471+ double tmp2 = 42.0*damping /(dis6*distance*distance)
472+ -12.0*damping1stDerivative/(dis6*distance)
473+ + damping2ndDerivative/dis6;
469474
470475 double pre1=0.0;
471476 double pre2=0.0;
472477 if(axisA1 != axisA2){
473- pre1 = -dCartesian1*dCartesian2/pow(distance,3.0);
474- pre2 = dCartesian1*dCartesian2/pow(distance,2.0);
478+ pre1 = -dCartesian1*dCartesian2/(distance*distance*distance);
479+ pre2 = dCartesian1*dCartesian2/(distance*distance);
475480 }
476481 else{
477- pre1 = 1.0/distance - dCartesian1*dCartesian1/pow(distance,3.0);
478- pre2 = pow(dCartesian1/distance,2.0);
482+ pre1 = 1.0/distance - dCartesian1*dCartesian1/(distance*distance*distance);
483+ pre2 = (dCartesian1*dCartesian1)/(distance*distance);
479484 }
480485
481- double value= pre1*temp1 + pre2*temp2;
486+ double value= pre1*tmp1 + pre2*tmp2;
482487 value *= -1.0*vdWScalingFacotor*vdWCoefficients;
483488 return value;
484489 }
@@ -1330,7 +1335,8 @@ bool Cndo2::SatisfyConvergenceCriterion(double const* const * oldOrbitalElectron
13301335 for(int i=0; i<numberAOs; i++){
13311336 try{
13321337 for(int j=0; j<numberAOs; j++){
1333- change += pow(oldOrbitalElectronPopulation[i][j] - orbitalElectronPopulation[i][j], 2.0);
1338+ change += (oldOrbitalElectronPopulation[i][j] - orbitalElectronPopulation[i][j])
1339+ *(oldOrbitalElectronPopulation[i][j] - orbitalElectronPopulation[i][j]);
13341340 }
13351341 }
13361342 catch(MolDSException ex){
@@ -1949,9 +1955,10 @@ void Cndo2::CalcCartesianMatrixElementsByGTOExpansion(double& xComponent,
19491955 double gaussianExponentA = 0.0;
19501956 double gaussianExponentB = 0.0;
19511957 double overlapSASB = 0.0;
1952- double rAB = sqrt( pow(atomA.GetXyz()[XAxis]-atomB.GetXyz()[XAxis], 2.0)
1953- +pow(atomA.GetXyz()[YAxis]-atomB.GetXyz()[YAxis], 2.0)
1954- +pow(atomA.GetXyz()[ZAxis]-atomB.GetXyz()[ZAxis], 2.0) );
1958+ double dX = atomA.GetXyz()[XAxis] - atomB.GetXyz()[XAxis];
1959+ double dY = atomA.GetXyz()[YAxis] - atomB.GetXyz()[YAxis];
1960+ double dZ = atomA.GetXyz()[ZAxis] - atomB.GetXyz()[ZAxis];
1961+ double rAB = sqrt(dX*dX + dY*dY + dZ*dZ);
19551962 double temp = 0.0;
19561963 double tempX = 0.0;
19571964 double tempY = 0.0;
@@ -1966,12 +1973,12 @@ void Cndo2::CalcCartesianMatrixElementsByGTOExpansion(double& xComponent,
19661973 shellTypeB,
19671974 valenceOrbitalB,
19681975 j);
1969- gaussianExponentA = pow(orbitalExponentA, 2.0) *
1976+ gaussianExponentA = (orbitalExponentA*orbitalExponentA) *
19701977 GTOExpansionSTO::GetInstance()->GetExponent(stonG,
19711978 shellTypeA,
19721979 valenceOrbitalA,
19731980 i);
1974- gaussianExponentB = pow(orbitalExponentB, 2.0) *
1981+ gaussianExponentB = (orbitalExponentB*orbitalExponentB) *
19751982 GTOExpansionSTO::GetInstance()->GetExponent(stonG,
19761983 shellTypeB,
19771984 valenceOrbitalB,
@@ -2162,8 +2169,8 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
21622169 double temp2 = gaussianExponentA*xyzA[axis] - gaussianExponentA*xyzB[axis];
21632170 double temp3 = gaussianExponentB*xyzA[axis] - gaussianExponentB*xyzB[axis];
21642171 value = 0.5*(temp1+temp2-temp3);
2165- value -= temp1*temp2*temp3*pow(beta,-1.0);
2166- value *= 4.0*sqrt(gaussianExponentA*gaussianExponentB)*pow(beta,-2.0);
2172+ value -= temp1*temp2*temp3/beta;
2173+ value *= 4.0*sqrt(gaussianExponentA*gaussianExponentB)/(beta*beta);
21672174 value *= overlapSASB;
21682175 return value;
21692176 }
@@ -2185,9 +2192,9 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
21852192 }
21862193 double temp1 = gaussianExponentA*xyzA[piDirection] - gaussianExponentA*xyzB[piDirection];
21872194 double temp2 = gaussianExponentB*xyzA[piDirection] - gaussianExponentB*xyzB[piDirection];
2188- value = 0.5 - temp1*temp2*pow(beta,-1.0);
2195+ value = 0.5 - temp1*temp2/beta;
21892196 value *= gaussianExponentA*xyzA[axis] + gaussianExponentB*xyzB[axis];
2190- value *= 4.0*sqrt(gaussianExponentA*gaussianExponentB)*pow(beta,-2.0);
2197+ value *= 4.0*sqrt(gaussianExponentA*gaussianExponentB)/(beta*beta);
21912198 value *= overlapSASB;
21922199 return value;
21932200 }
@@ -2209,9 +2216,9 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
22092216 }
22102217 double temp1 = gaussianExponentA*xyzA[axis] + gaussianExponentB*xyzB[axis];
22112218 double temp2 = gaussianExponentA*xyzA[axis] - gaussianExponentA*xyzB[axis];
2212- value = 0.5 + temp1*temp2*pow(beta,-1.0);
2219+ value = 0.5 + temp1*temp2/beta;
22132220 value *= gaussianExponentB*xyzA[piDirectionA] - gaussianExponentB*xyzB[piDirectionA];
2214- value *= -4.0*sqrt(gaussianExponentA*gaussianExponentB)*pow(beta,-2.0);
2221+ value *= -4.0*sqrt(gaussianExponentA*gaussianExponentB)/(beta*beta);
22152222 value *= overlapSASB;
22162223 return value;
22172224 }
@@ -2233,9 +2240,9 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
22332240 }
22342241 double temp1 = gaussianExponentA*xyzA[axis] + gaussianExponentB*xyzB[axis];
22352242 double temp2 = gaussianExponentB*xyzA[axis] - gaussianExponentB*xyzB[axis];
2236- value = 0.5 - temp1*temp2*pow(beta,-1.0);
2243+ value = 0.5 - temp1*temp2/beta;
22372244 value *= gaussianExponentA*xyzA[piDirectionB] - gaussianExponentA*xyzB[piDirectionB];
2238- value *= 4.0*sqrt(gaussianExponentA*gaussianExponentB)*pow(beta,-2.0);
2245+ value *= 4.0*sqrt(gaussianExponentA*gaussianExponentB)/(beta*beta);
22392246 value *= overlapSASB;
22402247 return value;
22412248 }
@@ -2268,7 +2275,7 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
22682275 double temp1 = gaussianExponentB*xyzA[piDirectionA] - gaussianExponentB*xyzB[piDirectionA];
22692276 double temp2 = gaussianExponentA*xyzA[axis] + gaussianExponentB*xyzB[axis];
22702277 double temp3 = gaussianExponentA*xyzA[piDirectionB] - gaussianExponentA*xyzB[piDirectionB];
2271- value = -4.0*sqrt(gaussianExponentA*gaussianExponentB)*pow(beta,-3.0);
2278+ value = -4.0*sqrt(gaussianExponentA*gaussianExponentB)/(beta*beta*beta);
22722279 value *= temp1*temp2*temp3;
22732280 value *= overlapSASB;
22742281 return value;
@@ -2317,8 +2324,10 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
23172324 overlapSASB);
23182325 value = 0.5*gaussianExponentA*dxyz[axis]
23192326 -gaussianExponentB*dxyz[axis]
2320- +pow(gaussianExponentB,2.0)*gaussianExponentA*pow(dxyz[axis],3.0)/beta;
2321- value *= 8.0*pow(gaussianExponentA, 1.5)*gaussianExponentB*pow(beta,-3.0)*dxyz[anotherAxis]*overlapSASB;
2327+ +(gaussianExponentB*gaussianExponentB)*gaussianExponentA
2328+ *dxyz[axis]*dxyz[axis]*dxyz[axis]/beta;
2329+ value *= 8.0*gaussianExponentA*sqrt(gaussianExponentA)
2330+ *gaussianExponentB*dxyz[anotherAxis]*overlapSASB/(beta*beta*beta);
23222331 value += xyzA[axis]*overlapAOs1;
23232332 return value;
23242333 }
@@ -2366,8 +2375,10 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
23662375 overlapSASB);
23672376 value = 0.5*gaussianExponentB*dxyz[axis]
23682377 -gaussianExponentA*dxyz[axis]
2369- +pow(gaussianExponentA,2.0)*gaussianExponentB*pow(dxyz[axis],3.0)/beta;
2370- value *= 8.0*pow(gaussianExponentB, 1.5)*gaussianExponentA*pow(beta,-3.0)*dxyz[anotherAxis]*overlapSASB;
2378+ +(gaussianExponentA*gaussianExponentA)*gaussianExponentB
2379+ *dxyz[axis]*dxyz[axis]*dxyz[axis]/beta;
2380+ value *= 8.0*gaussianExponentB*sqrt(gaussianExponentB)*gaussianExponentA
2381+ *dxyz[anotherAxis]*overlapSASB/(beta*beta*beta);
23712382 value += xyzB[axis]*overlapAOs1;
23722383 return value;
23732384 }
@@ -2400,8 +2411,9 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
24002411 dxyz[ZAxis],
24012412 rAB,
24022413 overlapSASB);
2403- value = 0.5+pow(gaussianExponentB*dxyz[axis], 2.0)/beta;
2404- value *= 8.0*pow(gaussianExponentA, 2.5)*gaussianExponentB*pow(beta, -3.0)*overlapSASB;
2414+ value = 0.5+gaussianExponentB*gaussianExponentB*dxyz[axis]*dxyz[axis]/beta;
2415+ value *= 8.0*gaussianExponentA*gaussianExponentA*sqrt(gaussianExponentA)
2416+ *gaussianExponentB*overlapSASB/(beta*beta*beta);
24052417 value *= dxyz[anotherAxis1]*dxyz[anotherAxis2];
24062418 value += xyzA[axis]*overlapAOs1;
24072419 return value;
@@ -2434,8 +2446,9 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
24342446 dxyz[ZAxis],
24352447 rAB,
24362448 overlapSASB);
2437- value = 0.5+pow(gaussianExponentA*dxyz[axis], 2.0)/beta;
2438- value *= 8.0*pow(gaussianExponentB, 2.5)*gaussianExponentA*pow(beta, -3.0)*overlapSASB;
2449+ value = 0.5+gaussianExponentA*gaussianExponentA*dxyz[axis]*dxyz[axis]/beta;
2450+ value *= 8.0*gaussianExponentB*gaussianExponentB*sqrt(gaussianExponentB)
2451+ *gaussianExponentA*overlapSASB/(beta*beta*beta);
24392452 value *= dxyz[anotherAxis1]*dxyz[anotherAxis2];
24402453 value += xyzB[axis]*overlapAOs1;
24412454 return value;
@@ -2588,11 +2601,12 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
25882601 dxyz[ZAxis],
25892602 rAB,
25902603 overlapSASB);
2591- value = 0.5-2.0*gaussianExponentA*gaussianExponentB*pow(dxyz[XAxis],2.0)/beta;
2592- value += 0.5*pow(gaussianExponentA,2.0)*(pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0))/beta;
2593- value += pow(gaussianExponentA*gaussianExponentB*dxyz[XAxis]/beta,2.0)
2594- *(pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0));
2595- value *= 4.0*pow(gaussianExponentA,0.5)*gaussianExponentB*pow(beta,-2.0);
2604+ value = 0.5-2.0*gaussianExponentA*gaussianExponentB*(dxyz[XAxis]*dxyz[XAxis])/beta;
2605+ value += 0.5*(gaussianExponentA*gaussianExponentA)*((dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))/beta;
2606+ value += (gaussianExponentA*gaussianExponentB*dxyz[XAxis]
2607+ *gaussianExponentA*gaussianExponentB*dxyz[XAxis])
2608+ *((dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))/(beta*beta);
2609+ value *= 4.0*sqrt(gaussianExponentA)*gaussianExponentB/(beta*beta);
25962610 value *= overlapSASB;
25972611 value += xyzA[axis]*overlapAOs1;
25982612 return value;
@@ -2609,11 +2623,12 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
26092623 dxyz[ZAxis],
26102624 rAB,
26112625 overlapSASB);
2612- value = 0.5-2.0*gaussianExponentA*gaussianExponentB*pow(dxyz[XAxis],2.0)/beta;
2613- value += 0.5*pow(gaussianExponentB,2.0)*(pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0))/beta;
2614- value += pow(gaussianExponentA*gaussianExponentB*dxyz[XAxis]/beta,2.0)
2615- *(pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0));
2616- value *= 4.0*pow(gaussianExponentB,0.5)*gaussianExponentA*pow(beta,-2.0);
2626+ value = 0.5-2.0*gaussianExponentA*gaussianExponentB*(dxyz[XAxis]*dxyz[XAxis])/beta;
2627+ value += 0.5*(gaussianExponentB*gaussianExponentB)*((dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))/beta;
2628+ value += (gaussianExponentA*gaussianExponentB*dxyz[XAxis]
2629+ *gaussianExponentA*gaussianExponentB*dxyz[XAxis])
2630+ *((dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))/(beta*beta);
2631+ value *= 4.0*sqrt(gaussianExponentB)*gaussianExponentA/(beta*beta);
26172632 value *= overlapSASB;
26182633 value += xyzB[axis]*overlapAOs1;
26192634 return value;
@@ -2630,11 +2645,12 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
26302645 dxyz[ZAxis],
26312646 rAB,
26322647 overlapSASB);
2633- value = 0.5-2.0*gaussianExponentA*gaussianExponentB*pow(dxyz[YAxis],2.0)/beta;
2634- value += 0.5*pow(gaussianExponentA,2.0)*(pow(dxyz[YAxis],2.0)-pow(dxyz[XAxis],2.0))/beta;
2635- value += pow(gaussianExponentA*gaussianExponentB*dxyz[YAxis]/beta,2.0)
2636- *(pow(dxyz[YAxis],2.0)-pow(dxyz[XAxis],2.0));
2637- value *= -4.0*pow(gaussianExponentA,0.5)*gaussianExponentB*pow(beta,-2.0);
2648+ value = 0.5-2.0*gaussianExponentA*gaussianExponentB*(dxyz[YAxis]*dxyz[YAxis])/beta;
2649+ value += 0.5*(gaussianExponentA*gaussianExponentA)*((dxyz[YAxis]*dxyz[YAxis])-(dxyz[XAxis]*dxyz[XAxis]))/beta;
2650+ value += (gaussianExponentA*gaussianExponentB*dxyz[YAxis]
2651+ *gaussianExponentA*gaussianExponentB*dxyz[YAxis])
2652+ *((dxyz[YAxis]*dxyz[YAxis])-(dxyz[XAxis]*dxyz[XAxis]))/(beta*beta);
2653+ value *= -4.0*sqrt(gaussianExponentA)*gaussianExponentB/(beta*beta);
26382654 value *= overlapSASB;
26392655 value += xyzA[axis]*overlapAOs1;
26402656 return value;
@@ -2651,11 +2667,12 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
26512667 dxyz[ZAxis],
26522668 rAB,
26532669 overlapSASB);
2654- value = 0.5-2.0*gaussianExponentA*gaussianExponentB*pow(dxyz[YAxis],2.0)/beta;
2655- value += 0.5*pow(gaussianExponentB,2.0)*(pow(dxyz[YAxis],2.0)-pow(dxyz[XAxis],2.0))/beta;
2656- value += pow(gaussianExponentA*gaussianExponentB*dxyz[YAxis]/beta,2.0)
2657- *(pow(dxyz[YAxis],2.0)-pow(dxyz[XAxis],2.0));
2658- value *= -4.0*pow(gaussianExponentB,0.5)*gaussianExponentA*pow(beta,-2.0);
2670+ value = 0.5-2.0*gaussianExponentA*gaussianExponentB*(dxyz[YAxis]*dxyz[YAxis])/beta;
2671+ value += 0.5*(gaussianExponentB*gaussianExponentB)*((dxyz[YAxis]*dxyz[YAxis])-(dxyz[XAxis]*dxyz[XAxis]))/beta;
2672+ value += (gaussianExponentA*gaussianExponentB*dxyz[YAxis]
2673+ *gaussianExponentA*gaussianExponentB*dxyz[YAxis])
2674+ *((dxyz[YAxis]*dxyz[YAxis])-(dxyz[XAxis]*dxyz[XAxis]))/(beta*beta);
2675+ value *= -4.0*sqrt(gaussianExponentB)*gaussianExponentA/(beta*beta);
26592676 value *= overlapSASB;
26602677 value += xyzB[axis]*overlapAOs1;
26612678 return value;
@@ -2672,11 +2689,12 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
26722689 dxyz[ZAxis],
26732690 rAB,
26742691 overlapSASB);
2675- value = 0.5*(pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0));
2676- value += pow(gaussianExponentB*dxyz[ZAxis],2.0)
2677- *(pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0))
2692+ value = 0.5*((dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]));
2693+ value += gaussianExponentB*gaussianExponentB*dxyz[ZAxis]*dxyz[ZAxis]
2694+ *((dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))
26782695 /beta;
2679- value *= 4.0*pow(gaussianExponentA,2.5)*gaussianExponentB*pow(beta,-3.0);
2696+ value *= 4.0*gaussianExponentA*gaussianExponentA*sqrt(gaussianExponentA)
2697+ *gaussianExponentB/(beta*beta*beta);
26802698 value *= overlapSASB;
26812699 value += xyzA[axis]*overlapAOs1;
26822700 return value;
@@ -2693,11 +2711,11 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
26932711 dxyz[ZAxis],
26942712 rAB,
26952713 overlapSASB);
2696- value = 0.5*(pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0));
2714+ value = 0.5*((dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]));
26972715 value += pow(gaussianExponentA*dxyz[ZAxis],2.0)
2698- *(pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0))
2716+ *((dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))
26992717 /beta;
2700- value *= 4.0*pow(gaussianExponentB,2.5)*gaussianExponentA*pow(beta,-3.0);
2718+ value *= 4.0*pow(gaussianExponentB,2.5)*gaussianExponentA/(beta*beta*beta);
27012719 value *= overlapSASB;
27022720 value += xyzA[axis]*overlapAOs1;
27032721 return value;
@@ -2716,12 +2734,12 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
27162734 rAB,
27172735 overlapSASB);
27182736 value = -0.5
2719- +2.0*gaussianExponentA*gaussianExponentB*pow(dxyz[axis],2.0)/beta
2720- +0.5*pow(gaussianExponentA,2.0)
2721- *(2.0*pow(dxyz[ZAxis],2.0)-pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0))/beta
2737+ +2.0*gaussianExponentA*gaussianExponentB*(dxyz[axis]*dxyz[axis])/beta
2738+ +0.5*(gaussianExponentA*gaussianExponentA)
2739+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis])-(dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))/beta
27222740 +pow(gaussianExponentA*gaussianExponentB*dxyz[axis]/beta,2.0)
2723- *(2.0*pow(dxyz[ZAxis],2.0)-pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0));
2724- value *= 4.0*pow(gaussianExponentA,0.5)*gaussianExponentB*pow(beta,-2.0)/sqrt(3.0);
2741+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis])-(dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]));
2742+ value *= 4.0*sqrt(gaussianExponentA)*gaussianExponentB/(beta*beta*sqrt(3.0));
27252743 value *= overlapSASB;
27262744 value += xyzA[axis]*overlapAOs1;
27272745 return value;
@@ -2740,12 +2758,12 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
27402758 rAB,
27412759 overlapSASB);
27422760 value = -0.5
2743- +2.0*gaussianExponentA*gaussianExponentB*pow(dxyz[axis],2.0)/beta
2744- +0.5*pow(gaussianExponentB,2.0)
2745- *(2.0*pow(dxyz[ZAxis],2.0)-pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0))/beta
2761+ +2.0*gaussianExponentA*gaussianExponentB*(dxyz[axis]*dxyz[axis])/beta
2762+ +0.5*(gaussianExponentB*gaussianExponentB)
2763+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis])-(dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))/beta
27462764 +pow(gaussianExponentA*gaussianExponentB*dxyz[axis]/beta,2.0)
2747- *(2.0*pow(dxyz[ZAxis],2.0)-pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0));
2748- value *= 4.0*pow(gaussianExponentB,0.5)*gaussianExponentA*pow(beta,-2.0)/sqrt(3.0);
2765+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis])-(dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]));
2766+ value *= 4.0*sqrt(gaussianExponentB)*gaussianExponentA/(beta*beta*sqrt(3.0));
27492767 value *= overlapSASB;
27502768 value += xyzB[axis]*overlapAOs1;
27512769 return value;
@@ -2763,12 +2781,12 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
27632781 rAB,
27642782 overlapSASB);
27652783 value = 1.0
2766- -4.0*gaussianExponentA*gaussianExponentB*pow(dxyz[axis],2.0)/beta
2767- +0.5*pow(gaussianExponentA,2.0)
2768- *(2.0*pow(dxyz[ZAxis],2.0)-pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0))/beta
2784+ -4.0*gaussianExponentA*gaussianExponentB*(dxyz[axis]*dxyz[axis])/beta
2785+ +0.5*(gaussianExponentA*gaussianExponentA)
2786+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis])-(dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))/beta
27692787 +pow(gaussianExponentA*gaussianExponentB*dxyz[axis]/beta,2.0)
2770- *(2.0*pow(dxyz[ZAxis],2.0)-pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0));
2771- value *= 4.0*pow(gaussianExponentA,0.5)*gaussianExponentB*pow(beta,-2.0)/sqrt(3.0);
2788+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis])-(dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]));
2789+ value *= 4.0*sqrt(gaussianExponentA)*gaussianExponentB/(beta*beta*sqrt(3.0));
27722790 value *= overlapSASB;
27732791 value += xyzA[axis]*overlapAOs1;
27742792 return value;
@@ -2786,12 +2804,12 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
27862804 rAB,
27872805 overlapSASB);
27882806 value = 1.0
2789- -4.0*gaussianExponentA*gaussianExponentB*pow(dxyz[axis],2.0)/beta
2790- +0.5*pow(gaussianExponentB,2.0)
2791- *(2.0*pow(dxyz[ZAxis],2.0)-pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0))/beta
2807+ -4.0*gaussianExponentA*gaussianExponentB*(dxyz[axis]*dxyz[axis])/beta
2808+ +0.5*(gaussianExponentB*gaussianExponentB)
2809+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis])-(dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))/beta
27922810 +pow(gaussianExponentA*gaussianExponentB*dxyz[axis]/beta,2.0)
2793- *(2.0*pow(dxyz[ZAxis],2.0)-pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0));
2794- value *= 4.0*pow(gaussianExponentB,0.5)*gaussianExponentA*pow(beta,-2.0)/sqrt(3.0);
2811+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis])-(dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]));
2812+ value *= 4.0*sqrt(gaussianExponentB)*gaussianExponentA/(beta*beta*sqrt(3.0));
27952813 value *= overlapSASB;
27962814 value += xyzB[axis]*overlapAOs1;
27972815 return value;
@@ -2842,7 +2860,7 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
28422860 value = 0.5*(gaussianExponentA-gaussianExponentB)*dxyz[axis]
28432861 +(gaussianExponentA-gaussianExponentB)*(gaussianExponentA*gaussianExponentB)
28442862 *dxyz[axis]*pow(dxyz[anotherAxis],2.0)/beta;
2845- value *= 8.0*(gaussianExponentA*gaussianExponentB)*pow(beta,-3.0);
2863+ value *= 8.0*(gaussianExponentA*gaussianExponentB)/(beta*beta*beta);
28462864 value *= overlapSASB;
28472865 value += axisAverage*overlapAOs1;
28482866 return value;
@@ -2889,8 +2907,8 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
28892907 overlapSASB);
28902908 value = (gaussianExponentA-gaussianExponentB)*dxyz[axis]
28912909 -(gaussianExponentA-gaussianExponentB)*(gaussianExponentA*gaussianExponentB)
2892- *(pow(dxyz[axis],2.0) - pow(dxyz[anotherAxis],2.0))*dxyz[axis]/beta;
2893- value *= 4.0*(gaussianExponentA*gaussianExponentB)*pow(beta,-3.0);
2910+ *((dxyz[axis]*dxyz[axis]) - pow(dxyz[anotherAxis],2.0))*dxyz[axis]/beta;
2911+ value *= 4.0*(gaussianExponentA*gaussianExponentB)/(beta*beta*beta);
28942912 value *= overlapSASB;
28952913 value += axisAverage*overlapAOs1;
28962914 return value;
@@ -2911,7 +2929,7 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
29112929 overlapSASB);
29122930 value = (gaussianExponentA-gaussianExponentB)*dxyz[axis]
29132931 -(gaussianExponentA-gaussianExponentB)*(gaussianExponentA*gaussianExponentB)
2914- *(2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))*dxyz[axis]/beta;
2932+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))*dxyz[axis]/beta;
29152933 value *= 4.0*(gaussianExponentA*gaussianExponentB)*pow(beta,-3.0)/3.0;
29162934 value *= overlapSASB;
29172935 value += axisAverage*overlapAOs1;
@@ -2932,7 +2950,7 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
29322950 overlapSASB);
29332951 value = 2.0*(gaussianExponentA-gaussianExponentB)*dxyz[axis]
29342952 -(gaussianExponentA-gaussianExponentB)*(gaussianExponentA*gaussianExponentB)
2935- *(2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))*dxyz[axis]/beta;
2953+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))*dxyz[axis]/beta;
29362954 value *= 8.0*(gaussianExponentA*gaussianExponentB)*pow(beta,-3.0)/3.0;
29372955 value *= overlapSASB;
29382956 value += axisAverage*overlapAOs1;
@@ -3007,7 +3025,7 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
30073025 rAB,
30083026 overlapSASB);
30093027 value = 0.5-gaussianExponentA*gaussianExponentB*pow(dxyz[anotherAxis1],2.0)/beta;
3010- value *= 8.0*pow(gaussianExponentA,2.0)*gaussianExponentB*pow(beta,-3.0)*dxyz[anotherAxis2];
3028+ value *= 8.0*(gaussianExponentA*gaussianExponentA)*gaussianExponentB*pow(beta,-3.0)*dxyz[anotherAxis2];
30113029 value *= overlapSASB;
30123030 value += axisAverage*overlapAOs1;
30133031 return value;
@@ -3058,7 +3076,7 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
30583076 rAB,
30593077 overlapSASB);
30603078 value = 0.5-gaussianExponentA*gaussianExponentB*pow(dxyz[anotherAxis1],2.0)/beta;
3061- value *= -8.0*pow(gaussianExponentB,2.0)*gaussianExponentA*pow(beta,-3.0)*dxyz[anotherAxis2];
3079+ value *= -8.0*(gaussianExponentB*gaussianExponentB)*gaussianExponentA*pow(beta,-3.0)*dxyz[anotherAxis2];
30623080 value *= overlapSASB;
30633081 value += axisAverage*overlapAOs1;
30643082 return value;
@@ -3077,9 +3095,9 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
30773095 rAB,
30783096 overlapSASB);
30793097 value = 0.5*beta
3080- -pow(gaussianExponentA,2.0)*gaussianExponentB*pow(dxyz[XAxis],2.0)/beta
3081- +pow(gaussianExponentB,2.0)*gaussianExponentA
3082- *(pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0))/(2.0*beta);
3098+ -(gaussianExponentA*gaussianExponentA)*gaussianExponentB*(dxyz[XAxis]*dxyz[XAxis])/beta
3099+ +(gaussianExponentB*gaussianExponentB)*gaussianExponentA
3100+ *((dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))/(2.0*beta);
30833101 value *= 8.0*gaussianExponentA*gaussianExponentB*pow(beta,-3.0)*dxyz[YAxis];
30843102 value *= overlapSASB;
30853103 value += axisAverage*overlapAOs1;
@@ -3099,9 +3117,9 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
30993117 rAB,
31003118 overlapSASB);
31013119 value = 0.5*beta
3102- -pow(gaussianExponentB,2.0)*gaussianExponentA*pow(dxyz[XAxis],2.0)/beta
3103- +pow(gaussianExponentA,2.0)*gaussianExponentB
3104- *(pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0))/(2.0*beta);
3120+ -(gaussianExponentB*gaussianExponentB)*gaussianExponentA*(dxyz[XAxis]*dxyz[XAxis])/beta
3121+ +(gaussianExponentA*gaussianExponentA)*gaussianExponentB
3122+ *((dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))/(2.0*beta);
31053123 value *= -8.0*gaussianExponentA*gaussianExponentB*pow(beta,-3.0)*dxyz[YAxis];
31063124 value *= overlapSASB;
31073125 value += axisAverage*overlapAOs1;
@@ -3121,9 +3139,9 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
31213139 rAB,
31223140 overlapSASB);
31233141 value = -0.5*beta
3124- +pow(gaussianExponentA,2.0)*gaussianExponentB*pow(dxyz[YAxis],2.0)/beta
3125- +pow(gaussianExponentB,2.0)*gaussianExponentA
3126- *(pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0))/(2.0*beta);
3142+ +(gaussianExponentA*gaussianExponentA)*gaussianExponentB*(dxyz[YAxis]*dxyz[YAxis])/beta
3143+ +(gaussianExponentB*gaussianExponentB)*gaussianExponentA
3144+ *((dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))/(2.0*beta);
31273145 value *= 8.0*gaussianExponentA*gaussianExponentB*pow(beta,-3.0)*dxyz[XAxis];
31283146 value *= overlapSASB;
31293147 value += axisAverage*overlapAOs1;
@@ -3143,9 +3161,9 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
31433161 rAB,
31443162 overlapSASB);
31453163 value = -0.5*beta
3146- +pow(gaussianExponentB,2.0)*gaussianExponentA*pow(dxyz[YAxis],2.0)/beta
3147- +pow(gaussianExponentA,2.0)*gaussianExponentB
3148- *(pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0))/(2.0*beta);
3164+ +(gaussianExponentB*gaussianExponentB)*gaussianExponentA*(dxyz[YAxis]*dxyz[YAxis])/beta
3165+ +(gaussianExponentA*gaussianExponentA)*gaussianExponentB
3166+ *((dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))/(2.0*beta);
31493167 value *= -8.0*gaussianExponentA*gaussianExponentB*pow(beta,-3.0)*dxyz[XAxis];
31503168 value *= overlapSASB;
31513169 value += axisAverage*overlapAOs1;
@@ -3167,7 +3185,7 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
31673185 overlapSASB);
31683186 value = 8.0*pow(gaussianExponentA,4.0)*pow(gaussianExponentB,3.0)
31693187 *dxyz[XAxis]*dxyz[YAxis]*dxyz[ZAxis]
3170- *(pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0))/pow(beta,5.0);
3188+ *((dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))/pow(beta,5.0);
31713189 value *= overlapSASB;
31723190 value += xyzB[axis]*overlapAOs1;
31733191 return value;
@@ -3188,7 +3206,7 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
31883206 overlapSASB);
31893207 value = -8.0*pow(gaussianExponentA,3.0)*pow(gaussianExponentB,4.0)
31903208 *dxyz[XAxis]*dxyz[YAxis]*dxyz[ZAxis]
3191- *(pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0))/pow(beta,5.0);
3209+ *((dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))/pow(beta,5.0);
31923210 value *= overlapSASB;
31933211 value += xyzA[axis]*overlapAOs1;
31943212 return value;
@@ -3207,10 +3225,10 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
32073225 rAB,
32083226 overlapSASB);
32093227 value = -0.5*gaussianExponentA
3210- +pow(gaussianExponentA,2.0)*gaussianExponentB*pow(dxyz[YAxis],2.0)/beta
3211- +pow(gaussianExponentB,2.0)*gaussianExponentA
3212- *(pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0))/(2.0*beta);
3213- value *= 8.0*gaussianExponentA*gaussianExponentB*dxyz[ZAxis]*pow(beta,-3.0);
3228+ +(gaussianExponentA*gaussianExponentA)*gaussianExponentB*(dxyz[YAxis]*dxyz[YAxis])/beta
3229+ +(gaussianExponentB*gaussianExponentB)*gaussianExponentA
3230+ *((dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))/(2.0*beta);
3231+ value *= 8.0*gaussianExponentA*gaussianExponentB*dxyz[ZAxis]/(beta*beta*beta);
32143232 value *= overlapSASB;
32153233 value += axisAverage*overlapAOs1;
32163234 return value;
@@ -3229,10 +3247,10 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
32293247 rAB,
32303248 overlapSASB);
32313249 value = -0.5*gaussianExponentB
3232- +pow(gaussianExponentB,2.0)*gaussianExponentA*pow(dxyz[YAxis],2.0)/beta
3233- +pow(gaussianExponentA,2.0)*gaussianExponentB
3234- *(pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0))/(2.0*beta);
3235- value *= -8.0*gaussianExponentA*gaussianExponentB*dxyz[ZAxis]*pow(beta,-3.0);
3250+ +(gaussianExponentB*gaussianExponentB)*gaussianExponentA*(dxyz[YAxis]*dxyz[YAxis])/beta
3251+ +(gaussianExponentA*gaussianExponentA)*gaussianExponentB
3252+ *((dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))/(2.0*beta);
3253+ value *= -8.0*gaussianExponentA*gaussianExponentB*dxyz[ZAxis]/(beta*beta*beta);
32363254 value *= overlapSASB;
32373255 value += axisAverage*overlapAOs1;
32383256 return value;
@@ -3251,10 +3269,10 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
32513269 rAB,
32523270 overlapSASB);
32533271 value = -0.5*gaussianExponentA
3254- +pow(gaussianExponentA,2.0)*gaussianExponentB*pow(dxyz[XAxis],2.0)/beta
3255- +pow(gaussianExponentB,2.0)*gaussianExponentA
3256- *(pow(dxyz[YAxis],2.0)-pow(dxyz[XAxis],2.0))/(2.0*beta);
3257- value *= -8.0*gaussianExponentA*gaussianExponentB*dxyz[ZAxis]*pow(beta,-3.0);
3272+ +(gaussianExponentA*gaussianExponentA)*gaussianExponentB*(dxyz[XAxis]*dxyz[XAxis])/beta
3273+ +(gaussianExponentB*gaussianExponentB)*gaussianExponentA
3274+ *((dxyz[YAxis]*dxyz[YAxis])-(dxyz[XAxis]*dxyz[XAxis]))/(2.0*beta);
3275+ value *= -8.0*gaussianExponentA*gaussianExponentB*dxyz[ZAxis]/(beta*beta*beta);
32583276 value *= overlapSASB;
32593277 value += axisAverage*overlapAOs1;
32603278 return value;
@@ -3273,10 +3291,10 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
32733291 rAB,
32743292 overlapSASB);
32753293 value = -0.5*gaussianExponentB
3276- +pow(gaussianExponentB,2.0)*gaussianExponentA*pow(dxyz[YAxis],2.0)/beta
3277- +pow(gaussianExponentA,2.0)*gaussianExponentB
3278- *(pow(dxyz[YAxis],2.0)-pow(dxyz[XAxis],2.0))/(2.0*beta);
3279- value *= 8.0*gaussianExponentA*gaussianExponentB*dxyz[ZAxis]*pow(beta,-3.0);
3294+ +(gaussianExponentB*gaussianExponentB)*gaussianExponentA*(dxyz[YAxis]*dxyz[YAxis])/beta
3295+ +(gaussianExponentA*gaussianExponentA)*gaussianExponentB
3296+ *((dxyz[YAxis]*dxyz[YAxis])-(dxyz[XAxis]*dxyz[XAxis]))/(2.0*beta);
3297+ value *= 8.0*gaussianExponentA*gaussianExponentB*dxyz[ZAxis]/(beta*beta*beta);
32803298 value *= overlapSASB;
32813299 value += axisAverage*overlapAOs1;
32823300 return value;
@@ -3294,8 +3312,8 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
32943312 dxyz[ZAxis],
32953313 rAB,
32963314 overlapSASB);
3297- value = gaussianExponentA*gaussianExponentB*(pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0))/beta+1.0;
3298- value *= 4.0*gaussianExponentA*pow(gaussianExponentB,2.0)*dxyz[YAxis]*pow(beta,-3.0);
3315+ value = gaussianExponentA*gaussianExponentB*((dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))/beta+1.0;
3316+ value *= 4.0*gaussianExponentA*(gaussianExponentB*gaussianExponentB)*dxyz[YAxis]/(beta*beta*beta);
32993317 value *= overlapSASB;
33003318 value += axisAverage*overlapAOs1;
33013319 return value;
@@ -3313,8 +3331,8 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
33133331 dxyz[ZAxis],
33143332 rAB,
33153333 overlapSASB);
3316- value = gaussianExponentA*gaussianExponentB*(pow(dxyz[XAxis],2.0)-pow(dxyz[YAxis],2.0))/beta+1.0;
3317- value *= -4.0*gaussianExponentB*pow(gaussianExponentA,2.0)*dxyz[YAxis]*pow(beta,-3.0);
3334+ value = gaussianExponentA*gaussianExponentB*((dxyz[XAxis]*dxyz[XAxis])-(dxyz[YAxis]*dxyz[YAxis]))/beta+1.0;
3335+ value *= -4.0*gaussianExponentB*(gaussianExponentA*gaussianExponentA)*dxyz[YAxis]/(beta*beta*beta);
33183336 value *= overlapSASB;
33193337 value += axisAverage*overlapAOs1;
33203338 return value;
@@ -3332,8 +3350,8 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
33323350 dxyz[ZAxis],
33333351 rAB,
33343352 overlapSASB);
3335- value = gaussianExponentA*gaussianExponentB*(pow(dxyz[YAxis],2.0)-pow(dxyz[XAxis],2.0))/beta+1.0;
3336- value *= -4.0*gaussianExponentA*pow(gaussianExponentB,2.0)*dxyz[XAxis]*pow(beta,-3.0);
3353+ value = gaussianExponentA*gaussianExponentB*((dxyz[YAxis]*dxyz[YAxis])-(dxyz[XAxis]*dxyz[XAxis]))/beta+1.0;
3354+ value *= -4.0*gaussianExponentA*(gaussianExponentB*gaussianExponentB)*dxyz[XAxis]/(beta*beta*beta);
33373355 value *= overlapSASB;
33383356 value += axisAverage*overlapAOs1;
33393357 return value;
@@ -3351,8 +3369,8 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
33513369 dxyz[ZAxis],
33523370 rAB,
33533371 overlapSASB);
3354- value = gaussianExponentA*gaussianExponentB*(pow(dxyz[YAxis],2.0)-pow(dxyz[XAxis],2.0))/beta+1.0;
3355- value *= 4.0*gaussianExponentB*pow(gaussianExponentA,2.0)*dxyz[XAxis]*pow(beta,-3.0);
3372+ value = gaussianExponentA*gaussianExponentB*((dxyz[YAxis]*dxyz[YAxis])-(dxyz[XAxis]*dxyz[XAxis]))/beta+1.0;
3373+ value *= 4.0*gaussianExponentB*(gaussianExponentA*gaussianExponentA)*dxyz[XAxis]/(beta*beta*beta);
33563374 value *= overlapSASB;
33573375 value += axisAverage*overlapAOs1;
33583376 return value;
@@ -3371,7 +3389,7 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
33713389 dxyz[ZAxis],
33723390 rAB,
33733391 overlapSASB);
3374- value = 2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0);
3392+ value = 2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]);
33753393 value *= dxyz[XAxis]*dxyz[YAxis]*dxyz[ZAxis];
33763394 value *= 8.0*pow(gaussianExponentA,4.0)*pow(gaussianExponentB,3.0);
33773395 value /= sqrt(3.0)*pow(beta,5.0);
@@ -3393,7 +3411,7 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
33933411 dxyz[ZAxis],
33943412 rAB,
33953413 overlapSASB);
3396- value = 2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0);
3414+ value = 2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]);
33973415 value *= dxyz[XAxis]*dxyz[YAxis]*dxyz[ZAxis];
33983416 value *= -8.0*pow(gaussianExponentB,4.0)*pow(gaussianExponentA,3.0);
33993417 value /= sqrt(3.0)*pow(beta,5.0);
@@ -3422,12 +3440,14 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
34223440 rAB,
34233441 overlapSASB);
34243442 value = 0.5*(gaussianExponentB-gaussianExponentA)
3425- +3.0*pow(gaussianExponentA,2.0)*gaussianExponentB*pow(dxyz[axis],2.0)*pow(beta,-2.0)
3426- +gaussianExponentA*pow(gaussianExponentB,2.0)
3427- *(2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))/(2.0*beta)
3428- +pow(gaussianExponentA,3.0)*pow(gaussianExponentB,2.0)*pow(dxyz[axis],2.0)
3429- *(2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))*pow(beta,-2.0);
3430- value *= 8.0*gaussianExponentA*gaussianExponentB*dxyz[anotherAxis]/(sqrt(3.0)*pow(beta,3.0));
3443+ +3.0*(gaussianExponentA*gaussianExponentA)*gaussianExponentB
3444+ *(dxyz[axis]*dxyz[axis])/(beta*beta)
3445+ +gaussianExponentA*(gaussianExponentB*gaussianExponentB)
3446+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))/(2.0*beta)
3447+ +pow(gaussianExponentA,3.0)*(gaussianExponentB*gaussianExponentB)*(dxyz[axis]*dxyz[axis])
3448+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))
3449+ /(beta*beta);
3450+ value *= 8.0*gaussianExponentA*gaussianExponentB*dxyz[anotherAxis]/(sqrt(3.0)*beta*beta*beta);
34313451 value *= overlapSASB;
34323452 value += xyzB[axis]*overlapAOs1;
34333453 return value;
@@ -3453,12 +3473,13 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
34533473 rAB,
34543474 overlapSASB);
34553475 value = 0.5*(gaussianExponentA-gaussianExponentB)
3456- +3.0*pow(gaussianExponentB,2.0)*gaussianExponentA*pow(dxyz[axis],2.0)*pow(beta,-2.0)
3457- +gaussianExponentB*pow(gaussianExponentA,2.0)
3458- *(2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))/(2.0*beta)
3459- +pow(gaussianExponentB,3.0)*pow(gaussianExponentA,2.0)*pow(dxyz[axis],2.0)
3460- *(2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))*pow(beta,-2.0);
3461- value *= -8.0*gaussianExponentA*gaussianExponentB*dxyz[anotherAxis]/(sqrt(3.0)*pow(beta,3.0));
3476+ +3.0*(gaussianExponentB*gaussianExponentB)*gaussianExponentA
3477+ *(dxyz[axis]*dxyz[axis])/(beta*beta)
3478+ +gaussianExponentB*(gaussianExponentA*gaussianExponentA)
3479+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))/(2.0*beta)
3480+ +pow(gaussianExponentB,3.0)*(gaussianExponentA*gaussianExponentA)*(dxyz[axis]*dxyz[axis])
3481+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))/(beta*beta);
3482+ value *= -8.0*gaussianExponentA*gaussianExponentB*dxyz[anotherAxis]/(sqrt(3.0)*(beta*beta*beta));
34623483 value *= overlapSASB;
34633484 value += xyzA[axis]*overlapAOs1;
34643485 return value;
@@ -3477,13 +3498,13 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
34773498 rAB,
34783499 overlapSASB);
34793500 value = gaussianExponentB-0.5*gaussianExponentA
3480- +gaussianExponentA*pow(gaussianExponentB,2.0)
3481- *(2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))/(2.0*beta)
3501+ +gaussianExponentA*(gaussianExponentB*gaussianExponentB)
3502+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))/(2.0*beta)
34823503 +pow(gaussianExponentA,3.0)*pow(gaussianExponentB*dxyz[axis],2.0)
3483- *(2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))
3484- *pow(beta,-2.0);
3504+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))
3505+ /(beta*beta);
34853506 value *= 8.0*gaussianExponentA*gaussianExponentB*dxyz[ZAxis]
3486- /(sqrt(3.0)*pow(beta,3.0));
3507+ /(sqrt(3.0)*(beta*beta*beta));
34873508 value *= overlapSASB;
34883509 value += xyzB[axis]*overlapAOs1;
34893510 return value;
@@ -3502,13 +3523,13 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
35023523 rAB,
35033524 overlapSASB);
35043525 value = gaussianExponentA-0.5*gaussianExponentB
3505- +gaussianExponentB*pow(gaussianExponentA,2.0)
3506- *(2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))/(2.0*beta)
3507- +pow(gaussianExponentB,3.0)*pow(gaussianExponentA*dxyz[axis],2.0)
3508- *(2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))
3509- *pow(beta,-2.0);
3526+ +gaussianExponentB*(gaussianExponentA*gaussianExponentA)
3527+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))/(2.0*beta)
3528+ +pow(gaussianExponentB,3.0)*(gaussianExponentA*gaussianExponentA*dxyz[axis]*dxyz[axis])
3529+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))
3530+ /(beta*beta);
35103531 value *= -8.0*gaussianExponentA*gaussianExponentB*dxyz[ZAxis]
3511- /(sqrt(3.0)*pow(beta,3.0));
3532+ /(sqrt(3.0)*(beta*beta*beta));
35123533 value *= overlapSASB;
35133534 value += xyzA[axis]*overlapAOs1;
35143535 return value;
@@ -3534,14 +3555,14 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
35343555 rAB,
35353556 overlapSASB);
35363557 value = gaussianExponentA-0.5*gaussianExponentB
3537- -3.0*pow(gaussianExponentA,2.0)*gaussianExponentB*pow(dxyz[axis]/beta,2.0)
3538- +gaussianExponentA*pow(gaussianExponentB,2.0)
3539- *(2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))/(2.0*beta)
3558+ -3.0*(gaussianExponentA*gaussianExponentA)*gaussianExponentB*pow(dxyz[axis]/beta,2.0)
3559+ +gaussianExponentA*(gaussianExponentB*gaussianExponentB)
3560+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))/(2.0*beta)
35403561 +pow(gaussianExponentA,3.0)*pow(gaussianExponentB*dxyz[axis],2.0)
3541- *(2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))
3542- *pow(beta,-2.0);
3562+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))
3563+ /(beta*beta);
35433564 value *= 8.0*gaussianExponentA*gaussianExponentB*dxyz[anotherAxis]
3544- /(sqrt(3.0)*pow(beta,3.0));
3565+ /(sqrt(3.0)*(beta*beta*beta));
35453566 value *= overlapSASB;
35463567 value += xyzB[axis]*overlapAOs1;
35473568 return value;
@@ -3567,14 +3588,15 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
35673588 rAB,
35683589 overlapSASB);
35693590 value = gaussianExponentB-0.5*gaussianExponentA
3570- -3.0*pow(gaussianExponentB,2.0)*gaussianExponentA*pow(dxyz[axis]/beta,2.0)
3571- +gaussianExponentB*pow(gaussianExponentA,2.0)
3572- *(2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))/(2.0*beta)
3573- +pow(gaussianExponentB,3.0)*pow(gaussianExponentA*dxyz[axis],2.0)
3574- *(2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))
3575- *pow(beta,-2.0);
3591+ -3.0*(gaussianExponentB*gaussianExponentB)*gaussianExponentA*dxyz[axis]*dxyz[axis]/(beta*beta)
3592+ +gaussianExponentB*(gaussianExponentA*gaussianExponentA)
3593+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))/(2.0*beta)
3594+ +pow(gaussianExponentB,3.0)
3595+ *(gaussianExponentA*gaussianExponentA*dxyz[axis]*dxyz[axis])
3596+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))
3597+ /(beta*beta);
35763598 value *= -8.0*gaussianExponentA*gaussianExponentB*dxyz[anotherAxis]
3577- /(sqrt(3.0)*pow(beta,3.0));
3599+ /(sqrt(3.0)*(beta*beta*beta));
35783600 value *= overlapSASB;
35793601 value += xyzA[axis]*overlapAOs1;
35803602 return value;
@@ -3593,11 +3615,11 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
35933615 rAB,
35943616 overlapSASB);
35953617 value = gaussianExponentB - gaussianExponentA
3596- +gaussianExponentA*pow(gaussianExponentB,2.0)
3597- *(2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))/beta
3598- +pow(gaussianExponentA,2.0)*gaussianExponentB
3599- *(pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))/beta;
3600- value *= 4.0*gaussianExponentA*gaussianExponentB*dxyz[XAxis]*pow(beta,-3.0)/sqrt(3.0);
3618+ +gaussianExponentA*(gaussianExponentB*gaussianExponentB)
3619+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))/beta
3620+ +(gaussianExponentA*gaussianExponentA)*gaussianExponentB
3621+ *((dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))/beta;
3622+ value *= 4.0*gaussianExponentA*gaussianExponentB*dxyz[XAxis]/(beta*beta*beta*sqrt(3.0));
36013623 value *= overlapSASB;
36023624 value += axisAverage*overlapAOs1;
36033625 return value;
@@ -3616,11 +3638,11 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
36163638 rAB,
36173639 overlapSASB);
36183640 value = gaussianExponentA - gaussianExponentB
3619- +gaussianExponentB*pow(gaussianExponentA,2.0)
3620- *(2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))/beta
3621- +pow(gaussianExponentB,2.0)*gaussianExponentA
3622- *(pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))/beta;
3623- value *= -4.0*gaussianExponentA*gaussianExponentB*dxyz[XAxis]*pow(beta,-3.0)/sqrt(3.0);
3641+ +gaussianExponentB*(gaussianExponentA*gaussianExponentA)
3642+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))/beta
3643+ +(gaussianExponentB*gaussianExponentB)*gaussianExponentA
3644+ *((dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))/beta;
3645+ value *= -4.0*gaussianExponentA*gaussianExponentB*dxyz[XAxis]/(beta*beta*beta*sqrt(3.0));
36243646 value *= overlapSASB;
36253647 value += axisAverage*overlapAOs1;
36263648 return value;
@@ -3639,11 +3661,11 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
36393661 rAB,
36403662 overlapSASB);
36413663 value = gaussianExponentB - gaussianExponentA
3642- +gaussianExponentA*pow(gaussianExponentB,2.0)
3643- *(2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))/beta
3644- +pow(gaussianExponentA,2.0)*gaussianExponentB
3645- *(pow(dxyz[YAxis],2.0) - pow(dxyz[XAxis],2.0))/beta;
3646- value *= -4.0*gaussianExponentA*gaussianExponentB*dxyz[YAxis]*pow(beta,-3.0)/sqrt(3.0);
3664+ +gaussianExponentA*(gaussianExponentB*gaussianExponentB)
3665+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))/beta
3666+ +(gaussianExponentA*gaussianExponentA)*gaussianExponentB
3667+ *((dxyz[YAxis]*dxyz[YAxis]) - (dxyz[XAxis]*dxyz[XAxis]))/beta;
3668+ value *= -4.0*gaussianExponentA*gaussianExponentB*dxyz[YAxis]/(beta*beta*beta*sqrt(3.0));
36473669 value *= overlapSASB;
36483670 value += axisAverage*overlapAOs1;
36493671 return value;
@@ -3662,11 +3684,11 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
36623684 rAB,
36633685 overlapSASB);
36643686 value = gaussianExponentA - gaussianExponentB
3665- +gaussianExponentB*pow(gaussianExponentA,2.0)
3666- *(2.0*pow(dxyz[ZAxis],2.0) - pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0))/beta
3667- +pow(gaussianExponentB,2.0)*gaussianExponentA
3668- *(pow(dxyz[YAxis],2.0) - pow(dxyz[XAxis],2.0))/beta;
3669- value *= 4.0*gaussianExponentA*gaussianExponentB*dxyz[YAxis]*pow(beta,-3.0)/sqrt(3.0);
3687+ +gaussianExponentB*(gaussianExponentA*gaussianExponentA)
3688+ *(2.0*(dxyz[ZAxis]*dxyz[ZAxis]) - (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]))/beta
3689+ +(gaussianExponentB*gaussianExponentB)*gaussianExponentA
3690+ *((dxyz[YAxis]*dxyz[YAxis]) - (dxyz[XAxis]*dxyz[XAxis]))/beta;
3691+ value *= 4.0*gaussianExponentA*gaussianExponentB*dxyz[YAxis]/(beta*beta*beta*sqrt(3.0));
36703692 value *= overlapSASB;
36713693 value += axisAverage*overlapAOs1;
36723694 return value;
@@ -3684,9 +3706,9 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
36843706 dxyz[ZAxis],
36853707 rAB,
36863708 overlapSASB);
3687- value = pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0);
3688- value *= -8.0*pow(gaussianExponentA,3.0)*pow(gaussianExponentB,2.0)*dxyz[ZAxis];
3689- value /= sqrt(3.0)*pow(beta,4.0);
3709+ value = (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]);
3710+ value *= -8.0*pow(gaussianExponentA,3.0)*(gaussianExponentB*gaussianExponentB)*dxyz[ZAxis];
3711+ value /= sqrt(3.0)*beta*beta*beta*beta;
36903712 value *= overlapSASB;
36913713 value += axisAverage*overlapAOs1;
36923714 return value;
@@ -3704,9 +3726,9 @@ double Cndo2::GetGaussianCartesianMatrix(AtomType atomTypeA,
37043726 dxyz[ZAxis],
37053727 rAB,
37063728 overlapSASB);
3707- value = pow(dxyz[XAxis],2.0) - pow(dxyz[YAxis],2.0);
3708- value *= 8.0*pow(gaussianExponentA,2.0)*pow(gaussianExponentB,3.0)*dxyz[ZAxis];
3709- value /= sqrt(3.0)*pow(beta,4.0);
3729+ value = (dxyz[XAxis]*dxyz[XAxis]) - (dxyz[YAxis]*dxyz[YAxis]);
3730+ value *= 8.0*(gaussianExponentA*gaussianExponentA)*pow(gaussianExponentB,3.0)*dxyz[ZAxis];
3731+ value /= sqrt(3.0)*beta*beta*beta*beta;
37103732 value *= overlapSASB;
37113733 value += axisAverage*overlapAOs1;
37123734 return value;
@@ -4001,9 +4023,7 @@ void Cndo2::CalcDiatomicOverlapAOs1stDerivatives(double*** diatomicOverlapAOs1st
40014023 double cartesian[CartesianType_end] = {atomA.GetXyz()[XAxis] - atomB.GetXyz()[XAxis],
40024024 atomA.GetXyz()[YAxis] - atomB.GetXyz()[YAxis],
40034025 atomA.GetXyz()[ZAxis] - atomB.GetXyz()[ZAxis]};
4004- double R = sqrt( pow(cartesian[XAxis],2.0) +
4005- pow(cartesian[YAxis],2.0) +
4006- pow(cartesian[ZAxis],2.0) );
4026+ double R = this->molecule->GetDistanceAtoms(atomA, atomB);
40074027
40084028 this->CalcDiatomicOverlapAOsInDiatomicFrame(tmpDiaOverlapAOsInDiaFrame, atomA, atomB);
40094029 this->CalcDiatomicOverlapAOs1stDerivativeInDiatomicFrame(tmpDiaOverlapAOs1stDerivInDiaFrame, atomA, atomB);
@@ -4133,9 +4153,7 @@ void Cndo2::CalcDiatomicOverlapAOs2ndDerivatives(double**** diatomicOverlapAOs2n
41334153 double cartesian[CartesianType_end] = {atomA.GetXyz()[XAxis] - atomB.GetXyz()[XAxis],
41344154 atomA.GetXyz()[YAxis] - atomB.GetXyz()[YAxis],
41354155 atomA.GetXyz()[ZAxis] - atomB.GetXyz()[ZAxis]};
4136- double R = sqrt( pow(cartesian[XAxis],2.0) +
4137- pow(cartesian[YAxis],2.0) +
4138- pow(cartesian[ZAxis],2.0) );
4156+ double R = this->molecule->GetDistanceAtoms(atomA, atomB);
41394157
41404158 this->CalcDiatomicOverlapAOsInDiatomicFrame(tmpDiaOverlapAOsInDiaFrame, atomA, atomB);
41414159 this->CalcDiatomicOverlapAOs1stDerivativeInDiatomicFrame(tmpDiaOverlapAOs1stDerivInDiaFrame, atomA, atomB);
@@ -4266,13 +4284,13 @@ double Cndo2::Get2ndDerivativeElementFromDistanceDerivatives(double firstDistanc
42664284 double rAB) const{
42674285 double value=0.0;
42684286 if(axisA1 != axisA2){
4269- value = -1.0*pow(rAB, -3.0)*firstDistanceDeri;
4270- value += pow(rAB, -2.0)*secondDistanceDeri;
4287+ value = -1.0*firstDistanceDeri/(rAB*rAB*rAB);
4288+ value += secondDistanceDeri/(rAB*rAB);
42714289 value *= cartesian[axisA1]*cartesian[axisA2];
42724290 }
42734291 else{
4274- value = (pow(rAB,2.0) - pow(cartesian[axisA1],2.0))*pow(rAB, -3.0)*firstDistanceDeri;
4275- value += pow(cartesian[axisA1]/rAB, 2.0)*secondDistanceDeri;
4292+ value = (rAB*rAB - cartesian[axisA1]*cartesian[axisA1])*firstDistanceDeri/(rAB*rAB*rAB);
4293+ value += cartesian[axisA1]*cartesian[axisA1]*secondDistanceDeri/(rAB*rAB);
42764294 }
42774295 return value;
42784296 }
@@ -4341,7 +4359,7 @@ double Cndo2::GetOverlapAOsElementByGTOExpansion(const Atom& atomA, int valenceI
43414359 double dx = atomA.GetXyz()[XAxis] - atomB.GetXyz()[XAxis];
43424360 double dy = atomA.GetXyz()[YAxis] - atomB.GetXyz()[YAxis];
43434361 double dz = atomA.GetXyz()[ZAxis] - atomB.GetXyz()[ZAxis];
4344- double rAB = sqrt( pow(dx, 2.0) + pow(dy, 2.0) + pow(dz,2.0) );
4362+ double rAB = sqrt( dx*dx + dy*dy + dz*dz );
43454363 ShellType shellTypeA = atomA.GetValenceShellType();
43464364 ShellType shellTypeB = atomB.GetValenceShellType();
43474365 OrbitalType valenceOrbitalA = atomA.GetValence(valenceIndexA);
@@ -4366,12 +4384,12 @@ double Cndo2::GetOverlapAOsElementByGTOExpansion(const Atom& atomA, int valenceI
43664384 shellTypeB,
43674385 valenceOrbitalB,
43684386 j);
4369- gaussianExponentA = pow(orbitalExponentA, 2.0) *
4387+ gaussianExponentA = (orbitalExponentA*orbitalExponentA) *
43704388 GTOExpansionSTO::GetInstance()->GetExponent(stonG,
43714389 shellTypeA,
43724390 valenceOrbitalA,
43734391 i);
4374- gaussianExponentB = pow(orbitalExponentB, 2.0) *
4392+ gaussianExponentB = (orbitalExponentB*orbitalExponentB) *
43754393 GTOExpansionSTO::GetInstance()->GetExponent(stonG,
43764394 shellTypeB,
43774395 valenceOrbitalB,
@@ -4397,7 +4415,7 @@ double Cndo2::GetGaussianOverlapAOsSASB(double gaussianExponentA,
43974415 double value;
43984416 double temp1 = 0.0;
43994417 double temp2 = 0.0;
4400- temp1 = 2.0*pow(gaussianExponentA*gaussianExponentB, 0.5)
4418+ temp1 = 2.0*sqrt(gaussianExponentA*gaussianExponentB)
44014419 /(gaussianExponentA+gaussianExponentB);
44024420 temp2 = -1.0* gaussianExponentA*gaussianExponentB
44034421 /(gaussianExponentA+gaussianExponentB);
@@ -4445,125 +4463,125 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
44454463 }
44464464
44474465 else if(valenceOrbitalA == s && valenceOrbitalB == px){
4448- value = 2.0*gaussianExponentA*pow(gaussianExponentB, 0.5)*dx;
4466+ value = 2.0*gaussianExponentA*sqrt(gaussianExponentB)*dx;
44494467 value /= (gaussianExponentA+gaussianExponentB);
44504468 }
44514469 else if(valenceOrbitalA == s && valenceOrbitalB == py){
4452- value = 2.0*gaussianExponentA*pow(gaussianExponentB, 0.5)*dy;
4470+ value = 2.0*gaussianExponentA*sqrt(gaussianExponentB)*dy;
44534471 value /= (gaussianExponentA+gaussianExponentB);
44544472 }
44554473 else if(valenceOrbitalA == s && valenceOrbitalB == pz){
4456- value = 2.0*gaussianExponentA*pow(gaussianExponentB, 0.5)*dz;
4474+ value = 2.0*gaussianExponentA*sqrt(gaussianExponentB)*dz;
44574475 value /= (gaussianExponentA+gaussianExponentB);
44584476 }
44594477
44604478 else if(valenceOrbitalA == px && valenceOrbitalB == s){
4461- value = -2.0*pow(gaussianExponentA, 0.5)*gaussianExponentB*dx;
4479+ value = -2.0*sqrt(gaussianExponentA)*gaussianExponentB*dx;
44624480 value /= (gaussianExponentA+gaussianExponentB);
44634481 }
44644482 else if(valenceOrbitalA == py && valenceOrbitalB == s){
4465- value = -2.0*pow(gaussianExponentA, 0.5)*gaussianExponentB*dy;
4483+ value = -2.0*sqrt(gaussianExponentA)*gaussianExponentB*dy;
44664484 value /= (gaussianExponentA+gaussianExponentB);
44674485 }
44684486 else if(valenceOrbitalA == pz && valenceOrbitalB == s){
4469- value = -2.0*pow(gaussianExponentA, 0.5)*gaussianExponentB*dz;
4487+ value = -2.0*sqrt(gaussianExponentA)*gaussianExponentB*dz;
44704488 value /= (gaussianExponentA+gaussianExponentB);
44714489 }
44724490
44734491 else if(valenceOrbitalA == px && valenceOrbitalB == px){
44744492 double temp = 0.0;
4475- temp = -1.0*pow(dx,2.0)*gaussianExponentA*gaussianExponentB;
4493+ temp = -1.0*(dx*dx)*gaussianExponentA*gaussianExponentB;
44764494 temp /= (gaussianExponentA+gaussianExponentB);
44774495 temp += 0.5;
4478- value = 4.0*pow(gaussianExponentA*gaussianExponentB, 0.5);
4496+ value = 4.0*sqrt(gaussianExponentA*gaussianExponentB);
44794497 value /= (gaussianExponentA+gaussianExponentB);
44804498 value *= temp;
44814499 }
44824500 else if(valenceOrbitalA == px && valenceOrbitalB == py){
4483- value = -4.0*pow(gaussianExponentA*gaussianExponentB, 1.5);
4484- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4501+ value = -4.0*gaussianExponentA*gaussianExponentB*sqrt(gaussianExponentA*gaussianExponentB);
4502+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
44854503 value *= dx*dy;
44864504 }
44874505 else if(valenceOrbitalA == px && valenceOrbitalB == pz){
4488- value = -4.0*pow(gaussianExponentA*gaussianExponentB, 1.5);
4489- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4506+ value = -4.0*gaussianExponentA*gaussianExponentB*sqrt(gaussianExponentA*gaussianExponentB);
4507+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
44904508 value *= dx*dz;
44914509 }
44924510
44934511 else if(valenceOrbitalA == py && valenceOrbitalB == px){
4494- value = -4.0*pow(gaussianExponentA*gaussianExponentB, 1.5);
4495- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4512+ value = -4.0*gaussianExponentA*gaussianExponentB*sqrt(gaussianExponentA*gaussianExponentB);
4513+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
44964514 value *= dy*dx;
44974515 }
44984516 else if(valenceOrbitalA == py && valenceOrbitalB == py){
44994517 double temp = 0.0;
4500- temp = -1.0*pow(dy,2.0)*gaussianExponentA*gaussianExponentB;
4518+ temp = -1.0*(dy*dy)*gaussianExponentA*gaussianExponentB;
45014519 temp /= (gaussianExponentA+gaussianExponentB);
45024520 temp += 0.5;
4503- value = 4.0*pow(gaussianExponentA*gaussianExponentB, 0.5);
4521+ value = 4.0*sqrt(gaussianExponentA*gaussianExponentB);
45044522 value /= (gaussianExponentA+gaussianExponentB);
45054523 value *= temp;
45064524 }
45074525 else if(valenceOrbitalA == py && valenceOrbitalB == pz){
4508- value = -4.0*pow(gaussianExponentA*gaussianExponentB, 1.5);
4509- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4526+ value = -4.0*gaussianExponentA*gaussianExponentB*sqrt(gaussianExponentA*gaussianExponentB);
4527+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
45104528 value *= dy*dz;
45114529 }
45124530
45134531 else if(valenceOrbitalA == pz && valenceOrbitalB == px){
4514- value = -4.0*pow(gaussianExponentA*gaussianExponentB, 1.5);
4515- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4532+ value = -4.0*gaussianExponentA*gaussianExponentB*sqrt(gaussianExponentA*gaussianExponentB);
4533+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
45164534 value *= dz*dx;
45174535 }
45184536 else if(valenceOrbitalA == pz && valenceOrbitalB == py){
4519- value = -4.0*pow(gaussianExponentA*gaussianExponentB, 1.5);
4520- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4537+ value = -4.0*gaussianExponentA*gaussianExponentB*sqrt(gaussianExponentA*gaussianExponentB);
4538+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
45214539 value *= dz*dy;
45224540 }
45234541 else if(valenceOrbitalA == pz && valenceOrbitalB == pz){
45244542 double temp = 0.0;
4525- temp = -1.0*pow(dz,2.0)*gaussianExponentA*gaussianExponentB;
4543+ temp = -1.0*(dz*dz)*gaussianExponentA*gaussianExponentB;
45264544 temp /= (gaussianExponentA+gaussianExponentB);
45274545 temp += 0.5;
4528- value = 4.0*pow(gaussianExponentA*gaussianExponentB, 0.5);
4546+ value = 4.0*sqrt(gaussianExponentA*gaussianExponentB);
45294547 value /= (gaussianExponentA+gaussianExponentB);
45304548 value *= temp;
45314549 }
45324550
45334551 else if(valenceOrbitalA == dxy && valenceOrbitalB == s){
45344552 value = 4.0*gaussianExponentA;
4535- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4553+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
45364554 value *= gaussianExponentB*dx;
45374555 value *= gaussianExponentB*dy;
45384556 }
45394557 else if(valenceOrbitalA == dyz && valenceOrbitalB == s){
45404558 value = 4.0*gaussianExponentA;
4541- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4559+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
45424560 value *= gaussianExponentB*dy;
45434561 value *= gaussianExponentB*dz;
45444562 }
45454563 else if(valenceOrbitalA == dzx && valenceOrbitalB == s){
45464564 value = 4.0*gaussianExponentA;
4547- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4565+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
45484566 value *= gaussianExponentB*dz;
45494567 value *= gaussianExponentB*dx;
45504568 }
45514569
45524570 else if(valenceOrbitalA == s && valenceOrbitalB == dxy){
45534571 value = 4.0*gaussianExponentB;
4554- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4572+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
45554573 value *= gaussianExponentA*dx;
45564574 value *= gaussianExponentA*dy;
45574575 }
45584576 else if(valenceOrbitalA == s && valenceOrbitalB == dyz){
45594577 value = 4.0*gaussianExponentB;
4560- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4578+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
45614579 value *= gaussianExponentA*dy;
45624580 value *= gaussianExponentA*dz;
45634581 }
45644582 else if(valenceOrbitalA == s && valenceOrbitalB == dzx){
45654583 value = 4.0*gaussianExponentB;
4566- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4584+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
45674585 value *= gaussianExponentA*dz;
45684586 value *= gaussianExponentA*dx;
45694587 }
@@ -4573,7 +4591,7 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
45734591 double temp2 = gaussianExponentB*dx*gaussianExponentA*dx*gaussianExponentB*dy;
45744592 temp2 /= gaussianExponentA+gaussianExponentB;
45754593 value = temp1 + temp2;
4576- value *= 8.0*gaussianExponentA*pow(gaussianExponentB, 0.5);
4594+ value *= 8.0*gaussianExponentA*sqrt(gaussianExponentB);
45774595 value /= pow(gaussianExponentA+gaussianExponentB, 2.0);
45784596 }
45794597 else if(valenceOrbitalA == dxy && valenceOrbitalB == py){
@@ -4581,7 +4599,7 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
45814599 double temp2 = gaussianExponentB*dy*gaussianExponentA*dy*gaussianExponentB*dx;
45824600 temp2 /= gaussianExponentA+gaussianExponentB;
45834601 value = temp1 + temp2;
4584- value *= 8.0*gaussianExponentA*pow(gaussianExponentB, 0.5);
4602+ value *= 8.0*gaussianExponentA*sqrt(gaussianExponentB);
45854603 value /= pow(gaussianExponentA+gaussianExponentB, 2.0);
45864604 }
45874605 else if(valenceOrbitalA == dyz && valenceOrbitalB == py){
@@ -4589,7 +4607,7 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
45894607 double temp2 = gaussianExponentB*dy*gaussianExponentA*dy*gaussianExponentB*dz;
45904608 temp2 /= gaussianExponentA+gaussianExponentB;
45914609 value = temp1 + temp2;
4592- value *= 8.0*gaussianExponentA*pow(gaussianExponentB, 0.5);
4610+ value *= 8.0*gaussianExponentA*sqrt(gaussianExponentB);
45934611 value /= pow(gaussianExponentA+gaussianExponentB, 2.0);
45944612 }
45954613 else if(valenceOrbitalA == dyz && valenceOrbitalB == pz){
@@ -4597,7 +4615,7 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
45974615 double temp2 = gaussianExponentB*dz*gaussianExponentA*dz*gaussianExponentB*dy;
45984616 temp2 /= gaussianExponentA+gaussianExponentB;
45994617 value = temp1 + temp2;
4600- value *= 8.0*gaussianExponentA*pow(gaussianExponentB, 0.5);
4618+ value *= 8.0*gaussianExponentA*sqrt(gaussianExponentB);
46014619 value /= pow(gaussianExponentA+gaussianExponentB, 2.0);
46024620 }
46034621 else if(valenceOrbitalA == dzx && valenceOrbitalB == pz){
@@ -4605,7 +4623,7 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
46054623 double temp2 = gaussianExponentB*dz*gaussianExponentA*dz*gaussianExponentB*dx;
46064624 temp2 /= gaussianExponentA+gaussianExponentB;
46074625 value = temp1 + temp2;
4608- value *= 8.0*gaussianExponentA*pow(gaussianExponentB, 0.5);
4626+ value *= 8.0*gaussianExponentA*sqrt(gaussianExponentB);
46094627 value /= pow(gaussianExponentA+gaussianExponentB, 2.0);
46104628 }
46114629 else if(valenceOrbitalA == dzx && valenceOrbitalB == px){
@@ -4613,7 +4631,7 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
46134631 double temp2 = gaussianExponentB*dx*gaussianExponentA*dx*gaussianExponentB*dz;
46144632 temp2 /= gaussianExponentA+gaussianExponentB;
46154633 value = temp1 + temp2;
4616- value *= 8.0*gaussianExponentA*pow(gaussianExponentB, 0.5);
4634+ value *= 8.0*gaussianExponentA*sqrt(gaussianExponentB);
46174635 value /= pow(gaussianExponentA+gaussianExponentB, 2.0);
46184636 }
46194637
@@ -4622,7 +4640,7 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
46224640 double temp2 = -1.0*gaussianExponentA*dx*gaussianExponentB*dx*gaussianExponentA*dy;
46234641 temp2 /= gaussianExponentA+gaussianExponentB;
46244642 value = temp1 + temp2;
4625- value *= 8.0*gaussianExponentB*pow(gaussianExponentA, 0.5);
4643+ value *= 8.0*gaussianExponentB*sqrt(gaussianExponentA);
46264644 value /= pow(gaussianExponentA+gaussianExponentB, 2.0);
46274645 }
46284646 else if(valenceOrbitalA == py && valenceOrbitalB == dxy){
@@ -4630,7 +4648,7 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
46304648 double temp2 = -1.0*gaussianExponentA*dy*gaussianExponentB*dy*gaussianExponentA*dx;
46314649 temp2 /= gaussianExponentA+gaussianExponentB;
46324650 value = temp1 + temp2;
4633- value *= 8.0*gaussianExponentB*pow(gaussianExponentA, 0.5);
4651+ value *= 8.0*gaussianExponentB*sqrt(gaussianExponentA);
46344652 value /= pow(gaussianExponentA+gaussianExponentB, 2.0);
46354653 }
46364654 else if(valenceOrbitalA == py && valenceOrbitalB == dyz){
@@ -4638,7 +4656,7 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
46384656 double temp2 = -1.0*gaussianExponentA*dy*gaussianExponentB*dy*gaussianExponentA*dz;
46394657 temp2 /= gaussianExponentA+gaussianExponentB;
46404658 value = temp1 + temp2;
4641- value *= 8.0*gaussianExponentB*pow(gaussianExponentA, 0.5);
4659+ value *= 8.0*gaussianExponentB*sqrt(gaussianExponentA);
46424660 value /= pow(gaussianExponentA+gaussianExponentB, 2.0);
46434661 }
46444662 else if(valenceOrbitalA == pz && valenceOrbitalB == dyz){
@@ -4646,7 +4664,7 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
46464664 double temp2 = -1.0*gaussianExponentA*dz*gaussianExponentB*dz*gaussianExponentA*dy;
46474665 temp2 /= gaussianExponentA+gaussianExponentB;
46484666 value = temp1 + temp2;
4649- value *= 8.0*gaussianExponentB*pow(gaussianExponentA, 0.5);
4667+ value *= 8.0*gaussianExponentB*sqrt(gaussianExponentA);
46504668 value /= pow(gaussianExponentA+gaussianExponentB, 2.0);
46514669 }
46524670 else if(valenceOrbitalA == pz && valenceOrbitalB == dzx){
@@ -4654,7 +4672,7 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
46544672 double temp2 = -1.0*gaussianExponentA*dz*gaussianExponentB*dz*gaussianExponentA*dx;
46554673 temp2 /= gaussianExponentA+gaussianExponentB;
46564674 value = temp1 + temp2;
4657- value *= 8.0*gaussianExponentB*pow(gaussianExponentA, 0.5);
4675+ value *= 8.0*gaussianExponentB*sqrt(gaussianExponentA);
46584676 value /= pow(gaussianExponentA+gaussianExponentB, 2.0);
46594677 }
46604678 else if(valenceOrbitalA == px && valenceOrbitalB == dzx){
@@ -4662,170 +4680,170 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
46624680 double temp2 = -1.0*gaussianExponentA*dx*gaussianExponentB*dx*gaussianExponentA*dz;
46634681 temp2 /= gaussianExponentA+gaussianExponentB;
46644682 value = temp1 + temp2;
4665- value *= 8.0*gaussianExponentB*pow(gaussianExponentA, 0.5);
4683+ value *= 8.0*gaussianExponentB*sqrt(gaussianExponentA);
46664684 value /= pow(gaussianExponentA+gaussianExponentB, 2.0);
46674685 }
46684686
46694687 else if(valenceOrbitalA == dxy && valenceOrbitalB == pz){
4670- value = 8.0*gaussianExponentA*pow(gaussianExponentB, 0.5);
4688+ value = 8.0*gaussianExponentA*sqrt(gaussianExponentB);
46714689 value /= pow(gaussianExponentA+gaussianExponentB, 3.0);
46724690 value *= gaussianExponentB*dx*gaussianExponentB*dy*gaussianExponentA*dz;
46734691 }
46744692 else if(valenceOrbitalA == dyz && valenceOrbitalB == px){
4675- value = 8.0*gaussianExponentA*pow(gaussianExponentB, 0.5);
4693+ value = 8.0*gaussianExponentA*sqrt(gaussianExponentB);
46764694 value /= pow(gaussianExponentA+gaussianExponentB, 3.0);
46774695 value *= gaussianExponentB*dy*gaussianExponentB*dz*gaussianExponentA*dx;
46784696 }
46794697 else if(valenceOrbitalA == dzx && valenceOrbitalB == py){
4680- value = 8.0*gaussianExponentA*pow(gaussianExponentB, 0.5);
4698+ value = 8.0*gaussianExponentA*sqrt(gaussianExponentB);
46814699 value /= pow(gaussianExponentA+gaussianExponentB, 3.0);
46824700 value *= gaussianExponentB*dz*gaussianExponentB*dx*gaussianExponentA*dy;
46834701 }
46844702
46854703 else if(valenceOrbitalA == pz && valenceOrbitalB == dxy){
4686- value = -8.0*gaussianExponentB*pow(gaussianExponentA, 0.5);
4704+ value = -8.0*gaussianExponentB*sqrt(gaussianExponentA);
46874705 value /= pow(gaussianExponentA+gaussianExponentB, 3.0);
46884706 value *= gaussianExponentA*dx*gaussianExponentA*dy*gaussianExponentB*dz;
46894707 }
46904708 else if(valenceOrbitalA == px && valenceOrbitalB == dyz){
4691- value = -8.0*gaussianExponentB*pow(gaussianExponentA, 0.5);
4709+ value = -8.0*gaussianExponentB*sqrt(gaussianExponentA);
46924710 value /= pow(gaussianExponentA+gaussianExponentB, 3.0);
46934711 value *= gaussianExponentA*dy*gaussianExponentA*dz*gaussianExponentB*dx;
46944712 }
46954713 else if(valenceOrbitalA == py && valenceOrbitalB == dzx){
4696- value = -8.0*gaussianExponentB*pow(gaussianExponentA, 0.5);
4714+ value = -8.0*gaussianExponentB*sqrt(gaussianExponentA);
46974715 value /= pow(gaussianExponentA+gaussianExponentB, 3.0);
46984716 value *= gaussianExponentA*dz*gaussianExponentA*dx*gaussianExponentB*dy;
46994717 }
47004718
47014719 else if(valenceOrbitalA == dxxyy && valenceOrbitalB == s){
47024720 value = 2.0*gaussianExponentA;
4703- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4704- value *= pow(gaussianExponentB*dx, 2.0) - pow(gaussianExponentB*dy, 2.0);
4721+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
4722+ value *= (gaussianExponentB*gaussianExponentB*dx*dx) - (gaussianExponentB*gaussianExponentB*dy*dy);
47054723 }
47064724 else if(valenceOrbitalA == s && valenceOrbitalB == dxxyy){
47074725 value = 2.0*gaussianExponentB;
4708- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4709- value *= pow(gaussianExponentA*dx, 2.0) - pow(gaussianExponentA*dy, 2.0);
4726+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
4727+ value *= (gaussianExponentA*gaussianExponentA*dx*dx) - (gaussianExponentA*gaussianExponentA*dy*dy);
47104728 }
47114729 else if(valenceOrbitalA == dxxyy && valenceOrbitalB == px){
47124730 value = gaussianExponentB*dx;
4713- value -= pow(gaussianExponentB*dx, 2.0)*gaussianExponentA*dx/(gaussianExponentA+gaussianExponentB);
4714- value += pow(gaussianExponentB*dy, 2.0)*gaussianExponentA*dx/(gaussianExponentA+gaussianExponentB);
4715- value *= -4.0*gaussianExponentA*pow(gaussianExponentB, 0.5);
4731+ value -= (gaussianExponentB*gaussianExponentB*dx*dx)*gaussianExponentA*dx/(gaussianExponentA+gaussianExponentB);
4732+ value += (gaussianExponentB*gaussianExponentB*dy*dy)*gaussianExponentA*dx/(gaussianExponentA+gaussianExponentB);
4733+ value *= -4.0*gaussianExponentA*sqrt(gaussianExponentB);
47164734 value /= pow(gaussianExponentA+gaussianExponentB, 2.0);
47174735 }
47184736 else if(valenceOrbitalA == px && valenceOrbitalB == dxxyy){
47194737 value = gaussianExponentA*dx;
4720- value -= pow(gaussianExponentA*dx, 2.0)*gaussianExponentB*dx/(gaussianExponentA+gaussianExponentB);
4721- value += pow(gaussianExponentA*dy, 2.0)*gaussianExponentB*dx/(gaussianExponentA+gaussianExponentB);
4722- value *= 4.0*gaussianExponentB*pow(gaussianExponentA, 0.5);
4738+ value -= (gaussianExponentA*gaussianExponentA*dx*dx)*gaussianExponentB*dx/(gaussianExponentA+gaussianExponentB);
4739+ value += (gaussianExponentA*gaussianExponentA*dy*dy)*gaussianExponentB*dx/(gaussianExponentA+gaussianExponentB);
4740+ value *= 4.0*gaussianExponentB*sqrt(gaussianExponentA);
47234741 value /= pow(gaussianExponentA+gaussianExponentB, 2.0);
47244742 }
47254743 else if(valenceOrbitalA == dxxyy && valenceOrbitalB == py){
47264744 value = gaussianExponentB*dy;
4727- value += pow(gaussianExponentB*dx, 2.0)*gaussianExponentA*dy/(gaussianExponentA+gaussianExponentB);
4728- value -= pow(gaussianExponentB*dy, 2.0)*gaussianExponentA*dy/(gaussianExponentA+gaussianExponentB);
4729- value *= 4.0*gaussianExponentA*pow(gaussianExponentB, 0.5);
4745+ value += (gaussianExponentB*gaussianExponentB*dx*dx)*gaussianExponentA*dy/(gaussianExponentA+gaussianExponentB);
4746+ value -= (gaussianExponentB*gaussianExponentB*dy*dy)*gaussianExponentA*dy/(gaussianExponentA+gaussianExponentB);
4747+ value *= 4.0*gaussianExponentA*sqrt(gaussianExponentB);
47304748 value /= pow(gaussianExponentA+gaussianExponentB, 2.0);
47314749 }
47324750 else if(valenceOrbitalA == py && valenceOrbitalB == dxxyy){
47334751 value = gaussianExponentA*dy;
4734- value += pow(gaussianExponentA*dx, 2.0)*gaussianExponentB*dy/(gaussianExponentA+gaussianExponentB);
4735- value -= pow(gaussianExponentA*dy, 2.0)*gaussianExponentB*dy/(gaussianExponentA+gaussianExponentB);
4736- value *= -4.0*gaussianExponentB*pow(gaussianExponentA, 0.5);
4752+ value += (gaussianExponentA*gaussianExponentA*dx*dx)*gaussianExponentB*dy/(gaussianExponentA+gaussianExponentB);
4753+ value -= (gaussianExponentA*gaussianExponentA*dy*dy)*gaussianExponentB*dy/(gaussianExponentA+gaussianExponentB);
4754+ value *= -4.0*gaussianExponentB*sqrt(gaussianExponentA);
47374755 value /= pow(gaussianExponentA+gaussianExponentB, 2.0);
47384756 }
47394757 else if(valenceOrbitalA == dxxyy && valenceOrbitalB == pz){
4740- value = pow(gaussianExponentB*dx, 2.0) - pow(gaussianExponentB*dy, 2.0);
4758+ value = (gaussianExponentB*gaussianExponentB*dx*dx) - (gaussianExponentB*gaussianExponentB*dy*dy);
47414759 value *= gaussianExponentA*dz;
4742- value *= 4.0*gaussianExponentA*pow(gaussianExponentB, 0.5);
4760+ value *= 4.0*gaussianExponentA*sqrt(gaussianExponentB);
47434761 value /= pow(gaussianExponentA+gaussianExponentB, 3.0);
47444762 }
47454763 else if(valenceOrbitalA == pz && valenceOrbitalB == dxxyy){
4746- value = pow(gaussianExponentA*dx, 2.0) - pow(gaussianExponentA*dy, 2.0);
4764+ value = (gaussianExponentA*gaussianExponentA*dx*dx) - (gaussianExponentA*gaussianExponentA*dy*dy);
47474765 value *= gaussianExponentB*dz;
4748- value *= -4.0*gaussianExponentB*pow(gaussianExponentA, 0.5);
4766+ value *= -4.0*gaussianExponentB*sqrt(gaussianExponentA);
47494767 value /= pow(gaussianExponentA+gaussianExponentB, 3.0);
47504768 }
47514769
47524770 else if(valenceOrbitalA == dzz && valenceOrbitalB == s){
47534771 double temp = 0.0;
4754- temp = 2.0*pow(gaussianExponentB*dz, 2.0)
4755- - pow(gaussianExponentB*dx, 2.0)
4756- - pow(gaussianExponentB*dy, 2.0);
4772+ temp = 2.0*(gaussianExponentB*gaussianExponentB*dz*dz)
4773+ - (gaussianExponentB*gaussianExponentB*dx*dx)
4774+ - (gaussianExponentB*gaussianExponentB*dy*dy);
47574775 value = 2.0*gaussianExponentA/sqrt(3.0);
4758- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4776+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
47594777 value *= temp;
47604778 }
47614779 else if(valenceOrbitalA == s && valenceOrbitalB == dzz){
47624780 double temp = 0.0;
4763- temp = 2.0*pow(gaussianExponentA*dz, 2.0)
4764- - pow(gaussianExponentA*dx, 2.0)
4765- - pow(gaussianExponentA*dy, 2.0);
4781+ temp = 2.0*(gaussianExponentA*gaussianExponentA*dz*dz)
4782+ - (gaussianExponentA*gaussianExponentA*dx*dx)
4783+ - (gaussianExponentA*gaussianExponentA*dy*dy);
47664784 value = 2.0*gaussianExponentB/sqrt(3.0);
4767- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4785+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
47684786 value *= temp;
47694787 }
47704788 else if(valenceOrbitalA == dzz && valenceOrbitalB == px){
47714789 double temp = 0.0;
47724790 temp = gaussianExponentB*dx;
4773- temp += 2.0*pow(gaussianExponentB*dz, 2.0)*gaussianExponentA*dx/(gaussianExponentA+gaussianExponentB);
4774- temp -= pow(gaussianExponentB*dx, 2.0)*gaussianExponentA*dx/(gaussianExponentA+gaussianExponentB);
4775- temp -= pow(gaussianExponentB*dy, 2.0)*gaussianExponentA*dx/(gaussianExponentA+gaussianExponentB);
4791+ temp += 2.0*(gaussianExponentB*gaussianExponentB*dz*dz)*gaussianExponentA*dx/(gaussianExponentA+gaussianExponentB);
4792+ temp -= (gaussianExponentB*gaussianExponentB*dx*dx)*gaussianExponentA*dx/(gaussianExponentA+gaussianExponentB);
4793+ temp -= (gaussianExponentB*gaussianExponentB*dy*dy)*gaussianExponentA*dx/(gaussianExponentA+gaussianExponentB);
47764794 value = temp;
4777- value *= 4.0*gaussianExponentA*pow(gaussianExponentB, 0.5)/sqrt(3.0);
4778- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4795+ value *= 4.0*gaussianExponentA*sqrt(gaussianExponentB)/sqrt(3.0);
4796+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
47794797 }
47804798 else if(valenceOrbitalA == px && valenceOrbitalB == dzz){
47814799 double temp = 0.0;
47824800 temp = gaussianExponentA*dx;
4783- temp += 2.0*pow(gaussianExponentA*dz, 2.0)*gaussianExponentB*dx/(gaussianExponentA+gaussianExponentB);
4784- temp -= pow(gaussianExponentA*dx, 2.0)*gaussianExponentB*dx/(gaussianExponentA+gaussianExponentB);
4785- temp -= pow(gaussianExponentA*dy, 2.0)*gaussianExponentB*dx/(gaussianExponentA+gaussianExponentB);
4801+ temp += 2.0*(gaussianExponentA*gaussianExponentA*dz*dz)*gaussianExponentB*dx/(gaussianExponentA+gaussianExponentB);
4802+ temp -= (gaussianExponentA*gaussianExponentA*dx*dx)*gaussianExponentB*dx/(gaussianExponentA+gaussianExponentB);
4803+ temp -= (gaussianExponentA*gaussianExponentA*dy*dy)*gaussianExponentB*dx/(gaussianExponentA+gaussianExponentB);
47864804 value = temp;
4787- value *= -4.0*gaussianExponentB*pow(gaussianExponentA, 0.5)/sqrt(3.0);
4788- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4805+ value *= -4.0*gaussianExponentB*sqrt(gaussianExponentA)/sqrt(3.0);
4806+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
47894807 }
47904808 else if(valenceOrbitalA == dzz && valenceOrbitalB == py){
47914809 double temp = 0.0;
47924810 temp = gaussianExponentB*dy;
4793- temp += 2.0*pow(gaussianExponentB*dz, 2.0)*gaussianExponentA*dy/(gaussianExponentA+gaussianExponentB);
4794- temp -= pow(gaussianExponentB*dx, 2.0)*gaussianExponentA*dy/(gaussianExponentA+gaussianExponentB);
4795- temp -= pow(gaussianExponentB*dy, 2.0)*gaussianExponentA*dy/(gaussianExponentA+gaussianExponentB);
4811+ temp += 2.0*(gaussianExponentB*gaussianExponentB*dz*dz)*gaussianExponentA*dy/(gaussianExponentA+gaussianExponentB);
4812+ temp -= (gaussianExponentB*gaussianExponentB*dx*dx)*gaussianExponentA*dy/(gaussianExponentA+gaussianExponentB);
4813+ temp -= (gaussianExponentB*gaussianExponentB*dy*dy)*gaussianExponentA*dy/(gaussianExponentA+gaussianExponentB);
47964814 value = temp;
4797- value *= 4.0*gaussianExponentA*pow(gaussianExponentB, 0.5)/sqrt(3.0);
4798- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4815+ value *= 4.0*gaussianExponentA*sqrt(gaussianExponentB)/sqrt(3.0);
4816+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
47994817 }
48004818 else if(valenceOrbitalA == py && valenceOrbitalB == dzz){
48014819 double temp = 0.0;
48024820 temp = gaussianExponentA*dy;
4803- temp += 2.0*pow(gaussianExponentA*dz, 2.0)*gaussianExponentB*dy/(gaussianExponentA+gaussianExponentB);
4804- temp -= pow(gaussianExponentA*dx, 2.0)*gaussianExponentB*dy/(gaussianExponentA+gaussianExponentB);
4805- temp -= pow(gaussianExponentA*dy, 2.0)*gaussianExponentB*dy/(gaussianExponentA+gaussianExponentB);
4821+ temp += 2.0*(gaussianExponentA*gaussianExponentA*dz*dz)*gaussianExponentB*dy/(gaussianExponentA+gaussianExponentB);
4822+ temp -= (gaussianExponentA*gaussianExponentA*dx*dx)*gaussianExponentB*dy/(gaussianExponentA+gaussianExponentB);
4823+ temp -= (gaussianExponentA*gaussianExponentA*dy*dy)*gaussianExponentB*dy/(gaussianExponentA+gaussianExponentB);
48064824 value = temp;
4807- value *= -4.0*gaussianExponentB*pow(gaussianExponentA, 0.5)/sqrt(3.0);
4808- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4825+ value *= -4.0*gaussianExponentB*sqrt(gaussianExponentA)/sqrt(3.0);
4826+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
48094827 }
48104828 else if(valenceOrbitalA == dzz && valenceOrbitalB == pz){
48114829 double temp = 0.0;
48124830 temp = -2.0*gaussianExponentB*dz;
4813- temp += 2.0*pow(gaussianExponentB*dz, 2.0)*gaussianExponentA*dz/(gaussianExponentA+gaussianExponentB);
4814- temp -= pow(gaussianExponentB*dx, 2.0)*gaussianExponentA*dz/(gaussianExponentA+gaussianExponentB);
4815- temp -= pow(gaussianExponentB*dy, 2.0)*gaussianExponentA*dz/(gaussianExponentA+gaussianExponentB);
4831+ temp += 2.0*(gaussianExponentB*gaussianExponentB*dz*dz)*gaussianExponentA*dz/(gaussianExponentA+gaussianExponentB);
4832+ temp -= (gaussianExponentB*gaussianExponentB*dx*dx)*gaussianExponentA*dz/(gaussianExponentA+gaussianExponentB);
4833+ temp -= (gaussianExponentB*gaussianExponentB*dy*dy)*gaussianExponentA*dz/(gaussianExponentA+gaussianExponentB);
48164834 value = temp;
4817- value *= 4.0*gaussianExponentA*pow(gaussianExponentB, 0.5)/sqrt(3.0);
4818- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4835+ value *= 4.0*gaussianExponentA*sqrt(gaussianExponentB)/sqrt(3.0);
4836+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
48194837 }
48204838 else if(valenceOrbitalA == pz && valenceOrbitalB == dzz){
48214839 double temp = 0.0;
48224840 temp = -2.0*gaussianExponentA*dz;
4823- temp += 2.0*pow(gaussianExponentA*dz, 2.0)*gaussianExponentB*dz/(gaussianExponentA+gaussianExponentB);
4824- temp -= pow(gaussianExponentA*dx, 2.0)*gaussianExponentB*dz/(gaussianExponentA+gaussianExponentB);
4825- temp -= pow(gaussianExponentA*dy, 2.0)*gaussianExponentB*dz/(gaussianExponentA+gaussianExponentB);
4841+ temp += 2.0*(gaussianExponentA*gaussianExponentA*dz*dz)*gaussianExponentB*dz/(gaussianExponentA+gaussianExponentB);
4842+ temp -= (gaussianExponentA*gaussianExponentA*dx*dx)*gaussianExponentB*dz/(gaussianExponentA+gaussianExponentB);
4843+ temp -= (gaussianExponentA*gaussianExponentA*dy*dy)*gaussianExponentB*dz/(gaussianExponentA+gaussianExponentB);
48264844 value = temp;
4827- value *= -4.0*gaussianExponentB*pow(gaussianExponentA, 0.5)/sqrt(3.0);
4828- value *= pow(gaussianExponentA+gaussianExponentB, -2.0);
4845+ value *= -4.0*gaussianExponentB*sqrt(gaussianExponentA)/sqrt(3.0);
4846+ value /= (gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB);
48294847 }
48304848
48314849 else if(valenceOrbitalA == dxy && valenceOrbitalB == dxy){
@@ -4834,9 +4852,9 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
48344852 temp -= 0.5*gaussianExponentB*dy*gaussianExponentA*dy/(gaussianExponentA+gaussianExponentB);
48354853 temp += gaussianExponentB*dx*gaussianExponentA*dx
48364854 *gaussianExponentB*dy*gaussianExponentA*dy
4837- *pow(gaussianExponentA+gaussianExponentB, -2.0);
4855+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
48384856 value = 16.0*temp*gaussianExponentA*gaussianExponentB
4839- *pow(gaussianExponentA+gaussianExponentB, -2.0);
4857+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
48404858 }
48414859 else if(valenceOrbitalA == dyz && valenceOrbitalB == dyz){
48424860 double temp = 0.25;
@@ -4844,9 +4862,9 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
48444862 temp -= 0.5*gaussianExponentB*dz*gaussianExponentA*dz/(gaussianExponentA+gaussianExponentB);
48454863 temp += gaussianExponentB*dy*gaussianExponentA*dy
48464864 *gaussianExponentB*dz*gaussianExponentA*dz
4847- *pow(gaussianExponentA+gaussianExponentB, -2.0);
4865+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
48484866 value = 16.0*temp*gaussianExponentA*gaussianExponentB
4849- *pow(gaussianExponentA+gaussianExponentB, -2.0);
4867+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
48504868 }
48514869 else if(valenceOrbitalA == dzx && valenceOrbitalB == dzx){
48524870 double temp = 0.25;
@@ -4854,42 +4872,41 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
48544872 temp -= 0.5*gaussianExponentB*dx*gaussianExponentA*dx/(gaussianExponentA+gaussianExponentB);
48554873 temp += gaussianExponentB*dz*gaussianExponentA*dz
48564874 *gaussianExponentB*dx*gaussianExponentA*dx
4857- *pow(gaussianExponentA+gaussianExponentB, -2.0);
4875+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
48584876 value = 16.0*temp*gaussianExponentA*gaussianExponentB
4859- *pow(gaussianExponentA+gaussianExponentB, -2.0);
4877+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
48604878 }
48614879 else if(valenceOrbitalA == dxxyy && valenceOrbitalB == dxxyy){
48624880 double temp1 = 1.0;
48634881 temp1 -= 2.0*gaussianExponentB*dx*gaussianExponentA*dx/(gaussianExponentA+gaussianExponentB);
48644882 temp1 -= 2.0*gaussianExponentB*dy*gaussianExponentA*dy/(gaussianExponentA+gaussianExponentB);
4865- double temp2 = gaussianExponentA*gaussianExponentB*(pow(dx,2.0)-pow(dy,2.0))
4883+ double temp2 = gaussianExponentA*gaussianExponentB*((dx*dx)-(dy*dy))
48664884 /(gaussianExponentA+gaussianExponentB);
48674885 temp1 += pow(temp2,2.0);
48684886 value = 4.0*temp1*gaussianExponentA*gaussianExponentB
4869- *pow(gaussianExponentA+gaussianExponentB, -2.0);
4887+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
48704888 }
48714889 else if(valenceOrbitalA == dzz && valenceOrbitalB == dzz){
48724890 double temp = 3.0;
48734891 temp -= gaussianExponentA*gaussianExponentB
48744892 /(gaussianExponentA+gaussianExponentB)
4875- *(8.0*pow(dz,2.0)+2.0*pow(dx,2.0)+2.0*pow(dy,2.0));
4893+ *(8.0*(dz*dz)+2.0*(dx*dx)+2.0*(dy*dy));
48764894 temp += pow(gaussianExponentA*gaussianExponentB,2.0)
4877- *pow(gaussianExponentA+gaussianExponentB, -2.0)
4878- *(4.0*pow(dz,4.0)
4879- +pow(dx,4.0)
4880- +pow(dy,4.0)
4881- -4.0*pow(dx*dz,2.0)
4882- -4.0*pow(dy*dz,2.0)
4883- +2.0*pow(dx*dy,2.0));
4895+ *(4.0*(dz*dz*dz*dz)
4896+ +(dx*dx*dx*dx)
4897+ +(dy*dy*dy*dy)
4898+ -4.0*(dx*dx*dz*dz)
4899+ -4.0*(dy*dy*dz*dz)
4900+ +2.0*(dx*dx*dy*dy))
4901+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
48844902 value = 4.0*temp*gaussianExponentA*gaussianExponentB
4885- *pow(gaussianExponentA+gaussianExponentB, -2.0)
4886- /3.0;
4903+ /(3.0*(gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
48874904 }
48884905
48894906 else if((valenceOrbitalA == dxy && valenceOrbitalB == dyz) ||
48904907 (valenceOrbitalA == dyz && valenceOrbitalB == dxy)){
48914908 double temp = 0.5;
4892- temp -= gaussianExponentA*gaussianExponentB*pow(dy,2.0)/(gaussianExponentA+gaussianExponentB);
4909+ temp -= gaussianExponentA*gaussianExponentB*(dy*dy)/(gaussianExponentA+gaussianExponentB);
48934910 value = -16.0*pow(gaussianExponentA*gaussianExponentB,2.0)
48944911 *pow(gaussianExponentA+gaussianExponentB,-3.0)
48954912 *dx*dz*temp;
@@ -4897,7 +4914,7 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
48974914 else if((valenceOrbitalA == dyz && valenceOrbitalB == dzx) ||
48984915 (valenceOrbitalA == dzx && valenceOrbitalB == dyz)){
48994916 double temp = 0.5;
4900- temp -= gaussianExponentA*gaussianExponentB*pow(dz,2.0)/(gaussianExponentA+gaussianExponentB);
4917+ temp -= gaussianExponentA*gaussianExponentB*(dz*dz)/(gaussianExponentA+gaussianExponentB);
49014918 value = -16.0*pow(gaussianExponentA*gaussianExponentB,2.0)
49024919 *pow(gaussianExponentA+gaussianExponentB,-3.0)
49034920 *dy*dx*temp;
@@ -4905,7 +4922,7 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
49054922 else if((valenceOrbitalA == dzx && valenceOrbitalB == dxy) ||
49064923 (valenceOrbitalA == dxy && valenceOrbitalB == dzx)){
49074924 double temp = 0.5;
4908- temp -= gaussianExponentA*gaussianExponentB*pow(dx,2.0)/(gaussianExponentA+gaussianExponentB);
4925+ temp -= gaussianExponentA*gaussianExponentB*(dx*dx)/(gaussianExponentA+gaussianExponentB);
49094926 value = -16.0*pow(gaussianExponentA*gaussianExponentB,2.0)
49104927 *pow(gaussianExponentA+gaussianExponentB,-3.0)
49114928 *dz*dy*temp;
@@ -4922,7 +4939,7 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
49224939 double temp = 2.0*gaussianExponentA*gaussianExponentB;
49234940 value = pow(temp,3.0)*(dy*dz*(gaussianExponentA+gaussianExponentB)
49244941 /(gaussianExponentA*gaussianExponentB)
4925- +(pow(dx,2.0)*dy*dz - pow(dy,3.0)*dz))
4942+ +((dx*dx)*dy*dz - pow(dy,3.0)*dz))
49264943 *pow(gaussianExponentA+gaussianExponentB,-4.0);
49274944 }
49284945 else if((valenceOrbitalA == dxxyy && valenceOrbitalB == dzx) ||
@@ -4930,13 +4947,13 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
49304947 double temp = 2.0*gaussianExponentA*gaussianExponentB;
49314948 value = -1.0*pow(temp,3.0)*(dx*dz*(gaussianExponentA+gaussianExponentB)
49324949 /(gaussianExponentA*gaussianExponentB)
4933- +(pow(dy,2.0)*dx*dz - pow(dx,3.0)*dz))
4950+ +((dy*dy)*dx*dz - pow(dx,3.0)*dz))
49344951 *pow(gaussianExponentA+gaussianExponentB,-4.0);
49354952 }
49364953
49374954 else if((valenceOrbitalA == dzz && valenceOrbitalB == dxy) ||
49384955 (valenceOrbitalA == dxy && valenceOrbitalB == dzz)){
4939- double temp = 2.0*dx*dy*pow(dz,2.0) - pow(dx,3.0)*dy - dx*pow(dy,3.0);
4956+ double temp = 2.0*dx*dy*(dz*dz) - pow(dx,3.0)*dy - dx*pow(dy,3.0);
49404957 temp *= gaussianExponentA*gaussianExponentB/(gaussianExponentA+gaussianExponentB);
49414958 temp += 2.0*dx*dy;
49424959 value = 8.0*pow(gaussianExponentA*gaussianExponentB,2.0)*temp;
@@ -4945,7 +4962,7 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
49454962 else if((valenceOrbitalA == dzz && valenceOrbitalB == dyz) ||
49464963 (valenceOrbitalA == dyz && valenceOrbitalB == dzz)){
49474964 double temp1 = -1.0*dy*dz;
4948- double temp2 = 2.0*dy*pow(dz,3.0) - pow(dy,3.0)*dz - pow(dx,2.0)*dy*dz;
4965+ double temp2 = 2.0*dy*pow(dz,3.0) - pow(dy,3.0)*dz - (dx*dx)*dy*dz;
49494966 temp2 *= gaussianExponentA*gaussianExponentB/(gaussianExponentA+gaussianExponentB);
49504967 temp1 += temp2;
49514968 value = 8.0*pow(gaussianExponentA*gaussianExponentB,2.0)*temp1;
@@ -4954,7 +4971,7 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
49544971 else if((valenceOrbitalA == dzz && valenceOrbitalB == dzx) ||
49554972 (valenceOrbitalA == dzx && valenceOrbitalB == dzz)){
49564973 double temp1 = -1.0*dx*dz;
4957- double temp2 = 2.0*dx*pow(dz,3.0) - pow(dx,3.0)*dz - pow(dy,2.0)*dx*dz;
4974+ double temp2 = 2.0*dx*pow(dz,3.0) - pow(dx,3.0)*dz - (dy*dy)*dx*dz;
49584975 temp2 *= gaussianExponentA*gaussianExponentB/(gaussianExponentA+gaussianExponentB);
49594976 temp1 += temp2;
49604977 value = 8.0*pow(gaussianExponentA*gaussianExponentB,2.0)*temp1;
@@ -4962,12 +4979,12 @@ double Cndo2::GetGaussianOverlapAOs(AtomType atomTypeA,
49624979 }
49634980 else if((valenceOrbitalA == dxxyy && valenceOrbitalB == dzz) ||
49644981 (valenceOrbitalA == dzz && valenceOrbitalB == dxxyy)){
4965- double temp = 2.0*pow(dz,2.0)-pow(dx,2.0)-pow(dy,2.0);
4982+ double temp = 2.0*(dz*dz)-(dx*dx)-(dy*dy);
49664983 temp *= gaussianExponentA*gaussianExponentB/(gaussianExponentA+gaussianExponentB);
49674984 temp += 2.0;
49684985 value = 4.0*pow(gaussianExponentA*gaussianExponentB,2.0);
49694986 value /= sqrt(3.0)*pow(gaussianExponentA+gaussianExponentB,3.0);
4970- value *= (pow(dx,2.0)-pow(dy,2.0))*temp;
4987+ value *= ((dx*dx)-(dy*dy))*temp;
49714988 }
49724989
49734990 else{
@@ -5000,7 +5017,7 @@ double Cndo2::GetOverlapAOsElement1stDerivativeByGTOExpansion(const Atom& atomA,
50005017 double dx = atomA.GetXyz()[XAxis] - atomB.GetXyz()[XAxis];
50015018 double dy = atomA.GetXyz()[YAxis] - atomB.GetXyz()[YAxis];
50025019 double dz = atomA.GetXyz()[ZAxis] - atomB.GetXyz()[ZAxis];
5003- double rAB = sqrt( pow(dx, 2.0) + pow(dy, 2.0) + pow(dz,2.0) );
5020+ double rAB = sqrt( dx*dx + dy*dy + dz*dz );
50045021 ShellType shellTypeA = atomA.GetValenceShellType();
50055022 ShellType shellTypeB = atomB.GetValenceShellType();
50065023 OrbitalType valenceOrbitalA = atomA.GetValence(valenceIndexA);
@@ -5025,12 +5042,12 @@ double Cndo2::GetOverlapAOsElement1stDerivativeByGTOExpansion(const Atom& atomA,
50255042 shellTypeB,
50265043 valenceOrbitalB,
50275044 j);
5028- gaussianExponentA = pow(orbitalExponentA, 2.0)
5045+ gaussianExponentA = (orbitalExponentA*orbitalExponentA)
50295046 *GTOExpansionSTO::GetInstance()->GetExponent(stonG,
50305047 shellTypeA,
50315048 valenceOrbitalA,
50325049 i);
5033- gaussianExponentB = pow(orbitalExponentB, 2.0)
5050+ gaussianExponentB = (orbitalExponentB*orbitalExponentB)
50345051 *GTOExpansionSTO::GetInstance()->GetExponent(stonG,
50355052 shellTypeB,
50365053 valenceOrbitalB,
@@ -5079,10 +5096,10 @@ double Cndo2::GetGaussianOverlapAOs1stDerivative(AtomType atomTypeA,
50795096 }
50805097 }
50815098 else if(valenceOrbitalA == s && valenceOrbitalB == px){
5082- double temp1 = 4.0*pow(gaussianExponentA,2.0)*pow(gaussianExponentB, 1.5)
5083- /pow(gaussianExponentA+gaussianExponentB,2.0);
5099+ double temp1 = 4.0*(gaussianExponentA*gaussianExponentA)*gaussianExponentB*sqrt(gaussianExponentB)
5100+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
50845101 if(axisA == XAxis){
5085- double temp2 = 2.0*gaussianExponentA*pow(gaussianExponentB, 0.5)
5102+ double temp2 = 2.0*gaussianExponentA*sqrt(gaussianExponentB)
50865103 /(gaussianExponentA+gaussianExponentB);
50875104 value = temp2-temp1*dx*dx;
50885105 }
@@ -5094,13 +5111,13 @@ double Cndo2::GetGaussianOverlapAOs1stDerivative(AtomType atomTypeA,
50945111 }
50955112 }
50965113 else if(valenceOrbitalA == s && valenceOrbitalB == py){
5097- double temp1 = 4.0*pow(gaussianExponentA,2.0)*pow(gaussianExponentB, 1.5)
5098- /pow(gaussianExponentA+gaussianExponentB,2.0);
5114+ double temp1 = 4.0*(gaussianExponentA*gaussianExponentA)*gaussianExponentB*sqrt(gaussianExponentB)
5115+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
50995116 if(axisA == XAxis){
51005117 value = -1.0*temp1*dx*dy;
51015118 }
51025119 else if(axisA == YAxis){
5103- double temp2 = 2.0*gaussianExponentA*pow(gaussianExponentB, 0.5)
5120+ double temp2 = 2.0*gaussianExponentA*sqrt(gaussianExponentB)
51045121 /(gaussianExponentA+gaussianExponentB);
51055122 value = temp2-temp1*dy*dy;
51065123 }
@@ -5109,8 +5126,8 @@ double Cndo2::GetGaussianOverlapAOs1stDerivative(AtomType atomTypeA,
51095126 }
51105127 }
51115128 else if(valenceOrbitalA == s && valenceOrbitalB == pz){
5112- double temp1 = 4.0*pow(gaussianExponentA,2.0)*pow(gaussianExponentB, 1.5)
5113- /pow(gaussianExponentA+gaussianExponentB,2.0);
5129+ double temp1 = 4.0*(gaussianExponentA*gaussianExponentA)*gaussianExponentB*sqrt(gaussianExponentB)
5130+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
51145131 if(axisA == XAxis){
51155132 value = -1.0*temp1*dx*dz;
51165133 }
@@ -5118,16 +5135,17 @@ double Cndo2::GetGaussianOverlapAOs1stDerivative(AtomType atomTypeA,
51185135 value = -1.0*temp1*dy*dz;
51195136 }
51205137 else if(axisA == ZAxis){
5121- double temp2 = 2.0*gaussianExponentA*pow(gaussianExponentB, 0.5)
5138+ double temp2 = 2.0*gaussianExponentA*sqrt(gaussianExponentB)
51225139 /(gaussianExponentA+gaussianExponentB);
51235140 value = temp2-temp1*dz*dz;
51245141 }
51255142 }
51265143 else if(valenceOrbitalA == px && valenceOrbitalB == s){
5127- double temp1 = 4.0*pow(gaussianExponentA,1.5)*pow(gaussianExponentB, 2.0)
5128- /pow(gaussianExponentA+gaussianExponentB,2.0);
5144+ double temp1 = 4.0*gaussianExponentA*sqrt(gaussianExponentA)
5145+ *gaussianExponentB*gaussianExponentB
5146+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
51295147 if(axisA == XAxis){
5130- double temp2 = 2.0*pow(gaussianExponentA,0.5)*gaussianExponentB
5148+ double temp2 = 2.0*sqrt(gaussianExponentA)*gaussianExponentB
51315149 /(gaussianExponentA+gaussianExponentB);
51325150 value = -1.0*temp2+temp1*dx*dx;
51335151 }
@@ -5139,13 +5157,14 @@ double Cndo2::GetGaussianOverlapAOs1stDerivative(AtomType atomTypeA,
51395157 }
51405158 }
51415159 else if(valenceOrbitalA == py && valenceOrbitalB == s){
5142- double temp1 = 4.0*pow(gaussianExponentA,1.5)*pow(gaussianExponentB, 2.0)
5143- /pow(gaussianExponentA+gaussianExponentB,2.0);
5160+ double temp1 = 4.0*gaussianExponentA*sqrt(gaussianExponentA)
5161+ *gaussianExponentB*gaussianExponentB
5162+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
51445163 if(axisA == XAxis){
51455164 value = temp1*dx*dy;
51465165 }
51475166 else if(axisA == YAxis){
5148- double temp2 = 2.0*pow(gaussianExponentA,0.5)*gaussianExponentB
5167+ double temp2 = 2.0*sqrt(gaussianExponentA)*gaussianExponentB
51495168 /(gaussianExponentA+gaussianExponentB);
51505169 value = -1.0*temp2+temp1*dy*dy;
51515170 }
@@ -5154,8 +5173,9 @@ double Cndo2::GetGaussianOverlapAOs1stDerivative(AtomType atomTypeA,
51545173 }
51555174 }
51565175 else if(valenceOrbitalA == pz && valenceOrbitalB == s){
5157- double temp1 = 4.0*pow(gaussianExponentA,1.5)*pow(gaussianExponentB, 2.0)
5158- /pow(gaussianExponentA+gaussianExponentB,2.0);
5176+ double temp1 = 4.0*gaussianExponentA*sqrt(gaussianExponentA)
5177+ *gaussianExponentB*gaussianExponentB
5178+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
51595179 if(axisA == XAxis){
51605180 value = temp1*dx*dz;
51615181 }
@@ -5163,7 +5183,7 @@ double Cndo2::GetGaussianOverlapAOs1stDerivative(AtomType atomTypeA,
51635183 value = temp1*dy*dz;
51645184 }
51655185 else if(axisA == ZAxis){
5166- double temp2 = 2.0*pow(gaussianExponentA,0.5)*gaussianExponentB
5186+ double temp2 = 2.0*sqrt(gaussianExponentA)*gaussianExponentB
51675187 /(gaussianExponentA+gaussianExponentB);
51685188 value = -1.0*temp2+temp1*dz*dz;
51695189 }
@@ -5171,8 +5191,8 @@ double Cndo2::GetGaussianOverlapAOs1stDerivative(AtomType atomTypeA,
51715191 else if(valenceOrbitalA == px && valenceOrbitalB == py){
51725192 double temp1 = 8.0*pow(gaussianExponentA*gaussianExponentB,2.5)
51735193 /pow(gaussianExponentA+gaussianExponentB,3.0);
5174- double temp2 = 4.0*pow(gaussianExponentA*gaussianExponentB,1.5)
5175- /pow(gaussianExponentA+gaussianExponentB,2.0);
5194+ double temp2 = 4.0*gaussianExponentA*gaussianExponentB*sqrt(gaussianExponentA*gaussianExponentB)
5195+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
51765196 if(axisA == XAxis){
51775197 value = -1.0*temp2*dy+temp1*dx*dx*dy;
51785198 }
@@ -5186,8 +5206,8 @@ double Cndo2::GetGaussianOverlapAOs1stDerivative(AtomType atomTypeA,
51865206 else if(valenceOrbitalA == py && valenceOrbitalB == px){
51875207 double temp1 = 8.0*pow(gaussianExponentA*gaussianExponentB,2.5)
51885208 /pow(gaussianExponentA+gaussianExponentB,3.0);
5189- double temp2 = 4.0*pow(gaussianExponentA*gaussianExponentB,1.5)
5190- /pow(gaussianExponentA+gaussianExponentB,2.0);
5209+ double temp2 = 4.0*gaussianExponentA*gaussianExponentB*sqrt(gaussianExponentA*gaussianExponentB)
5210+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
51915211 if(axisA == XAxis){
51925212 value = -1.0*temp2*dy+temp1*dy*dx*dx;
51935213 }
@@ -5201,8 +5221,8 @@ double Cndo2::GetGaussianOverlapAOs1stDerivative(AtomType atomTypeA,
52015221 else if(valenceOrbitalA == px && valenceOrbitalB == pz){
52025222 double temp1 = 8.0*pow(gaussianExponentA*gaussianExponentB,2.5)
52035223 /pow(gaussianExponentA+gaussianExponentB,3.0);
5204- double temp2 = 4.0*pow(gaussianExponentA*gaussianExponentB,1.5)
5205- /pow(gaussianExponentA+gaussianExponentB,2.0);
5224+ double temp2 = 4.0*gaussianExponentA*gaussianExponentB*sqrt(gaussianExponentA*gaussianExponentB)
5225+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
52065226 if(axisA == XAxis){
52075227 value = -1.0*temp2*dz+temp1*dx*dx*dz;
52085228 }
@@ -5216,8 +5236,8 @@ double Cndo2::GetGaussianOverlapAOs1stDerivative(AtomType atomTypeA,
52165236 else if(valenceOrbitalA == pz && valenceOrbitalB == px){
52175237 double temp1 = 8.0*pow(gaussianExponentA*gaussianExponentB,2.5)
52185238 /pow(gaussianExponentA+gaussianExponentB,3.0);
5219- double temp2 = 4.0*pow(gaussianExponentA*gaussianExponentB,1.5)
5220- /pow(gaussianExponentA+gaussianExponentB,2.0);
5239+ double temp2 = 4.0*gaussianExponentA*gaussianExponentB*sqrt(gaussianExponentA*gaussianExponentB)
5240+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
52215241 if(axisA == XAxis){
52225242 value = -1.0*temp2*dz+temp1*dz*dx*dx;
52235243 }
@@ -5231,8 +5251,8 @@ double Cndo2::GetGaussianOverlapAOs1stDerivative(AtomType atomTypeA,
52315251 else if(valenceOrbitalA == py && valenceOrbitalB == pz){
52325252 double temp1 = 8.0*pow(gaussianExponentA*gaussianExponentB,2.5)
52335253 /pow(gaussianExponentA+gaussianExponentB,3.0);
5234- double temp2 = 4.0*pow(gaussianExponentA*gaussianExponentB,1.5)
5235- /pow(gaussianExponentA+gaussianExponentB,2.0);
5254+ double temp2 = 4.0*gaussianExponentA*gaussianExponentB*sqrt(gaussianExponentA*gaussianExponentB)
5255+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
52365256 if(axisA == XAxis){
52375257 value = temp1*dx*dy*dz;
52385258 }
@@ -5246,8 +5266,8 @@ double Cndo2::GetGaussianOverlapAOs1stDerivative(AtomType atomTypeA,
52465266 else if(valenceOrbitalA == pz && valenceOrbitalB == py){
52475267 double temp1 = 8.0*pow(gaussianExponentA*gaussianExponentB,2.5)
52485268 /pow(gaussianExponentA+gaussianExponentB,3.0);
5249- double temp2 = 4.0*pow(gaussianExponentA*gaussianExponentB,1.5)
5250- /pow(gaussianExponentA+gaussianExponentB,2.0);
5269+ double temp2 = 4.0*gaussianExponentA*gaussianExponentB*sqrt(gaussianExponentA*gaussianExponentB)
5270+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
52515271 if(axisA == XAxis){
52525272 value = temp1*dx*dy*dz;
52535273 }
@@ -5259,8 +5279,8 @@ double Cndo2::GetGaussianOverlapAOs1stDerivative(AtomType atomTypeA,
52595279 }
52605280 }
52615281 else if(valenceOrbitalA == px && valenceOrbitalB == px){
5262- double temp1 = 8.0*pow(gaussianExponentA*gaussianExponentB,1.5)
5263- /pow(gaussianExponentA+gaussianExponentB,2.0);
5282+ double temp1 = 8.0*gaussianExponentA*gaussianExponentB*sqrt(gaussianExponentA*gaussianExponentB)
5283+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
52645284 double temp2 = gaussianExponentA*gaussianExponentB
52655285 /(gaussianExponentA+gaussianExponentB);
52665286 if(axisA == XAxis){
@@ -5274,8 +5294,8 @@ double Cndo2::GetGaussianOverlapAOs1stDerivative(AtomType atomTypeA,
52745294 }
52755295 }
52765296 else if(valenceOrbitalA == py && valenceOrbitalB == py){
5277- double temp1 = 8.0*pow(gaussianExponentA*gaussianExponentB,1.5)
5278- /pow(gaussianExponentA+gaussianExponentB,2.0);
5297+ double temp1 = 8.0*gaussianExponentA*gaussianExponentB*sqrt(gaussianExponentA*gaussianExponentB)
5298+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
52795299 double temp2 = gaussianExponentA*gaussianExponentB
52805300 /(gaussianExponentA+gaussianExponentB);
52815301 if(axisA == XAxis){
@@ -5289,8 +5309,8 @@ double Cndo2::GetGaussianOverlapAOs1stDerivative(AtomType atomTypeA,
52895309 }
52905310 }
52915311 else if(valenceOrbitalA == pz && valenceOrbitalB == pz){
5292- double temp1 = 8.0*pow(gaussianExponentA*gaussianExponentB,1.5)
5293- /pow(gaussianExponentA+gaussianExponentB,2.0);
5312+ double temp1 = 8.0*gaussianExponentA*gaussianExponentB*sqrt(gaussianExponentA*gaussianExponentB)
5313+ /((gaussianExponentA+gaussianExponentB)*(gaussianExponentA+gaussianExponentB));
52945314 double temp2 = gaussianExponentA*gaussianExponentB
52955315 /(gaussianExponentA+gaussianExponentB);
52965316 if(axisA == XAxis){
@@ -5361,15 +5381,15 @@ void Cndo2::CalcRotatingMatrix(double** rotatingMatrix,
53615381 // rotating matrix for d-function
53625382 // dMatrix is (37) in J. Mol. Strct. 419, 19(1997) (ref. [BFB_1997])
53635383 double dMatrix[OrbitalType_end][OrbitalType_end];
5364- dMatrix[dzz][dzz] = 0.5*(3.0*pow(cos(beta),2.0) - 1.0);
5365- dMatrix[dxxyy][dxxyy] = pow(cos(0.5*beta),4.0);
5366- dMatrix[dzx][dzx] = (2.0*cos(beta)-1.0)*pow(cos(0.5*beta),2.0);
5367- dMatrix[dxxyy][dzx] = -2.0*sin(0.5*beta)*pow(cos(0.5*beta),3.0);
5368- dMatrix[dxxyy][dzz] = sqrt(6.0)*pow(sin(0.5*beta),2.0)*pow(cos(0.5*beta),2.0);
5369- dMatrix[dxxyy][dyz] = -2.0*pow(sin(0.5*beta),3.0)*pow(cos(0.5*beta),1.0);
5370- dMatrix[dxxyy][dxy] = pow(sin(0.5*beta),4.0);
5384+ dMatrix[dzz][dzz] = 0.5*(3.0*(cos(beta)*cos(beta)) - 1.0);
5385+ dMatrix[dxxyy][dxxyy] = cos(0.5*beta)*cos(0.5*beta)*cos(0.5*beta)*cos(0.5*beta);
5386+ dMatrix[dzx][dzx] = (2.0*cos(beta)-1.0)*cos(0.5*beta)*cos(0.5*beta);
5387+ dMatrix[dxxyy][dzx] = -2.0*sin(0.5*beta)*cos(0.5*beta)*cos(0.5*beta)*cos(0.5*beta);
5388+ dMatrix[dxxyy][dzz] = sqrt(6.0)*(sin(0.5*beta)*sin(0.5*beta))*((cos(0.5*beta))*(cos(0.5*beta)));
5389+ dMatrix[dxxyy][dyz] = -2.0*sin(0.5*beta)*sin(0.5*beta)*sin(0.5*beta)*cos(0.5*beta);
5390+ dMatrix[dxxyy][dxy] = sin(0.5*beta)*sin(0.5*beta)*sin(0.5*beta)*sin(0.5*beta);
53715391 dMatrix[dzx][dzz] = -sqrt(6.0)*cos(beta)*cos(0.5*beta)*sin(0.5*beta);
5372- dMatrix[dzx][dyz] = (2.0*cos(beta)+1.0)*pow(sin(0.5*beta),2.0);
5392+ dMatrix[dzx][dyz] = (2.0*cos(beta)+1.0)*(sin(0.5*beta)*sin(0.5*beta));
53735393
53745394 rotatingMatrix[dxy][dxy] = cos(2.0*alpha)* (dMatrix[dxxyy][dxxyy] - dMatrix[dxxyy][dxy]);
53755395 rotatingMatrix[dxy][dyz] = cos(2.0*alpha)* (-1.0*dMatrix[dxxyy][dzx] - dMatrix[dxxyy][dyz]);
@@ -5420,8 +5440,8 @@ void Cndo2::CalcRotatingMatrix1stDerivatives(double*** rotMat1stDerivatives,
54205440 double x = atomB.GetXyz()[0] - atomA.GetXyz()[0];
54215441 double y = atomB.GetXyz()[1] - atomA.GetXyz()[1];
54225442 double z = atomB.GetXyz()[2] - atomA.GetXyz()[2];
5423- double r = sqrt( pow(x,2.0) + pow(y,2.0) );
5424- double R = sqrt( pow(x,2.0) + pow(y,2.0) + pow(z,2.0) );
5443+ double r = sqrt( x*x + y*y );
5444+ double R = sqrt( x*x + y*y + z*z );
54255445
54265446 if(r==0e0){
54275447 return;
@@ -5433,43 +5453,43 @@ void Cndo2::CalcRotatingMatrix1stDerivatives(double*** rotMat1stDerivatives,
54335453 rotMat1stDerivatives[s][s][ZAxis] = 0.0;
54345454
54355455 // for p-function
5436- rotMat1stDerivatives[py][py][XAxis] = -1.0/r + pow(x,2.0)/pow(r,3.0);
5437- rotMat1stDerivatives[py][pz][XAxis] = x*y/pow(R,3.0);
5438- rotMat1stDerivatives[py][px][XAxis] = (1.0/(pow(r,3.0)*R) + 1.0/(pow(R,3.0)*r))*x*y*z;
5456+ rotMat1stDerivatives[py][py][XAxis] = -1.0/r + x*x/(r*r*r);
5457+ rotMat1stDerivatives[py][pz][XAxis] = x*y/(R*R*R);
5458+ rotMat1stDerivatives[py][px][XAxis] = (1.0/(r*r*r*R) + 1.0/(R*R*R*r))*x*y*z;
54395459
54405460 rotMat1stDerivatives[pz][py][XAxis] = 0.0;
5441- rotMat1stDerivatives[pz][pz][XAxis] = x*z/pow(R,3.0);
5442- rotMat1stDerivatives[pz][px][XAxis] = x/(r*R) - x*r/pow(R,3.0);
5461+ rotMat1stDerivatives[pz][pz][XAxis] = x*z/(R*R*R);
5462+ rotMat1stDerivatives[pz][px][XAxis] = x/(r*R) - x*r/(R*R*R);
54435463
5444- rotMat1stDerivatives[px][py][XAxis] = -1.0*x*y/pow(r,3.0);
5445- rotMat1stDerivatives[px][pz][XAxis] = -1.0/R + x*x/pow(R,3.0);
5464+ rotMat1stDerivatives[px][py][XAxis] = -1.0*x*y/(r*r*r);
5465+ rotMat1stDerivatives[px][pz][XAxis] = -1.0/R + x*x/(R*R*R);
54465466 rotMat1stDerivatives[px][px][XAxis] = -1.0*z/(r*R) +
5447- (1.0/(pow(r,3.0)*R) + 1.0/(pow(R,3.0)*r))*x*x*z;
5467+ (1.0/(r*r*r*R) + 1.0/(R*R*R*r))*x*x*z;
54485468
5449- rotMat1stDerivatives[py][py][YAxis] = x*y/pow(r,3.0);
5450- rotMat1stDerivatives[py][pz][YAxis] = -1.0/R + y*y/pow(R,3.0);
5469+ rotMat1stDerivatives[py][py][YAxis] = x*y/(r*r*r);
5470+ rotMat1stDerivatives[py][pz][YAxis] = -1.0/R + y*y/(R*R*R);
54515471 rotMat1stDerivatives[py][px][YAxis] = -1.0*z/(r*R) +
5452- (1.0/(pow(r,3.0)*R) + 1.0/(pow(R,3.0)*r))*y*y*z;
5472+ (1.0/(r*r*r*R) + 1.0/(R*R*R*r))*y*y*z;
54535473
54545474 rotMat1stDerivatives[pz][py][YAxis] = 0.0;
5455- rotMat1stDerivatives[pz][pz][YAxis] = y*z/pow(R,3.0);
5456- rotMat1stDerivatives[pz][px][YAxis] = y/(r*R) - y*r/pow(R,3.0);
5475+ rotMat1stDerivatives[pz][pz][YAxis] = y*z/(R*R*R);
5476+ rotMat1stDerivatives[pz][px][YAxis] = y/(r*R) - y*r/(R*R*R);
54575477
5458- rotMat1stDerivatives[px][py][YAxis] = 1.0/r - y*y/pow(r,3.0);
5459- rotMat1stDerivatives[px][pz][YAxis] = x*y/pow(R,3.0);
5460- rotMat1stDerivatives[px][px][YAxis] = (1.0/(pow(r,3.0)*R) + 1.0/(pow(R,3.0)*r))*x*y*z;
5478+ rotMat1stDerivatives[px][py][YAxis] = 1.0/r - y*y/(r*r*r);
5479+ rotMat1stDerivatives[px][pz][YAxis] = x*y/(R*R*R);
5480+ rotMat1stDerivatives[px][px][YAxis] = (1.0/(r*r*r*R) + 1.0/(R*R*R*r))*x*y*z;
54615481
54625482 rotMat1stDerivatives[py][py][ZAxis] = 0.0;
5463- rotMat1stDerivatives[py][pz][ZAxis] = y*z/pow(R,3.0);
5464- rotMat1stDerivatives[py][px][ZAxis] = -1.0*y/(r*R) + y*z*z/(r*pow(R,3.0));
5483+ rotMat1stDerivatives[py][pz][ZAxis] = y*z/(R*R*R);
5484+ rotMat1stDerivatives[py][px][ZAxis] = -1.0*y/(r*R) + y*z*z/(r*R*R*R);
54655485
54665486 rotMat1stDerivatives[pz][py][ZAxis] = 0.0;
5467- rotMat1stDerivatives[pz][pz][ZAxis] = -1.0/R + z*z/pow(R,3.0);
5468- rotMat1stDerivatives[pz][px][ZAxis] = -1.0*z*r/pow(R,3.0);
5487+ rotMat1stDerivatives[pz][pz][ZAxis] = -1.0/R + z*z/(R*R*R);
5488+ rotMat1stDerivatives[pz][px][ZAxis] = -1.0*z*r/(R*R*R);
54695489
54705490 rotMat1stDerivatives[px][py][ZAxis] = 0.0;
5471- rotMat1stDerivatives[px][pz][ZAxis] = x*z/pow(R,3.0);
5472- rotMat1stDerivatives[px][px][ZAxis] = -1.0*x/(r*R) + x*z*z/(r*pow(R,3.0));
5491+ rotMat1stDerivatives[px][pz][ZAxis] = x*z/(R*R*R);
5492+ rotMat1stDerivatives[px][px][ZAxis] = -1.0*x/(r*R) + x*z*z/(r*R*R*R);
54735493
54745494 // for d-function
54755495 // ToDo: First derivative of rotating matrix for d-orbital...
@@ -5495,16 +5515,16 @@ void Cndo2::CalcRotatingMatrix2ndDerivatives(double**** rotMat2ndDerivatives,
54955515 double x = atomB.GetXyz()[0] - atomA.GetXyz()[0];
54965516 double y = atomB.GetXyz()[1] - atomA.GetXyz()[1];
54975517 double z = atomB.GetXyz()[2] - atomA.GetXyz()[2];
5498- double r = sqrt( pow(x,2.0) + pow(y,2.0) );
5499- double R = sqrt( pow(x,2.0) + pow(y,2.0) + pow(z,2.0) );
5518+ double r = sqrt( x*x + y*y );
5519+ double R = sqrt( x*x + y*y + z*z );
55005520
55015521 if(r==0e0){
55025522 return;
55035523 }
55045524
5505- double temp1 = 1.0/(pow(r,3.0)*R) + 1.0/(r*pow(R,3.0));
5506- double temp2 = 2.0*pow(r*R,-3.0) + 3.0/(pow(r,5.0)*R) + 3.0/(r*pow(R,5.0));
5507- double temp3 = pow(r*R,-3.0) + 3.0/(r*pow(R,5.0));
5525+ double temp1 = 1.0/(r*r*r*R) + 1.0/(r*R*R*R);
5526+ double temp2 = 2.0/(r*r*r*R*R*R) + 3.0/(r*r*r*r*r*R) + 3.0/(r*R*R*R*R*R);
5527+ double temp3 = 1.0/(r*r*r*R*R*R) + 3.0/(r*R*R*R*R*R);
55085528
55095529 // for s-function
55105530 rotMat2ndDerivatives[s][s][XAxis][XAxis] = 0.0;
@@ -5518,29 +5538,29 @@ void Cndo2::CalcRotatingMatrix2ndDerivatives(double**** rotMat2ndDerivatives,
55185538 rotMat2ndDerivatives[s][s][ZAxis][ZAxis] = 0.0;
55195539
55205540 // for p-function, xx-derivatives
5521- rotMat2ndDerivatives[py][py][XAxis][XAxis] = -3.0*x*pow(r,-3.0) + 3.0*pow(x,3.0)*pow(r,-5.0);
5522- rotMat2ndDerivatives[py][pz][XAxis][XAxis] = -1.0*y*pow(R,-3.0) + 3.0*pow(x,2.0)*y*pow(R,-5.0);
5523- rotMat2ndDerivatives[py][px][XAxis][XAxis] = -1.0*temp1*y*z+temp2*pow(x,2.0)*y*z;
5541+ rotMat2ndDerivatives[py][py][XAxis][XAxis] = -3.0*x/(r*r*r) + 3.0*x*x*x/(r*r*r*r*r);
5542+ rotMat2ndDerivatives[py][pz][XAxis][XAxis] = -1.0*y/(R*R*R) + 3.0*x*x*y/(R*R*R*R*R);
5543+ rotMat2ndDerivatives[py][px][XAxis][XAxis] = -1.0*temp1*y*z+temp2*x*x*y*z;
55245544
55255545 rotMat2ndDerivatives[pz][py][XAxis][XAxis] = 0.0;
5526- rotMat2ndDerivatives[pz][pz][XAxis][XAxis] = -1.0*z*pow(R,-3.0) + 3.0*pow(x,2.0)*z*pow(R,-5.0);
5527- rotMat2ndDerivatives[pz][px][XAxis][XAxis] = -1.0*pow(r*R,-1.0) + temp1*pow(x,2.0)
5528- +r*pow(R,-3.0) - 3.0*pow(x,2.0)*r*pow(R,-5.0) + pow(x,2.0)*pow(r,-1.0)*pow(R,-3.0);
5546+ rotMat2ndDerivatives[pz][pz][XAxis][XAxis] = -1.0*z/(R*R*R) + 3.0*x*x*z/(R*R*R*R*R);
5547+ rotMat2ndDerivatives[pz][px][XAxis][XAxis] = -1.0/(r*R) + temp1*x*x
5548+ +r/(R*R*R) - 3.0*x*x*r/(R*R*R*R*R) + x*x/(r*R*R*R);
55295549
5530- rotMat2ndDerivatives[px][py][XAxis][XAxis] = y*pow(r,-3.0) - 3.0*pow(x,2.0)*y*pow(r,-5.0);
5531- rotMat2ndDerivatives[px][pz][XAxis][XAxis] = -3.0*x*pow(R,-3.0) + 3.0*pow(x,3.0)*pow(R,-5.0);
5532- rotMat2ndDerivatives[px][px][XAxis][XAxis] = -3.0*temp1*x*z+temp2*pow(x,3.0)*z;
5550+ rotMat2ndDerivatives[px][py][XAxis][XAxis] = y/(r*r*r) - 3.0*x*x*y/(r*r*r*r*r);
5551+ rotMat2ndDerivatives[px][pz][XAxis][XAxis] = -3.0*x/(R*R*R) + 3.0*x*x*x/(R*R*R*R*R);
5552+ rotMat2ndDerivatives[px][px][XAxis][XAxis] = -3.0*temp1*x*z+temp2*x*x*x*z;
55335553
55345554 // for p-function, xy-derivatives
5535- rotMat2ndDerivatives[py][py][XAxis][YAxis] = -1.0*y*pow(r,-3.0) + 3.0*pow(x,2.0)*y*pow(r,-5.0);
5536- rotMat2ndDerivatives[py][pz][XAxis][YAxis] = -1.0*x*pow(R,-3.0) + 3.0*x*pow(y,2.0)*pow(R,-5.0);
5537- rotMat2ndDerivatives[py][px][XAxis][YAxis] = -1.0*temp1*x*z+temp2*x*pow(y,2.0)*z;
5555+ rotMat2ndDerivatives[py][py][XAxis][YAxis] = -1.0*y/(r*r*r) + 3.0*x*x*y/(r*r*r*r*r);
5556+ rotMat2ndDerivatives[py][pz][XAxis][YAxis] = -1.0*x/(R*R*R) + 3.0*x*y*y/(R*R*R*R*R);
5557+ rotMat2ndDerivatives[py][px][XAxis][YAxis] = -1.0*temp1*x*z+temp2*x*y*y*z;
55385558
55395559 rotMat2ndDerivatives[pz][py][XAxis][YAxis] = 0.0;
5540- rotMat2ndDerivatives[pz][pz][XAxis][YAxis] = 3.0*x*y*z*pow(R,-5.0);
5541- rotMat2ndDerivatives[pz][px][XAxis][YAxis] = temp1*x*y + x*y*pow(r,-1.0)*pow(R,-3.0) - 3.0*x*y*r*pow(R,-5.0);
5560+ rotMat2ndDerivatives[pz][pz][XAxis][YAxis] = 3.0*x*y*z/(R*R*R*R*R);
5561+ rotMat2ndDerivatives[pz][px][XAxis][YAxis] = temp1*x*y + x*y/(r*R*R*R) - 3.0*x*y*r/(R*R*R*R*R);
55425562
5543- rotMat2ndDerivatives[px][py][XAxis][YAxis] = x*pow(r,-3.0) - 3.0*x*pow(y,2.0)*pow(r,-5.0);
5563+ rotMat2ndDerivatives[px][py][XAxis][YAxis] = x/(r*r*r) - 3.0*x*y*y/(r*r*r*r*r);
55445564 rotMat2ndDerivatives[px][pz][XAxis][YAxis] = rotMat2ndDerivatives[py][pz][XAxis][XAxis];
55455565 rotMat2ndDerivatives[px][px][XAxis][YAxis] = rotMat2ndDerivatives[py][px][XAxis][XAxis];
55465566
@@ -5553,16 +5573,16 @@ void Cndo2::CalcRotatingMatrix2ndDerivatives(double**** rotMat2ndDerivatives,
55535573 // for p-function, xz-derivatives
55545574 rotMat2ndDerivatives[py][py][XAxis][ZAxis] = 0.0;
55555575 rotMat2ndDerivatives[py][pz][XAxis][ZAxis] = rotMat2ndDerivatives[pz][pz][XAxis][YAxis];
5556- rotMat2ndDerivatives[py][px][XAxis][ZAxis] = -1.0*temp1*x*y +temp3*x*y*pow(z,2.0);
5576+ rotMat2ndDerivatives[py][px][XAxis][ZAxis] = -1.0*temp1*x*y +temp3*x*y*z*z;
55575577
55585578 rotMat2ndDerivatives[pz][py][XAxis][ZAxis] = 0.0;
5559- rotMat2ndDerivatives[pz][pz][XAxis][ZAxis] = -1.0*x*pow(R,-3.0) + 3.0*x*pow(z,2.0)*pow(R,-5.0);
5560- rotMat2ndDerivatives[pz][px][XAxis][ZAxis] = x*z*pow(r,-1.0)*pow(R,-3.0) - 3.0*x*z*r*pow(R,-5.0);
5579+ rotMat2ndDerivatives[pz][pz][XAxis][ZAxis] = -1.0*x/(R*R*R) + 3.0*x*z*z/(R*R*R*R*R);
5580+ rotMat2ndDerivatives[pz][px][XAxis][ZAxis] = x*z/(r*R*R*R) - 3.0*x*z*r/(R*R*R*R*R);
55615581
55625582 rotMat2ndDerivatives[px][py][XAxis][ZAxis] = 0.0;
55635583 rotMat2ndDerivatives[px][pz][XAxis][ZAxis] = rotMat2ndDerivatives[pz][pz][XAxis][XAxis];
5564- rotMat2ndDerivatives[px][px][XAxis][ZAxis] = pow(r*R,-1.0) - pow(z,2.0)*pow(r,-1.0)*pow(R,-3.0)
5565- -1.0*temp1*pow(x,2.0)+temp3*pow(x*z,2.0);
5584+ rotMat2ndDerivatives[px][px][XAxis][ZAxis] = 1.0/(r*R) - z*z/(r*R*R*R)
5585+ -1.0*temp1*x*x+temp3*x*x*z*z;
55665586
55675587
55685588 // for p-function, zx-derivatives
@@ -5573,32 +5593,32 @@ void Cndo2::CalcRotatingMatrix2ndDerivatives(double**** rotMat2ndDerivatives,
55735593 }
55745594
55755595 // for p-function, yy-derivatives
5576- rotMat2ndDerivatives[py][py][YAxis][YAxis] = -1.0*x*pow(r,-3.0) + 3.0*x*pow(y,2.0)*pow(r,-5.0);
5577- rotMat2ndDerivatives[py][pz][YAxis][YAxis] = -3.0*y*pow(R,-3.0) + 3.0*pow(y,3.0)*pow(R,-5.0);
5578- rotMat2ndDerivatives[py][px][YAxis][YAxis] = -3.0*temp1*y*z+temp2*pow(y,3.0)*z;
5596+ rotMat2ndDerivatives[py][py][YAxis][YAxis] = -1.0*x/(r*r*r) + 3.0*x*y*y/(r*r*r*r*r);
5597+ rotMat2ndDerivatives[py][pz][YAxis][YAxis] = -3.0*y/(R*R*R) + 3.0*y*y*y/(R*R*R*R*R);
5598+ rotMat2ndDerivatives[py][px][YAxis][YAxis] = -3.0*temp1*y*z+temp2*y*y*y*z;
55795599
55805600 rotMat2ndDerivatives[pz][py][YAxis][YAxis] = 0.0;
5581- rotMat2ndDerivatives[pz][pz][YAxis][YAxis] = -1.0*z*pow(R,-3.0) + 3.0*pow(y,2.0)*z*pow(R,-5.0);
5582- rotMat2ndDerivatives[pz][px][YAxis][YAxis] = -1.0*pow(r*R,-1.0) + temp1*pow(y,2.0)
5583- +r*pow(R,-3.0) - 3.0*pow(y,2.0)*r*pow(R,-5.0) + pow(y,2.0)*pow(r,-1.0)*pow(R,-3.0);
5601+ rotMat2ndDerivatives[pz][pz][YAxis][YAxis] = -1.0*z/(R*R*R) + 3.0*y*y*z/(R*R*R*R*R);
5602+ rotMat2ndDerivatives[pz][px][YAxis][YAxis] = -1.0/(r*R) + temp1*y*y
5603+ +r/(R*R*R) - 3.0*y*y*r/(R*R*R*R*R) + y*y/(r*R*R*R);
55845604
5585- rotMat2ndDerivatives[px][py][YAxis][YAxis] = 3.0*y*pow(r,-3.0) - 3.0*pow(y,3.0)*pow(r,-5.0);
5605+ rotMat2ndDerivatives[px][py][YAxis][YAxis] = 3.0*y/(r*r*r) - 3.0*y*y*y/(r*r*r*r*r);
55865606 rotMat2ndDerivatives[px][pz][YAxis][YAxis] = rotMat2ndDerivatives[py][pz][XAxis][YAxis];
5587- rotMat2ndDerivatives[px][px][YAxis][YAxis] = -1.0*temp1*x*z+temp2*x*pow(y,2.0)*z;
5607+ rotMat2ndDerivatives[px][px][YAxis][YAxis] = -1.0*temp1*x*z+temp2*x*y*y*z;
55885608
55895609 // for p-function, yz-derivatives
55905610 rotMat2ndDerivatives[py][py][YAxis][ZAxis] = 0.0;
55915611 rotMat2ndDerivatives[py][pz][YAxis][ZAxis] = rotMat2ndDerivatives[pz][pz][YAxis][YAxis];
5592- rotMat2ndDerivatives[py][px][YAxis][ZAxis] = pow(r*R,-1.0) - pow(z,2.0)*pow(r,-1.0)*pow(R,-3.0)
5593- -1.0*temp1*pow(y,2.0)+temp3*pow(y*z,2.0);
5612+ rotMat2ndDerivatives[py][px][YAxis][ZAxis] = 1.0/(r*R) - z*z/(r*R*R*R)
5613+ -1.0*temp1*y*y+temp3*y*y*z*z;
55945614
55955615 rotMat2ndDerivatives[pz][py][YAxis][ZAxis] = 0.0;
5596- rotMat2ndDerivatives[pz][pz][YAxis][ZAxis] = -1.0*y*pow(R,-3.0) + 3.0*y*pow(z,2.0)*pow(R,-5.0);
5597- rotMat2ndDerivatives[pz][px][YAxis][ZAxis] = y*z*pow(r,-1.0)*pow(R,-3.0) - 3.0*y*z*r*pow(R,-5.0);
5616+ rotMat2ndDerivatives[pz][pz][YAxis][ZAxis] = -1.0*y/(R*R*R) + 3.0*y*z*z/(R*R*R*R*R);
5617+ rotMat2ndDerivatives[pz][px][YAxis][ZAxis] = y*z/(r*R*R*R) - 3.0*y*z*r/(R*R*R*R*R);
55985618
55995619 rotMat2ndDerivatives[px][py][YAxis][ZAxis] = 0.0;
56005620 rotMat2ndDerivatives[px][pz][YAxis][ZAxis] = rotMat2ndDerivatives[pz][pz][XAxis][YAxis];
5601- rotMat2ndDerivatives[px][px][YAxis][ZAxis] = -1.0*temp1*x*y+temp3*x*y*pow(z,2.0);
5621+ rotMat2ndDerivatives[px][px][YAxis][ZAxis] = -1.0*temp1*x*y+temp3*x*y*z*z;
56025622
56035623
56045624 // for p-function, zy-derivatives
@@ -5611,15 +5631,15 @@ void Cndo2::CalcRotatingMatrix2ndDerivatives(double**** rotMat2ndDerivatives,
56115631 // for p-function, zz-derivatives
56125632 rotMat2ndDerivatives[py][py][ZAxis][ZAxis] = 0.0;
56135633 rotMat2ndDerivatives[py][pz][ZAxis][ZAxis] = rotMat2ndDerivatives[pz][pz][YAxis][ZAxis];
5614- rotMat2ndDerivatives[py][px][ZAxis][ZAxis] = -3.0*y*z*pow(r,-1.0)*pow(R,-3.0) + 3.0*y*pow(z,3.0)*pow(r,-1.0)*pow(R,-5.0);
5634+ rotMat2ndDerivatives[py][px][ZAxis][ZAxis] = -3.0*y*z/(r*R*R*R) + 3.0*y*z*z*z/(r*R*R*R*R*R);
56155635
56165636 rotMat2ndDerivatives[pz][py][ZAxis][ZAxis] = 0.0;
5617- rotMat2ndDerivatives[pz][pz][ZAxis][ZAxis] = -3.0*z*pow(R,-3.0) + 3.0*pow(z,3.0)*pow(R,-5.0);
5618- rotMat2ndDerivatives[pz][px][ZAxis][ZAxis] = -3.0*pow(z,2.0)*r*pow(R,-5.0) + r*pow(R,-3.0);
5637+ rotMat2ndDerivatives[pz][pz][ZAxis][ZAxis] = -3.0*z/(R*R*R) + 3.0*z*z*z/(R*R*R*R*R);
5638+ rotMat2ndDerivatives[pz][px][ZAxis][ZAxis] = -3.0*z*z*r/(R*R*R*R*R) + r/(R*R*R);
56195639
56205640 rotMat2ndDerivatives[px][py][ZAxis][ZAxis] = 0.0;
56215641 rotMat2ndDerivatives[px][pz][ZAxis][ZAxis] = rotMat2ndDerivatives[pz][pz][XAxis][ZAxis];
5622- rotMat2ndDerivatives[px][px][ZAxis][ZAxis] = -3.0*x*z*pow(r,-1.0)*pow(R,-3.0) + 3.0*x*pow(z,3.0)*pow(r,-1.0)*pow(R,-5.0);
5642+ rotMat2ndDerivatives[px][px][ZAxis][ZAxis] = -3.0*x*z/(r*R*R*R) + 3.0*x*z*z*z/(r*R*R*R*R*R);
56235643
56245644 // for d-function
56255645 // ToDo: Second derivative of rotating matrix for d-orbital...
@@ -6275,7 +6295,8 @@ double Cndo2::GetAuxiliaryD(int la, int lb, int m) const{
62756295 throw MolDSException(ss.str());
62766296 }
62776297
6278- double pre = pow(Factorial(m+1)/8.0, 2.0);
6298+ double tmp = Factorial(m+1)/8.0;
6299+ double pre = tmp*tmp;
62796300 double termA = ( (2.0*la+1.0)*Factorial(la-m) ) / ( 2.0*Factorial(la+m) );
62806301 double termB = ( (2.0*lb+1.0)*Factorial(lb-m) ) / ( 2.0*Factorial(lb+m) );
62816302 value = pre*sqrt(termA)*sqrt(termB);
--- a/src/mndo/Mndo.cpp
+++ b/src/mndo/Mndo.cpp
@@ -226,12 +226,12 @@ double Mndo::GetAuxiliaryDiatomCoreRepulsionEnergy2ndDerivative(const Atom& atom
226226 double pre1=0.0;
227227 double pre2=0.0;
228228 if(axisA1 == axisA2){
229- pre1 = 1.0/distanceAB - pow(dCartesian1,2.0)/pow(distanceAB,3.0);
230- pre2 = pow(dCartesian1/distanceAB,2.0);
229+ pre1 = 1.0/distanceAB - dCartesian1*dCartesian1/(distanceAB*distanceAB*distanceAB);
230+ pre2 = (dCartesian1*dCartesian1)/(distanceAB*distanceAB);
231231 }
232232 else{
233- pre1 = -dCartesian1*dCartesian2/pow(distanceAB,3.0);
234- pre2 = dCartesian1*dCartesian2/pow(distanceAB,2.0);
233+ pre1 = -dCartesian1*dCartesian2/(distanceAB*distanceAB*distanceAB);
234+ pre2 = dCartesian1*dCartesian2/(distanceAB*distanceAB);
235235 }
236236
237237 double ang2AU = Parameters::GetInstance()->GetAngstrom2AU();
@@ -6127,50 +6127,51 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(const Atom& atomA,
61276127
61286128 // Eq. (52) in [DT_1977]
61296129 if(multipoleA == sQ && multipoleB == sQ){
6130- value = pow(pow(rAB,2.0) + pow(a,2.0), -0.5);
6130+ value = pow((rAB*rAB) + (a*a), -0.5);
61316131 }
61326132 // Eq. (53) in [DT_1977]
61336133 else if(multipoleA == sQ && multipoleB == muz){
6134- double temp1 = pow(rAB+DB,2.0) + pow(a,2.0);
6135- double temp2 = pow(rAB-DB,2.0) + pow(a,2.0);
6134+ double temp1 = ((rAB+DB)*(rAB+DB)) + (a*a);
6135+ double temp2 = ((rAB-DB)*(rAB-DB)) + (a*a);
61366136 value = pow(temp1,-0.5)/2.0 - pow(temp2,-0.5)/2.0;
61376137 }
61386138 else if(multipoleA == muz && multipoleB == sQ){
61396139 value = this->GetSemiEmpiricalMultipoleInteraction(atomB, atomA, multipoleB, multipoleA, rAB);
6140- value *= pow(-1.0,1.0);
6140+ //value *= pow(-1.0,1.0);
6141+ value *= -1.0;
61416142 }
61426143 // Eq. (54) in [DT_1977]
61436144 else if(multipoleA == sQ && multipoleB == Qxx){
6144- double temp1 = pow(rAB,2.0) + pow(2.0*DB,2.0) + pow(a,2.0);
6145- double temp2 = pow(rAB,2.0) + pow(a,2.0);
6145+ double temp1 = (rAB*rAB) + (4.0*DB*DB) + (a*a);
6146+ double temp2 = (rAB*rAB) + (a*a);
61466147 value = pow(temp1,-0.5)/2.0 - pow(temp2,-0.5)/2.0;
61476148 }
61486149 else if(multipoleA == Qxx && multipoleB == sQ){
61496150 value = this->GetSemiEmpiricalMultipoleInteraction(atomB, atomA, multipoleB, multipoleA, rAB);
6150- value *= pow(-1.0,2.0);
6151+ //value *= pow(-1.0,2.0);
61516152 }
61526153 else if(multipoleA == sQ && multipoleB == Qyy){
61536154 value = this->GetSemiEmpiricalMultipoleInteraction(atomA, atomB, multipoleA, Qxx, rAB);
61546155 }
61556156 else if(multipoleA == Qyy && multipoleB == sQ){
61566157 value = this->GetSemiEmpiricalMultipoleInteraction(atomB, atomA, multipoleB, multipoleA, rAB);
6157- value *= pow(-1.0,2.0);
6158+ //value *= pow(-1.0,2.0);
61586159 }
61596160 // Eq. (55) in [DT_1977]
61606161 else if(multipoleA == sQ && multipoleB == Qzz){
6161- double temp1 = pow(rAB+2.0*DB,2.0) + pow(a,2.0);
6162- double temp2 = pow(rAB,2.0) + pow(a,2.0);
6163- double temp3 = pow(rAB-2.0*DB,2.0) + pow(a,2.0);
6162+ double temp1 = ((rAB+2.0*DB)*(rAB+2.0*DB)) + (a*a);
6163+ double temp2 = (rAB*rAB) + (a*a);
6164+ double temp3 = ((rAB-2.0*DB)*(rAB-2.0*DB)) + (a*a);
61646165 value = pow(temp1,-0.5)/4.0 - pow(temp2,-0.5)/2.0 + pow(temp3,-0.5)/4.0;
61656166 }
61666167 else if(multipoleA == Qzz && multipoleB == sQ){
61676168 value = this->GetSemiEmpiricalMultipoleInteraction(atomB, atomA, multipoleB, multipoleA, rAB);
6168- value *= pow(-1.0,2.0);
6169+ //value *= pow(-1.0,2.0);
61696170 }
61706171 // Eq. (56) in [DT_1977]
61716172 else if(multipoleA == mux && multipoleB == mux){
6172- double temp1 = pow(rAB,2.0) + pow(DA-DB,2.0) + pow(a,2.0);
6173- double temp2 = pow(rAB,2.0) + pow(DA+DB,2.0) + pow(a,2.0);
6173+ double temp1 = (rAB*rAB) + ((DA-DB)*(DA-DB)) + (a*a);
6174+ double temp2 = (rAB*rAB) + ((DA+DB)*(DA+DB)) + (a*a);
61746175 value = pow(temp1,-0.5)/2.0 - pow(temp2,-0.5)/2.0;
61756176 }
61766177 else if(multipoleA == muy && multipoleB == muy){
@@ -6178,76 +6179,81 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(const Atom& atomA,
61786179 }
61796180 // Eq. (57) in [DT_1977]
61806181 else if(multipoleA == muz && multipoleB == muz){
6181- double temp1 = pow(rAB+DA-DB,2.0) + pow(a,2.0);
6182- double temp2 = pow(rAB+DA+DB,2.0) + pow(a,2.0);
6183- double temp3 = pow(rAB-DA-DB,2.0) + pow(a,2.0);
6184- double temp4 = pow(rAB-DA+DB,2.0) + pow(a,2.0);
6182+ double temp1 = ((rAB+DA-DB)*(rAB+DA-DB)) + (a*a);
6183+ double temp2 = ((rAB+DA+DB)*(rAB+DA+DB)) + (a*a);
6184+ double temp3 = ((rAB-DA-DB)*(rAB-DA-DB)) + (a*a);
6185+ double temp4 = ((rAB-DA+DB)*(rAB-DA+DB)) + (a*a);
61856186 value = pow(temp1,-0.5)/4.0 - pow(temp2,-0.5)/4.0
61866187 -pow(temp3,-0.5)/4.0 + pow(temp4,-0.5)/4.0;
61876188 }
61886189 // Eq. (58) in [DT_1977]
61896190 else if(multipoleA == mux && multipoleB == Qxz){
6190- double temp1 = pow(rAB-DB,2.0) + pow(DA-DB,2.0) + pow(a,2.0);
6191- double temp2 = pow(rAB-DB,2.0) + pow(DA+DB,2.0) + pow(a,2.0);
6192- double temp3 = pow(rAB+DB,2.0) + pow(DA-DB,2.0) + pow(a,2.0);
6193- double temp4 = pow(rAB+DB,2.0) + pow(DA+DB,2.0) + pow(a,2.0);
6191+ double temp1 = ((rAB-DB)*(rAB-DB)) + ((DA-DB)*(DA-DB)) + (a*a);
6192+ double temp2 = ((rAB-DB)*(rAB-DB)) + ((DA+DB)*(DA+DB)) + (a*a);
6193+ double temp3 = ((rAB+DB)*(rAB+DB)) + ((DA-DB)*(DA-DB)) + (a*a);
6194+ double temp4 = ((rAB+DB)*(rAB+DB)) + ((DA+DB)*(DA+DB)) + (a*a);
61946195 value =-pow(temp1,-0.5)/4.0 + pow(temp2,-0.5)/4.0
61956196 +pow(temp3,-0.5)/4.0 - pow(temp4,-0.5)/4.0;
61966197 }
61976198 else if(multipoleA == Qxz && multipoleB == mux){
61986199 value = this->GetSemiEmpiricalMultipoleInteraction(atomB, atomA, multipoleB, multipoleA, rAB);
6199- value *= pow(-1.0,3.0);
6200+ //value *= pow(-1.0,3.0);
6201+ value *= -1.0;
62006202 }
62016203 else if(multipoleA == muy && multipoleB == Qyz){
62026204 value = this->GetSemiEmpiricalMultipoleInteraction(atomA, atomB, mux, Qxz, rAB);
62036205 }
62046206 else if(multipoleA == Qyz && multipoleB == muy){
62056207 value = this->GetSemiEmpiricalMultipoleInteraction(atomB, atomA, multipoleB, multipoleA, rAB);
6206- value *= pow(-1.0,3.0);
6208+ //value *= pow(-1.0,3.0);
6209+ value *= -1.0;
62076210 }
62086211 // Eq. (59) in [DT_1977]
62096212 else if(multipoleA == muz && multipoleB == Qxx){
6210- double temp1 = pow(rAB+DA,2.0) + pow(2.0*DB,2.0) + pow(a,2.0);
6211- double temp2 = pow(rAB-DA,2.0) + pow(2.0*DB,2.0) + pow(a,2.0);
6212- double temp3 = pow(rAB+DA,2.0) + pow(a,2.0);
6213- double temp4 = pow(rAB-DA,2.0) + pow(a,2.0);
6213+ double temp1 = ((rAB+DA)*(rAB+DA)) + (4.0*DB*DB) + (a*a);
6214+ double temp2 = ((rAB-DA)*(rAB-DA)) + (4.0*DB*DB) + (a*a);
6215+ double temp3 = ((rAB+DA)*(rAB+DA)) + (a*a);
6216+ double temp4 = ((rAB-DA)*(rAB-DA)) + (a*a);
62146217 value =-pow(temp1,-0.5)/4.0 + pow(temp2,-0.5)/4.0
62156218 +pow(temp3,-0.5)/4.0 - pow(temp4,-0.5)/4.0;
62166219 }
62176220 else if(multipoleA == Qxx && multipoleB == muz){
62186221 value = this->GetSemiEmpiricalMultipoleInteraction(atomB, atomA, multipoleB, multipoleA, rAB);
6219- value *= pow(-1.0,3.0);
6222+ //value *= pow(-1.0,3.0);
6223+ value *= -1.0;
62206224 }
62216225 else if(multipoleA == muz && multipoleB == Qyy){
62226226 value = this->GetSemiEmpiricalMultipoleInteraction(atomA, atomB, muz, Qxx, rAB);
62236227 }
62246228 else if(multipoleA == Qyy && multipoleB == muz){
62256229 value = this->GetSemiEmpiricalMultipoleInteraction(atomB, atomA, multipoleB, multipoleA, rAB);
6226- value *= pow(-1.0,3.0);
6230+ //value *= pow(-1.0,3.0);
6231+ value *= -1.0;
62276232 }
62286233 // Eq. (60) in [DT_1977]
62296234 else if(multipoleA == muz && multipoleB == Qzz){
6230- double temp1 = pow(rAB+DA-2.0*DB,2.0) + pow(a,2.0);
6231- double temp2 = pow(rAB-DA-2.0*DB,2.0) + pow(a,2.0);
6232- double temp3 = pow(rAB+DA+2.0*DB,2.0) + pow(a,2.0);
6233- double temp4 = pow(rAB-DA+2.0*DB,2.0) + pow(a,2.0);
6234- double temp5 = pow(rAB+DA,2.0) + pow(a,2.0);
6235- double temp6 = pow(rAB-DA,2.0) + pow(a,2.0);
6235+ double temp1 = ((rAB+DA-2.0*DB)*(rAB+DA-2.0*DB)) + (a*a);
6236+ double temp2 = ((rAB-DA-2.0*DB)*(rAB-DA-2.0*DB)) + (a*a);
6237+ double temp3 = ((rAB+DA+2.0*DB)*(rAB+DA+2.0*DB)) + (a*a);
6238+ double temp4 = ((rAB-DA+2.0*DB)*(rAB-DA+2.0*DB)) + (a*a);
6239+ double temp5 = ((rAB+DA)*(rAB+DA)) + (a*a);
6240+ double temp6 = ((rAB-DA)*(rAB-DA)) + (a*a);
62366241 value =-pow(temp1,-0.5)/8.0 + pow(temp2,-0.5)/8.0
62376242 -pow(temp3,-0.5)/8.0 + pow(temp4,-0.5)/8.0
62386243 +pow(temp5,-0.5)/4.0 - pow(temp6,-0.5)/4.0;
62396244 }
62406245 else if(multipoleA == Qzz && multipoleB == muz){
62416246 value = this->GetSemiEmpiricalMultipoleInteraction(atomB, atomA, multipoleB, multipoleA, rAB);
6242- value *= pow(-1.0,3.0);
6247+ //value *= pow(-1.0,3.0);
6248+ value *= -1.0;
62436249 }
62446250 // Eq. (61) in [DT_1977]
62456251 else if(multipoleA == Qxx && multipoleB == Qxx){
6246- double temp1 = pow(rAB,2.0) + 4.0*pow(DA-DB,2.0) + pow(a,2.0);
6247- double temp2 = pow(rAB,2.0) + 4.0*pow(DA+DB,2.0) + pow(a,2.0);
6248- double temp3 = pow(rAB,2.0) + pow(2.0*DA,2.0) + pow(a,2.0);
6249- double temp4 = pow(rAB,2.0) + pow(2.0*DB,2.0) + pow(a,2.0);
6250- double temp5 = pow(rAB,2.0) + pow(a,2.0);
6252+ double temp1 = (rAB*rAB) + 4.0*((DA-DB)*(DA-DB)) + (a*a);
6253+ double temp2 = (rAB*rAB) + 4.0*((DA+DB)*(DA+DB)) + (a*a);
6254+ double temp3 = (rAB*rAB) + (4.0*DA*DA) + (a*a);
6255+ double temp4 = (rAB*rAB) + (4.0*DB*DB) + (a*a);
6256+ double temp5 = (rAB*rAB) + (a*a);
62516257 value = pow(temp1,-0.5)/8.0 + pow(temp2,-0.5)/8.0
62526258 -pow(temp3,-0.5)/4.0 - pow(temp4,-0.5)/4.0
62536259 +pow(temp5,-0.5)/4.0;
@@ -6257,51 +6263,51 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(const Atom& atomA,
62576263 }
62586264 // Eq. (62) in [DT_1977]
62596265 else if(multipoleA == Qxx && multipoleB == Qyy){
6260- double temp1 = pow(rAB,2.0) + pow(2.0*DA,2.0) + pow(2.0*DB,2.0)+ pow(a,2.0);
6261- double temp2 = pow(rAB,2.0) + pow(2.0*DA,2.0) + pow(a,2.0);
6262- double temp3 = pow(rAB,2.0) + pow(2.0*DB,2.0) + pow(a,2.0);
6263- double temp4 = pow(rAB,2.0) + pow(a,2.0);
6266+ double temp1 = (rAB*rAB) + (4.0*DA*DA) + (4.0*DB*DB)+ (a*a);
6267+ double temp2 = (rAB*rAB) + (4.0*DA*DA) + (a*a);
6268+ double temp3 = (rAB*rAB) + (4.0*DB*DB) + (a*a);
6269+ double temp4 = (rAB*rAB) + (a*a);
62646270 value = pow(temp1,-0.5)/4.0 - pow(temp2,-0.5)/4.0
62656271 -pow(temp3,-0.5)/4.0 + pow(temp4,-0.5)/4.0;
62666272 }
62676273 else if(multipoleA == Qyy && multipoleB == Qxx){
62686274 value = this->GetSemiEmpiricalMultipoleInteraction(atomB, atomA, multipoleB, multipoleA, rAB);
6269- value *= pow(-1.0,4.0);
6275+ //value *= pow(-1.0,4.0);
62706276 }
62716277 // Eq. (63) in [DT_1977]
62726278 else if(multipoleA == Qxx && multipoleB == Qzz){
6273- double temp1 = pow(rAB-2.0*DB,2.0) + pow(2.0*DA,2.0) + pow(a,2.0);
6274- double temp2 = pow(rAB+2.0*DB,2.0) + pow(2.0*DA,2.0) + pow(a,2.0);
6275- double temp3 = pow(rAB-2.0*DB,2.0) + pow(a,2.0);
6276- double temp4 = pow(rAB+2.0*DB,2.0) + pow(a,2.0);
6277- double temp5 = pow(rAB,2.0) + pow(2.0*DA,2.0) + pow(a,2.0);
6278- double temp6 = pow(rAB,2.0) + pow(a,2.0);
6279+ double temp1 = ((rAB-2.0*DB)*(rAB-2.0*DB)) + (4.0*DA*DA) + (a*a);
6280+ double temp2 = ((rAB+2.0*DB)*(rAB+2.0*DB)) + (4.0*DA*DA) + (a*a);
6281+ double temp3 = ((rAB-2.0*DB)*(rAB-2.0*DB)) + (a*a);
6282+ double temp4 = ((rAB+2.0*DB)*(rAB+2.0*DB)) + (a*a);
6283+ double temp5 = (rAB*rAB) + (4.0*DA*DA) + (a*a);
6284+ double temp6 = (rAB*rAB) + (a*a);
62796285 value = pow(temp1,-0.5)/8.0 + pow(temp2,-0.5)/8.0
62806286 -pow(temp3,-0.5)/8.0 - pow(temp4,-0.5)/8.0
62816287 -pow(temp5,-0.5)/4.0 + pow(temp6,-0.5)/4.0;
62826288 }
62836289 else if(multipoleA == Qzz && multipoleB == Qxx){
62846290 value = this->GetSemiEmpiricalMultipoleInteraction(atomB, atomA, multipoleB, multipoleA, rAB);
6285- value *= pow(-1.0,4.0);
6291+ //value *= pow(-1.0,4.0);
62866292 }
62876293 else if(multipoleA == Qyy && multipoleB == Qzz){
62886294 value = this->GetSemiEmpiricalMultipoleInteraction(atomA, atomB, Qxx, multipoleB, rAB);
62896295 }
62906296 else if(multipoleA == Qzz && multipoleB == Qyy){
62916297 value = this->GetSemiEmpiricalMultipoleInteraction(atomB, atomA, multipoleB, multipoleA, rAB);
6292- value *= pow(-1.0,4.0);
6298+ //value *= pow(-1.0,4.0);
62936299 }
62946300 // Eq. (64) in [DT_1977]
62956301 else if(multipoleA == Qzz && multipoleB == Qzz){
6296- double temp1 = pow(rAB+2.0*DA-2.0*DB,2.0) + pow(a,2.0);
6297- double temp2 = pow(rAB+2.0*DA+2.0*DB,2.0) + pow(a,2.0);
6298- double temp3 = pow(rAB-2.0*DA-2.0*DB,2.0) + pow(a,2.0);
6299- double temp4 = pow(rAB-2.0*DA+2.0*DB,2.0) + pow(a,2.0);
6300- double temp5 = pow(rAB+2.0*DA,2.0) + pow(a,2.0);
6301- double temp6 = pow(rAB-2.0*DA,2.0) + pow(a,2.0);
6302- double temp7 = pow(rAB+2.0*DB,2.0) + pow(a,2.0);
6303- double temp8 = pow(rAB-2.0*DB,2.0) + pow(a,2.0);
6304- double temp9 = pow(rAB,2.0) + pow(a,2.0);
6302+ double temp1 = ((rAB+2.0*DA-2.0*DB)*(rAB+2.0*DA-2.0*DB)) + (a*a);
6303+ double temp2 = ((rAB+2.0*DA+2.0*DB)*(rAB+2.0*DA+2.0*DB)) + (a*a);
6304+ double temp3 = ((rAB-2.0*DA-2.0*DB)*(rAB-2.0*DA-2.0*DB)) + (a*a);
6305+ double temp4 = ((rAB-2.0*DA+2.0*DB)*(rAB-2.0*DA+2.0*DB)) + (a*a);
6306+ double temp5 = pow(rAB+2.0*DA,2.0) + (a*a);
6307+ double temp6 = pow(rAB-2.0*DA,2.0) + (a*a);
6308+ double temp7 = ((rAB+2.0*DB)*(rAB+2.0*DB)) + (a*a);
6309+ double temp8 = ((rAB-2.0*DB)*(rAB-2.0*DB)) + (a*a);
6310+ double temp9 = (rAB*rAB) + (a*a);
63056311 value = pow(temp1,-0.5)/16.0 + pow(temp2,-0.5)/16.0
63066312 +pow(temp3,-0.5)/16.0 + pow(temp4,-0.5)/16.0
63076313 -pow(temp5,-0.5)/8.0 - pow(temp6,-0.5)/8.0
@@ -6310,14 +6316,14 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(const Atom& atomA,
63106316 }
63116317 // Eq. (65) in [DT_1977]
63126318 else if(multipoleA == Qxz && multipoleB == Qxz){
6313- double temp1 = pow(rAB+DA-DB,2.0) + pow(DA-DB,2.0) + pow(a,2.0);
6314- double temp2 = pow(rAB+DA-DB,2.0) + pow(DA+DB,2.0) + pow(a,2.0);
6315- double temp3 = pow(rAB+DA+DB,2.0) + pow(DA-DB,2.0) + pow(a,2.0);
6316- double temp4 = pow(rAB+DA+DB,2.0) + pow(DA+DB,2.0) + pow(a,2.0);
6317- double temp5 = pow(rAB-DA-DB,2.0) + pow(DA-DB,2.0) + pow(a,2.0);
6318- double temp6 = pow(rAB-DA-DB,2.0) + pow(DA+DB,2.0) + pow(a,2.0);
6319- double temp7 = pow(rAB-DA+DB,2.0) + pow(DA-DB,2.0) + pow(a,2.0);
6320- double temp8 = pow(rAB-DA+DB,2.0) + pow(DA+DB,2.0) + pow(a,2.0);
6319+ double temp1 = ((rAB+DA-DB)*(rAB+DA-DB)) + ((DA-DB)*(DA-DB)) + (a*a);
6320+ double temp2 = ((rAB+DA-DB)*(rAB+DA-DB)) + ((DA+DB)*(DA+DB)) + (a*a);
6321+ double temp3 = ((rAB+DA+DB)*(rAB+DA+DB)) + ((DA-DB)*(DA-DB)) + (a*a);
6322+ double temp4 = ((rAB+DA+DB)*(rAB+DA+DB)) + ((DA+DB)*(DA+DB)) + (a*a);
6323+ double temp5 = ((rAB-DA-DB)*(rAB-DA-DB)) + ((DA-DB)*(DA-DB)) + (a*a);
6324+ double temp6 = ((rAB-DA-DB)*(rAB-DA-DB)) + ((DA+DB)*(DA+DB)) + (a*a);
6325+ double temp7 = ((rAB-DA+DB)*(rAB-DA+DB)) + ((DA-DB)*(DA-DB)) + (a*a);
6326+ double temp8 = ((rAB-DA+DB)*(rAB-DA+DB)) + ((DA+DB)*(DA+DB)) + (a*a);
63216327 value = pow(temp1,-0.5)/8.0 - pow(temp2,-0.5)/8.0
63226328 -pow(temp3,-0.5)/8.0 + pow(temp4,-0.5)/8.0
63236329 -pow(temp5,-0.5)/8.0 + pow(temp6,-0.5)/8.0
@@ -6328,9 +6334,9 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(const Atom& atomA,
63286334 }
63296335 // Eq. (66) in [DT_1977]
63306336 else if(multipoleA == Qxy && multipoleB == Qxy){
6331- double temp1 = pow(rAB,2.0) + 2.0*pow(DA-DB,2.0) + pow(a,2.0);
6332- double temp2 = pow(rAB,2.0) + 2.0*pow(DA+DB,2.0) + pow(a,2.0);
6333- double temp3 = pow(rAB,2.0) + 2.0*pow(DA,2.0) + 2.0*pow(DB,2.0) + pow(a,2.0);
6337+ double temp1 = (rAB*rAB) + 2.0*((DA-DB)*(DA-DB)) + (a*a);
6338+ double temp2 = (rAB*rAB) + 2.0*((DA+DB)*(DA+DB)) + (a*a);
6339+ double temp3 = (rAB*rAB) + 2.0*(DA*DA) + 2.0*(DB*DB) + (a*a);
63346340 value = pow(temp1,-0.5)/4.0 + pow(temp2,-0.5)/4.0
63356341 -pow(temp3,-0.5)/2.0;
63366342 }
@@ -6361,44 +6367,45 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction1stDerivative(const Atom& atomA
63616367
63626368 // Eq. (52) in [DT_1977]
63636369 if(multipoleA == sQ && multipoleB == sQ){
6364- value = -1.0*rAB*pow(pow(rAB,2.0) + pow(a,2.0), -1.5);
6370+ value = -1.0*rAB*pow((rAB*rAB) + (a*a), -1.5);
63656371 }
63666372 // Eq. (53) in [DT_1977]
63676373 else if(multipoleA == sQ && multipoleB == muz){
6368- double temp1 = pow(rAB+DB,2.0) + pow(a,2.0);
6369- double temp2 = pow(rAB-DB,2.0) + pow(a,2.0);
6374+ double temp1 = ((rAB+DB)*(rAB+DB)) + (a*a);
6375+ double temp2 = ((rAB-DB)*(rAB-DB)) + (a*a);
63706376 value = (rAB+DB)*pow(temp1,-1.5)/2.0
63716377 -(rAB-DB)*pow(temp2,-1.5)/2.0;
63726378 value *= -1.0;
63736379 }
63746380 else if(multipoleA == muz && multipoleB == sQ){
63756381 value = this->GetSemiEmpiricalMultipoleInteraction1stDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6376- value *= pow(-1.0,1.0);
6382+ //value *= pow(-1.0,1.0);
6383+ value *= -1.0;
63776384 }
63786385 // Eq. (54) in [DT_1977]
63796386 else if(multipoleA == sQ && multipoleB == Qxx){
6380- double temp1 = pow(rAB,2.0) + pow(2.0*DB,2.0) + pow(a,2.0);
6381- double temp2 = pow(rAB,2.0) + pow(a,2.0);
6387+ double temp1 = (rAB*rAB) + (4.0*DB*DB) + (a*a);
6388+ double temp2 = (rAB*rAB) + (a*a);
63826389 value = rAB*pow(temp1,-1.5)/2.0
63836390 -rAB*pow(temp2,-1.5)/2.0;
63846391 value *= -1.0;
63856392 }
63866393 else if(multipoleA == Qxx && multipoleB == sQ){
63876394 value = this->GetSemiEmpiricalMultipoleInteraction1stDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6388- value *= pow(-1.0,2.0);
6395+ //value *= pow(-1.0,2.0);
63896396 }
63906397 else if(multipoleA == sQ && multipoleB == Qyy){
63916398 value = this->GetSemiEmpiricalMultipoleInteraction1stDerivative(atomA, atomB, multipoleA, Qxx, rAB);
63926399 }
63936400 else if(multipoleA == Qyy && multipoleB == sQ){
63946401 value = this->GetSemiEmpiricalMultipoleInteraction1stDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6395- value *= pow(-1.0,2.0);
6402+ //value *= pow(-1.0,2.0);
63966403 }
63976404 // Eq. (55) in [DT_1977]
63986405 else if(multipoleA == sQ && multipoleB == Qzz){
6399- double temp1 = pow(rAB+2.0*DB,2.0) + pow(a,2.0);
6400- double temp2 = pow(rAB,2.0) + pow(a,2.0);
6401- double temp3 = pow(rAB-2.0*DB,2.0) + pow(a,2.0);
6406+ double temp1 = ((rAB+2.0*DB)*(rAB+2.0*DB)) + (a*a);
6407+ double temp2 = (rAB*rAB) + (a*a);
6408+ double temp3 = ((rAB-2.0*DB)*(rAB-2.0*DB)) + (a*a);
64026409 value = (rAB+2.0*DB)*pow(temp1,-1.5)/4.0
64036410 -(rAB)*pow(temp2,-1.5)/2.0
64046411 +(rAB-2.0*DB)*pow(temp3,-1.5)/4.0;
@@ -6406,12 +6413,12 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction1stDerivative(const Atom& atomA
64066413 }
64076414 else if(multipoleA == Qzz && multipoleB == sQ){
64086415 value = this->GetSemiEmpiricalMultipoleInteraction1stDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6409- value *= pow(-1.0,2.0);
6416+ //value *= pow(-1.0,2.0);
64106417 }
64116418 // Eq. (56) in [DT_1977]
64126419 else if(multipoleA == mux && multipoleB == mux){
6413- double temp1 = pow(rAB,2.0) + pow(DA-DB,2.0) + pow(a,2.0);
6414- double temp2 = pow(rAB,2.0) + pow(DA+DB,2.0) + pow(a,2.0);
6420+ double temp1 = (rAB*rAB) + ((DA-DB)*(DA-DB)) + (a*a);
6421+ double temp2 = (rAB*rAB) + ((DA+DB)*(DA+DB)) + (a*a);
64156422 value = (rAB)*pow(temp1,-1.5)/2.0
64166423 -(rAB)*pow(temp2,-1.5)/2.0;
64176424 value *= -1.0;
@@ -6421,10 +6428,10 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction1stDerivative(const Atom& atomA
64216428 }
64226429 // Eq. (57) in [DT_1977]
64236430 else if(multipoleA == muz && multipoleB == muz){
6424- double temp1 = pow(rAB+DA-DB,2.0) + pow(a,2.0);
6425- double temp2 = pow(rAB+DA+DB,2.0) + pow(a,2.0);
6426- double temp3 = pow(rAB-DA-DB,2.0) + pow(a,2.0);
6427- double temp4 = pow(rAB-DA+DB,2.0) + pow(a,2.0);
6431+ double temp1 = ((rAB+DA-DB)*(rAB+DA-DB)) + (a*a);
6432+ double temp2 = ((rAB+DA+DB)*(rAB+DA+DB)) + (a*a);
6433+ double temp3 = ((rAB-DA-DB)*(rAB-DA-DB)) + (a*a);
6434+ double temp4 = ((rAB-DA+DB)*(rAB-DA+DB)) + (a*a);
64286435 value = (rAB+DA-DB)*pow(temp1,-1.5)/4.0
64296436 -(rAB+DA+DB)*pow(temp2,-1.5)/4.0
64306437 -(rAB-DA-DB)*pow(temp3,-1.5)/4.0
@@ -6433,10 +6440,10 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction1stDerivative(const Atom& atomA
64336440 }
64346441 // Eq. (58) in [DT_1977]
64356442 else if(multipoleA == mux && multipoleB == Qxz){
6436- double temp1 = pow(rAB-DB,2.0) + pow(DA-DB,2.0) + pow(a,2.0);
6437- double temp2 = pow(rAB-DB,2.0) + pow(DA+DB,2.0) + pow(a,2.0);
6438- double temp3 = pow(rAB+DB,2.0) + pow(DA-DB,2.0) + pow(a,2.0);
6439- double temp4 = pow(rAB+DB,2.0) + pow(DA+DB,2.0) + pow(a,2.0);
6443+ double temp1 = ((rAB-DB)*(rAB-DB)) + ((DA-DB)*(DA-DB)) + (a*a);
6444+ double temp2 = ((rAB-DB)*(rAB-DB)) + ((DA+DB)*(DA+DB)) + (a*a);
6445+ double temp3 = ((rAB+DB)*(rAB+DB)) + ((DA-DB)*(DA-DB)) + (a*a);
6446+ double temp4 = ((rAB+DB)*(rAB+DB)) + ((DA+DB)*(DA+DB)) + (a*a);
64406447 value =-(rAB-DB)*pow(temp1,-1.5)/4.0
64416448 +(rAB-DB)*pow(temp2,-1.5)/4.0
64426449 +(rAB+DB)*pow(temp3,-1.5)/4.0
@@ -6445,21 +6452,23 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction1stDerivative(const Atom& atomA
64456452 }
64466453 else if(multipoleA == Qxz && multipoleB == mux){
64476454 value = this->GetSemiEmpiricalMultipoleInteraction1stDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6448- value *= pow(-1.0,3.0);
6455+ //value *= pow(-1.0,3.0);
6456+ value *= -1.0;
64496457 }
64506458 else if(multipoleA == muy && multipoleB == Qyz){
64516459 value = this->GetSemiEmpiricalMultipoleInteraction1stDerivative(atomA, atomB, mux, Qxz, rAB);
64526460 }
64536461 else if(multipoleA == Qyz && multipoleB == muy){
64546462 value = this->GetSemiEmpiricalMultipoleInteraction1stDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6455- value *= pow(-1.0,3.0);
6463+ //value *= pow(-1.0,3.0);
6464+ value *= -1.0;
64566465 }
64576466 // Eq. (59) in [DT_1977]
64586467 else if(multipoleA == muz && multipoleB == Qxx){
6459- double temp1 = pow(rAB+DA,2.0) + pow(2.0*DB,2.0) + pow(a,2.0);
6460- double temp2 = pow(rAB-DA,2.0) + pow(2.0*DB,2.0) + pow(a,2.0);
6461- double temp3 = pow(rAB+DA,2.0) + pow(a,2.0);
6462- double temp4 = pow(rAB-DA,2.0) + pow(a,2.0);
6468+ double temp1 = ((rAB+DA)*(rAB+DA)) + (4.0*DB*DB) + (a*a);
6469+ double temp2 = ((rAB-DA)*(rAB-DA)) + (4.0*DB*DB) + (a*a);
6470+ double temp3 = ((rAB+DA)*(rAB+DA)) + (a*a);
6471+ double temp4 = ((rAB-DA)*(rAB-DA)) + (a*a);
64636472 value =-(rAB+DA)*pow(temp1,-1.5)/4.0
64646473 +(rAB-DA)*pow(temp2,-1.5)/4.0
64656474 +(rAB+DA)*pow(temp3,-1.5)/4.0
@@ -6468,23 +6477,25 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction1stDerivative(const Atom& atomA
64686477 }
64696478 else if(multipoleA == Qxx && multipoleB == muz){
64706479 value = this->GetSemiEmpiricalMultipoleInteraction1stDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6471- value *= pow(-1.0,3.0);
6480+ //value *= pow(-1.0,3.0);
6481+ value *= -1.0;
64726482 }
64736483 else if(multipoleA == muz && multipoleB == Qyy){
64746484 value = this->GetSemiEmpiricalMultipoleInteraction1stDerivative(atomA, atomB, muz, Qxx, rAB);
64756485 }
64766486 else if(multipoleA == Qyy && multipoleB == muz){
64776487 value = this->GetSemiEmpiricalMultipoleInteraction1stDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6478- value *= pow(-1.0,3.0);
6488+ //value *= pow(-1.0,3.0);
6489+ value *= -1.0;
64796490 }
64806491 // Eq. (60) in [DT_1977]
64816492 else if(multipoleA == muz && multipoleB == Qzz){
6482- double temp1 = pow(rAB+DA-2.0*DB,2.0) + pow(a,2.0);
6483- double temp2 = pow(rAB-DA-2.0*DB,2.0) + pow(a,2.0);
6484- double temp3 = pow(rAB+DA+2.0*DB,2.0) + pow(a,2.0);
6485- double temp4 = pow(rAB-DA+2.0*DB,2.0) + pow(a,2.0);
6486- double temp5 = pow(rAB+DA,2.0) + pow(a,2.0);
6487- double temp6 = pow(rAB-DA,2.0) + pow(a,2.0);
6493+ double temp1 = ((rAB+DA-2.0*DB)*(rAB+DA-2.0*DB)) + (a*a);
6494+ double temp2 = ((rAB-DA-2.0*DB)*(rAB-DA-2.0*DB)) + (a*a);
6495+ double temp3 = ((rAB+DA+2.0*DB)*(rAB+DA+2.0*DB)) + (a*a);
6496+ double temp4 = ((rAB-DA+2.0*DB)*(rAB-DA+2.0*DB)) + (a*a);
6497+ double temp5 = ((rAB+DA)*(rAB+DA)) + (a*a);
6498+ double temp6 = ((rAB-DA)*(rAB-DA)) + (a*a);
64886499 value =-(rAB+DA-2.0*DB)*pow(temp1,-1.5)/8.0
64896500 +(rAB-DA-2.0*DB)*pow(temp2,-1.5)/8.0
64906501 -(rAB+DA+2.0*DB)*pow(temp3,-1.5)/8.0
@@ -6495,15 +6506,16 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction1stDerivative(const Atom& atomA
64956506 }
64966507 else if(multipoleA == Qzz && multipoleB == muz){
64976508 value = this->GetSemiEmpiricalMultipoleInteraction1stDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6498- value *= pow(-1.0,3.0);
6509+ //value *= pow(-1.0,3.0);
6510+ value *= -1.0;
64996511 }
65006512 // Eq. (61) in [DT_1977]
65016513 else if(multipoleA == Qxx && multipoleB == Qxx){
6502- double temp1 = pow(rAB,2.0) + 4.0*pow(DA-DB,2.0) + pow(a,2.0);
6503- double temp2 = pow(rAB,2.0) + 4.0*pow(DA+DB,2.0) + pow(a,2.0);
6504- double temp3 = pow(rAB,2.0) + pow(2.0*DA,2.0) + pow(a,2.0);
6505- double temp4 = pow(rAB,2.0) + pow(2.0*DB,2.0) + pow(a,2.0);
6506- double temp5 = pow(rAB,2.0) + pow(a,2.0);
6514+ double temp1 = (rAB*rAB) + 4.0*((DA-DB)*(DA-DB)) + (a*a);
6515+ double temp2 = (rAB*rAB) + 4.0*((DA+DB)*(DA+DB)) + (a*a);
6516+ double temp3 = (rAB*rAB) + (4.0*DA*DA) + (a*a);
6517+ double temp4 = (rAB*rAB) + (4.0*DB*DB) + (a*a);
6518+ double temp5 = (rAB*rAB) + (a*a);
65076519 value = (rAB)*pow(temp1,-1.5)/8.0
65086520 +(rAB)*pow(temp2,-1.5)/8.0
65096521 -(rAB)*pow(temp3,-1.5)/4.0
@@ -6516,10 +6528,10 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction1stDerivative(const Atom& atomA
65166528 }
65176529 // Eq. (62) in [DT_1977]
65186530 else if(multipoleA == Qxx && multipoleB == Qyy){
6519- double temp1 = pow(rAB,2.0) + pow(2.0*DA,2.0) + pow(2.0*DB,2.0)+ pow(a,2.0);
6520- double temp2 = pow(rAB,2.0) + pow(2.0*DA,2.0) + pow(a,2.0);
6521- double temp3 = pow(rAB,2.0) + pow(2.0*DB,2.0) + pow(a,2.0);
6522- double temp4 = pow(rAB,2.0) + pow(a,2.0);
6531+ double temp1 = (rAB*rAB) + (4.0*DA*DA) + (4.0*DB*DB)+ (a*a);
6532+ double temp2 = (rAB*rAB) + (4.0*DA*DA) + (a*a);
6533+ double temp3 = (rAB*rAB) + (4.0*DB*DB) + (a*a);
6534+ double temp4 = (rAB*rAB) + (a*a);
65236535 value = (rAB)*pow(temp1,-1.5)/4.0
65246536 -(rAB)*pow(temp2,-1.5)/4.0
65256537 -(rAB)*pow(temp3,-1.5)/4.0
@@ -6528,16 +6540,16 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction1stDerivative(const Atom& atomA
65286540 }
65296541 else if(multipoleA == Qyy && multipoleB == Qxx){
65306542 value = this->GetSemiEmpiricalMultipoleInteraction1stDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6531- value *= pow(-1.0,4.0);
6543+ //value *= pow(-1.0,4.0);
65326544 }
65336545 // Eq. (63) in [DT_1977]
65346546 else if(multipoleA == Qxx && multipoleB == Qzz){
6535- double temp1 = pow(rAB-2.0*DB,2.0) + pow(2.0*DA,2.0) + pow(a,2.0);
6536- double temp2 = pow(rAB+2.0*DB,2.0) + pow(2.0*DA,2.0) + pow(a,2.0);
6537- double temp3 = pow(rAB-2.0*DB,2.0) + pow(a,2.0);
6538- double temp4 = pow(rAB+2.0*DB,2.0) + pow(a,2.0);
6539- double temp5 = pow(rAB,2.0) + pow(2.0*DA,2.0) + pow(a,2.0);
6540- double temp6 = pow(rAB,2.0) + pow(a,2.0);
6547+ double temp1 = ((rAB-2.0*DB)*(rAB-2.0*DB)) + (4.0*DA*DA) + (a*a);
6548+ double temp2 = ((rAB+2.0*DB)*(rAB+2.0*DB)) + (4.0*DA*DA) + (a*a);
6549+ double temp3 = ((rAB-2.0*DB)*(rAB-2.0*DB)) + (a*a);
6550+ double temp4 = ((rAB+2.0*DB)*(rAB+2.0*DB)) + (a*a);
6551+ double temp5 = (rAB*rAB) + (4.0*DA*DA) + (a*a);
6552+ double temp6 = (rAB*rAB) + (a*a);
65416553 value = (rAB-2.0*DB)*pow(temp1,-1.5)/8.0
65426554 +(rAB+2.0*DB)*pow(temp2,-1.5)/8.0
65436555 -(rAB-2.0*DB)*pow(temp3,-1.5)/8.0
@@ -6548,26 +6560,26 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction1stDerivative(const Atom& atomA
65486560 }
65496561 else if(multipoleA == Qzz && multipoleB == Qxx){
65506562 value = this->GetSemiEmpiricalMultipoleInteraction1stDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6551- value *= pow(-1.0,4.0);
6563+ //value *= pow(-1.0,4.0);
65526564 }
65536565 else if(multipoleA == Qyy && multipoleB == Qzz){
65546566 value = this->GetSemiEmpiricalMultipoleInteraction1stDerivative(atomA, atomB, Qxx, multipoleB, rAB);
65556567 }
65566568 else if(multipoleA == Qzz && multipoleB == Qyy){
65576569 value = this->GetSemiEmpiricalMultipoleInteraction1stDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6558- value *= pow(-1.0,4.0);
6570+ //value *= pow(-1.0,4.0);
65596571 }
65606572 // Eq. (64) in [DT_1977]
65616573 else if(multipoleA == Qzz && multipoleB == Qzz){
6562- double temp1 = pow(rAB+2.0*DA-2.0*DB,2.0) + pow(a,2.0);
6563- double temp2 = pow(rAB+2.0*DA+2.0*DB,2.0) + pow(a,2.0);
6564- double temp3 = pow(rAB-2.0*DA-2.0*DB,2.0) + pow(a,2.0);
6565- double temp4 = pow(rAB-2.0*DA+2.0*DB,2.0) + pow(a,2.0);
6566- double temp5 = pow(rAB+2.0*DA,2.0) + pow(a,2.0);
6567- double temp6 = pow(rAB-2.0*DA,2.0) + pow(a,2.0);
6568- double temp7 = pow(rAB+2.0*DB,2.0) + pow(a,2.0);
6569- double temp8 = pow(rAB-2.0*DB,2.0) + pow(a,2.0);
6570- double temp9 = pow(rAB,2.0) + pow(a,2.0);
6574+ double temp1 = ((rAB+2.0*DA-2.0*DB)*(rAB+2.0*DA-2.0*DB)) + (a*a);
6575+ double temp2 = ((rAB+2.0*DA+2.0*DB)*(rAB+2.0*DA+2.0*DB)) + (a*a);
6576+ double temp3 = ((rAB-2.0*DA-2.0*DB)*(rAB-2.0*DA-2.0*DB)) + (a*a);
6577+ double temp4 = ((rAB-2.0*DA+2.0*DB)*(rAB-2.0*DA+2.0*DB)) + (a*a);
6578+ double temp5 = pow(rAB+2.0*DA,2.0) + (a*a);
6579+ double temp6 = pow(rAB-2.0*DA,2.0) + (a*a);
6580+ double temp7 = ((rAB+2.0*DB)*(rAB+2.0*DB)) + (a*a);
6581+ double temp8 = ((rAB-2.0*DB)*(rAB-2.0*DB)) + (a*a);
6582+ double temp9 = (rAB*rAB) + (a*a);
65716583 value = (rAB+2.0*DA-2.0*DB)*pow(temp1,-1.5)/16.0
65726584 +(rAB+2.0*DA+2.0*DB)*pow(temp2,-1.5)/16.0
65736585 +(rAB-2.0*DA-2.0*DB)*pow(temp3,-1.5)/16.0
@@ -6581,14 +6593,14 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction1stDerivative(const Atom& atomA
65816593 }
65826594 // Eq. (65) in [DT_1977]
65836595 else if(multipoleA == Qxz && multipoleB == Qxz){
6584- double temp1 = pow(rAB+DA-DB,2.0) + pow(DA-DB,2.0) + pow(a,2.0);
6585- double temp2 = pow(rAB+DA-DB,2.0) + pow(DA+DB,2.0) + pow(a,2.0);
6586- double temp3 = pow(rAB+DA+DB,2.0) + pow(DA-DB,2.0) + pow(a,2.0);
6587- double temp4 = pow(rAB+DA+DB,2.0) + pow(DA+DB,2.0) + pow(a,2.0);
6588- double temp5 = pow(rAB-DA-DB,2.0) + pow(DA-DB,2.0) + pow(a,2.0);
6589- double temp6 = pow(rAB-DA-DB,2.0) + pow(DA+DB,2.0) + pow(a,2.0);
6590- double temp7 = pow(rAB-DA+DB,2.0) + pow(DA-DB,2.0) + pow(a,2.0);
6591- double temp8 = pow(rAB-DA+DB,2.0) + pow(DA+DB,2.0) + pow(a,2.0);
6596+ double temp1 = ((rAB+DA-DB)*(rAB+DA-DB)) + ((DA-DB)*(DA-DB)) + (a*a);
6597+ double temp2 = ((rAB+DA-DB)*(rAB+DA-DB)) + ((DA+DB)*(DA+DB)) + (a*a);
6598+ double temp3 = ((rAB+DA+DB)*(rAB+DA+DB)) + ((DA-DB)*(DA-DB)) + (a*a);
6599+ double temp4 = ((rAB+DA+DB)*(rAB+DA+DB)) + ((DA+DB)*(DA+DB)) + (a*a);
6600+ double temp5 = ((rAB-DA-DB)*(rAB-DA-DB)) + ((DA-DB)*(DA-DB)) + (a*a);
6601+ double temp6 = ((rAB-DA-DB)*(rAB-DA-DB)) + ((DA+DB)*(DA+DB)) + (a*a);
6602+ double temp7 = ((rAB-DA+DB)*(rAB-DA+DB)) + ((DA-DB)*(DA-DB)) + (a*a);
6603+ double temp8 = ((rAB-DA+DB)*(rAB-DA+DB)) + ((DA+DB)*(DA+DB)) + (a*a);
65926604 value = (rAB+DA-DB)*pow(temp1,-1.5)/8.0
65936605 -(rAB+DA-DB)*pow(temp2,-1.5)/8.0
65946606 -(rAB+DA+DB)*pow(temp3,-1.5)/8.0
@@ -6604,9 +6616,9 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction1stDerivative(const Atom& atomA
66046616 }
66056617 // Eq. (66) in [DT_1977]
66066618 else if(multipoleA == Qxy && multipoleB == Qxy){
6607- double temp1 = pow(rAB,2.0) + 2.0*pow(DA-DB,2.0) + pow(a,2.0);
6608- double temp2 = pow(rAB,2.0) + 2.0*pow(DA+DB,2.0) + pow(a,2.0);
6609- double temp3 = pow(rAB,2.0) + 2.0*pow(DA,2.0) + 2.0*pow(DB,2.0) + pow(a,2.0);
6619+ double temp1 = (rAB*rAB) + 2.0*((DA-DB)*(DA-DB)) + (a*a);
6620+ double temp2 = (rAB*rAB) + 2.0*((DA+DB)*(DA+DB)) + (a*a);
6621+ double temp3 = (rAB*rAB) + 2.0*(DA*DA) + 2.0*(DB*DB) + (a*a);
66106622 value = (rAB)*pow(temp1,-1.5)/4.0
66116623 +(rAB)*pow(temp2,-1.5)/4.0
66126624 -(rAB)*pow(temp3,-1.5)/2.0;
@@ -6640,74 +6652,75 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction2ndDerivative(const Atom& atomA
66406652 // Eq. (52) in [DT_1977]
66416653 if(multipoleA == sQ && multipoleB == sQ){
66426654 double c1 = 1.0;
6643- double f1 = pow(rAB,2.0);
6644- double a1 = pow(a,2.0);
6655+ double f1 = (rAB*rAB);
6656+ double a1 = (a*a);
66456657 value = c1*(3.0*f1*pow(f1+a1,-2.5) - pow(f1+a1,-1.5));
66466658 }
66476659 // Eq. (53) in [DT_1977]
66486660 else if(multipoleA == sQ && multipoleB == muz){
66496661 double c1 = 0.5;
66506662 double c2 = -0.5;
6651- double f1 = pow(rAB+DB,2.0);
6652- double f2 = pow(rAB-DB,2.0);
6653- double a1 = pow(a,2.0);
6654- double a2 = pow(a,2.0);
6663+ double f1 = ((rAB+DB)*(rAB+DB));
6664+ double f2 = ((rAB-DB)*(rAB-DB));
6665+ double a1 = (a*a);
6666+ double a2 = (a*a);
66556667 value = c1*(3.0*f1*pow(f1+a1,-2.5) - pow(f1+a1,-1.5));
66566668 value += c2*(3.0*f2*pow(f2+a2,-2.5) - pow(f2+a2,-1.5));
66576669 }
66586670 else if(multipoleA == muz && multipoleB == sQ){
66596671 value = this->GetSemiEmpiricalMultipoleInteraction2ndDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6660- value *= pow(-1.0,1.0);
6672+ //value *= pow(-1.0,1.0);
6673+ value *= -1.0;
66616674 }
66626675 // Eq. (54) in [DT_1977]
66636676 else if(multipoleA == sQ && multipoleB == Qxx){
66646677 double c1 = 0.5;
66656678 double c2 = -0.5;
6666- double f1 = pow(rAB,2.0);
6667- double f2 = pow(rAB,2.0);
6668- double a1 = pow(2.0*DB,2.0) + pow(a,2.0);
6669- double a2 = pow(a,2.0);
6679+ double f1 = (rAB*rAB);
6680+ double f2 = (rAB*rAB);
6681+ double a1 = (4.0*DB*DB) + (a*a);
6682+ double a2 = (a*a);
66706683 value = c1*(3.0*f1*pow(f1+a1,-2.5) - pow(f1+a1,-1.5));
66716684 value += c2*(3.0*f2*pow(f2+a2,-2.5) - pow(f2+a2,-1.5));
66726685 }
66736686 else if(multipoleA == Qxx && multipoleB == sQ){
66746687 value = this->GetSemiEmpiricalMultipoleInteraction2ndDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6675- value *= pow(-1.0,2.0);
6688+ //value *= pow(-1.0,2.0);
66766689 }
66776690 else if(multipoleA == sQ && multipoleB == Qyy){
66786691 value = this->GetSemiEmpiricalMultipoleInteraction2ndDerivative(atomA, atomB, multipoleA, Qxx, rAB);
66796692 }
66806693 else if(multipoleA == Qyy && multipoleB == sQ){
66816694 value = this->GetSemiEmpiricalMultipoleInteraction2ndDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6682- value *= pow(-1.0,2.0);
6695+ //value *= pow(-1.0,2.0);
66836696 }
66846697 // Eq. (55) in [DT_1977]
66856698 else if(multipoleA == sQ && multipoleB == Qzz){
66866699 double c1 = 0.25;
66876700 double c2 = -0.50;
66886701 double c3 = 0.25;
6689- double f1 = pow(rAB+2.0*DB,2.0);
6690- double f2 = pow(rAB,2.0);
6691- double f3 = pow(rAB-2.0*DB,2.0);
6692- double a1 = pow(a,2.0);
6693- double a2 = pow(a,2.0);
6694- double a3 = pow(a,2.0);
6702+ double f1 = ((rAB+2.0*DB)*(rAB+2.0*DB));
6703+ double f2 = (rAB*rAB);
6704+ double f3 = ((rAB-2.0*DB)*(rAB-2.0*DB));
6705+ double a1 = (a*a);
6706+ double a2 = (a*a);
6707+ double a3 = (a*a);
66956708 value = c1*(3.0*f1*pow(f1+a1,-2.5) - pow(f1+a1,-1.5));
66966709 value += c2*(3.0*f2*pow(f2+a2,-2.5) - pow(f2+a2,-1.5));
66976710 value += c3*(3.0*f3*pow(f3+a3,-2.5) - pow(f3+a3,-1.5));
66986711 }
66996712 else if(multipoleA == Qzz && multipoleB == sQ){
67006713 value = this->GetSemiEmpiricalMultipoleInteraction2ndDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6701- value *= pow(-1.0,2.0);
6714+ //value *= pow(-1.0,2.0);
67026715 }
67036716 // Eq. (56) in [DT_1977]
67046717 else if(multipoleA == mux && multipoleB == mux){
67056718 double c1 = 0.50;
67066719 double c2 = -0.50;
6707- double f1 = pow(rAB,2.0);
6708- double f2 = pow(rAB,2.0);
6709- double a1 = pow(DA-DB,2.0) + pow(a,2.0);
6710- double a2 = pow(DA+DB,2.0) + pow(a,2.0);
6720+ double f1 = (rAB*rAB);
6721+ double f2 = (rAB*rAB);
6722+ double a1 = ((DA-DB)*(DA-DB)) + (a*a);
6723+ double a2 = ((DA+DB)*(DA+DB)) + (a*a);
67116724 value = c1*(3.0*f1*pow(f1+a1,-2.5) - pow(f1+a1,-1.5));
67126725 value += c2*(3.0*f2*pow(f2+a2,-2.5) - pow(f2+a2,-1.5));
67136726 }
@@ -6720,14 +6733,14 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction2ndDerivative(const Atom& atomA
67206733 double c2 = -0.25;
67216734 double c3 = -0.25;
67226735 double c4 = 0.25;
6723- double f1 = pow(rAB+DA-DB,2.0);
6724- double f2 = pow(rAB+DA+DB,2.0);
6725- double f3 = pow(rAB-DA-DB,2.0);
6726- double f4 = pow(rAB-DA+DB,2.0);
6727- double a1 = pow(a,2.0);
6728- double a2 = pow(a,2.0);
6729- double a3 = pow(a,2.0);
6730- double a4 = pow(a,2.0);
6736+ double f1 = ((rAB+DA-DB)*(rAB+DA-DB));
6737+ double f2 = ((rAB+DA+DB)*(rAB+DA+DB));
6738+ double f3 = ((rAB-DA-DB)*(rAB-DA-DB));
6739+ double f4 = ((rAB-DA+DB)*(rAB-DA+DB));
6740+ double a1 = (a*a);
6741+ double a2 = (a*a);
6742+ double a3 = (a*a);
6743+ double a4 = (a*a);
67316744 value = c1*(3.0*f1*pow(f1+a1,-2.5) - pow(f1+a1,-1.5));
67326745 value += c2*(3.0*f2*pow(f2+a2,-2.5) - pow(f2+a2,-1.5));
67336746 value += c3*(3.0*f3*pow(f3+a3,-2.5) - pow(f3+a3,-1.5));
@@ -6739,14 +6752,14 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction2ndDerivative(const Atom& atomA
67396752 double c2 = 0.25;
67406753 double c3 = 0.25;
67416754 double c4 = -0.25;
6742- double f1 = pow(rAB-DB,2.0);
6743- double f2 = pow(rAB-DB,2.0);
6744- double f3 = pow(rAB+DB,2.0);
6745- double f4 = pow(rAB+DB,2.0);
6746- double a1 = pow(DA-DB,2.0) + pow(a,2.0);
6747- double a2 = pow(DA+DB,2.0) + pow(a,2.0);
6748- double a3 = pow(DA-DB,2.0) + pow(a,2.0);
6749- double a4 = pow(DA+DB,2.0) + pow(a,2.0);
6755+ double f1 = ((rAB-DB)*(rAB-DB));
6756+ double f2 = ((rAB-DB)*(rAB-DB));
6757+ double f3 = ((rAB+DB)*(rAB+DB));
6758+ double f4 = ((rAB+DB)*(rAB+DB));
6759+ double a1 = ((DA-DB)*(DA-DB)) + (a*a);
6760+ double a2 = ((DA+DB)*(DA+DB)) + (a*a);
6761+ double a3 = ((DA-DB)*(DA-DB)) + (a*a);
6762+ double a4 = ((DA+DB)*(DA+DB)) + (a*a);
67506763 value = c1*(3.0*f1*pow(f1+a1,-2.5) - pow(f1+a1,-1.5));
67516764 value += c2*(3.0*f2*pow(f2+a2,-2.5) - pow(f2+a2,-1.5));
67526765 value += c3*(3.0*f3*pow(f3+a3,-2.5) - pow(f3+a3,-1.5));
@@ -6754,14 +6767,16 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction2ndDerivative(const Atom& atomA
67546767 }
67556768 else if(multipoleA == Qxz && multipoleB == mux){
67566769 value = this->GetSemiEmpiricalMultipoleInteraction2ndDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6757- value *= pow(-1.0,3.0);
6770+ //value *= pow(-1.0,3.0);
6771+ value *= -1.0;
67586772 }
67596773 else if(multipoleA == muy && multipoleB == Qyz){
67606774 value = this->GetSemiEmpiricalMultipoleInteraction2ndDerivative(atomA, atomB, mux, Qxz, rAB);
67616775 }
67626776 else if(multipoleA == Qyz && multipoleB == muy){
67636777 value = this->GetSemiEmpiricalMultipoleInteraction2ndDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6764- value *= pow(-1.0,3.0);
6778+ //value *= pow(-1.0,3.0);
6779+ value *= -1.0;
67656780 }
67666781 // Eq. (59) in [DT_1977]
67676782 else if(multipoleA == muz && multipoleB == Qxx){
@@ -6769,14 +6784,14 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction2ndDerivative(const Atom& atomA
67696784 double c2 = 0.25;
67706785 double c3 = 0.25;
67716786 double c4 = -0.25;
6772- double f1 = pow(rAB+DA,2.0);
6773- double f2 = pow(rAB-DA,2.0);
6774- double f3 = pow(rAB+DA,2.0);
6775- double f4 = pow(rAB-DA,2.0);
6776- double a1 = pow(2.0*DB,2.0) + pow(a,2.0);
6777- double a2 = pow(2.0*DB,2.0) + pow(a,2.0);
6778- double a3 = pow(a,2.0);
6779- double a4 = pow(a,2.0);
6787+ double f1 = ((rAB+DA)*(rAB+DA));
6788+ double f2 = ((rAB-DA)*(rAB-DA));
6789+ double f3 = ((rAB+DA)*(rAB+DA));
6790+ double f4 = ((rAB-DA)*(rAB-DA));
6791+ double a1 = (4.0*DB*DB) + (a*a);
6792+ double a2 = (4.0*DB*DB) + (a*a);
6793+ double a3 = (a*a);
6794+ double a4 = (a*a);
67806795 value = c1*(3.0*f1*pow(f1+a1,-2.5) - pow(f1+a1,-1.5));
67816796 value += c2*(3.0*f2*pow(f2+a2,-2.5) - pow(f2+a2,-1.5));
67826797 value += c3*(3.0*f3*pow(f3+a3,-2.5) - pow(f3+a3,-1.5));
@@ -6784,14 +6799,16 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction2ndDerivative(const Atom& atomA
67846799 }
67856800 else if(multipoleA == Qxx && multipoleB == muz){
67866801 value = this->GetSemiEmpiricalMultipoleInteraction2ndDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6787- value *= pow(-1.0,3.0);
6802+ //value *= pow(-1.0,3.0);
6803+ value *= -1.0;
67886804 }
67896805 else if(multipoleA == muz && multipoleB == Qyy){
67906806 value = this->GetSemiEmpiricalMultipoleInteraction2ndDerivative(atomA, atomB, muz, Qxx, rAB);
67916807 }
67926808 else if(multipoleA == Qyy && multipoleB == muz){
67936809 value = this->GetSemiEmpiricalMultipoleInteraction2ndDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6794- value *= pow(-1.0,3.0);
6810+ //value *= pow(-1.0,3.0);
6811+ value *= -1.0;
67956812 }
67966813 // Eq. (60) in [DT_1977]
67976814 else if(multipoleA == muz && multipoleB == Qzz){
@@ -6801,18 +6818,18 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction2ndDerivative(const Atom& atomA
68016818 double c4 = 0.125;
68026819 double c5 = 0.25;
68036820 double c6 = -0.25;
6804- double f1 = pow(rAB+DA-2.0*DB,2.0);
6805- double f2 = pow(rAB-DA-2.0*DB,2.0);
6806- double f3 = pow(rAB+DA+2.0*DB,2.0);
6807- double f4 = pow(rAB-DA+2.0*DB,2.0);
6808- double f5 = pow(rAB+DA,2.0);
6809- double f6 = pow(rAB-DA,2.0);
6810- double a1 = pow(a,2.0);
6811- double a2 = pow(a,2.0);
6812- double a3 = pow(a,2.0);
6813- double a4 = pow(a,2.0);
6814- double a5 = pow(a,2.0);
6815- double a6 = pow(a,2.0);
6821+ double f1 = ((rAB+DA-2.0*DB)*(rAB+DA-2.0*DB));
6822+ double f2 = ((rAB-DA-2.0*DB)*(rAB-DA-2.0*DB));
6823+ double f3 = ((rAB+DA+2.0*DB)*(rAB+DA+2.0*DB));
6824+ double f4 = ((rAB-DA+2.0*DB)*(rAB-DA+2.0*DB));
6825+ double f5 = ((rAB+DA)*(rAB+DA));
6826+ double f6 = ((rAB-DA)*(rAB-DA));
6827+ double a1 = (a*a);
6828+ double a2 = (a*a);
6829+ double a3 = (a*a);
6830+ double a4 = (a*a);
6831+ double a5 = (a*a);
6832+ double a6 = (a*a);
68166833 value = c1*(3.0*f1*pow(f1+a1,-2.5) - pow(f1+a1,-1.5));
68176834 value += c2*(3.0*f2*pow(f2+a2,-2.5) - pow(f2+a2,-1.5));
68186835 value += c3*(3.0*f3*pow(f3+a3,-2.5) - pow(f3+a3,-1.5));
@@ -6822,7 +6839,8 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction2ndDerivative(const Atom& atomA
68226839 }
68236840 else if(multipoleA == Qzz && multipoleB == muz){
68246841 value = this->GetSemiEmpiricalMultipoleInteraction2ndDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6825- value *= pow(-1.0,3.0);
6842+ //value *= pow(-1.0,3.0);
6843+ value *= -1.0;
68266844 }
68276845 // Eq. (61) in [DT_1977]
68286846 else if(multipoleA == Qxx && multipoleB == Qxx){
@@ -6831,16 +6849,16 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction2ndDerivative(const Atom& atomA
68316849 double c3 = -0.25;
68326850 double c4 = -0.25;
68336851 double c5 = 0.25;
6834- double f1 = pow(rAB,2.0);
6835- double f2 = pow(rAB,2.0);
6836- double f3 = pow(rAB,2.0);
6837- double f4 = pow(rAB,2.0);
6838- double f5 = pow(rAB,2.0);
6839- double a1 = 4.0*pow(DA-DB,2.0) + pow(a,2.0);
6840- double a2 = 4.0*pow(DA+DB,2.0) + pow(a,2.0);
6841- double a3 = pow(2.0*DA,2.0) + pow(a,2.0);
6842- double a4 = pow(2.0*DB,2.0) + pow(a,2.0);
6843- double a5 = pow(a,2.0);
6852+ double f1 = (rAB*rAB);
6853+ double f2 = (rAB*rAB);
6854+ double f3 = (rAB*rAB);
6855+ double f4 = (rAB*rAB);
6856+ double f5 = (rAB*rAB);
6857+ double a1 = 4.0*((DA-DB)*(DA-DB)) + (a*a);
6858+ double a2 = 4.0*((DA+DB)*(DA+DB)) + (a*a);
6859+ double a3 = (4.0*DA*DA) + (a*a);
6860+ double a4 = (4.0*DB*DB) + (a*a);
6861+ double a5 = (a*a);
68446862 value = c1*(3.0*f1*pow(f1+a1,-2.5) - pow(f1+a1,-1.5));
68456863 value += c2*(3.0*f2*pow(f2+a2,-2.5) - pow(f2+a2,-1.5));
68466864 value += c3*(3.0*f3*pow(f3+a3,-2.5) - pow(f3+a3,-1.5));
@@ -6856,14 +6874,14 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction2ndDerivative(const Atom& atomA
68566874 double c2 = -0.25;
68576875 double c3 = -0.25;
68586876 double c4 = 0.25;
6859- double f1 = pow(rAB,2.0);
6860- double f2 = pow(rAB,2.0);
6861- double f3 = pow(rAB,2.0);
6862- double f4 = pow(rAB,2.0);
6863- double a1 = pow(2.0*DA,2.0) + pow(2.0*DB,2.0) + pow(a,2.0);
6864- double a2 = pow(2.0*DA,2.0) + pow(a,2.0);
6865- double a3 = pow(2.0*DB,2.0) + pow(a,2.0);
6866- double a4 = pow(a,2.0);
6877+ double f1 = (rAB*rAB);
6878+ double f2 = (rAB*rAB);
6879+ double f3 = (rAB*rAB);
6880+ double f4 = (rAB*rAB);
6881+ double a1 = (4.0*DA*DA) + (4.0*DB*DB) + (a*a);
6882+ double a2 = (4.0*DA*DA) + (a*a);
6883+ double a3 = (4.0*DB*DB) + (a*a);
6884+ double a4 = (a*a);
68676885 value = c1*(3.0*f1*pow(f1+a1,-2.5) - pow(f1+a1,-1.5));
68686886 value += c2*(3.0*f2*pow(f2+a2,-2.5) - pow(f2+a2,-1.5));
68696887 value += c3*(3.0*f3*pow(f3+a3,-2.5) - pow(f3+a3,-1.5));
@@ -6871,7 +6889,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction2ndDerivative(const Atom& atomA
68716889 }
68726890 else if(multipoleA == Qyy && multipoleB == Qxx){
68736891 value = this->GetSemiEmpiricalMultipoleInteraction2ndDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6874- value *= pow(-1.0,4.0);
6892+ //value *= pow(-1.0,4.0);
68756893 }
68766894 // Eq. (63) in [DT_1977]
68776895 else if(multipoleA == Qxx && multipoleB == Qzz){
@@ -6881,18 +6899,18 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction2ndDerivative(const Atom& atomA
68816899 double c4 = -0.125;
68826900 double c5 = -0.25;
68836901 double c6 = 0.25;
6884- double f1 = pow(rAB-2.0*DB,2.0);
6885- double f2 = pow(rAB+2.0*DB,2.0);
6886- double f3 = pow(rAB-2.0*DB,2.0);
6887- double f4 = pow(rAB+2.0*DB,2.0);
6888- double f5 = pow(rAB ,2.0);
6889- double f6 = pow(rAB ,2.0);
6890- double a1 = pow(2.0*DA,2.0) + pow(a,2.0);
6891- double a2 = pow(2.0*DA,2.0) + pow(a,2.0);
6892- double a3 = pow(a,2.0);
6893- double a4 = pow(a,2.0);
6894- double a5 = pow(2.0*DA,2.0) + pow(a,2.0);
6895- double a6 = pow(a,2.0);
6902+ double f1 = ((rAB-2.0*DB)*(rAB-2.0*DB));
6903+ double f2 = ((rAB+2.0*DB)*(rAB+2.0*DB));
6904+ double f3 = ((rAB-2.0*DB)*(rAB-2.0*DB));
6905+ double f4 = ((rAB+2.0*DB)*(rAB+2.0*DB));
6906+ double f5 = rAB*rAB;
6907+ double f6 = rAB*rAB;
6908+ double a1 = (4.0*DA*DA) + (a*a);
6909+ double a2 = (4.0*DA*DA) + (a*a);
6910+ double a3 = (a*a);
6911+ double a4 = (a*a);
6912+ double a5 = (4.0*DA*DA) + (a*a);
6913+ double a6 = (a*a);
68966914 value = c1*(3.0*f1*pow(f1+a1,-2.5) - pow(f1+a1,-1.5));
68976915 value += c2*(3.0*f2*pow(f2+a2,-2.5) - pow(f2+a2,-1.5));
68986916 value += c3*(3.0*f3*pow(f3+a3,-2.5) - pow(f3+a3,-1.5));
@@ -6902,14 +6920,14 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction2ndDerivative(const Atom& atomA
69026920 }
69036921 else if(multipoleA == Qzz && multipoleB == Qxx){
69046922 value = this->GetSemiEmpiricalMultipoleInteraction2ndDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6905- value *= pow(-1.0,4.0);
6923+ //value *= pow(-1.0,4.0);
69066924 }
69076925 else if(multipoleA == Qyy && multipoleB == Qzz){
69086926 value = this->GetSemiEmpiricalMultipoleInteraction2ndDerivative(atomA, atomB, Qxx, multipoleB, rAB);
69096927 }
69106928 else if(multipoleA == Qzz && multipoleB == Qyy){
69116929 value = this->GetSemiEmpiricalMultipoleInteraction2ndDerivative(atomB, atomA, multipoleB, multipoleA, rAB);
6912- value *= pow(-1.0,4.0);
6930+ //value *= pow(-1.0,4.0);
69136931 }
69146932 // Eq. (64) in [DT_1977]
69156933 else if(multipoleA == Qzz && multipoleB == Qzz){
@@ -6922,24 +6940,24 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction2ndDerivative(const Atom& atomA
69226940 double c7 = -0.125;
69236941 double c8 = -0.125;
69246942 double c9 = 0.25;
6925- double f1 = pow(rAB+2.0*DA-2.0*DB,2.0);
6926- double f2 = pow(rAB+2.0*DA+2.0*DB,2.0);
6927- double f3 = pow(rAB-2.0*DA-2.0*DB,2.0);
6928- double f4 = pow(rAB-2.0*DA+2.0*DB,2.0);
6929- double f5 = pow(rAB+2.0*DA ,2.0);
6930- double f6 = pow(rAB-2.0*DA ,2.0);
6931- double f7 = pow(rAB+2.0*DB ,2.0);
6932- double f8 = pow(rAB-2.0*DB ,2.0);
6933- double f9 = pow(rAB ,2.0);
6934- double a1 = pow(a,2.0);
6935- double a2 = pow(a,2.0);
6936- double a3 = pow(a,2.0);
6937- double a4 = pow(a,2.0);
6938- double a5 = pow(a,2.0);
6939- double a6 = pow(a,2.0);
6940- double a7 = pow(a,2.0);
6941- double a8 = pow(a,2.0);
6942- double a9 = pow(a,2.0);
6943+ double f1 = ((rAB+2.0*DA-2.0*DB)*(rAB+2.0*DA-2.0*DB));
6944+ double f2 = ((rAB+2.0*DA+2.0*DB)*(rAB+2.0*DA+2.0*DB));
6945+ double f3 = ((rAB-2.0*DA-2.0*DB)*(rAB-2.0*DA-2.0*DB));
6946+ double f4 = ((rAB-2.0*DA+2.0*DB)*(rAB-2.0*DA+2.0*DB));
6947+ double f5 = ((rAB+2.0*DA)*(rAB+2.0*DA));
6948+ double f6 = ((rAB-2.0*DA)*(rAB-2.0*DA));
6949+ double f7 = ((rAB+2.0*DB)*(rAB+2.0*DB));
6950+ double f8 = ((rAB-2.0*DB)*(rAB-2.0*DB));
6951+ double f9 = (rAB*rAB);
6952+ double a1 = (a*a);
6953+ double a2 = (a*a);
6954+ double a3 = (a*a);
6955+ double a4 = (a*a);
6956+ double a5 = (a*a);
6957+ double a6 = (a*a);
6958+ double a7 = (a*a);
6959+ double a8 = (a*a);
6960+ double a9 = (a*a);
69436961 value = c1*(3.0*f1*pow(f1+a1,-2.5) - pow(f1+a1,-1.5));
69446962 value += c2*(3.0*f2*pow(f2+a2,-2.5) - pow(f2+a2,-1.5));
69456963 value += c3*(3.0*f3*pow(f3+a3,-2.5) - pow(f3+a3,-1.5));
@@ -6960,22 +6978,22 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction2ndDerivative(const Atom& atomA
69606978 double c6 = 0.125;
69616979 double c7 = 0.125;
69626980 double c8 = -0.125;
6963- double f1 = pow(rAB+DA-DB,2.0);
6964- double f2 = pow(rAB+DA-DB,2.0);
6965- double f3 = pow(rAB+DA+DB,2.0);
6966- double f4 = pow(rAB+DA+DB,2.0);
6967- double f5 = pow(rAB-DA-DB,2.0);
6968- double f6 = pow(rAB-DA-DB,2.0);
6969- double f7 = pow(rAB-DA+DB,2.0);
6970- double f8 = pow(rAB-DA+DB,2.0);
6971- double a1 = pow(DA-DB,2.0) + pow(a,2.0);
6972- double a2 = pow(DA+DB,2.0) + pow(a,2.0);
6973- double a3 = pow(DA-DB,2.0) + pow(a,2.0);
6974- double a4 = pow(DA+DB,2.0) + pow(a,2.0);
6975- double a5 = pow(DA-DB,2.0) + pow(a,2.0);
6976- double a6 = pow(DA+DB,2.0) + pow(a,2.0);
6977- double a7 = pow(DA-DB,2.0) + pow(a,2.0);
6978- double a8 = pow(DA+DB,2.0) + pow(a,2.0);
6981+ double f1 = ((rAB+DA-DB)*(rAB+DA-DB));
6982+ double f2 = ((rAB+DA-DB)*(rAB+DA-DB));
6983+ double f3 = ((rAB+DA+DB)*(rAB+DA+DB));
6984+ double f4 = ((rAB+DA+DB)*(rAB+DA+DB));
6985+ double f5 = ((rAB-DA-DB)*(rAB-DA-DB));
6986+ double f6 = ((rAB-DA-DB)*(rAB-DA-DB));
6987+ double f7 = ((rAB-DA+DB)*(rAB-DA+DB));
6988+ double f8 = ((rAB-DA+DB)*(rAB-DA+DB));
6989+ double a1 = ((DA-DB)*(DA-DB)) + (a*a);
6990+ double a2 = ((DA+DB)*(DA+DB)) + (a*a);
6991+ double a3 = ((DA-DB)*(DA-DB)) + (a*a);
6992+ double a4 = ((DA+DB)*(DA+DB)) + (a*a);
6993+ double a5 = ((DA-DB)*(DA-DB)) + (a*a);
6994+ double a6 = ((DA+DB)*(DA+DB)) + (a*a);
6995+ double a7 = ((DA-DB)*(DA-DB)) + (a*a);
6996+ double a8 = ((DA+DB)*(DA+DB)) + (a*a);
69796997 value = c1*(3.0*f1*pow(f1+a1,-2.5) - pow(f1+a1,-1.5));
69806998 value += c2*(3.0*f2*pow(f2+a2,-2.5) - pow(f2+a2,-1.5));
69816999 value += c3*(3.0*f3*pow(f3+a3,-2.5) - pow(f3+a3,-1.5));
@@ -6993,12 +7011,12 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction2ndDerivative(const Atom& atomA
69937011 double c1 = 0.25;
69947012 double c2 = 0.25;
69957013 double c3 = -0.50;
6996- double f1 = pow(rAB,2.0);
6997- double f2 = pow(rAB,2.0);
6998- double f3 = pow(rAB,2.0);
6999- double a1 = 2.0*pow(DA-DB,2.0) + pow(a,2.0);
7000- double a2 = 2.0*pow(DA+DB,2.0) + pow(a,2.0);
7001- double a3 = 2.0*pow(DA,2.0) + 2.0*pow(DB,2.0) + pow(a,2.0);
7014+ double f1 = (rAB*rAB);
7015+ double f2 = (rAB*rAB);
7016+ double f3 = (rAB*rAB);
7017+ double a1 = 2.0*((DA-DB)*(DA-DB)) + (a*a);
7018+ double a2 = 2.0*((DA+DB)*(DA+DB)) + (a*a);
7019+ double a3 = 2.0*(DA*DA) + 2.0*(DB*DB) + (a*a);
70027020 value = c1*(3.0*f1*pow(f1+a1,-2.5) - pow(f1+a1,-1.5));
70037021 value += c2*(3.0*f2*pow(f2+a2,-2.5) - pow(f2+a2,-1.5));
70047022 value += c3*(3.0*f3*pow(f3+a3,-2.5) - pow(f3+a3,-1.5));