64 Vector3d vec1_pull, vec2_pull, vec12_pull;
65 Vector3d vec1_pull_seg, vec2_pull_seg;
66 Vector3d vec1_push_seg, vec2_push_seg, vec12_push_seg;
70 int selected_count = 0;
74 double total_length = 0.0;
75 double distance = (vec2 - vec1).
norm();
77 for (
int i = 0; i < 8;i++)
79 for (
int j = 0; j < 3; j++)
81 r_pull_intersect(i,j) = 0.0;
86 vec1_pull = inverseLdadVectors * vec1.transpose();
87 vec2_pull = inverseLdadVectors * vec2.transpose();
88 vec12_pull = vec2_pull - vec1_pull;
90 vec1_pull_seg = vec1_pull;
91 vec2_pull_seg = vec2_pull;
93 for (
int i = 0; i <= 2; i++)
95 if (fabs(vec12_pull(i)) <
epsilon)
111 relative_position(0,2) = 0;
112 relative_position(1,2) = 0;
113 relative_position(2,2) = 0;
116 if (degenerate(0) && degenerate(1) && degenerate(2))
118 MY_ERROR(
"Degeneration to 0D. This indicates you have overlapping atoms in your system!");
121 else if (!degenerate(0) && degenerate(1) && degenerate(2))
125 if (relative_position(1,2) == 1 || relative_position(1,2) == 5 || \
126 relative_position(2,2) == 1 || relative_position(2,2) == 5)
131 if (relative_position(0,0) == 2 || relative_position(0,0) == 3 || relative_position(0,0) == 4)
133 vec1_pull_seg(0) = vec1_pull(0);
134 if (relative_position(0,1) == 2 || relative_position(0,1) == 3 || relative_position(0,1) == 4)
136 vec2_pull_seg(0) = vec2_pull(0);
138 else if (relative_position(0,1) == 1)
140 vec2_pull_seg(0) = -1.0;
142 else if (relative_position(0,1) == 5)
144 vec2_pull_seg(0) = 1.0;
147 else if (relative_position(0,0) == 1)
149 if (relative_position(0,1) == 2 || relative_position(0,1) == 3 || relative_position(0,1) == 4)
151 vec1_pull_seg(0) = -1.0;
152 vec2_pull_seg(0) = vec2_pull(0);
154 else if (relative_position(0,1) == 1)
158 else if (relative_position(0,1) == 5)
160 vec1_pull_seg(0) = -1.0;
161 vec2_pull_seg(0) = 1.0;
164 else if (relative_position(0,0) == 5)
166 if (relative_position(0,1) == 2 || relative_position(0,1) == 3 || relative_position(0,1) == 4)
168 vec1_pull_seg(0) = 1.0;
169 vec2_pull_seg(0) = vec2_pull(0);
171 else if (relative_position(0,1) == 1)
173 vec1_pull_seg(0) = 1.0;
174 vec2_pull_seg(0) = -1.0;
176 else if (relative_position(0,1) == 5)
183 else if (degenerate(0) && !degenerate(1) && degenerate(2))
187 if (relative_position(0,2) == 1 || relative_position(0,2) == 5 || \
188 relative_position(2,2) == 1 || relative_position(2,2) == 5)
193 if (relative_position(1,0) == 2 || relative_position(1,0) == 3 || relative_position(1,0) == 4)
195 vec1_pull_seg(1) = vec1_pull(1);
196 if (relative_position(1,1) == 2 || relative_position(1,1) == 3 || relative_position(1,1) == 4)
198 vec2_pull_seg(1) = vec2_pull(1);
200 else if (relative_position(1,1) == 1)
202 vec2_pull_seg(1) = -1.0;
204 else if (relative_position(1,1) == 5)
206 vec2_pull_seg(1) = 1.0;
209 else if (relative_position(1,0) == 1)
211 if (relative_position(1,1) == 2 || relative_position(1,1) == 3 || relative_position(1,1) == 4)
213 vec1_pull_seg(1) = -1.0;
214 vec2_pull_seg(1) = vec2_pull(1);
216 else if (relative_position(1,1) == 1)
220 else if (relative_position(1,1) == 5)
222 vec1_pull_seg(1) = -1.0;
223 vec2_pull_seg(1) = 1.0;
226 else if (relative_position(1,0) == 5)
228 if (relative_position(1,1) == 2 || relative_position(1,1) == 3 || relative_position(1,1) == 4)
230 vec1_pull_seg(1) = 1.0;
231 vec2_pull_seg(1) = vec2_pull(1);
233 else if (relative_position(1,1) == 1)
235 vec1_pull_seg(1) = 1.0;
236 vec2_pull_seg(1) = -1.0;
238 else if (relative_position(1,1) == 5)
245 else if (degenerate(0) && degenerate(1) && !degenerate(2))
249 if (relative_position(0,2) == 1 || relative_position(0,2) == 5 || \
250 relative_position(1,2) == 1 || relative_position(1,2) == 5)
255 if (relative_position(2,0) == 2 || relative_position(2,0) == 3 || relative_position(2,0) == 4)
257 vec1_pull_seg(2) = vec1_pull(2);
258 if (relative_position(2,1) == 2 || relative_position(2,1) == 3 || relative_position(2,1) == 4)
260 vec2_pull_seg(2) = vec2_pull(2);
262 else if (relative_position(2,1) == 1)
264 vec2_pull_seg(2) = -1.0;
266 else if (relative_position(2,1) == 5)
268 vec2_pull_seg(2) = 1.0;
271 else if (relative_position(2,0) == 1)
273 if (relative_position(2,1) == 2 || relative_position(2,1) == 3 || relative_position(2,1) == 4)
275 vec1_pull_seg(2) = -1.0;
276 vec2_pull_seg(2) = vec2_pull(2);
278 else if (relative_position(2,1) == 1)
282 else if (relative_position(2,1) == 5)
284 vec1_pull_seg(2) = -1.0;
285 vec2_pull_seg(2) = 1.0;
288 else if (relative_position(2,0) == 5)
290 if (relative_position(2,1) == 2 || relative_position(2,1) == 3 || relative_position(2,1) == 4)
292 vec1_pull_seg(2) = 1.0;
293 vec2_pull_seg(2) = vec2_pull(2);
295 else if (relative_position(2,1) == 1)
297 vec1_pull_seg(2) = 1.0;
298 vec2_pull_seg(2) = -1.0;
300 else if (relative_position(2,1) == 5)
307 else if (!degenerate(0) && !degenerate(1) && degenerate(2))
310 if (relative_position(2,2) == 1 || relative_position(2,2) == 5)
315 for (
int i = 0; i < 8; i++)
321 r_pull_intersect(0,0) = -1.0;
322 r_pull_intersect(0,1) = vec1_pull(1) + \
323 (vec2_pull(1) - vec1_pull(1)) / (vec2_pull(0) - vec1_pull(0)) * (-1.0 - vec1_pull(0));
325 r_pull_intersect(1,0) = 1.0;
326 r_pull_intersect(1,1) = vec1_pull(1) + \
327 (vec2_pull(1) - vec1_pull(1)) / (vec2_pull(0) - vec1_pull(0)) * (1.0 - vec1_pull(0));
329 r_pull_intersect(2,0) = vec1_pull(0) + \
330 (vec2_pull(0) - vec1_pull(0)) / (vec2_pull(1) - vec1_pull(1)) * (-1.0 - vec1_pull(1));
331 r_pull_intersect(2,1) = -1.0;
333 r_pull_intersect(3,0) = vec1_pull(0) + \
334 (vec2_pull(0) - vec1_pull(0)) / (vec2_pull(1) - vec1_pull(1)) * (1.0 - vec1_pull(1));
335 r_pull_intersect(3,1) = 1.0;
338 r_pull_intersect(6,0) = vec1_pull(0);
339 r_pull_intersect(6,1) = vec1_pull(1);
340 r_pull_intersect(6,2) = vec1_pull(2);
343 r_pull_intersect(7,0) = vec2_pull(0);
344 r_pull_intersect(7,1) = vec2_pull(1);
345 r_pull_intersect(7,2) = vec2_pull(2);
348 if ((relative_position(0,0) == 2 || relative_position(0,0) == 3 || relative_position(0,0) == 4) && \
349 (relative_position(1,0) == 2 || relative_position(1,0) == 3 || relative_position(1,0) == 4))
354 if ((relative_position(0,1) == 2 || relative_position(0,1) == 3 || relative_position(0,1) == 4) && \
355 (relative_position(1,1) == 2 || relative_position(1,1) == 3 || relative_position(1,1) == 4))
361 for (
int i = 0; i <= 1; i++)
363 if (((r_pull_intersect(i,0) > vec1_pull(0) && r_pull_intersect(i,0) < vec2_pull(0)) || \
364 (r_pull_intersect(i,0) > vec2_pull(0) && r_pull_intersect(i,0) < vec1_pull(0))) && \
365 ((r_pull_intersect(i,1) > vec1_pull(1) && r_pull_intersect(i,1) < vec2_pull(1)) || \
366 (r_pull_intersect(i,1) > vec2_pull(1) && r_pull_intersect(i,1) < vec1_pull(1))) && \
367 (r_pull_intersect(i,1) >= -1.0 -
epsilon && r_pull_intersect(i,1) <= 1.0 +
epsilon))
372 for (
int i = 2; i <= 3; i++)
374 if (((r_pull_intersect(i,0) > vec1_pull(0) && r_pull_intersect(i,0) < vec2_pull(0)) || \
375 (r_pull_intersect(i,0) > vec2_pull(0) && r_pull_intersect(i,0) < vec1_pull(0))) && \
376 ((r_pull_intersect(i,1) > vec1_pull(1) && r_pull_intersect(i,1) < vec2_pull(1)) || \
377 (r_pull_intersect(i,1) > vec2_pull(1) && r_pull_intersect(i,1) < vec1_pull(1))) && \
378 (r_pull_intersect(i,0) >= -1.0 -
epsilon && r_pull_intersect(i,0) <= 1.0 +
epsilon))
385 for (
int i = 0; i < 8; i++)
387 if (selected(i) && selected_count == 0)
389 vec1_pull_seg(0) = r_pull_intersect(i,0);
390 vec1_pull_seg(1) = r_pull_intersect(i,1);
394 if (selected(i) && selected_count == 1)
396 if (fabs(vec1_pull_seg(0) - r_pull_intersect(i,0)) <
epsilon && \
397 fabs(vec1_pull_seg(1) - r_pull_intersect(i,1)) <
epsilon)
403 vec2_pull_seg(0) = r_pull_intersect(i,0);
404 vec2_pull_seg(1) = r_pull_intersect(i,1);
409 if (selected(i) && selected_count == 2)
411 if ((fabs(vec1_pull_seg(0) - r_pull_intersect(i,0)) <
epsilon && \
412 fabs(vec1_pull_seg(1) - r_pull_intersect(i,1)) <
epsilon) || \
413 (fabs(vec2_pull_seg(0) - r_pull_intersect(i,0)) <
epsilon && \
414 fabs(vec2_pull_seg(1) - r_pull_intersect(i,1)) <
epsilon))
420 MY_ERROR(
"In LDAD bond_function xy, More than 2 different points \
421 with different positions are being selected. \
422 This means a line intersecting with a cube has 3 points. \
423 Something wrong with the algorithm. Need to print and debug!");
428 if (selected_count == 0 || selected_count == 1)
434 else if (!degenerate(0) && degenerate(1) && !degenerate(2))
437 if (relative_position(1,2) == 1 || relative_position(1,2) == 5)
442 for (
int i = 0; i < 8; i++)
448 r_pull_intersect(0,0) = -1.0;
449 r_pull_intersect(0,2) = vec1_pull(2) + \
450 (vec2_pull(2) - vec1_pull(2)) / (vec2_pull(0) - vec1_pull(0)) * (-1.0 - vec1_pull(0));
452 r_pull_intersect(1,0) = 1.0;
453 r_pull_intersect(1,2) = vec1_pull(2) + \
454 (vec2_pull(2) - vec1_pull(2)) / (vec2_pull(0) - vec1_pull(0)) * (1.0 - vec1_pull(0));
456 r_pull_intersect(4,0) = vec1_pull(0) + \
457 (vec2_pull(0) - vec1_pull(0)) / (vec2_pull(2) - vec1_pull(2)) * (-1.0 - vec1_pull(2));
458 r_pull_intersect(4,2) = -1.0;
460 r_pull_intersect(5,0) = vec1_pull(0) + \
461 (vec2_pull(0) - vec1_pull(0)) / (vec2_pull(2) - vec1_pull(2)) * (1.0 - vec1_pull(2));
462 r_pull_intersect(5,2) = 1.0;
465 r_pull_intersect(6,0) = vec1_pull(0);
466 r_pull_intersect(6,1) = vec1_pull(1);
467 r_pull_intersect(6,2) = vec1_pull(2);
470 r_pull_intersect(7,0) = vec2_pull(0);
471 r_pull_intersect(7,1) = vec2_pull(1);
472 r_pull_intersect(7,2) = vec2_pull(2);
475 if ((relative_position(0,0) == 2 || relative_position(0,0) == 3 || relative_position(0,0) == 4) && \
476 (relative_position(2,0) == 2 || relative_position(2,0) == 3 || relative_position(2,0) == 4))
481 if ((relative_position(0,1) == 2 || relative_position(0,1) == 3 || relative_position(0,1) == 4) && \
482 (relative_position(2,1) == 2 || relative_position(2,1) == 3 || relative_position(2,1) == 4))
488 for (
int i = 0; i <= 1; i++)
490 if (((r_pull_intersect(i,0) > vec1_pull(0) && r_pull_intersect(i,0) < vec2_pull(0)) || \
491 (r_pull_intersect(i,0) > vec2_pull(0) && r_pull_intersect(i,0) < vec1_pull(0))) && \
492 ((r_pull_intersect(i,2) > vec1_pull(2) && r_pull_intersect(i,2) < vec2_pull(2)) || \
493 (r_pull_intersect(i,2) > vec2_pull(2) && r_pull_intersect(i,2) < vec1_pull(2))) && \
494 (r_pull_intersect(i,2) >= -1.0 -
epsilon && r_pull_intersect(i,2) <= 1.0 +
epsilon))
499 for (
int i = 4; i <= 5; i++)
501 if (((r_pull_intersect(i,0) > vec1_pull(0) && r_pull_intersect(i,0) < vec2_pull(0)) || \
502 (r_pull_intersect(i,0) > vec2_pull(0) && r_pull_intersect(i,0) < vec1_pull(0))) && \
503 ((r_pull_intersect(i,2) > vec1_pull(2) && r_pull_intersect(i,2) < vec2_pull(2)) || \
504 (r_pull_intersect(i,2) > vec2_pull(2) && r_pull_intersect(i,2) < vec1_pull(2))) && \
505 (r_pull_intersect(i,0) >= -1.0 -
epsilon && r_pull_intersect(i,0) <= 1.0 +
epsilon))
512 for (
int i = 0; i < 8; i++)
514 if (selected(i) && selected_count == 0)
516 vec1_pull_seg(0) = r_pull_intersect(i,0);
517 vec1_pull_seg(2) = r_pull_intersect(i,2);
521 if (selected(i) && selected_count == 1)
523 if (fabs(vec1_pull_seg(0) - r_pull_intersect(i,0)) <
epsilon && \
524 fabs(vec1_pull_seg(2) - r_pull_intersect(i,2)) <
epsilon)
530 vec2_pull_seg(0) = r_pull_intersect(i,0);
531 vec2_pull_seg(2) = r_pull_intersect(i,2);
536 if (selected(i) && selected_count == 2)
538 if ((fabs(vec1_pull_seg(0) - r_pull_intersect(i,0)) <
epsilon && \
539 fabs(vec1_pull_seg(2) - r_pull_intersect(i,2)) <
epsilon) || \
540 (fabs(vec2_pull_seg(0) - r_pull_intersect(i,0)) <
epsilon && \
541 fabs(vec2_pull_seg(2) - r_pull_intersect(i,2)) <
epsilon))
547 MY_ERROR(
"In LDAD bond_function xz, More than 2 different points \
548 with different positions are being selected. \
549 This means a line intersecting with a cube has 3 points. \
550 Something wrong with the algorithm. Need to print and debug!");
556 if (selected_count == 0 || selected_count == 1)
562 else if (degenerate(0) && !degenerate(1) && !degenerate(2))
565 if (relative_position(0,2) == 1 || relative_position(0,2) == 5)
571 for (
int i = 0; i < 8; i++)
577 r_pull_intersect(2,1) = -1.0;
578 r_pull_intersect(2,2) = vec1_pull(2) + \
579 (vec2_pull(2) - vec1_pull(2)) / (vec2_pull(1) - vec1_pull(1)) * (-1.0 - vec1_pull(1));
581 r_pull_intersect(3,1) = 1.0;
582 r_pull_intersect(3,2) = vec1_pull(2) + \
583 (vec2_pull(2) - vec1_pull(2)) / (vec2_pull(1) - vec1_pull(1)) * (1.0 - vec1_pull(1));
585 r_pull_intersect(4,1) = vec1_pull(1) + \
586 (vec2_pull(1) - vec1_pull(1)) / (vec2_pull(2) - vec1_pull(2)) * (-1.0 - vec1_pull(2));
587 r_pull_intersect(4,2) = -1.0;
589 r_pull_intersect(5,1) = vec1_pull(1) + \
590 (vec2_pull(1) - vec1_pull(1)) / (vec2_pull(2) - vec1_pull(2)) * (1.0 - vec1_pull(2));
591 r_pull_intersect(5,2) = 1.0;
594 r_pull_intersect(6,0) = vec1_pull(0);
595 r_pull_intersect(6,1) = vec1_pull(1);
596 r_pull_intersect(6,2) = vec1_pull(2);
599 r_pull_intersect(7,0) = vec2_pull(0);
600 r_pull_intersect(7,1) = vec2_pull(1);
601 r_pull_intersect(7,2) = vec2_pull(2);
604 if ((relative_position(1,0) == 2 || relative_position(1,0) == 3 || relative_position(1,0) == 4) && \
605 (relative_position(2,0) == 2 || relative_position(2,0) == 3 || relative_position(2,0) == 4))
610 if ((relative_position(1,1) == 2 || relative_position(1,1) == 3 || relative_position(1,1) == 4) && \
611 (relative_position(2,1) == 2 || relative_position(2,1) == 3 || relative_position(2,1) == 4))
617 for (
int i = 2; i <= 3; i++)
619 if (((r_pull_intersect(i,1) > vec1_pull(1) && r_pull_intersect(i,1) < vec2_pull(1)) || \
620 (r_pull_intersect(i,1) > vec2_pull(1) && r_pull_intersect(i,1) < vec1_pull(1))) && \
621 ((r_pull_intersect(i,2) > vec1_pull(2) && r_pull_intersect(i,2) < vec2_pull(2)) || \
622 (r_pull_intersect(i,2) > vec2_pull(2) && r_pull_intersect(i,2) < vec1_pull(2))) && \
623 (r_pull_intersect(i,2) >= -1.0 -
epsilon && r_pull_intersect(i,2) <= 1.0 +
epsilon))
628 for (
int i = 4; i <= 5; i++)
630 if (((r_pull_intersect(i,1) > vec1_pull(1) && r_pull_intersect(i,1) < vec2_pull(1)) || \
631 (r_pull_intersect(i,1) > vec2_pull(1) && r_pull_intersect(i,1) < vec1_pull(1))) && \
632 ((r_pull_intersect(i,2) > vec1_pull(2) && r_pull_intersect(i,2) < vec2_pull(2)) || \
633 (r_pull_intersect(i,2) > vec2_pull(2) && r_pull_intersect(i,2) < vec1_pull(2))) && \
634 (r_pull_intersect(i,1) >= -1.0 -
epsilon && r_pull_intersect(i,1) <= 1.0 +
epsilon))
641 for (
int i = 0; i < 8; i++)
643 if (selected(i) && selected_count == 0)
645 vec1_pull_seg(1) = r_pull_intersect(i,1);
646 vec1_pull_seg(2) = r_pull_intersect(i,2);
650 if (selected(i) && selected_count == 1)
652 if (fabs(vec1_pull_seg(1) - r_pull_intersect(i,1)) <
epsilon && \
653 fabs(vec1_pull_seg(2) - r_pull_intersect(i,2)) <
epsilon)
659 vec2_pull_seg(1) = r_pull_intersect(i,1);
660 vec2_pull_seg(2) = r_pull_intersect(i,2);
665 if (selected(i) && selected_count == 2)
667 if ((fabs(vec1_pull_seg(1) - r_pull_intersect(i,1)) <
epsilon && \
668 fabs(vec1_pull_seg(2) - r_pull_intersect(i,2)) <
epsilon) || \
669 (fabs(vec2_pull_seg(1) - r_pull_intersect(i,1)) <
epsilon && \
670 fabs(vec2_pull_seg(2) - r_pull_intersect(i,2)) <
epsilon))
676 MY_ERROR(
"In LDAD bond_function yz, More than 2 different points \
677 with different positions are being selected. \
678 This means a line intersecting with a cube has 3 points. \
679 Something wrong with the algorithm. Need to print and debug!");
685 if (selected_count == 0 || selected_count == 1)
692 else if (!degenerate(0) && !degenerate(1) && !degenerate(2))
694 for (
int i = 0; i < 8; i++)
701 r_pull_intersect(0,0) = -1.0;
702 r_pull_intersect(0,1) = vec1_pull(1) + \
703 (vec2_pull(1) - vec1_pull(1)) / (vec2_pull(0) - vec1_pull(0)) * (-1.0 - vec1_pull(0));
704 r_pull_intersect(0,2) = vec1_pull(2) + \
705 (vec2_pull(2) - vec1_pull(2)) / (vec2_pull(0) - vec1_pull(0)) * (-1.0 - vec1_pull(0));
707 r_pull_intersect(1,0) = 1.0;
708 r_pull_intersect(1,1) = vec1_pull(1) + \
709 (vec2_pull(1) - vec1_pull(1)) / (vec2_pull(0) - vec1_pull(0)) * (1.0 - vec1_pull(0));
710 r_pull_intersect(1,2) = vec1_pull(2) + \
711 (vec2_pull(2) - vec1_pull(2)) / (vec2_pull(0) - vec1_pull(0)) * (1.0 - vec1_pull(0));
714 r_pull_intersect(2,0) = vec1_pull(0) + \
715 (vec2_pull(0) - vec1_pull(0)) / (vec2_pull(1) - vec1_pull(1)) * (-1.0 - vec1_pull(1));
716 r_pull_intersect(2,1) = -1.0;
717 r_pull_intersect(2,2) = vec1_pull(2) + \
718 (vec2_pull(2) - vec1_pull(2)) / (vec2_pull(1) - vec1_pull(1)) * (-1.0 - vec1_pull(1));
721 r_pull_intersect(3,0) = vec1_pull(0) + \
722 (vec2_pull(0) - vec1_pull(0)) / (vec2_pull(1) - vec1_pull(1)) * (1.0 - vec1_pull(1));
723 r_pull_intersect(3,1) = 1.0;
724 r_pull_intersect(3,2) = vec1_pull(2) + \
725 (vec2_pull(2) - vec1_pull(2)) / (vec2_pull(1) - vec1_pull(1)) * (1.0 - vec1_pull(1));
728 r_pull_intersect(4,0) = vec1_pull(0) + \
729 (vec2_pull(0) - vec1_pull(0)) / (vec2_pull(2) - vec1_pull(2)) * (-1.0 - vec1_pull(2));
730 r_pull_intersect(4,1) = vec1_pull(1) + \
731 (vec2_pull(1) - vec1_pull(1)) / (vec2_pull(2) - vec1_pull(2)) * (-1.0 - vec1_pull(2));
732 r_pull_intersect(4,2) = -1.0;
735 r_pull_intersect(5,0) = vec1_pull(0) + \
736 (vec2_pull(0) - vec1_pull(0)) / (vec2_pull(2) - vec1_pull(2)) * (1.0 - vec1_pull(2));
737 r_pull_intersect(5,1) = vec1_pull(1) + \
738 (vec2_pull(1) - vec1_pull(1)) / (vec2_pull(2) - vec1_pull(2)) * (1.0 - vec1_pull(2));
739 r_pull_intersect(5,2) = 1.0;
742 r_pull_intersect(6,0) = vec1_pull(0);
743 r_pull_intersect(6,1) = vec1_pull(1);
744 r_pull_intersect(6,2) = vec1_pull(2);
747 r_pull_intersect(7,0) = vec2_pull(0);
748 r_pull_intersect(7,1) = vec2_pull(1);
749 r_pull_intersect(7,2) = vec2_pull(2);
752 if ((relative_position(0,0) == 2 || relative_position(0,0) == 3 || relative_position(0,0) == 4) && \
753 (relative_position(1,0) == 2 || relative_position(1,0) == 3 || relative_position(1,0) == 4) && \
754 (relative_position(2,0) == 2 || relative_position(2,0) == 3 || relative_position(2,0) == 4))
759 if ((relative_position(0,1) == 2 || relative_position(0,1) == 3 || relative_position(0,1) == 4) && \
760 (relative_position(1,1) == 2 || relative_position(1,1) == 3 || relative_position(1,1) == 4) && \
761 (relative_position(2,1) == 2 || relative_position(2,1) == 3 || relative_position(2,1) == 4))
766 for (
int i = 0; i <= 5; i++)
769 if (((r_pull_intersect(i,0) > vec1_pull(0) && r_pull_intersect(i,0) < vec2_pull(0)) || \
770 (r_pull_intersect(i,0) > vec2_pull(0) && r_pull_intersect(i,0) < vec1_pull(0))) && \
771 ((r_pull_intersect(i,1) > vec1_pull(1) && r_pull_intersect(i,1) < vec2_pull(1)) || \
772 (r_pull_intersect(i,1) > vec2_pull(1) && r_pull_intersect(i,1) < vec1_pull(1))) && \
773 ((r_pull_intersect(i,2) > vec1_pull(2) && r_pull_intersect(i,2) < vec2_pull(2)) || \
774 (r_pull_intersect(i,2) > vec2_pull(2) && r_pull_intersect(i,2) < vec1_pull(2))) && \
775 (r_pull_intersect(i,0) >= -1.0 -
epsilon && r_pull_intersect(i,0) <= 1.0 +
epsilon) && \
776 (r_pull_intersect(i,1) >= -1.0 -
epsilon && r_pull_intersect(i,1) <= 1.0 +
epsilon) && \
777 (r_pull_intersect(i,2) >= -1.0 -
epsilon && r_pull_intersect(i,2) <= 1.0 +
epsilon))
785 for (
int i = 0; i < 8; i++)
787 if (selected(i) && selected_count == 0)
789 vec1_pull_seg(0) = r_pull_intersect(i,0);
790 vec1_pull_seg(1) = r_pull_intersect(i,1);
791 vec1_pull_seg(2) = r_pull_intersect(i,2);
796 if (selected(i) && selected_count == 1)
798 if (fabs(vec1_pull_seg(0) - r_pull_intersect(i,0)) <
epsilon && \
799 fabs(vec1_pull_seg(1) - r_pull_intersect(i,1)) <
epsilon && \
800 fabs(vec1_pull_seg(2) - r_pull_intersect(i,2)) <
epsilon)
806 vec2_pull_seg(0) = r_pull_intersect(i,0);
807 vec2_pull_seg(1) = r_pull_intersect(i,1);
808 vec2_pull_seg(2) = r_pull_intersect(i,2);
814 if (selected(i) && selected_count == 2)
816 if ((fabs(vec1_pull_seg(0) - r_pull_intersect(i,0)) <
epsilon && \
817 fabs(vec1_pull_seg(1) - r_pull_intersect(i,1)) <
epsilon && \
818 fabs(vec1_pull_seg(2) - r_pull_intersect(i,2)) <
epsilon) || \
819 (fabs(vec2_pull_seg(0) - r_pull_intersect(i,0)) <
epsilon && \
820 fabs(vec2_pull_seg(1) - r_pull_intersect(i,1)) <
epsilon && \
821 fabs(vec2_pull_seg(2) - r_pull_intersect(i,2)) <
epsilon))
827 MY_ERROR(
"In LDAD bond_function xyz, More than 2 different points \
828 with different positions are being selected. \
829 This means a line intersecting with a cube has 3 points. \
830 Something wrong with the algorithm. Need to print and debug!");
836 if (selected_count == 0 || selected_count == 1)
842 vec1_push_seg = ldadVectors * vec1_pull_seg.transpose();
843 vec2_push_seg = ldadVectors * vec2_pull_seg.transpose();
844 vec12_push_seg = vec2_push_seg - vec1_push_seg;
845 total_length = vec12_push_seg.norm();
848 return total_length * oneDFunction.integrate(vec1_pull_seg, vec2_pull_seg) * normalizer / distance;