Revisão | 3bb6cba4f87ebfa76b9d049028961b1ee71e6f88 (tree) |
---|---|
Hora | 2012-06-03 18:49:34 |
Autor | Mikiya Fujii <mikiya.fujii@gmai...> |
Commiter | Mikiya Fujii |
Equation numbers for NDDO-multipole-multipole interactions.
git-svn-id: https://svn.sourceforge.jp/svnroot/molds/trunk@698 1136aad2-a195-0410-b898-f5ea1d11b9d8
@@ -4039,9 +4039,11 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(MultipoleType multipoleA, | ||
4039 | 4039 | double value = 0.0; |
4040 | 4040 | double a = rhoA + rhoB; |
4041 | 4041 | |
4042 | + // Eq. (52) in [DT_1977] | |
4042 | 4043 | if(multipoleA == sQ && multipoleB == sQ){ |
4043 | 4044 | value = pow(pow(Rab,2.0) + pow(a,2.0), -0.5); |
4044 | 4045 | } |
4046 | + // Eq. (53) in [DT_1977] | |
4045 | 4047 | else if(multipoleA == sQ && multipoleB == muz){ |
4046 | 4048 | double temp1 = pow(Rab+DB,2.0) + pow(a,2.0); |
4047 | 4049 | double temp2 = pow(Rab-DB,2.0) + pow(a,2.0); |
@@ -4052,6 +4054,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(MultipoleType multipoleA, | ||
4052 | 4054 | rhoB, rhoA, DB, DA, Rab); |
4053 | 4055 | value *= pow(-1.0,1.0); |
4054 | 4056 | } |
4057 | + // Eq. (54) in [DT_1977] | |
4055 | 4058 | else if(multipoleA == sQ && multipoleB == Qxx){ |
4056 | 4059 | double temp1 = pow(Rab,2.0) + pow(2.0*DB,2.0) + pow(a,2.0); |
4057 | 4060 | double temp2 = pow(Rab,2.0) + pow(a,2.0); |
@@ -4071,6 +4074,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(MultipoleType multipoleA, | ||
4071 | 4074 | rhoB, rhoA, DB, DA, Rab); |
4072 | 4075 | value *= pow(-1.0,2.0); |
4073 | 4076 | } |
4077 | + // Eq. (55) in [DT_1977] | |
4074 | 4078 | else if(multipoleA == sQ && multipoleB == Qzz){ |
4075 | 4079 | double temp1 = pow(Rab+2.0*DB,2.0) + pow(a,2.0); |
4076 | 4080 | double temp2 = pow(Rab,2.0) + pow(a,2.0); |
@@ -4082,6 +4086,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(MultipoleType multipoleA, | ||
4082 | 4086 | rhoB, rhoA, DB, DA, Rab); |
4083 | 4087 | value *= pow(-1.0,2.0); |
4084 | 4088 | } |
4089 | + // Eq. (56) in [DT_1977] | |
4085 | 4090 | else if(multipoleA == mux && multipoleB == mux){ |
4086 | 4091 | double temp1 = pow(Rab,2.0) + pow(DA-DB,2.0) + pow(a,2.0); |
4087 | 4092 | double temp2 = pow(Rab,2.0) + pow(DA+DB,2.0) + pow(a,2.0); |
@@ -4091,6 +4096,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(MultipoleType multipoleA, | ||
4091 | 4096 | value = this->GetSemiEmpiricalMultipoleInteraction(mux, mux, |
4092 | 4097 | rhoA, rhoB, DA, DB, Rab); |
4093 | 4098 | } |
4099 | + // Eq. (57) in [DT_1977] | |
4094 | 4100 | else if(multipoleA == muz && multipoleB == muz){ |
4095 | 4101 | double temp1 = pow(Rab+DA-DB,2.0) + pow(a,2.0); |
4096 | 4102 | double temp2 = pow(Rab+DA+DB,2.0) + pow(a,2.0); |
@@ -4099,6 +4105,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(MultipoleType multipoleA, | ||
4099 | 4105 | value = pow(temp1,-0.5)/4.0 - pow(temp2,-0.5)/4.0 |
4100 | 4106 | -pow(temp3,-0.5)/4.0 + pow(temp4,-0.5)/4.0; |
4101 | 4107 | } |
4108 | + // Eq. (58) in [DT_1977] | |
4102 | 4109 | else if(multipoleA == mux && multipoleB == Qxz){ |
4103 | 4110 | double temp1 = pow(Rab-DB,2.0) + pow(DA-DB,2.0) + pow(a,2.0); |
4104 | 4111 | double temp2 = pow(Rab-DB,2.0) + pow(DA+DB,2.0) + pow(a,2.0); |
@@ -4121,6 +4128,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(MultipoleType multipoleA, | ||
4121 | 4128 | rhoB, rhoA, DB, DA, Rab); |
4122 | 4129 | value *= pow(-1.0,3.0); |
4123 | 4130 | } |
4131 | + // Eq. (59) in [DT_1977] | |
4124 | 4132 | else if(multipoleA == muz && multipoleB == Qxx){ |
4125 | 4133 | double temp1 = pow(Rab+DA,2.0) + pow(2.0*DB,2.0) + pow(a,2.0); |
4126 | 4134 | double temp2 = pow(Rab-DA,2.0) + pow(2.0*DB,2.0) + pow(a,2.0); |
@@ -4143,6 +4151,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(MultipoleType multipoleA, | ||
4143 | 4151 | rhoB, rhoA, DB, DA, Rab); |
4144 | 4152 | value *= pow(-1.0,3.0); |
4145 | 4153 | } |
4154 | + // Eq. (60) in [DT_1977] | |
4146 | 4155 | else if(multipoleA == muz && multipoleB == Qzz){ |
4147 | 4156 | double temp1 = pow(Rab+DA-2.0*DB,2.0) + pow(a,2.0); |
4148 | 4157 | double temp2 = pow(Rab-DA-2.0*DB,2.0) + pow(a,2.0); |
@@ -4159,6 +4168,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(MultipoleType multipoleA, | ||
4159 | 4168 | rhoB, rhoA, DB, DA, Rab); |
4160 | 4169 | value *= pow(-1.0,3.0); |
4161 | 4170 | } |
4171 | + // Eq. (61) in [DT_1977] | |
4162 | 4172 | else if(multipoleA == Qxx && multipoleB == Qxx){ |
4163 | 4173 | double temp1 = pow(Rab,2.0) + 4.0*pow(DA-DB,2.0) + pow(a,2.0); |
4164 | 4174 | double temp2 = pow(Rab,2.0) + 4.0*pow(DA+DB,2.0) + pow(a,2.0); |
@@ -4173,6 +4183,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(MultipoleType multipoleA, | ||
4173 | 4183 | value = this->GetSemiEmpiricalMultipoleInteraction(Qxx, Qxx, |
4174 | 4184 | rhoA, rhoB, DA, DB, Rab); |
4175 | 4185 | } |
4186 | + // Eq. (62) in [DT_1977] | |
4176 | 4187 | else if(multipoleA == Qxx && multipoleB == Qyy){ |
4177 | 4188 | double temp1 = pow(Rab,2.0) + pow(2.0*DA,2.0) + pow(2.0*DB,2.0)+ pow(a,2.0); |
4178 | 4189 | double temp2 = pow(Rab,2.0) + pow(2.0*DA,2.0) + pow(a,2.0); |
@@ -4186,6 +4197,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(MultipoleType multipoleA, | ||
4186 | 4197 | rhoB, rhoA, DB, DA, Rab); |
4187 | 4198 | value *= pow(-1.0,4.0); |
4188 | 4199 | } |
4200 | + // Eq. (63) in [DT_1977] | |
4189 | 4201 | else if(multipoleA == Qxx && multipoleB == Qzz){ |
4190 | 4202 | double temp1 = pow(Rab-2.0*DB,2.0) + pow(2.0*DA,2.0) + pow(a,2.0); |
4191 | 4203 | double temp2 = pow(Rab+2.0*DB,2.0) + pow(2.0*DA,2.0) + pow(a,2.0); |
@@ -4211,6 +4223,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(MultipoleType multipoleA, | ||
4211 | 4223 | rhoB, rhoA, DB, DA, Rab); |
4212 | 4224 | value *= pow(-1.0,4.0); |
4213 | 4225 | } |
4226 | + // Eq. (64) in [DT_1977] | |
4214 | 4227 | else if(multipoleA == Qzz && multipoleB == Qzz){ |
4215 | 4228 | double temp1 = pow(Rab+2.0*DA-2.0*DB,2.0) + pow(a,2.0); |
4216 | 4229 | double temp2 = pow(Rab+2.0*DA+2.0*DB,2.0) + pow(a,2.0); |
@@ -4227,6 +4240,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(MultipoleType multipoleA, | ||
4227 | 4240 | -pow(temp7,-0.5)/8.0 - pow(temp8,-0.5)/8.0 |
4228 | 4241 | +pow(temp9,-0.5)/4.0; |
4229 | 4242 | } |
4243 | + // Eq. (65) in [DT_1977] | |
4230 | 4244 | else if(multipoleA == Qxz && multipoleB == Qxz){ |
4231 | 4245 | double temp1 = pow(Rab+DA-DB,2.0) + pow(DA-DB,2.0) + pow(a,2.0); |
4232 | 4246 | double temp2 = pow(Rab+DA-DB,2.0) + pow(DA+DB,2.0) + pow(a,2.0); |
@@ -4245,6 +4259,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteraction(MultipoleType multipoleA, | ||
4245 | 4259 | value = this->GetSemiEmpiricalMultipoleInteraction(Qxz, Qxz, |
4246 | 4260 | rhoA, rhoB, DA, DB, Rab); |
4247 | 4261 | } |
4262 | + // Eq. (66) in [DT_1977] | |
4248 | 4263 | else if(multipoleA == Qxy && multipoleB == Qxy){ |
4249 | 4264 | double temp1 = pow(Rab,2.0) + 2.0*pow(DA-DB,2.0) + pow(a,2.0); |
4250 | 4265 | double temp2 = pow(Rab,2.0) + 2.0*pow(DA+DB,2.0) + pow(a,2.0); |
@@ -4276,9 +4291,11 @@ double Mndo::GetSemiEmpiricalMultipoleInteractionFirstDerivative( | ||
4276 | 4291 | double value = 0.0; |
4277 | 4292 | double a = rhoA + rhoB; |
4278 | 4293 | |
4294 | + // Eq. (52) in [DT_1977] | |
4279 | 4295 | if(multipoleA == sQ && multipoleB == sQ){ |
4280 | 4296 | value = -1.0*Rab*pow(pow(Rab,2.0) + pow(a,2.0), -1.5); |
4281 | 4297 | } |
4298 | + // Eq. (53) in [DT_1977] | |
4282 | 4299 | else if(multipoleA == sQ && multipoleB == muz){ |
4283 | 4300 | double temp1 = pow(Rab+DB,2.0) + pow(a,2.0); |
4284 | 4301 | double temp2 = pow(Rab-DB,2.0) + pow(a,2.0); |
@@ -4291,6 +4308,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteractionFirstDerivative( | ||
4291 | 4308 | multipoleB, multipoleA, rhoB, rhoA, DB, DA, Rab); |
4292 | 4309 | value *= pow(-1.0,1.0); |
4293 | 4310 | } |
4311 | + // Eq. (54) in [DT_1977] | |
4294 | 4312 | else if(multipoleA == sQ && multipoleB == Qxx){ |
4295 | 4313 | double temp1 = pow(Rab,2.0) + pow(2.0*DB,2.0) + pow(a,2.0); |
4296 | 4314 | double temp2 = pow(Rab,2.0) + pow(a,2.0); |
@@ -4312,6 +4330,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteractionFirstDerivative( | ||
4312 | 4330 | multipoleB, multipoleA, rhoB, rhoA, DB, DA, Rab); |
4313 | 4331 | value *= pow(-1.0,2.0); |
4314 | 4332 | } |
4333 | + // Eq. (55) in [DT_1977] | |
4315 | 4334 | else if(multipoleA == sQ && multipoleB == Qzz){ |
4316 | 4335 | double temp1 = pow(Rab+2.0*DB,2.0) + pow(a,2.0); |
4317 | 4336 | double temp2 = pow(Rab,2.0) + pow(a,2.0); |
@@ -4326,6 +4345,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteractionFirstDerivative( | ||
4326 | 4345 | multipoleB, multipoleA, rhoB, rhoA, DB, DA, Rab); |
4327 | 4346 | value *= pow(-1.0,2.0); |
4328 | 4347 | } |
4348 | + // Eq. (56) in [DT_1977] | |
4329 | 4349 | else if(multipoleA == mux && multipoleB == mux){ |
4330 | 4350 | double temp1 = pow(Rab,2.0) + pow(DA-DB,2.0) + pow(a,2.0); |
4331 | 4351 | double temp2 = pow(Rab,2.0) + pow(DA+DB,2.0) + pow(a,2.0); |
@@ -4337,6 +4357,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteractionFirstDerivative( | ||
4337 | 4357 | value = this->GetSemiEmpiricalMultipoleInteractionFirstDerivative( |
4338 | 4358 | mux, mux, rhoA, rhoB, DA, DB, Rab); |
4339 | 4359 | } |
4360 | + // Eq. (57) in [DT_1977] | |
4340 | 4361 | else if(multipoleA == muz && multipoleB == muz){ |
4341 | 4362 | double temp1 = pow(Rab+DA-DB,2.0) + pow(a,2.0); |
4342 | 4363 | double temp2 = pow(Rab+DA+DB,2.0) + pow(a,2.0); |
@@ -4348,6 +4369,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteractionFirstDerivative( | ||
4348 | 4369 | +(Rab-DA+DB)*pow(temp4,-1.5)/4.0; |
4349 | 4370 | value *= -1.0; |
4350 | 4371 | } |
4372 | + // Eq. (58) in [DT_1977] | |
4351 | 4373 | else if(multipoleA == mux && multipoleB == Qxz){ |
4352 | 4374 | double temp1 = pow(Rab-DB,2.0) + pow(DA-DB,2.0) + pow(a,2.0); |
4353 | 4375 | double temp2 = pow(Rab-DB,2.0) + pow(DA+DB,2.0) + pow(a,2.0); |
@@ -4373,6 +4395,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteractionFirstDerivative( | ||
4373 | 4395 | multipoleB, multipoleA, rhoB, rhoA, DB, DA, Rab); |
4374 | 4396 | value *= pow(-1.0,3.0); |
4375 | 4397 | } |
4398 | + // Eq. (59) in [DT_1977] | |
4376 | 4399 | else if(multipoleA == muz && multipoleB == Qxx){ |
4377 | 4400 | double temp1 = pow(Rab+DA,2.0) + pow(2.0*DB,2.0) + pow(a,2.0); |
4378 | 4401 | double temp2 = pow(Rab-DA,2.0) + pow(2.0*DB,2.0) + pow(a,2.0); |
@@ -4398,6 +4421,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteractionFirstDerivative( | ||
4398 | 4421 | multipoleB, multipoleA, rhoB, rhoA, DB, DA, Rab); |
4399 | 4422 | value *= pow(-1.0,3.0); |
4400 | 4423 | } |
4424 | + // Eq. (60) in [DT_1977] | |
4401 | 4425 | else if(multipoleA == muz && multipoleB == Qzz){ |
4402 | 4426 | double temp1 = pow(Rab+DA-2.0*DB,2.0) + pow(a,2.0); |
4403 | 4427 | double temp2 = pow(Rab-DA-2.0*DB,2.0) + pow(a,2.0); |
@@ -4418,6 +4442,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteractionFirstDerivative( | ||
4418 | 4442 | multipoleB, multipoleA, rhoB, rhoA, DB, DA, Rab); |
4419 | 4443 | value *= pow(-1.0,3.0); |
4420 | 4444 | } |
4445 | + // Eq. (61) in [DT_1977] | |
4421 | 4446 | else if(multipoleA == Qxx && multipoleB == Qxx){ |
4422 | 4447 | double temp1 = pow(Rab,2.0) + 4.0*pow(DA-DB,2.0) + pow(a,2.0); |
4423 | 4448 | double temp2 = pow(Rab,2.0) + 4.0*pow(DA+DB,2.0) + pow(a,2.0); |
@@ -4435,6 +4460,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteractionFirstDerivative( | ||
4435 | 4460 | value = this->GetSemiEmpiricalMultipoleInteractionFirstDerivative( |
4436 | 4461 | Qxx, Qxx, rhoA, rhoB, DA, DB, Rab); |
4437 | 4462 | } |
4463 | + // Eq. (62) in [DT_1977] | |
4438 | 4464 | else if(multipoleA == Qxx && multipoleB == Qyy){ |
4439 | 4465 | double temp1 = pow(Rab,2.0) + pow(2.0*DA,2.0) + pow(2.0*DB,2.0)+ pow(a,2.0); |
4440 | 4466 | double temp2 = pow(Rab,2.0) + pow(2.0*DA,2.0) + pow(a,2.0); |
@@ -4451,6 +4477,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteractionFirstDerivative( | ||
4451 | 4477 | multipoleB, multipoleA, rhoB, rhoA, DB, DA, Rab); |
4452 | 4478 | value *= pow(-1.0,4.0); |
4453 | 4479 | } |
4480 | + // Eq. (63) in [DT_1977] | |
4454 | 4481 | else if(multipoleA == Qxx && multipoleB == Qzz){ |
4455 | 4482 | double temp1 = pow(Rab-2.0*DB,2.0) + pow(2.0*DA,2.0) + pow(a,2.0); |
4456 | 4483 | double temp2 = pow(Rab+2.0*DB,2.0) + pow(2.0*DA,2.0) + pow(a,2.0); |
@@ -4480,6 +4507,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteractionFirstDerivative( | ||
4480 | 4507 | multipoleB, multipoleA, rhoB, rhoA, DB, DA, Rab); |
4481 | 4508 | value *= pow(-1.0,4.0); |
4482 | 4509 | } |
4510 | + // Eq. (64) in [DT_1977] | |
4483 | 4511 | else if(multipoleA == Qzz && multipoleB == Qzz){ |
4484 | 4512 | double temp1 = pow(Rab+2.0*DA-2.0*DB,2.0) + pow(a,2.0); |
4485 | 4513 | double temp2 = pow(Rab+2.0*DA+2.0*DB,2.0) + pow(a,2.0); |
@@ -4501,6 +4529,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteractionFirstDerivative( | ||
4501 | 4529 | +(Rab)*pow(temp9,-1.5)/4.0; |
4502 | 4530 | value *= -1.0; |
4503 | 4531 | } |
4532 | + // Eq. (65) in [DT_1977] | |
4504 | 4533 | else if(multipoleA == Qxz && multipoleB == Qxz){ |
4505 | 4534 | double temp1 = pow(Rab+DA-DB,2.0) + pow(DA-DB,2.0) + pow(a,2.0); |
4506 | 4535 | double temp2 = pow(Rab+DA-DB,2.0) + pow(DA+DB,2.0) + pow(a,2.0); |
@@ -4524,6 +4553,7 @@ double Mndo::GetSemiEmpiricalMultipoleInteractionFirstDerivative( | ||
4524 | 4553 | value = this->GetSemiEmpiricalMultipoleInteractionFirstDerivative( |
4525 | 4554 | Qxz, Qxz, rhoA, rhoB, DA, DB, Rab); |
4526 | 4555 | } |
4556 | + // Eq. (66) in [DT_1977] | |
4527 | 4557 | else if(multipoleA == Qxy && multipoleB == Qxy){ |
4528 | 4558 | double temp1 = pow(Rab,2.0) + 2.0*pow(DA-DB,2.0) + pow(a,2.0); |
4529 | 4559 | double temp2 = pow(Rab,2.0) + 2.0*pow(DA+DB,2.0) + pow(a,2.0); |