Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Kolaru authored Aug 18, 2023
1 parent 6f7bff9 commit d7272df
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This is a simple package that provides utility function to compute normal modes

The other use of this package is to give me a space to ramble about normal modes, and I will shamelessly use this README for this purpose.

# A proper introduction of normal modes
# A proper introduction to normal modes

Because I find the subject confusing, and the introductions describing the problem as well, I think it is worth laying down the basics here.

Expand Down Expand Up @@ -54,14 +54,14 @@ We can check wikipedia to get whatever we need from it, like for example the Wig

# The package

Now what are the normal modes in all that? That's where it gets confusing and the reason I wrote this section to begin with. Candidates are
The package aim at providing an interface to normal modes, but what are they? That's where it gets confusing. The andidates are

1. The eigen vectors ${\rm \bf u}_j$ that are the columns of $\rm \bf U$. They are however defined only in the mass weighted space.
2. The columns of $\rm \bf MU$. They are in real space, but they are are no longer neither normed nor orthogonal.
3. The columns of $\rm \bf MU$ normalized. Still not orthogonal to each other but at least they have norm 1. However it loses information about $\rm \bf M$ which is needed to convert between $\rm \bf x$ and $\rm \bf z$ or to perform Wigner sampling. So those are ofter return together with so-called *mode masses*, the norm of the columns of $\rm \bf MU$ before being normed[^lunacy].
1. The eigen vectors ${\rm \bf u}_j$ that (the columns of $\rm \bf U$). They are normed and orthogonal, but live in the mass weighted space.
2. The columns of $\rm \bf MU$. They live in real space, but they are neither normed nor orthogonal.
3. The columns of $\rm \bf MU$ normalized. Still not orthogonal to each other but at least they have norm 1. In addition all information about $\rm \bf M$ is removed, which is needed to convert between $\rm \bf x$ and $\rm \bf z$ or to perform Wigner sampling. So those are ofter return together with so-called *mode masses*, the norm of the columns of $\rm \bf MU$ before being normed[^lunacy].

As far as I know the last one is what, despite my strong feelings, is known as *normal modes*. However to avoid a slow descent into madness, the package provides a specific object type `NormalDecomposition(hessian)`, that stores the useful information and encapsulate the inner confusing parts. Available are
- `normal_modes` : The (normed) normal modes for example to plot or animate them (possible integration with Makie may become available at some point).
As far as I know the last one is what, despite my strong feelings, is known as *normal modes*. To avoid users a slow descent into madness, the package provides a specific object type `NormalDecomposition(hessian)`, that stores the useful information and encapsulate the inner confusing parts. Available are
- `normal_modes` : The normal modes (in real space), useful for example to plot them.
- `sample` : Perform Wigner sampling, and get the displacements from the mean for positions and momenta.
- `frequencies` : Frequencies of the modes (in GHz).
- `wave_number` : Wave numbers of the modes (in inverse cm).
Expand Down Expand Up @@ -104,7 +104,7 @@ $$
where ${\rm \bf e}_i$ are the unit vectors of the canonical basis. Since no new
dependency in ${\rm \bf x}$ or ${\rm \bf z}$ appear, we can apply it
twice. We transpose one of them however, to make the vector with index $i$
appear together[^transpose trick]
appear together[^transpose_trick]

$$
\sum_i \frac{-\hbar^2}{2 m_i} \frac{\partial^2}{\partial x_i^2} =
Expand Down Expand Up @@ -147,5 +147,5 @@ $$

[^lunacy]: Which is pure lunacy if you ask me, the code I was using was norming the component in one function, and then immediately unnorming them in the next one.

[^transpose trick] We transpose a scalar, which is a trick I like very much and
[^transpose_trick] We transpose a scalar, which is a trick I like very much and
which is surprisingly useful.

0 comments on commit d7272df

Please sign in to comment.