returns the Petrov type of the spacetime metric set or a list of Weyl scalars - computes the principal roots - Maple Programming Help

Online Help

All Products    Maple    MapleSim

Home : Support : Online Help : Physics : Tetrads : Physics/Tetrads/PetrovType

Physics[Tetrads][PetrovType] - returns the Petrov type of the spacetime metric set or a list of Weyl scalars - computes the principal roots

Calling Sequence




principalpolynomial = ...


optional, the right-hand side is either the word only, or an assignable name, so that the principal polynomial is either returned as soon as the Weyl scalars are computed, or assigned to this name while the classification is performed.

principalroots = ...


optional, the right-hand side is either true, false (default value) or an assignable name, so that the classification is performed computing the principal roots, and if an assignable name is given then these roots assigned to this name.

simplifier = ...


optional, the right-hand side can be any valid Maple construction to be applied to the Weyl scalars

weylscalars = ...


optional, the right-hand side is a list with the Weyl scalars, that can be related or not to the spacetime metric set



The PetrovType command returns the Petrov type of the spacetime metric set. To set the metric see Setup, or you can also set it using the metric command g_ to be one of the solutions to Einstein's equations of the database of solutions, see g_.


The Petrov classification can be performed by analyzing the multiplicity of the roots of the principal polynomial of degree 4 in Z



where Ψ0,Ψ1,Ψ2,Ψ3,Ψ4 are the Weyl scalars and it is assumed, without loss of generality, that Ψ40 (when Ψ4=0, one can always rotate the tetrad and make it different from 0, see TransformTetrad). To compute the Weyl scalars for the spacetime metric set, using the Weyl command entering Weyl[scalars]. The classification is as follows:

Petrov Type

Multiplicity of the roots of the principal polynomial


all Ψj=0, there is no principal polynomial


one root of multiplicity 4


two distinct roots of multiplicity 2


two distinct roots, one of multiplicity 3 and one other distinct one


three distinct roots, one of multiplicity 2 and two other distinct ones


four distinct roots


REMARK: the classification above depends on the ability of the system to determine that an algebraic expression is equal to 0, or that two roots are equal, things that, in the most general case, are undecidable. In this sense, the classification returned by PetrovType should be understood as one where the spacetime being classified is either of the returned type, or of one of the types of the table that appear before that type. For example, although unlikely to happen, if the returned type is "II", this could be due to difficulties in noticing that the three apparently different roots are not all different, and if that were the case, then the actual Petrov type could be any of the previously listed ones corresponding to less than three distinct roots.


When classifying the spacetime metric using PetrovType, you do not need to indicate the Weyl scalars: they are automatically computed using Weyl[scalars]. However, since these scalars depend on the tetrad, depending on the case it may be convenient to use a different form of them (i.e. corresponding to a different orientation of the axis of the tetrad system). For that purpose you can use the optional argument weylscalars = [...] where the right-hand side is a list with the five alternative Weyl scalars. This optional argument also allows you to determine the Petrov type of a spacetime metric different than the one set by passing a corresponding list of Weyl scalars.


Passing a list of scalars on the right-hand side of weylscalars = [...] also allows you for the determination of the Petrov type of any tensor that has the same symmetries of the Weyl tensor. This option is actually used by the SegreType command to perform the Plebanski-Petrov classification, based on the Ricci tensor, with which the Plebanski tensor is constructed. To compute the scalars for the Plebanski tensor or any other one having the symmetries of the Weyl tensor, you can always substitute the Weyl tensor by the tensor you are working with in the output of Weyl[scalarsdefinition] then evaluate the result using SumOverRepeatedIndices.


Depending on the form of the Weyl scalars, either the ones automatically computed by PetrovType using Weyl[scalars], or an alternative list of them that you can optionally indicate, a more specialized kind of simplification may be appropriate or necessary in order to properly perform zero recognition. For this purpose you can use the option simplifier = ... where the right-hand side can be any Maple construction to be applied to the list of Weyl scalars before proceeding with the classification. The default value of simplifier is a combination of simplify with evala to fully normalize radicals before proceeding.


The Petrov type can also be deduced directly from the Weyl scalars and some algebraic expressions of degree 2 to 6 in these scalars, without computing the principal roots (see for instance the canonical forms described below, also reference [4]). These classification shortcuts are tried first and also depend on the ability of the system to recognize that an algebraic expression is equal to zero. You can always, however, request that the classification is performed computing the principal roots and explicitly analyzing their multiplicity by passing the optional argument principalroots, or principalroots = true, so that the classification shortcuts are not used. To actually see the roots you can use the optional argument principalroots = ..., where the right-hand side is any assignable name - for instance ROOTS - to which the principal roots will be assigned. This is useful when analyzing the multiplicity of the principal roots require some special simplification approach to recognize that some of them, that look different, are actually the same.


In cases where zero recognition is complicated, it can be useful to analyze the principal polynomial itself. For this purpose, you can compute it using the formula shown above, or using the optional argument principalpolynomial = only, to receive the polynomial instead of the Petrov classification, or principalpolynomial = ... where the right-hand side is any assignable name - for instance PrincipalPolynomial - to which the principal polynomial will be assigned before returning the Petrov classification.


Provided that the spacetime is not conformally flat (for which all the components of the Weyl tensor are equal to zero), by performing rotations of the tetrad system, the tetrad e_ can be written in canonical form (see the canonicalform option of TransformTetrad), in which case the Weyl scalars will match one and only one of the following five cases (see reference [3] page 388):


In all these cases, the Petrov type can be derived directly from the scalars, without having to analyze the roots of the principal polynomial. The transformations (rotations of the tetrad system of references) used to rewrite the Weyl scalars into one of these five forms are are of Class I, II and III as defined in [3] equations (7.79) on page 384, (7.83) and (7.84) on page 385. Transformations of Class I can be performed with the command TransformTetrad using the optional argument nullrotationwithfixedl_, of Class II using nullrotationwithfixedn_ and of Class III by calling TransformTetrad(spatialrotationsm_mb_plan, boostsn_l_plane), so with the two optional arguments simultaneously.


with(Physics): with(Tetrads);


Setting lowercaselatin_ah letters to represent tetrad indices

Defined as tetrad tensors see ?Physics,tetrads, 𝔢a,μ, ηa,b, γa,b,c, λa,b,c

Defined as spacetime tensors representing the NP null vectors of the tetrad formalism see ?Physics,tetrads, lμ, nμ, mμ, m&conjugate0;μ




Setup(mathematicalnotation = true);



There are six Petrov types: I, II, III, D, N and O. Start with a spacetime metric of Petrov type I. The numbers indexing the spacetime metric g_ that follows always refer to the equation numbers identifying the metric in [2], the "Exact Solutions to Einstein's Field Equations" textbook:

g_[[12, 21, 1]];


Systems of spacetime coordinates are:X=x,y,φ,t

Default differentiation variables for d_, D_ and dAlembertian are:X=x,y,φ,t

The McLenaghan, Tariq (1975) metric in coordinates Tupper (1976)

Parameters: a,k,κ0

Comments: k paramⅇtrⅈzⅇs thⅇ most gⅇnⅇral ⅇlⅇctromagnⅇtⅈc ⅈnvarⅈant wⅈth rⅇspⅇct to thⅇ last 3 Kⅈllⅈng vⅇctors

Resetting the signature of spacetime from - - - + to + + + - in order to match the signature in the database of metrics




Note that entering the command above automatically sets g_12,21,1 to be the spacetime metric (equivalent to having used the Setup command for that purpose). The Petrov type for this spacetime is




The same computation but tracking the principal roots behind this classification

PetrovType(principalroots = 'ROOTS');






The principal polynomial only

PetrovType(principalpolynomial = only);



In cases like this one it is frequently useful to simplify expressions using assumptions - either using Assume or assuming

simplify((7)) assuming x >= 0;



The four different roots corresponding to Petrov type "I", now in simpler form after having assumed 0x

solve((8), Z);



The underlying Weyl scalars are derived from the Weyl tensor and the null vectors of the Newman-Penrose formalism (l_, n_, m_ and mb_)







Let's assume everything is positive to simplify formulas and for that purpose use Physics:-Assume (the lower case assume command redefines the assumed variables, so it is not fully compatible with Physics, DifferentialGeometry and VectorCalculus).

Assume(x > 0, y > 0, a > 0);



The scalars are now simpler




These scalars, however, are still not in the canonical form described in the classification table shown in the Description, because Ψ40 and Ψ31. To achieve that canonical form, recalling that the Weyl scalars are derived from the tetrad (the null vectors of the Newman-Penrose formalism), we need to transform the tetrad into canonical form. The starting point is the tetrad computed by default, a simple one for this spacetime




A canonical form for this default tetrad is obtained using TransformTetrad




Despite the fact that this is a really more complicated tetrad, the corresponding Weyl scalars now match the conditions specified for the canonical form of type I in the classification table. To verify this, proceed in three steps:


verify that the above is indeed a tetrad (command IsTetrad);


set the result above to be the tetrad in use (command Setup);


recompute the Weyl scalars (command Weyl):


Type of tetrad: null



Setup(tetrad = (15)):




We now have ψ0=0,ψ10,ψ20,ψ3=1,ψ4=0 as indicated in the classification table in the Description, so the tetrad is now in canonical form. In these cases the Petrov type "I" can be inferred directly from the form of the Weyl scalars.

As an example of Petrov type II, consider

g_[[24, 37, 7]];


Systems of spacetime coordinates are:X=v,x,y,u

Default differentiation variables for d_, D_ and dAlembertian are:X=v,x,y,u

The Stephani metric in coordinates v,x,y,u

Parameters: fx,a,Ψ1u,x,y

Comments: Casⅇ 6 from Tablⅇ 24.1:Psⅈ1(u, x, y): ⅆⅈff(Psⅈ1(u, x, y), x, x)+ⅆⅈff(Psⅈ1(u, x, y), y, y) = 0, ⅆⅈff(x*ⅆⅈff(_M(u, x, y), x), x)+x*ⅆⅈff(_M(u, x, y), y, y) = _kappa0*(ⅆⅈff(_Psⅈ(u, x, y), x)^2+ⅆⅈff(_Psⅈ(u, x, y), y)^2)




The Petrov type of this spacetime and the principal roots are given by:

PetrovType(principalroots = 'ROOTS');






To verify that this is the correct Petrov type, we proceed as in the other case: transform the default tetrad for this spacetime into its canonical form and check the resulting Weyl scalars. To work with simpler algebraic expressions while illustrating the process assume that the following are positive

Assume(f(x) > 0, x > 0, y > 0, a > 0);



Next compute a canonical form for the tetrad and set it in one go, then recompute the Weyl scalars

Setup(tetrad = TransformTetrad(canonicalform)):




We see that now we have ψ0=0,ψ1=0,ψ4=0,ψ3=1andψ20 as indicated in the classification table of the Description section for spacetimes of Petrov type II. The corresponding new direction of l_, that is, the principal null direction (because the tetrad is now in canonical form), is




Examples of Petrov types III, IV, N, D are respectively given by the metrics of the database of solutions to Einstein's equations g_[[12, 35, 1]], g_[[12, 6, 1]] and g_[[12, 8, 4]]. Finally, an example of type O, that is a conformally flat spacetime, is given by

g_[[8, 33, 1]];


Systems of spacetime coordinates are:X=x,y,z,t

Default differentiation variables for d_, D_ and dAlembertian are:X=x,y,z,t

The metric in coordinates x,y,z,t

Parameters: Λ,κ0

Comments: _K=3*Lamb&DifferentialD;a, _K>0 &DifferentialD;&ExponentialE; Sⅈtt&ExponentialE;r, _K<0 antⅈ-&DifferentialD;&ExponentialE; Sⅈtt&ExponentialE;r







Indeed, in this case all the components of the Weyl tensor, as well as the Weyl scalars, are equal to 0








See Also

Assume, e_, evala, g_, IsTetrad, Physics, Physics conventions, Physics examples, Physics Updates, Tensors - a complete guide, Mini-Course Computer Algebra for Physicists, SegreType, Setup, simplify, SumOverRepeatedIndices, Tetrads, TransformTetrad, Weyl



[1] Landau, L.D., and Lifshitz, E.M. The Classical Theory of Fields, Course of Theoretical Physics Volume 2, fourth revised English edition. Elsevier, 1975.


[2] Stephani, H., Kramer, D., MacCallum, M., Hoenselaers, C. Herlt, E.  Exact Solutions of Einstein's Field Equations, Cambridge Monographs on Mathematical Physics, second edition. Cambridge University Press, 2003.


[3] Hawking, S.W., Israel, W., Chandrasekhar, S. General Relativity: an Einstein Centenary Survey, Chapter 7, Cambridge University Press, 2010.


[4] Letniowski, F.W., McLenaghan, R.G. An Improved Algorithm for Quartic Equation Classification and Petrov Classification, General Relativity and Gravitation, Vol.20, No. 5, 1988.



The Physics[Tetrads][PetrovType] command was introduced in Maple 2017.


For more information on Maple 2017 changes, see Updates in Maple 2017.