Orientation of transition dipole moment changes during optimization; does this mean something?

Can someone knowledgable on transition dipole moment calculations help me understand if this means something important or not? I am running TDDFT excited-state optimizations of a small molecule (indole). I want to use the TDM vector to identify a state as the optimization progresses. However sometimes the TDM will suddenly change to be be diametrically opposite what it was at the previous step, and then might flip back later. (The structure itself is barely changing.) See the output below for a demonstration from wb97X/6-31+G* calculation.

My physical intuition of TDM is that this means nothing important. But maybe I’m wrong and there’s something interesting to learn here. But at the very least its annoying for me to work around these flips as I track a state through the optimization.

There’s a correlation to one of the MO contributions changing sign - seems like that’s the cause - but does that mean something important?


Output of 5 structures from a TDDFT optimization, Excited State 1 exercepted at each step:

 Excited state   1: excitation energy (eV) =    5.3617
 Total energy for state  1:                  -363.32307918 au
    Multiplicity: Singlet
    Trans. Mom.:  0.2632 X   0.3803 Y  -0.0002 Z
    Strength   :     0.0281007265
    D(   30) --> V(    1) amplitude =  0.7735
    D(   31) --> V(    2) amplitude = -0.5579

 Excited state   1: excitation energy (eV) =    5.0866
 Total energy for state  1:                  -363.32880730 au
    Multiplicity: Singlet
    Trans. Mom.: -0.3214 X  -0.4317 Y   0.0000 Z
    Strength   :     0.0361038847
    D(   30) --> V(    1) amplitude =  0.7647
    D(   31) --> V(    1) amplitude =  0.2726
    D(   31) --> V(    2) amplitude =  0.5319

 Excited state   1: excitation energy (eV) =    5.0818
 Total energy for state  1:                  -363.32898654 au
    Multiplicity: Singlet
    Trans. Mom.: -0.3342 X  -0.4491 Y   0.0000 Z
    Strength   :     0.0390229968
    D(   30) --> V(    1) amplitude =  0.7633
    D(   31) --> V(    1) amplitude =  0.2895
    D(   31) --> V(    2) amplitude =  0.5235

Excited state   1: excitation energy (eV) =    5.0774
 Total energy for state  1:                  -363.32901321 au
    Multiplicity: Singlet
    Trans. Mom.: -0.3404 X  -0.4657 Y  -0.0000 Z
    Strength   :     0.0413946418
    D(   30) --> V(    1) amplitude =  0.7566
    D(   31) --> V(    1) amplitude =  0.3169
    D(   31) --> V(    2) amplitude =  0.5138

Excited state   1: excitation energy (eV) =    5.0766
 Total energy for state  1:                  -363.32901473 au
    Multiplicity: Singlet
    Trans. Mom.:  0.3413 X   0.4685 Y  -0.0000 Z
    Strength   :     0.0417906985
    D(   30) --> V(    1) amplitude =  0.7549
    D(   31) --> V(    1) amplitude = -0.3226
    D(   31) --> V(    2) amplitude = -0.5119

Your intuition is correct about its significance and its sign. The signs of the amplitudes (and SCF MO coefficients, for that matter) are arbitrary, as long as the vector of all amplitudes for that state is orthogonal to all other states. This is a result of eigenvectors (from your choice of LAPACK implementation, the Davidson algorithm implementation, Davidson-like algorithm implementation, or similar) containing arbitrary phase factors that may vary between implementations and/or computers but the eigenvectors remain orthogonal and the eigenvalues should be identical. This propagates to the signs of the TDM components. For these components, signs should be consistent between them: the same state at two very similar geometries may flip the sign of the components, but it must happen for all. For example, (+X,-Y,+Z) must become (-X,+Y,-Z).

Another way of putting it is that eigenvectors are always arbitrary up to a sign (or more generally a complex number of unit modulus). The CIS coefficients can thus change sign depending on the phase of the moon or the compiler that you used, etc.

There is a state-tracking algorithm in Q-Chem based on attachment/detachment densities. I have not used it so I don’t know if it’s relevant here; check the manual.