Package lib :: Package diffusion :: Module weights
[hide private]
[frames] | no frames]

Source Code for Module lib.diffusion.weights

  1  ############################################################################### 
  2  #                                                                             # 
  3  # Copyright (C) 2004-2005 Edward d'Auvergne                                   # 
  4  #                                                                             # 
  5  # This file is part of the program relax (http://www.nmr-relax.com).          # 
  6  #                                                                             # 
  7  # This program is free software: you can redistribute it and/or modify        # 
  8  # it under the terms of the GNU General Public License as published by        # 
  9  # the Free Software Foundation, either version 3 of the License, or           # 
 10  # (at your option) any later version.                                         # 
 11  #                                                                             # 
 12  # This program is distributed in the hope that it will be useful,             # 
 13  # but WITHOUT ANY WARRANTY; without even the implied warranty of              # 
 14  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               # 
 15  # GNU General Public License for more details.                                # 
 16  #                                                                             # 
 17  # You should have received a copy of the GNU General Public License           # 
 18  # along with this program.  If not, see <http://www.gnu.org/licenses/>.       # 
 19  #                                                                             # 
 20  ############################################################################### 
 21   
 22  # Python module imports. 
 23  from math import sqrt 
 24  from numpy import outer 
 25   
 26   
 27  ########## 
 28  # Sphere # 
 29  ########## 
 30   
 31   
 32  # Sphere weight. 
 33  ################ 
 34   
35 -def calc_sphere_ci(data, diff_data):
36 """Weight for spherical diffusion. 37 38 The equation is:: 39 40 c0 = 1. 41 """ 42 43 data.ci[0] = 1.0
44 45 46 47 48 ############ 49 # Spheroid # 50 ############ 51 52 53 # Spheroid weights. 54 ################### 55
56 -def calc_spheroid_ci(data, diff_data):
57 """Weights for spheroidal diffusion. 58 59 The equations are:: 60 61 c-1 = 1/4 (3dz**2 - 1)**2, 62 63 c0 = 3dz**2 (1 - dz**2), 64 65 c1 = 3/4 (dz**2 - 1)**2, 66 67 where dz is the direction cosine of the unit bond vector along the z-axis of the diffusion 68 tensor which is calculated as the dot product of the unit bond vector with a unit vector along 69 Dpar. 70 """ 71 72 # Components. 73 data.three_dz2_one = 3.0 * data.dz**2 - 1.0 74 data.one_two_dz2 = 1.0 - 2.0 * data.dz**2 75 data.one_dz2 = 1.0 - data.dz**2 76 data.dz2_one = -data.one_dz2 77 78 # Weights. 79 data.ci[0] = 0.25 * data.three_dz2_one**2 80 data.ci[1] = 3.0 * data.dz**2 * data.one_dz2 81 data.ci[2] = 0.75 * data.dz2_one**2
82 83 84 85 # Spheroid weight gradient. 86 ########################### 87
88 -def calc_spheroid_dci(data, diff_data):
89 """Weight gradient for spheroidal diffusion. 90 91 The equations are:: 92 93 dc-1 ddz 94 ---- = 3dz (3dz**2 - 1) --- , 95 dOi dOi 96 97 dc0 ddz 98 --- = 6dz (1 - 2dz**2) --- , 99 dOi dOi 100 101 dc1 ddz 102 --- = 3dz (dz**2 - 1) --- , 103 dOi dOi 104 105 where the orientation parameter set O is {theta, phi}. 106 """ 107 108 # Components. 109 data.dci[2:, 0] = 3.0 * data.dz * data.three_dz2_one * data.ddz_dO 110 data.dci[2:, 1] = 6.0 * data.dz * data.one_two_dz2 * data.ddz_dO 111 data.dci[2:, 2] = 3.0 * data.dz * data.dz2_one * data.ddz_dO
112 113 114 115 # Spheroid weight Hessian. 116 ########################## 117
118 -def calc_spheroid_d2ci(data, diff_data):
119 """Weight Hessian for spheroidal diffusion. 120 121 The equations are:: 122 123 d2c-1 / ddz ddz d2dz \ 124 ------- = 3 |(9dz**2 - 1) --- . --- + dz (3dz**2 - 1) ------- | , 125 dOi.dOj \ dOi dOj dOi.dOj / 126 127 d2c0 / ddz ddz d2dz \ 128 ------- = 6 |(1 - 6dz**2) --- . --- + dz (1 - 2dz**2) ------- | , 129 dOi.dOj \ dOi dOj dOi.dOj / 130 131 d2c1 / ddz ddz d2dz \ 132 ------- = 3 |(3dz**2 - 1) --- . --- + dz (dz**2 - 1) ------- | , 133 dOi.dOj \ dOi dOj dOi.dOj / 134 135 where the orientation parameter set O is {theta, phi}. 136 """ 137 138 # Outer product. 139 op = outer(data.ddz_dO, data.ddz_dO) 140 141 # Hessian. 142 data.d2ci[2:, 2:, 0] = 3.0 * ((9.0 * data.dz**2 - 1.0) * op + data.dz * data.three_dz2_one * data.d2dz_dO2) 143 data.d2ci[2:, 2:, 1] = 6.0 * ((1.0 - 6.0*data.dz**2) * op + data.dz * data.one_two_dz2 * data.d2dz_dO2) 144 data.d2ci[2:, 2:, 2] = 3.0 * (data.three_dz2_one * op + data.dz * data.dz2_one * data.d2dz_dO2)
145 146 147 148 149 ############# 150 # Ellipsoid # 151 ############# 152 153 154 # Ellipsoid weights. 155 #################### 156
157 -def calc_ellipsoid_ci(data, diff_data):
158 """Weight equations for ellipsoidal diffusion. 159 160 The equations are:: 161 162 c-2 = 1/4 (d - e), 163 164 c-1 = 3dy**2.dz**2, 165 166 c0 = 3dx**2.dz**2, 167 168 c1 = 3dx**2.dy**2, 169 170 c2 = 1/4 (d + e), 171 172 where:: 173 174 d = 3(dx**4 + dy**4 + dz**4) - 1, 175 176 e = 1/R [(1 + 3Dr)(dx**4 + 2dy**2.dz**2) + (1 - 3Dr)(dy**4 + 2dx**2.dz**2) 177 - 2(dz**4 + 2dx**2.dy**2)], 178 179 and where the factor R is defined as:: 180 ___________ 181 R = V 1 + 3Dr**2. 182 183 dx, dy, and dz are the direction cosines of the XH bond vector along the x, y, and z-axes of the 184 diffusion tensor, calculated as the dot product of the unit bond vector and the unit vectors 185 along Dx, Dy, and Dz respectively. 186 """ 187 188 # Calculate R. 189 data.R = sqrt(1 + 3.0*diff_data.params[2]**2) 190 data.inv_R = 1.0 / data.R 191 192 # Factors. 193 data.one_3Dr = 1.0 + 3.0 * diff_data.params[2] 194 data.one_m3Dr = 1.0 - 3.0 * diff_data.params[2] 195 data.dx_sqrd = data.dx**2 196 data.dy_sqrd = data.dy**2 197 data.dz_sqrd = data.dz**2 198 data.dx_cubed = data.dx**3 199 data.dy_cubed = data.dy**3 200 data.dz_cubed = data.dz**3 201 data.dx_quar = data.dx**4 202 data.dy_quar = data.dy**4 203 data.dz_quar = data.dz**4 204 205 # Components. 206 data.ex = data.dx_quar + 2.0 * data.dy_sqrd * data.dz_sqrd 207 data.ey = data.dy_quar + 2.0 * data.dx_sqrd * data.dz_sqrd 208 data.ez = data.dz_quar + 2.0 * data.dx_sqrd * data.dy_sqrd 209 210 # Calculate d. 211 d = 3.0 * (data.dx_quar + data.dy_quar + data.dz_quar) - 1.0 212 213 # Calculate e. 214 e = data.inv_R * (data.one_3Dr * data.ex + data.one_m3Dr * data.ey - 2.0 * data.ez) 215 216 # Weight c-2. 217 data.ci[0] = 0.25 * (d - e) 218 219 # Weight c-1. 220 data.ci[1] = 3.0 * data.dy**2 * data.dz**2 221 222 # Weight c0. 223 data.ci[2] = 3.0 * data.dx**2 * data.dz**2 224 225 # Weight c1. 226 data.ci[3] = 3.0 * data.dx**2 * data.dy**2 227 228 # Weight c2. 229 data.ci[4] = 0.25 * (d + e)
230 231 232 233 # Ellipsoid weight gradient. 234 ############################ 235
236 -def calc_ellipsoid_dci(data, diff_data):
237 """Weight gradient for ellipsoidal diffusion. 238 239 Oi partial derivatives 240 ====================== 241 242 The equations are:: 243 244 dc-2 / ddx ddy ddz \ de 245 ---- = 3 | dx**3 --- + dy**3 --- + dz**3 --- | - --- , 246 dOi \ dOi dOi dOi / dOi 247 248 249 dc-1 / ddz ddy \ 250 ---- = 6dy.dz | dy --- + dz --- | , 251 dOi \ dOi dOi / 252 253 254 dc0 / ddz ddx \ 255 --- = 6dx.dz | dx --- + dz --- | , 256 dOi \ dOi dOi / 257 258 259 dc1 / ddy ddx \ 260 --- = 6dx.dy | dx --- + dy --- | , 261 dOi \ dOi dOi / 262 263 264 dc2 / ddx ddy ddz \ de 265 --- = 3 | dx**3 --- + dy**3 --- + dz**3 --- | + --- , 266 dOi \ dOi dOi dOi / dOi 267 268 269 where:: 270 271 de 1 / / ddx / ddz ddy \ \ 272 --- = - | (1 + 3Dr) |dx**3 --- + dy.dz | dy --- + dz --- | | 273 dOi R \ \ dOi \ dOi dOi / / 274 275 / ddy / ddz ddx \ \ 276 + (1 - 3Dr) | dy**3 --- + dx.dz | dx --- + dz --- | | 277 \ dOi \ dOi dOi / / 278 279 / ddz / ddy ddx \ \ \ 280 - 2 | dz**3 --- + dx.dy | dx --- + dy --- | | | , 281 \ dOi \ dOi dOi / / / 282 283 284 and where the orietation parameter set O is:: 285 286 O = {alpha, beta, gamma}. 287 288 289 tm partial derivatives 290 ====================== 291 292 The equations are:: 293 294 dc-2 295 ---- = 0, 296 dtm 297 298 dc-1 299 ---- = 0, 300 dtm 301 302 dc0 303 --- = 0, 304 dtm 305 306 dc1 307 --- = 0, 308 dtm 309 310 dc2 311 --- = 0. 312 dtm 313 314 315 Da partial derivatives 316 ====================== 317 318 The equations are:: 319 320 dc-2 321 ---- = 0, 322 dDa 323 324 dc-1 325 ---- = 0, 326 dDa 327 328 dc0 329 --- = 0, 330 dDa 331 332 dc1 333 --- = 0, 334 dDa 335 336 dc2 337 --- = 0. 338 dDa 339 340 341 342 Dr partial derivatives 343 ====================== 344 345 The equations are:: 346 347 dc-2 3 de 348 ---- = - - ---, 349 dDr 4 dDr 350 351 dc-1 352 ---- = 0, 353 dDr 354 355 dc0 356 --- = 0, 357 dDr 358 359 dc1 360 --- = 0, 361 dDr 362 363 dc2 3 de 364 --- = - ---, 365 dDr 4 dDr 366 367 where:: 368 369 de 1 / \ 370 --- = ---- | (1 - Dr) (dx**4 + 2dy**2.dz**2) - (1 + Dr) (dy**4 + 2dx**2.dz**2) + 2Dr (dz**4 + 2dx**2.dy**2) | . 371 dDr R**3 \ / 372 373 374 """ 375 376 # Factors. 377 data.inv_R_cubed = data.inv_R ** 3 378 data.one_Dr = 1.0 + diff_data.params[2] 379 data.one_mDr = 1.0 - diff_data.params[2] 380 381 382 # Oi partial derivative. 383 ########################## 384 385 # Components. 386 data.ci_xy = data.dx * data.dy * (data.dx * data.ddy_dO + data.dy * data.ddx_dO) 387 data.ci_xz = data.dx * data.dz * (data.dx * data.ddz_dO + data.dz * data.ddx_dO) 388 data.ci_yz = data.dy * data.dz * (data.dy * data.ddz_dO + data.dz * data.ddy_dO) 389 390 data.ci_x = data.dx_cubed * data.ddx_dO 391 data.ci_y = data.dy_cubed * data.ddy_dO 392 data.ci_z = data.dz_cubed * data.ddz_dO 393 394 data.ci_X = data.ci_x + data.ci_yz 395 data.ci_Y = data.ci_y + data.ci_xz 396 data.ci_Z = data.ci_z + data.ci_xy 397 398 # Calculate dd_dOi. 399 dd_dOi = 3.0 * (data.ci_x + data.ci_y + data.ci_z) 400 401 # Calculate de_dOi. 402 de_dOi = data.inv_R * (data.one_3Dr * data.ci_X + data.one_m3Dr * data.ci_Y - 2.0 * data.ci_Z) 403 404 # Weight c-2. 405 data.dci[3:, 0] = dd_dOi - de_dOi 406 407 # Weight c-1. 408 data.dci[3:, 1] = 6.0 * data.ci_yz 409 410 # Weight c0. 411 data.dci[3:, 2] = 6.0 * data.ci_xz 412 413 # Weight c1. 414 data.dci[3:, 3] = 6.0 * data.ci_xy 415 416 # Weight c2. 417 data.dci[3:, 4] = dd_dOi + de_dOi 418 419 420 # Dr partial derivative. 421 ######################## 422 423 # Calculate de_dDr. 424 de_dDr = data.inv_R_cubed * (data.one_mDr * data.ex - data.one_Dr * data.ey + 2.0 * diff_data.params[2] * data.ez) 425 426 # Weight c-2. 427 data.dci[2, 0] = -0.75 * de_dDr 428 429 # Weight c2. 430 data.dci[2, 4] = 0.75 * de_dDr
431 432 433 434 # Ellipsoid weight Hessian. 435 ########################### 436
437 -def calc_ellipsoid_d2ci(data, diff_data):
438 """Weight Hessian for ellipsoidal diffusion. 439 440 Oi-Oj partial derivatives 441 ========================= 442 443 The equations are:: 444 445 d2c-2 / / d2dx ddx ddx \ / d2dy ddy ddy \ / d2dz ddz ddz \ \ d2e 446 ------- = 3 | dx**2 | dx ------- + 3 --- . --- | + dy**2 | dy ------- + 3 --- . --- | + dz**2 | dz ------- + 3 --- . --- | | - ------- , 447 dOi.dOj \ \ dOi.dOj dOi dOj / \ dOi.dOj dOi dOj / \ dOi.dOj dOi dOj / / dOi.dOj 448 449 450 d2c-1 / d2dz ddz ddz \ / ddy ddz ddz ddy \ / d2dy ddy ddy \ 451 ------- = 6 dy**2 | dz ------- + --- . --- | + 12 dy.dz | --- . --- + --- . --- | + 6 dz**2 | dy ------- + --- . --- | , 452 dOi.dOj \ dOi.dOj dOi dOj / \ dOi dOj dOi dOj / \ dOi.dOj dOi dOj / 453 454 455 d2c0 / d2dz ddz ddz \ / ddx ddz ddz ddx \ / d2dx ddx ddx \ 456 ------- = 6 dx**2 | dz ------- + --- . --- | + 12 dx.dz | --- . --- + --- . --- | + 6 dz**2 | dx ------- + --- . --- | , 457 dOi.dOj \ dOi.dOj dOi dOj / \ dOi dOj dOi dOj / \ dOi.dOj dOi dOj / 458 459 460 d2c1 / d2dy ddy ddy \ / ddx ddy ddy ddx \ / d2dx ddx ddx \ 461 ------- = 6 dx**2 | dy ------- + --- . --- | + 12 dx.dy | --- . --- + --- . --- | + 6 dy**2 | dx ------- + --- . --- | , 462 dOi.dOj \ dOi.dOj dOi dOj / \ dOi dOj dOi dOj / \ dOi.dOj dOi dOj / 463 464 465 d2c2 / / d2dx ddx ddx \ / d2dy ddy ddy \ / d2dz ddz ddz \ \ d2e 466 ------- = 3 | dx**2 | dx ------- + 3 --- . --- | + dy**2 | dy ------- + 3 --- . --- | + dz**2 | dz ------- + 3 --- . --- | | + ------- , 467 dOi.dOj \ \ dOi.dOj dOi dOj / \ dOi.dOj dOi dOj / \ dOi.dOj dOi dOj / / dOi.dOj 468 469 where:: 470 471 d2e 1 / / / d2dx ddx ddx \ / d2dz ddz ddz \ 472 ------- = - | (1 + 3Dr) | dx**2 | dx ------- + 3 --- . --- | + dy**2 | dz ------- + --- . --- | 473 dOi.dOj R \ \ \ dOi.dOj dOi dOj / \ dOi.dOj dOi dOj / 474 475 / d2dy ddy ddy \ / ddy ddz ddz ddy \ \ 476 + dz**2 | dy ------- + --- . --- | + 2dy.dz | --- . --- + --- . --- | | 477 \ dOi.dOj dOi dOj / \ dOi dOj dOi dOj / / 478 479 / / d2dy ddy ddy \ / d2dz ddz ddz \ 480 + (1 - 3Dr) | dy**2 | dy ------- + 3 --- . --- | + dx**2 | dz ------- + --- . --- | 481 \ \ dOi.dOj dOi dOj / \ dOi.dOj dOi dOj / 482 483 / d2dx ddx ddx \ / ddx ddz ddz ddx \ \ 484 + dz**2 | dx ------- + --- . --- | + 2dx.dz | --- . --- + --- . --- | | 485 \ dOi.dOj dOi dOj / \ dOi dOj dOi dOj / / 486 487 / / d2dz ddz ddz \ / d2dy ddy ddy \ 488 - 2 | dz**2 | dz ------- + 3 --- . --- | + dx**2 | dy ------- + --- . --- | 489 \ \ dOi.dOj dOi dOj / \ dOi.dOj dOi dOj / 490 491 / d2dx ddx ddx \ / ddx ddy ddy ddx \ \ \ 492 + dy**2 | dx ------- + --- . --- | + 2dx.dy | --- . --- + --- . --- | | | 493 \ dOi.dOj dOi dOj / \ dOi dOj dOi dOj / / / 494 495 496 Oi-tm partial derivatives 497 ========================= 498 499 The equations are:: 500 501 d2c-2 502 ------- = 0, 503 dOi.dtm 504 505 506 d2c-1 507 ------- = 0, 508 dOi.dtm 509 510 511 d2c0 512 ------- = 0, 513 dOi.dtm 514 515 516 d2c1 517 ------- = 0, 518 dOi.dtm 519 520 521 d2c2 522 ------- = 0. 523 dOi.dtm 524 525 526 Oi-Da partial derivatives 527 ========================= 528 529 The equations are:: 530 531 d2c-2 532 ------- = 0, 533 dOi.dDa 534 535 536 d2c-1 537 ------- = 0, 538 dOi.dDa 539 540 541 d2c0 542 ------- = 0, 543 dOi.dDa 544 545 546 d2c1 547 ------- = 0, 548 dOi.dDa 549 550 551 d2c2 552 ------- = 0. 553 dOi.dDa 554 555 556 Oi-Dr partial derivatives 557 ========================= 558 559 The equations are:: 560 561 d2c-2 d2e 562 ------- = - 3 -------, 563 dOi.dDr dOi.dDr 564 565 566 d2c-1 567 ------- = 0, 568 dOi.dDr 569 570 571 d2c0 572 ------- = 0, 573 dOi.dDr 574 575 576 d2c1 577 ------- = 0, 578 dOi.dDr 579 580 581 d2c2 d2e 582 ------- = 3 -------, 583 dOi.dDr dOi.dDr 584 585 where:: 586 587 d2e 1 / / ddx / ddz ddy \ \ 588 ------- = ---- | (1 - Dr) | dx**3 --- + dy.dz | dy --- + dz --- | | 589 dOi.dDr R**3 \ \ dOi \ dOi dOi / / 590 591 / ddy / ddz ddx \ \ 592 - (1 + Dr) | dy**3 --- + dx.dz | dx --- + dz --- | | 593 \ dOi \ dOi dOi / / 594 595 / ddz / ddy ddx \ \ \ 596 + 2Dr | dz**3 --- + dx.dy | dx --- + dy --- | | | 597 \ dOi \ dOi dOi / / / 598 599 600 tm-tm partial derivatives 601 ========================= 602 603 The equations are:: 604 605 d2c-2 606 ----- = 0, 607 dtm2 608 609 610 d2c-1 611 ----- = 0, 612 dtm2 613 614 615 d2c0 616 ---- = 0, 617 dtm2 618 619 620 d2c1 621 ---- = 0, 622 dtm2 623 624 625 d2c2 626 ---- = 0. 627 dtm2 628 629 630 tm-Da partial derivatives 631 ========================= 632 633 The equations are:: 634 635 d2c-2 636 ------- = 0, 637 dtm.dDa 638 639 640 d2c-1 641 ------- = 0, 642 dtm.dDa 643 644 645 d2c0 646 ------- = 0, 647 dtm.dDa 648 649 650 d2c1 651 ------- = 0, 652 dtm.dDa 653 654 655 d2c2 656 ------- = 0. 657 dtm.dDa 658 659 660 tm-Dr partial derivatives 661 ========================= 662 663 The equations are:: 664 665 d2c-2 666 ------- = 0, 667 dtm.dDr 668 669 670 d2c-1 671 ------- = 0, 672 dtm.dDr 673 674 675 d2c0 676 ------- = 0, 677 dtm.dDr 678 679 680 d2c1 681 ------- = 0, 682 dtm.dDr 683 684 685 d2c2 686 ------- = 0. 687 dtm.dDr 688 689 690 Da-Da partial derivatives 691 ========================= 692 693 The equations are:: 694 695 d2c-2 696 ------ = 0, 697 dDa**2 698 699 700 d2c-1 701 ------ = 0, 702 dDa**2 703 704 705 d2c0 706 ------ = 0, 707 dDa**2 708 709 710 d2c1 711 ------ = 0, 712 dDa**2 713 714 715 d2c2 716 ------ = 0. 717 dDa**2 718 719 720 Da-Dr partial derivatives 721 ========================= 722 723 The equations are:: 724 725 d2c-2 726 ------- = 0, 727 dDa.dDr 728 729 730 d2c-1 731 ------- = 0, 732 dDa.dDr 733 734 735 d2c0 736 ------- = 0, 737 dDa.dDr 738 739 740 d2c1 741 ------- = 0, 742 dDa.dDr 743 744 745 d2c2 746 ------- = 0. 747 dDa.dDr 748 749 750 Dr-Dr partial derivatives 751 ========================= 752 753 The equations are:: 754 755 d2c-2 3 d2e 756 ------ = - - ------, 757 dDr**2 4 dDr**2 758 759 760 d2c-1 761 ------ = 0, 762 dDr**2 763 764 765 d2c0 766 ------ = 0, 767 dDr**2 768 769 770 d2c1 771 ------ = 0, 772 dDr**2 773 774 775 d2c2 3 d2e 776 ------ = - ------, 777 dDr**2 4 dDr**2 778 779 where:: 780 781 d2e 1 / \ 782 ------ = ---- | (6Dr**2 - 9Dr - 1)(dx**4 + 2dy**2.dz**2) + (6Dr**2 + 9Dr - 1)(dy**4 + 2dx**2.dz**2) - 2(6Dr**2 - 1)(ddz*4 + 2dx**2.dy**2) | 783 dDr**2 R**5 \ / 784 """ 785 786 # Oi-Oj partial derivative. 787 ############################### 788 789 # Outer products. 790 op_xx = outer(data.ddx_dO, data.ddx_dO) 791 op_yy = outer(data.ddy_dO, data.ddy_dO) 792 op_zz = outer(data.ddz_dO, data.ddz_dO) 793 794 op_xy = outer(data.ddx_dO, data.ddy_dO) 795 op_yx = outer(data.ddy_dO, data.ddx_dO) 796 797 op_xz = outer(data.ddx_dO, data.ddz_dO) 798 op_zx = outer(data.ddz_dO, data.ddx_dO) 799 800 op_yz = outer(data.ddy_dO, data.ddz_dO) 801 op_zy = outer(data.ddz_dO, data.ddy_dO) 802 803 # Components. 804 x_comp = data.dx * data.d2dx_dO2 + op_xx 805 y_comp = data.dy * data.d2dy_dO2 + op_yy 806 z_comp = data.dz * data.d2dz_dO2 + op_zz 807 808 x3_comp = data.dx_sqrd * (data.dx * data.d2dx_dO2 + 3.0 * op_xx) 809 y3_comp = data.dy_sqrd * (data.dy * data.d2dy_dO2 + 3.0 * op_yy) 810 z3_comp = data.dz_sqrd * (data.dz * data.d2dz_dO2 + 3.0 * op_zz) 811 812 xy_comp = data.dx_sqrd * y_comp + 2.0 * data.dx * data.dy * (op_xy + op_yx) + data.dy_sqrd * x_comp 813 xz_comp = data.dx_sqrd * z_comp + 2.0 * data.dx * data.dz * (op_xz + op_zx) + data.dz_sqrd * x_comp 814 yz_comp = data.dy_sqrd * z_comp + 2.0 * data.dy * data.dz * (op_yz + op_zy) + data.dz_sqrd * y_comp 815 816 # Calculate d2d_dOidOj. 817 d2d_dOidOj = 3.0 * (x3_comp + y3_comp + z3_comp) 818 819 # Calculate d2e_dOidOj. 820 d2e_dOidOj = data.inv_R * (data.one_3Dr * (x3_comp + yz_comp) + data.one_m3Dr * (y3_comp + xz_comp) - 2.0 * (z3_comp + xy_comp)) 821 822 # Weight c-2. 823 data.d2ci[3:, 3:, 0] = d2d_dOidOj - d2e_dOidOj 824 825 # Weight c-2. 826 data.d2ci[3:, 3:, 1] = 6.0 * yz_comp 827 828 # Weight c-1. 829 data.d2ci[3:, 3:, 2] = 6.0 * xz_comp 830 831 # Weight c1. 832 data.d2ci[3:, 3:, 3] = 6.0 * xy_comp 833 834 # Weight c2. 835 data.d2ci[3:, 3:, 4] = d2d_dOidOj + d2e_dOidOj 836 837 838 # Oi-Dr partial derivative. 839 ############################# 840 841 # Calculate d2e_dOidDr. 842 d2e_dOidDr = data.inv_R_cubed * (data.one_mDr * data.ci_X - data.one_Dr * data.ci_Y + 2.0 * diff_data.params[2] * data.ci_Z) 843 844 # Weight c0. 845 data.d2ci[3:, 2, 0] = data.d2ci[2, 3:, 0] = -3.0 * d2e_dOidDr 846 847 # Weight c2. 848 data.d2ci[3:, 2, 4] = data.d2ci[2, 3:, 4] = 3.0 * d2e_dOidDr 849 850 851 # Dr-Dr partial derivative. 852 ########################### 853 854 # Components 855 d2e1_dDr2 = 6.0 * diff_data.params[2]**2 - 9.0 * diff_data.params[2] - 1.0 856 d2e2_dDr2 = 6.0 * diff_data.params[2]**2 + 9.0 * diff_data.params[2] - 1.0 857 d2e3_dDr2 = 6.0 * diff_data.params[2]**2 - 1.0 858 859 # Calculate d2e_dDr2. 860 d2e_dDr2 = data.inv_R**5 * (d2e1_dDr2 * data.ex + d2e2_dDr2 * data.ey - 2.0 * d2e3_dDr2 * data.ez) 861 862 # Weight c0. 863 data.d2ci[2, 2, 0] = -0.75 * d2e_dDr2 864 865 # Weight c2. 866 data.d2ci[2, 2, 4] = 0.75 * d2e_dDr2
867