## How to convert between frame and coordinate bases

This article describes how to transform components of vectors or other tensors between a coordinate basis and an arbitrary frame / tetrad. This process is more general than the transformation between two coordinate bases as found in any introductory general relativity course. Some frames are “non-holonomic” meaning they do not arise from any set of coordinate basis vectors, also there may be situations in which a coordinate representation is inconvenient or not known. I also outline how to implement the transformations in a computer algebra system (CAS).

Effectively we only work in a single tangent space on the manifold, so it turns out to be just a linear algebra problem. My description is based on Carroll (§J) and de Felice & Clarke (§4.2) who assume the frame is orthonormal, however I simply assume it is a basis: that it spans the tangent space and is linearly independent. So suppose we have coordinates , and a frame with components in the coordinate system, that is: in terms of coordinate basis vectors. I use Latin indices to specify vectors in the tetrad frame, and add a hat for orthonormal frames. I use Greek indices for coordinate components, for example for the vector . (In place of our , de Felice & Clarke write , and Carroll swaps the index order to .) In a CAS we can implement the frame as a array / matrix called “ ” say, reading the indices of from left to right but ignoring their up-or-down placement. This ordering conveniently gives an array of “vectors”: However there is a tradeoff that vectors are placed in rows instead of the more standard column vector representation, because matrix indices refer to the row first and column second. We also define quantities implemented as a matrix “ “, which give the coordinate basis vectors in terms of the new frame: It follows from linear independence that , hence as matrices: . The transpose is required because of the index summation order, since the convention for matrix multiplication is . This point could easily be missed when references call it “inverse” with more general index summation in mind. Note summing over the Latin indices also returns the identity: .

Now suppose a vector is specified by its coordinate basis components , which we implement as a 4-element array . Since , substituting the previous expression for and using linear independence gives the components in the new frame (note the Latin index) as: . Programmatically this is the matrix multiplication , at least for my CAS does not distinguish between a row and column vector but automatically matches the dimensions. Now suppose we have different vectors, stored in an matrix say (typically ). These are processed in a batch operation by converting to column vectors, applying the transformation, then transposing back, so the components are: , in the new frame.

Now consider the dual bases. In the coordinate dual basis, the vector dual to has components . These components can be implemented as an array where is the matrix and the row / column vector distinction is ignored as before. Again we can lower multiple vectors in one step via .

The dual to the new frame satisfies by definition, hence which may be validated by substitution, and these components are just again. Similarly which are the components again. Carroll’s description for an orthonormal frame is true for any frame:

The vielbeins [ ] thus serve double duty as the components of the coordinate basis vectors in terms of the orthonormal basis vectors, and as components of the orthonormal basis one-forms in terms of the coordinate basis one-forms; while the inverse vielbeins serve as the components of the orthonormal basis vectors in terms of the coordinate basis, and as components of the coordinate basis one-forms in terms of the orthonormal basis.

Likewise Schutz’ (§3.3) description of Lorentz transformations holds more generally:

…components of one-forms transform in exactly the same manner as basis vectors and in the opposite manner to components of vectors.
[…Whereas basis one-forms transform] the same as for components of a vector, and opposite that for components of a one-form.

We may also define (de Felice & Clarke, eqn. 4.2.5): which I interpret as a definition. This evaluates to (or ), hence . Define also which evaluates to (or , where is the matrix ), hence . Thus Greek indices are raised and lowered in the familiar way — using the metric components in the coordinate basis). On the other hand the metric components in the new frame are which can be implemented as . In the particular case of an orthonormal frame , so in this case Latin indices are raised and lowered with the Minkowski metric. The metric in the dual frame is so define . These are matrix inverses: . We can show Latin indices are raised or lowered using this frame metric, so for example .

With all these definitions of components as metric inner products between quantities, we may wonder if the original frame components can also be expressed this way. Indeed they can: and , where the vectors and dual vectors are acted on one another. The metric is implicit in the summation, because as a (1,1)-tensor it is just the identity. But the (1,1)-tensor made from the “frame” components is also just the identity (see Carroll), so it and the metric tensor are equal. Input and into this tensor and it indeed returns . We can do similarly with the dual frame.

For higher rank tensors, their components are expressed in the new frame as e.g. (de Felice & Clarke, Hartle §20.3, §21.2) My CAS multiplies higher rank “matrices” by contracting the last index of with the first index of . Hence we can only change two indices of by this method, short of reordering the indices halfway through. There is another inbuilt method “TensorContract” which I will relate sometime later. Of course you could just program in the sum manually, but I am seeking an elegant solution for aesthetic satisfaction, also because inbuilt operations are probably more optimised. Finally you can continue to mix Greek and Latin (coordinate and frame) indices, see Carroll and I will add an example later.