19 normalizer = 1.0/(8.0*fabs(ldadVectors.determinant())) ;
23 p1 = fabs(ldadVectors(0,0)) + fabs(ldadVectors(0,1)) + fabs(ldadVectors(0,2));
24 p2 = fabs(ldadVectors(1,0)) + fabs(ldadVectors(1,1)) + fabs(ldadVectors(1,2));
25 p3 = fabs(ldadVectors(2,0)) + fabs(ldadVectors(2,1)) + fabs(ldadVectors(2,2));
31 inverseLdadVectors = ldadVectors.inverse();
49 vec_pull = inverseLdadVectors * vec.transpose();
51 return oneDFunction(vec_pull(0))*oneDFunction(vec_pull(1))*oneDFunction(vec_pull(2));
63 Vector3d vec1_pull, vec2_pull, vec12_pull;
64 Vector3d vec1_pull_seg, vec2_pull_seg;
65 Vector3d vec1_push_seg, vec2_push_seg, vec12_push_seg;
69 int selected_count = 0;
73 double total_length = 0.0;
74 double distance = (vec2 - vec1).
norm();
76 for (
int i = 0; i < 8;i++)
78 for (
int j = 0; j < 3; j++)
80 r_pull_intersect(i,j) = 0.0;
85 vec1_pull = inverseLdadVectors * vec1.transpose();
86 vec2_pull = inverseLdadVectors * vec2.transpose();
87 vec12_pull = vec2_pull - vec1_pull;
89 vec1_pull_seg = vec1_pull;
90 vec2_pull_seg = vec2_pull;
92 for (
int i = 0; i <= 2; i++)
94 if (fabs(vec12_pull(i)) <
epsilon)
110 relative_position(0,2) = 0;
111 relative_position(1,2) = 0;
112 relative_position(2,2) = 0;
115 if (degenerate(0) && degenerate(1) && degenerate(2))
117 MY_ERROR(
"Degeneration to 0D. This indicates you have overlapping atoms in your system!");
120 else if (!degenerate(0) && degenerate(1) && degenerate(2))
124 if (relative_position(1,2) == 1 || relative_position(1,2) == 5 || \
125 relative_position(2,2) == 1 || relative_position(2,2) == 5)
130 if (relative_position(0,0) == 2 || relative_position(0,0) == 3 || relative_position(0,0) == 4)
132 vec1_pull_seg(0) = vec1_pull(0);
133 if (relative_position(0,1) == 2 || relative_position(0,1) == 3 || relative_position(0,1) == 4)
135 vec2_pull_seg(0) = vec2_pull(0);
137 else if (relative_position(0,1) == 1)
139 vec2_pull_seg(0) = -1.0;
141 else if (relative_position(0,1) == 5)
143 vec2_pull_seg(0) = 1.0;
146 else if (relative_position(0,0) == 1)
148 if (relative_position(0,1) == 2 || relative_position(0,1) == 3 || relative_position(0,1) == 4)
150 vec1_pull_seg(0) = -1.0;
151 vec2_pull_seg(0) = vec2_pull(0);
153 else if (relative_position(0,1) == 1)
157 else if (relative_position(0,1) == 5)
159 vec1_pull_seg(0) = -1.0;
160 vec2_pull_seg(0) = 1.0;
163 else if (relative_position(0,0) == 5)
165 if (relative_position(0,1) == 2 || relative_position(0,1) == 3 || relative_position(0,1) == 4)
167 vec1_pull_seg(0) = 1.0;
168 vec2_pull_seg(0) = vec2_pull(0);
170 else if (relative_position(0,1) == 1)
172 vec1_pull_seg(0) = 1.0;
173 vec2_pull_seg(0) = -1.0;
175 else if (relative_position(0,1) == 5)
182 else if (degenerate(0) && !degenerate(1) && degenerate(2))
186 if (relative_position(0,2) == 1 || relative_position(0,2) == 5 || \
187 relative_position(2,2) == 1 || relative_position(2,2) == 5)
192 if (relative_position(1,0) == 2 || relative_position(1,0) == 3 || relative_position(1,0) == 4)
194 vec1_pull_seg(1) = vec1_pull(1);
195 if (relative_position(1,1) == 2 || relative_position(1,1) == 3 || relative_position(1,1) == 4)
197 vec2_pull_seg(1) = vec2_pull(1);
199 else if (relative_position(1,1) == 1)
201 vec2_pull_seg(1) = -1.0;
203 else if (relative_position(1,1) == 5)
205 vec2_pull_seg(1) = 1.0;
208 else if (relative_position(1,0) == 1)
210 if (relative_position(1,1) == 2 || relative_position(1,1) == 3 || relative_position(1,1) == 4)
212 vec1_pull_seg(1) = -1.0;
213 vec2_pull_seg(1) = vec2_pull(1);
215 else if (relative_position(1,1) == 1)
219 else if (relative_position(1,1) == 5)
221 vec1_pull_seg(1) = -1.0;
222 vec2_pull_seg(1) = 1.0;
225 else if (relative_position(1,0) == 5)
227 if (relative_position(1,1) == 2 || relative_position(1,1) == 3 || relative_position(1,1) == 4)
229 vec1_pull_seg(1) = 1.0;
230 vec2_pull_seg(1) = vec2_pull(1);
232 else if (relative_position(1,1) == 1)
234 vec1_pull_seg(1) = 1.0;
235 vec2_pull_seg(1) = -1.0;
237 else if (relative_position(1,1) == 5)
244 else if (degenerate(0) && degenerate(1) && !degenerate(2))
248 if (relative_position(0,2) == 1 || relative_position(0,2) == 5 || \
249 relative_position(1,2) == 1 || relative_position(1,2) == 5)
254 if (relative_position(2,0) == 2 || relative_position(2,0) == 3 || relative_position(2,0) == 4)
256 vec1_pull_seg(2) = vec1_pull(2);
257 if (relative_position(2,1) == 2 || relative_position(2,1) == 3 || relative_position(2,1) == 4)
259 vec2_pull_seg(2) = vec2_pull(2);
261 else if (relative_position(2,1) == 1)
263 vec2_pull_seg(2) = -1.0;
265 else if (relative_position(2,1) == 5)
267 vec2_pull_seg(2) = 1.0;
270 else if (relative_position(2,0) == 1)
272 if (relative_position(2,1) == 2 || relative_position(2,1) == 3 || relative_position(2,1) == 4)
274 vec1_pull_seg(2) = -1.0;
275 vec2_pull_seg(2) = vec2_pull(2);
277 else if (relative_position(2,1) == 1)
281 else if (relative_position(2,1) == 5)
283 vec1_pull_seg(2) = -1.0;
284 vec2_pull_seg(2) = 1.0;
287 else if (relative_position(2,0) == 5)
289 if (relative_position(2,1) == 2 || relative_position(2,1) == 3 || relative_position(2,1) == 4)
291 vec1_pull_seg(2) = 1.0;
292 vec2_pull_seg(2) = vec2_pull(2);
294 else if (relative_position(2,1) == 1)
296 vec1_pull_seg(2) = 1.0;
297 vec2_pull_seg(2) = -1.0;
299 else if (relative_position(2,1) == 5)
306 else if (!degenerate(0) && !degenerate(1) && degenerate(2))
309 if (relative_position(2,2) == 1 || relative_position(2,2) == 5)
314 for (
int i = 0; i < 8; i++)
320 r_pull_intersect(0,0) = -1.0;
321 r_pull_intersect(0,1) = vec1_pull(1) + \
322 (vec2_pull(1) - vec1_pull(1)) / (vec2_pull(0) - vec1_pull(0)) * (-1.0 - vec1_pull(0));
324 r_pull_intersect(1,0) = 1.0;
325 r_pull_intersect(1,1) = vec1_pull(1) + \
326 (vec2_pull(1) - vec1_pull(1)) / (vec2_pull(0) - vec1_pull(0)) * (1.0 - vec1_pull(0));
328 r_pull_intersect(2,0) = vec1_pull(0) + \
329 (vec2_pull(0) - vec1_pull(0)) / (vec2_pull(1) - vec1_pull(1)) * (-1.0 - vec1_pull(1));
330 r_pull_intersect(2,1) = -1.0;
332 r_pull_intersect(3,0) = vec1_pull(0) + \
333 (vec2_pull(0) - vec1_pull(0)) / (vec2_pull(1) - vec1_pull(1)) * (1.0 - vec1_pull(1));
334 r_pull_intersect(3,1) = 1.0;
337 r_pull_intersect(6,0) = vec1_pull(0);
338 r_pull_intersect(6,1) = vec1_pull(1);
339 r_pull_intersect(6,2) = vec1_pull(2);
342 r_pull_intersect(7,0) = vec2_pull(0);
343 r_pull_intersect(7,1) = vec2_pull(1);
344 r_pull_intersect(7,2) = vec2_pull(2);
347 if ((relative_position(0,0) == 2 || relative_position(0,0) == 3 || relative_position(0,0) == 4) && \
348 (relative_position(1,0) == 2 || relative_position(1,0) == 3 || relative_position(1,0) == 4))
353 if ((relative_position(0,1) == 2 || relative_position(0,1) == 3 || relative_position(0,1) == 4) && \
354 (relative_position(1,1) == 2 || relative_position(1,1) == 3 || relative_position(1,1) == 4))
360 for (
int i = 0; i <= 1; i++)
362 if (((r_pull_intersect(i,0) > vec1_pull(0) && r_pull_intersect(i,0) < vec2_pull(0)) || \
363 (r_pull_intersect(i,0) > vec2_pull(0) && r_pull_intersect(i,0) < vec1_pull(0))) && \
364 ((r_pull_intersect(i,1) > vec1_pull(1) && r_pull_intersect(i,1) < vec2_pull(1)) || \
365 (r_pull_intersect(i,1) > vec2_pull(1) && r_pull_intersect(i,1) < vec1_pull(1))) && \
366 (r_pull_intersect(i,1) >= -1.0 -
epsilon && r_pull_intersect(i,1) <= 1.0 +
epsilon))
371 for (
int i = 2; i <= 3; i++)
373 if (((r_pull_intersect(i,0) > vec1_pull(0) && r_pull_intersect(i,0) < vec2_pull(0)) || \
374 (r_pull_intersect(i,0) > vec2_pull(0) && r_pull_intersect(i,0) < vec1_pull(0))) && \
375 ((r_pull_intersect(i,1) > vec1_pull(1) && r_pull_intersect(i,1) < vec2_pull(1)) || \
376 (r_pull_intersect(i,1) > vec2_pull(1) && r_pull_intersect(i,1) < vec1_pull(1))) && \
377 (r_pull_intersect(i,0) >= -1.0 -
epsilon && r_pull_intersect(i,0) <= 1.0 +
epsilon))
384 for (
int i = 0; i < 8; i++)
386 if (selected(i) && selected_count == 0)
388 vec1_pull_seg(0) = r_pull_intersect(i,0);
389 vec1_pull_seg(1) = r_pull_intersect(i,1);
393 if (selected(i) && selected_count == 1)
395 if (fabs(vec1_pull_seg(0) - r_pull_intersect(i,0)) <
epsilon && \
396 fabs(vec1_pull_seg(1) - r_pull_intersect(i,1)) <
epsilon)
402 vec2_pull_seg(0) = r_pull_intersect(i,0);
403 vec2_pull_seg(1) = r_pull_intersect(i,1);
408 if (selected(i) && selected_count == 2)
410 if ((fabs(vec1_pull_seg(0) - r_pull_intersect(i,0)) <
epsilon && \
411 fabs(vec1_pull_seg(1) - r_pull_intersect(i,1)) <
epsilon) || \
412 (fabs(vec2_pull_seg(0) - r_pull_intersect(i,0)) <
epsilon && \
413 fabs(vec2_pull_seg(1) - r_pull_intersect(i,1)) <
epsilon))
419 MY_ERROR(
"In LDAD bond_function xy, More than 2 different points \ 420 with different positions are being selected. \ 421 This means a line intersecting with a cube has 3 points. \ 422 Something wrong with the algorithm. Need to print and debug!");
427 if (selected_count == 0 || selected_count == 1)
433 else if (!degenerate(0) && degenerate(1) && !degenerate(2))
436 if (relative_position(1,2) == 1 || relative_position(1,2) == 5)
441 for (
int i = 0; i < 8; i++)
447 r_pull_intersect(0,0) = -1.0;
448 r_pull_intersect(0,2) = vec1_pull(2) + \
449 (vec2_pull(2) - vec1_pull(2)) / (vec2_pull(0) - vec1_pull(0)) * (-1.0 - vec1_pull(0));
451 r_pull_intersect(1,0) = 1.0;
452 r_pull_intersect(1,2) = vec1_pull(2) + \
453 (vec2_pull(2) - vec1_pull(2)) / (vec2_pull(0) - vec1_pull(0)) * (1.0 - vec1_pull(0));
455 r_pull_intersect(4,0) = vec1_pull(0) + \
456 (vec2_pull(0) - vec1_pull(0)) / (vec2_pull(2) - vec1_pull(2)) * (-1.0 - vec1_pull(2));
457 r_pull_intersect(4,2) = -1.0;
459 r_pull_intersect(5,0) = vec1_pull(0) + \
460 (vec2_pull(0) - vec1_pull(0)) / (vec2_pull(2) - vec1_pull(2)) * (1.0 - vec1_pull(2));
461 r_pull_intersect(5,2) = 1.0;
464 r_pull_intersect(6,0) = vec1_pull(0);
465 r_pull_intersect(6,1) = vec1_pull(1);
466 r_pull_intersect(6,2) = vec1_pull(2);
469 r_pull_intersect(7,0) = vec2_pull(0);
470 r_pull_intersect(7,1) = vec2_pull(1);
471 r_pull_intersect(7,2) = vec2_pull(2);
474 if ((relative_position(0,0) == 2 || relative_position(0,0) == 3 || relative_position(0,0) == 4) && \
475 (relative_position(2,0) == 2 || relative_position(2,0) == 3 || relative_position(2,0) == 4))
480 if ((relative_position(0,1) == 2 || relative_position(0,1) == 3 || relative_position(0,1) == 4) && \
481 (relative_position(2,1) == 2 || relative_position(2,1) == 3 || relative_position(2,1) == 4))
487 for (
int i = 0; i <= 1; i++)
489 if (((r_pull_intersect(i,0) > vec1_pull(0) && r_pull_intersect(i,0) < vec2_pull(0)) || \
490 (r_pull_intersect(i,0) > vec2_pull(0) && r_pull_intersect(i,0) < vec1_pull(0))) && \
491 ((r_pull_intersect(i,2) > vec1_pull(2) && r_pull_intersect(i,2) < vec2_pull(2)) || \
492 (r_pull_intersect(i,2) > vec2_pull(2) && r_pull_intersect(i,2) < vec1_pull(2))) && \
493 (r_pull_intersect(i,2) >= -1.0 -
epsilon && r_pull_intersect(i,2) <= 1.0 +
epsilon))
498 for (
int i = 4; i <= 5; i++)
500 if (((r_pull_intersect(i,0) > vec1_pull(0) && r_pull_intersect(i,0) < vec2_pull(0)) || \
501 (r_pull_intersect(i,0) > vec2_pull(0) && r_pull_intersect(i,0) < vec1_pull(0))) && \
502 ((r_pull_intersect(i,2) > vec1_pull(2) && r_pull_intersect(i,2) < vec2_pull(2)) || \
503 (r_pull_intersect(i,2) > vec2_pull(2) && r_pull_intersect(i,2) < vec1_pull(2))) && \
504 (r_pull_intersect(i,0) >= -1.0 -
epsilon && r_pull_intersect(i,0) <= 1.0 +
epsilon))
511 for (
int i = 0; i < 8; i++)
513 if (selected(i) && selected_count == 0)
515 vec1_pull_seg(0) = r_pull_intersect(i,0);
516 vec1_pull_seg(2) = r_pull_intersect(i,2);
520 if (selected(i) && selected_count == 1)
522 if (fabs(vec1_pull_seg(0) - r_pull_intersect(i,0)) <
epsilon && \
523 fabs(vec1_pull_seg(2) - r_pull_intersect(i,2)) <
epsilon)
529 vec2_pull_seg(0) = r_pull_intersect(i,0);
530 vec2_pull_seg(2) = r_pull_intersect(i,2);
535 if (selected(i) && selected_count == 2)
537 if ((fabs(vec1_pull_seg(0) - r_pull_intersect(i,0)) <
epsilon && \
538 fabs(vec1_pull_seg(2) - r_pull_intersect(i,2)) <
epsilon) || \
539 (fabs(vec2_pull_seg(0) - r_pull_intersect(i,0)) <
epsilon && \
540 fabs(vec2_pull_seg(2) - r_pull_intersect(i,2)) <
epsilon))
546 MY_ERROR(
"In LDAD bond_function xz, More than 2 different points \ 547 with different positions are being selected. \ 548 This means a line intersecting with a cube has 3 points. \ 549 Something wrong with the algorithm. Need to print and debug!");
555 if (selected_count == 0 || selected_count == 1)
561 else if (degenerate(0) && !degenerate(1) && !degenerate(2))
564 if (relative_position(0,2) == 1 || relative_position(0,2) == 5)
570 for (
int i = 0; i < 8; i++)
576 r_pull_intersect(2,1) = -1.0;
577 r_pull_intersect(2,2) = vec1_pull(2) + \
578 (vec2_pull(2) - vec1_pull(2)) / (vec2_pull(1) - vec1_pull(1)) * (-1.0 - vec1_pull(1));
580 r_pull_intersect(3,1) = 1.0;
581 r_pull_intersect(3,2) = vec1_pull(2) + \
582 (vec2_pull(2) - vec1_pull(2)) / (vec2_pull(1) - vec1_pull(1)) * (1.0 - vec1_pull(1));
584 r_pull_intersect(4,1) = vec1_pull(1) + \
585 (vec2_pull(1) - vec1_pull(1)) / (vec2_pull(2) - vec1_pull(2)) * (-1.0 - vec1_pull(2));
586 r_pull_intersect(4,2) = -1.0;
588 r_pull_intersect(5,1) = vec1_pull(1) + \
589 (vec2_pull(1) - vec1_pull(1)) / (vec2_pull(2) - vec1_pull(2)) * (1.0 - vec1_pull(2));
590 r_pull_intersect(5,2) = 1.0;
593 r_pull_intersect(6,0) = vec1_pull(0);
594 r_pull_intersect(6,1) = vec1_pull(1);
595 r_pull_intersect(6,2) = vec1_pull(2);
598 r_pull_intersect(7,0) = vec2_pull(0);
599 r_pull_intersect(7,1) = vec2_pull(1);
600 r_pull_intersect(7,2) = vec2_pull(2);
603 if ((relative_position(1,0) == 2 || relative_position(1,0) == 3 || relative_position(1,0) == 4) && \
604 (relative_position(2,0) == 2 || relative_position(2,0) == 3 || relative_position(2,0) == 4))
609 if ((relative_position(1,1) == 2 || relative_position(1,1) == 3 || relative_position(1,1) == 4) && \
610 (relative_position(2,1) == 2 || relative_position(2,1) == 3 || relative_position(2,1) == 4))
616 for (
int i = 2; i <= 3; i++)
618 if (((r_pull_intersect(i,1) > vec1_pull(1) && r_pull_intersect(i,1) < vec2_pull(1)) || \
619 (r_pull_intersect(i,1) > vec2_pull(1) && r_pull_intersect(i,1) < vec1_pull(1))) && \
620 ((r_pull_intersect(i,2) > vec1_pull(2) && r_pull_intersect(i,2) < vec2_pull(2)) || \
621 (r_pull_intersect(i,2) > vec2_pull(2) && r_pull_intersect(i,2) < vec1_pull(2))) && \
622 (r_pull_intersect(i,2) >= -1.0 -
epsilon && r_pull_intersect(i,2) <= 1.0 +
epsilon))
627 for (
int i = 4; i <= 5; i++)
629 if (((r_pull_intersect(i,1) > vec1_pull(1) && r_pull_intersect(i,1) < vec2_pull(1)) || \
630 (r_pull_intersect(i,1) > vec2_pull(1) && r_pull_intersect(i,1) < vec1_pull(1))) && \
631 ((r_pull_intersect(i,2) > vec1_pull(2) && r_pull_intersect(i,2) < vec2_pull(2)) || \
632 (r_pull_intersect(i,2) > vec2_pull(2) && r_pull_intersect(i,2) < vec1_pull(2))) && \
633 (r_pull_intersect(i,1) >= -1.0 -
epsilon && r_pull_intersect(i,1) <= 1.0 +
epsilon))
640 for (
int i = 0; i < 8; i++)
642 if (selected(i) && selected_count == 0)
644 vec1_pull_seg(1) = r_pull_intersect(i,1);
645 vec1_pull_seg(2) = r_pull_intersect(i,2);
649 if (selected(i) && selected_count == 1)
651 if (fabs(vec1_pull_seg(1) - r_pull_intersect(i,1)) <
epsilon && \
652 fabs(vec1_pull_seg(2) - r_pull_intersect(i,2)) <
epsilon)
658 vec2_pull_seg(1) = r_pull_intersect(i,1);
659 vec2_pull_seg(2) = r_pull_intersect(i,2);
664 if (selected(i) && selected_count == 2)
666 if ((fabs(vec1_pull_seg(1) - r_pull_intersect(i,1)) <
epsilon && \
667 fabs(vec1_pull_seg(2) - r_pull_intersect(i,2)) <
epsilon) || \
668 (fabs(vec2_pull_seg(1) - r_pull_intersect(i,1)) <
epsilon && \
669 fabs(vec2_pull_seg(2) - r_pull_intersect(i,2)) <
epsilon))
675 MY_ERROR(
"In LDAD bond_function yz, More than 2 different points \ 676 with different positions are being selected. \ 677 This means a line intersecting with a cube has 3 points. \ 678 Something wrong with the algorithm. Need to print and debug!");
684 if (selected_count == 0 || selected_count == 1)
691 else if (!degenerate(0) && !degenerate(1) && !degenerate(2))
693 for (
int i = 0; i < 8; i++)
700 r_pull_intersect(0,0) = -1.0;
701 r_pull_intersect(0,1) = vec1_pull(1) + \
702 (vec2_pull(1) - vec1_pull(1)) / (vec2_pull(0) - vec1_pull(0)) * (-1.0 - vec1_pull(0));
703 r_pull_intersect(0,2) = vec1_pull(2) + \
704 (vec2_pull(2) - vec1_pull(2)) / (vec2_pull(0) - vec1_pull(0)) * (-1.0 - vec1_pull(0));
706 r_pull_intersect(1,0) = 1.0;
707 r_pull_intersect(1,1) = vec1_pull(1) + \
708 (vec2_pull(1) - vec1_pull(1)) / (vec2_pull(0) - vec1_pull(0)) * (1.0 - vec1_pull(0));
709 r_pull_intersect(1,2) = vec1_pull(2) + \
710 (vec2_pull(2) - vec1_pull(2)) / (vec2_pull(0) - vec1_pull(0)) * (1.0 - vec1_pull(0));
713 r_pull_intersect(2,0) = vec1_pull(0) + \
714 (vec2_pull(0) - vec1_pull(0)) / (vec2_pull(1) - vec1_pull(1)) * (-1.0 - vec1_pull(1));
715 r_pull_intersect(2,1) = -1.0;
716 r_pull_intersect(2,2) = vec1_pull(2) + \
717 (vec2_pull(2) - vec1_pull(2)) / (vec2_pull(1) - vec1_pull(1)) * (-1.0 - vec1_pull(1));
720 r_pull_intersect(3,0) = vec1_pull(0) + \
721 (vec2_pull(0) - vec1_pull(0)) / (vec2_pull(1) - vec1_pull(1)) * (1.0 - vec1_pull(1));
722 r_pull_intersect(3,1) = 1.0;
723 r_pull_intersect(3,2) = vec1_pull(2) + \
724 (vec2_pull(2) - vec1_pull(2)) / (vec2_pull(1) - vec1_pull(1)) * (1.0 - vec1_pull(1));
727 r_pull_intersect(4,0) = vec1_pull(0) + \
728 (vec2_pull(0) - vec1_pull(0)) / (vec2_pull(2) - vec1_pull(2)) * (-1.0 - vec1_pull(2));
729 r_pull_intersect(4,1) = vec1_pull(1) + \
730 (vec2_pull(1) - vec1_pull(1)) / (vec2_pull(2) - vec1_pull(2)) * (-1.0 - vec1_pull(2));
731 r_pull_intersect(4,2) = -1.0;
734 r_pull_intersect(5,0) = vec1_pull(0) + \
735 (vec2_pull(0) - vec1_pull(0)) / (vec2_pull(2) - vec1_pull(2)) * (1.0 - vec1_pull(2));
736 r_pull_intersect(5,1) = vec1_pull(1) + \
737 (vec2_pull(1) - vec1_pull(1)) / (vec2_pull(2) - vec1_pull(2)) * (1.0 - vec1_pull(2));
738 r_pull_intersect(5,2) = 1.0;
741 r_pull_intersect(6,0) = vec1_pull(0);
742 r_pull_intersect(6,1) = vec1_pull(1);
743 r_pull_intersect(6,2) = vec1_pull(2);
746 r_pull_intersect(7,0) = vec2_pull(0);
747 r_pull_intersect(7,1) = vec2_pull(1);
748 r_pull_intersect(7,2) = vec2_pull(2);
751 if ((relative_position(0,0) == 2 || relative_position(0,0) == 3 || relative_position(0,0) == 4) && \
752 (relative_position(1,0) == 2 || relative_position(1,0) == 3 || relative_position(1,0) == 4) && \
753 (relative_position(2,0) == 2 || relative_position(2,0) == 3 || relative_position(2,0) == 4))
758 if ((relative_position(0,1) == 2 || relative_position(0,1) == 3 || relative_position(0,1) == 4) && \
759 (relative_position(1,1) == 2 || relative_position(1,1) == 3 || relative_position(1,1) == 4) && \
760 (relative_position(2,1) == 2 || relative_position(2,1) == 3 || relative_position(2,1) == 4))
765 for (
int i = 0; i <= 5; i++)
768 if (((r_pull_intersect(i,0) > vec1_pull(0) && r_pull_intersect(i,0) < vec2_pull(0)) || \
769 (r_pull_intersect(i,0) > vec2_pull(0) && r_pull_intersect(i,0) < vec1_pull(0))) && \
770 ((r_pull_intersect(i,1) > vec1_pull(1) && r_pull_intersect(i,1) < vec2_pull(1)) || \
771 (r_pull_intersect(i,1) > vec2_pull(1) && r_pull_intersect(i,1) < vec1_pull(1))) && \
772 ((r_pull_intersect(i,2) > vec1_pull(2) && r_pull_intersect(i,2) < vec2_pull(2)) || \
773 (r_pull_intersect(i,2) > vec2_pull(2) && r_pull_intersect(i,2) < vec1_pull(2))) && \
774 (r_pull_intersect(i,0) >= -1.0 -
epsilon && r_pull_intersect(i,0) <= 1.0 +
epsilon) && \
775 (r_pull_intersect(i,1) >= -1.0 -
epsilon && r_pull_intersect(i,1) <= 1.0 +
epsilon) && \
776 (r_pull_intersect(i,2) >= -1.0 -
epsilon && r_pull_intersect(i,2) <= 1.0 +
epsilon))
784 for (
int i = 0; i < 8; i++)
786 if (selected(i) && selected_count == 0)
788 vec1_pull_seg(0) = r_pull_intersect(i,0);
789 vec1_pull_seg(1) = r_pull_intersect(i,1);
790 vec1_pull_seg(2) = r_pull_intersect(i,2);
795 if (selected(i) && selected_count == 1)
797 if (fabs(vec1_pull_seg(0) - r_pull_intersect(i,0)) <
epsilon && \
798 fabs(vec1_pull_seg(1) - r_pull_intersect(i,1)) <
epsilon && \
799 fabs(vec1_pull_seg(2) - r_pull_intersect(i,2)) <
epsilon)
805 vec2_pull_seg(0) = r_pull_intersect(i,0);
806 vec2_pull_seg(1) = r_pull_intersect(i,1);
807 vec2_pull_seg(2) = r_pull_intersect(i,2);
813 if (selected(i) && selected_count == 2)
815 if ((fabs(vec1_pull_seg(0) - r_pull_intersect(i,0)) <
epsilon && \
816 fabs(vec1_pull_seg(1) - r_pull_intersect(i,1)) <
epsilon && \
817 fabs(vec1_pull_seg(2) - r_pull_intersect(i,2)) <
epsilon) || \
818 (fabs(vec2_pull_seg(0) - r_pull_intersect(i,0)) <
epsilon && \
819 fabs(vec2_pull_seg(1) - r_pull_intersect(i,1)) <
epsilon && \
820 fabs(vec2_pull_seg(2) - r_pull_intersect(i,2)) <
epsilon))
826 MY_ERROR(
"In LDAD bond_function xyz, More than 2 different points \ 827 with different positions are being selected. \ 828 This means a line intersecting with a cube has 3 points. \ 829 Something wrong with the algorithm. Need to print and debug!");
835 if (selected_count == 0 || selected_count == 1)
841 vec1_push_seg = ldadVectors * vec1_pull_seg.transpose();
842 vec2_push_seg = ldadVectors * vec2_pull_seg.transpose();
843 vec12_push_seg = vec2_push_seg - vec1_push_seg;
844 total_length = vec12_push_seg.norm();
847 return total_length * oneDFunction.integrate(vec1_pull_seg, vec2_pull_seg) * normalizer / distance;
874 std::cout <<
"Point " << p << std::endl;
875 MY_ERROR(
"In PointLineRelationship, the above point did not fall into any range.");
double averagingDomainSize
double operator()(const Vector3d &vec) const
double bondFunction(const Vector3d &vec1, const Vector3d &vec2) const
int PointLineRelationship(const double &p)
#define MY_ERROR(message)
double norm(double const *a)
Eigen::Matrix< double, 1, DIM, Eigen::RowMajor > Vector3d
Eigen::Matrix< double, DIM, DIM, Eigen::RowMajor > Matrix3d
MethodLdad(const Matrix3d &ldadVectors)
Eigen::Matrix< int, DIM, DIM, Eigen::RowMajor > Matrix3i
Eigen::Matrix< int, 1, DIM, Eigen::RowMajor > Vector3i
Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic > ArrayXXd
Eigen::Matrix< int, 1, Eigen::Dynamic, Eigen::RowMajor > VectorXi