Open ExpHP opened 6 years ago
It's pretty hard to tell how exactly you classify the modes as acoustic in eigenvector-classify
, but it'd definitely be nice to still have the eigenmode-directed relaxation if possible (even if it's just for the modes that rsp2 knows how to deal with).
Oops eigenvector-classify
isn't supposed to exist any more (the source file appears to have been left behind by accident; I've deleted it now.). The implementation in that crate was completely bass ackwards, and you would never believe that this is what it was computing:
Here is the current implementation, and an even plainer visual:
let evec_hat = normalize([x1 y1 z1 x2 y2 z2 x3 y3 z3 ... xN yN zN])
let x_hat = normalize([ 1 0 0 1 0 0 1 0 0 ... 1 0 0])
let y_hat = normalize([ 0 1 0 0 1 0 0 1 0 ... 0 1 0])
let z_hat = normalize([ 0 0 1 0 0 1 0 0 1 ... 0 0 1])
let acousticness = (evec_hat . x_hat)**2
+ (evec_hat . y_hat)**2
+ (evec_hat . z_hat)**2
eigenvector-classify
implemented it in terms of a more general function that also described "layer-acousticness"; i.e. the probability dotted with the 3L modes (for L layers) where one layer moves uniformly. That is now computed here much more plainly, in terms of acousticness
.
(never mind the complexity hiding within Partition, which is used there to split the eigenvector into layers)
I have an idea for rotational modes:
One of the following:
The second one feels to me like it will be most reliable.
Ehhhhh scratch that. A mode not at the equilibrium point will also have forces pointing the same way in either direction. More accurately, perhaps, we should consider the differences between the forces at those points and the forces in the current structure.
Edit (05-15-2019):
The above has been implemented in rsp2 since forever and it basically never, ever works.
There can be acoustic modes which do not have a value near 1 for the property that rsp2 defines as "acousticness". This makes the eigenmode-directed relaxation algorithm very angry.
Not sure how to detect such modes. It's probably easier to just make eigenmode-directed relaxation optional.