PetrovType - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim

Tensor[PetrovType] - determine the Petrov type of the Weyl tensor

Calling Sequences

     PetrovType(g, pt, options)

     PetrovType(NTetrad, pt, options)

     PetrovType(NPWeyl, pt, options)

     PetrovType(Fr, pt, options)



   g        - a metric tensor g of Lorentz signature 1,1,1,1 on a four-dimensional manifold M

   Fr       - the name of an initialized anholonomic frame, created from a null tetrad

   NTetrad  - a list of 4 vectors defining a null tetrad

   NPWeyl   - a table, the Newman-Penrose Weyl scalars

   pt       - (optional) a list of equations specifying the coordinates of a point of M

    options  -  the keyword arguments output, parameters, auxiliaryequations




See Also



The Petrov classification of the Weyl tensor of the metric g is an algebraic classification based upon the eigenvalues and eigenvectors for the Weyl tensor, the principal null directions associated to the Weyl tensor, or the factorized form of the Weyl spinor. The Weyl tensor is determined to be one of the following types "O", "N", "D", "I", "II", "III".  See Stephani, Kramer, et al for details.


Because the algorithm is based upon the calculation of the Newman-Penrose Weyl scalars, it is best to use one of the last 3 calling sequences.  The second and fourth calling sequences use a null tetrad L,N,M,M, where L and N are real, M is the complex conjugate of M, and

gL,N=1,   gM,M=1, 

where g is the metric.


Note that the Weyl scalars can often be simplified through the application of an appropriate null tetrad rotation. The first calling sequence PetrovType(g, pt, option) will automatically generate a null tetrad (if possible) but the result may not be optimal for calculating all the invariants needed to determine the Petrov type.


It is possible that the Petrov type can vary from point to point on the manifold M. The command PetrovType  returns, if possible, the Petrov type at a generic point. If the command fails, try to calculate Petrov type at a specific point with the optional argument pt. Constraints on the coordinates values can be imposed with assuming.


The values of the invariants used to test for a given Petrov type will be returned with the keyword argument output = petrovtype, where petrovtype is one of "O", "N" , "D", "I", "II", "III".


If the metric or null tetrad depends upon a number of parameters (either constants or functions), then the keyword argument parameters= ParList,where ParList is the list of parameters, will invoke case-splitting with respect to these parameters. Special values of the parameters, where the Petrov type changes, are calculated. Additional algebraic or differential conditions may be imposed upon the parameters using the keyword argument auxiliaryequations = EqList. The case-splitting algorithm is as follows. First, the Petrov type for generic values of the parameters, independent of the auxiliary equations is determined. Then the algebraic and differential conditions that the parameters must satisfy for non-generic types are computed. These are combined with the auxiliary equations and the combined set of equations are passed to pdsolve. This results in a list of exceptional parameter values for the non-generic cases. The Petrov type of each exceptional set of parameter values is re-computed and the results returned in a table format.


The branching performed by the program PetrovType can be tracked by setting infolevel[PetrovType] = 2.


See Details for PetrovType for a complete description of the algorithm used.


This command is part of the DifferentialGeometry:-Tensor package and can be used in the form PetrovType(...) only after executing the commands with(DifferentialGeometry); with(Tensor); in that order.  It can always be used in the long form DifferentialGeometry:-Tensor:-PetrovType.




For Examples 1 -- 4 we use the following metric.


frame name: M

M > 

g ≔ evalDG1dt &t dtx2dx &t dxdy &t dydz &t dz




Example 1.

Calculate the Petrov type directly from the metric.

M > 





Example 2.

Calculate the Petrov type from a null tetrad for the metric g. First use the command DGGramSchmidt to construct an orthonormal tetrad.

M > 

OTetrad ≔ DGGramSchmidtD_t&comma;D_x&comma;D_y&comma;D_z&comma;g&comma;signature&equals;1&comma;1&comma;1&comma;1assuming0<x


M > 

NTetrad ≔ NullTetradOTetrad


M > 





Example 3.

If one intends to do a number of computations with the metric g it is usually advantageous to work explicitly with an orthonormal frame or null tetrad frame. See FrameData.

M > 

FD ≔ FrameDataNTetrad&comma;NP


M > 


frame name: NP

NP > 





Example 4.

Here we first calculate the Newman-Penrose Weyl scalars (We continue with the null tetrad frame from the previous example). This is always the best way to proceed since one can simplify, if need be, the Weyl scalars, before proceeding to calculate the more complicated invariants needed by the algorithm to determine the Petrov type.

NP > 

WS ≔ NPCurvatureScalarsNTetrad&comma;output&equals;WeylScalars


M > 





Example 5.

In this example we find all functions f(x, v) for which the following orthonormal frame has Petrov type "N". In this situation the PetrovType procedure is terminated once it has calculated the invariants whose vanishing leads to the type "N" classification. (See Step 2 in the description of the algorithm in Details for PetrovType.) First define the coordinates for this example.

M > 


frame name: N



Define the metric.

N > 

g5 ≔ evalDGdx &t dxdy &t dy&plus;2du &s dv&plus;fx&comma;v2du &t du




Calculate an orthonormal tetrad and then a null tetrad.

N > 

OTetrad5 ≔ DGGramSchmidtD_u&comma;D_v&comma;D_x&comma;D_y&comma;g5&comma;signature&equals;1&comma;1&comma;1&comma;1assuming0<fx&comma;v


N > 

NTetrad5 ≔ NullTetradOTetrad5




With the optional argument output = "N", the procedure will return the partial differential equations that fx&comma; v must satisfy for the metric to be of type "N". These PDE are too complicated to exhibit in their "raw" form but become quite simple if we use the command rifsimp to simplify.

N > 

PDE ≔ PetrovTypeNTetrad5&comma;output&equals;N&colon;

M > 

PDE1 ≔ DEtoolsrifsimpPDESolved




Use pdsolve to find the general solution to PDE1.

M > 

Soln ≔ pdsolvePDE1




Back substitute into the null tetrad NTetrad and check that the resulting null tetrad is of type "N".

M > 

NTetrad5a ≔ evalNTetrad5&comma;Soln


N > 





Example 6.

This is the first of three examples which demonstrate the case-splitting functionality of PetrovType. In this example we consider a metric depending upon two constants p and q&period;  

M > 


frame name: M

M > 

g6 ≔ evalDG1dy &t dy2du &s dvy2&plus;y2pdz &t dz&plus;y2qdv &t dv


M > 

OTetrad6 ≔ DGGramSchmidtD_u&comma;D_v&comma;D_y&comma;D_z&comma;g6&comma;signature&equals;1&comma;1&comma;1&comma;1assuming0<p&comma;0<y


M > 

NTetrad6 ≔ NullTetradOTetrad61&comma;OTetrad63&comma;OTetrad64&comma;OTetrad62