Skip to content

Commit 9c963b6

Browse files
authored
Add files via upload
1 parent 73755de commit 9c963b6

1 file changed

Lines changed: 41 additions & 15 deletions

File tree

multioptpy/neb.py

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1053,23 +1053,49 @@ def align_geometry_by_image_distance(geometry_list, spacing_dist=None, max_itera
10531053
backward_distance = abs(np.linalg.norm(backward_geom_centered - prev_geom_centered) - target_distance)
10541054
backward_satisfies_tolerance = backward_distance < tolerance
10551055

1056-
# If both satisfy tolerance, choose forward (later in path) direction
1056+
# If both satisfy tolerance, check distance from initial geometry
10571057
if forward_satisfies_tolerance and backward_satisfies_tolerance:
1058-
current_geom = forward_geom
1059-
current_segment = forward_segment
1060-
current_t = forward_t
1058+
initial_geom_centered = initial_geom - np.mean(initial_geom, axis=0)
1059+
forward_to_initial = np.linalg.norm(forward_geom_centered - initial_geom_centered)
1060+
backward_to_initial = np.linalg.norm(backward_geom_centered - initial_geom_centered)
1061+
1062+
# If forward is closer to initial and within node_distance, choose forward
1063+
if forward_to_initial <= node_distance:
1064+
current_geom = forward_geom
1065+
current_segment = forward_segment
1066+
current_t = forward_t
1067+
# If backward is within node_distance, choose backward
1068+
elif backward_to_initial <= node_distance:
1069+
current_geom = backward_geom
1070+
current_segment = backward_segment
1071+
current_t = backward_t
1072+
# If both are too far from initial, keep initial geometry
1073+
else:
1074+
current_geom = initial_geom
10611075
break # Exit iteration as we found satisfactory result
10621076

1063-
# If only one satisfies tolerance, choose that one
1077+
# If only one satisfies tolerance, check distance from initial geometry
10641078
elif forward_satisfies_tolerance:
1065-
current_geom = forward_geom
1066-
current_segment = forward_segment
1067-
current_t = forward_t
1079+
initial_geom_centered = initial_geom - np.mean(initial_geom, axis=0)
1080+
forward_to_initial = np.linalg.norm(forward_geom_centered - initial_geom_centered)
1081+
1082+
if forward_to_initial <= node_distance:
1083+
current_geom = forward_geom
1084+
current_segment = forward_segment
1085+
current_t = forward_t
1086+
else:
1087+
current_geom = initial_geom
10681088
break
10691089
elif backward_satisfies_tolerance:
1070-
current_geom = backward_geom
1071-
current_segment = backward_segment
1072-
current_t = backward_t
1090+
initial_geom_centered = initial_geom - np.mean(initial_geom, axis=0)
1091+
backward_to_initial = np.linalg.norm(backward_geom_centered - initial_geom_centered)
1092+
1093+
if backward_to_initial <= node_distance:
1094+
current_geom = backward_geom
1095+
current_segment = backward_segment
1096+
current_t = backward_t
1097+
else:
1098+
current_geom = initial_geom
10731099
break
10741100

10751101
# If neither satisfies tolerance, keep initial geometry
@@ -1084,10 +1110,10 @@ def align_geometry_by_image_distance(geometry_list, spacing_dist=None, max_itera
10841110
# Use last node from input
10851111
new_geometry_list.append(geometry_list[-1])
10861112

1087-
#new_path_length_list = calc_path_length_list(new_geometry_list)
1113+
new_path_length_list = calc_path_length_list(new_geometry_list)
10881114
#print("Path length list (after the process) : ", new_path_length_list)
1089-
#print("Distances between nodes:")
1090-
#for x in range(len(new_path_length_list)-1):
1091-
# print(new_path_length_list[x+1]-new_path_length_list[x])
1115+
print("Distances between nodes:")
1116+
for x in range(len(new_path_length_list)-1):
1117+
print(new_path_length_list[x+1]-new_path_length_list[x])
10921118

10931119
return new_geometry_list

0 commit comments

Comments
 (0)