tensor
petrov
finds the Petrov classification of the Weyl tensor
Calling Sequence
Parameters
Description
Examples
References
petrov(psi, options)
psi
-
array indexed from 0 to 4
options
none, one, or both of: 'verify=name' and 'simp'
Important: The tensor package has been deprecated. Use the superseding command DifferentialGeometry[Tensor][PetrovType].
The procedure petrov is for determining the Petrov type of a given Weyl tensor in Newman-Penrose form. The Petrov classification of the Weyl tensor is a result of determining the multiplicity of the roots of the following quartic polynomial (Q) in z:
Q≔ψ0⁢z4+4⁢ψ1⁢z3+6⁢ψ2⁢z2+4⁢ψ3⁢z+ψ4=0
where the psi values are the Newman-Penrose Weyl tensor components. Given the coefficients psi[i], the petrov algorithm returns the Petrov type by using quartic theory. The different cases are outlined in the table below.
Petrov Type Solutions of (Q)
------------------------------------------------
type I four distinct roots
type II one root of multiplicity 2; other two roots distinct
type D two distinct roots of multiplicity 2
type III one root of multiplicity 3; other root distinct
type N one root of multiplicity 4
type 0 degenerate, all psi[i] = 0
The algorithm uses the zero/nonzero nature of the coefficients as well as the zero/nonzero nature of some expressions in the coefficients to determine the Petrov type. Note that, in view of the structure of equation (Q), any common factor amongst the ψi can be removed before the algorithm is called without changing the result.
The ψi coefficients for a given null tetrad may be calculated using the tensor[npcurve] procedure. It is important that the coefficients be in a simplified form. This is especially true if one or more of the coefficients is identically zero. For added efficiency it is suggested that any common factor of all the coefficients be removed before calling petrov. The functions ?content and ?primpart can help here. See ?tensor[act] for help on simplification of the NP curvature components produced by tensor[npcurve].
The Petrov classification algorithm may be accessed with the command
petrov(psi, options);
where psi is an array indexed from 0 to 4 which contains the Newman-Penrose Weyl tensor components, and where the options may be both, one, or none of: 'verify'='name' and 'simp'. The procedure petrov returns the Petrov type that it determines.
If 'simp' is specified then the ψi will be simplified using an internal routine. This should be avoided by making sure the coefficients are in their most simplified form before invoking petrov.
The procedure petrov calculates expressions and tests when some of them are identically zero. The zero test may fail if some identities are not applied. For example, the expression cos(x)^2+sin(x)^2-1 is not known to be zero by petrov . Therefore, it is important to verify that any determined nonzero expressions are in fact nonzero. The procedure Testzero() is used to check whether the appropriate expressions are zero, see below. The nonzero values will be returned in name if the 'verify' option is given in the call to petrov. Thus, the command petrov(psi, 'simp', 'verify'='NONzero') (equivalently, petrov(psi, 'verify'='NONzero', 'simp')) will invoke the simplification of the psi components, classify the components, and then return the nonzero values in the variable NONzero for verification.
If you would like to add a simplification to petrov, then define the procedure `tensor/petrov/simp` which accepts one argument and returns a simplified form of the argument. This simplification routine will be automatically applied whenever the routine does any internal simplification of computed expressions. For example, the procedure `tensor/petrov/simp` := proc(a) simplify(a,trig) end proc; could be used to simplify the expression cos(x)^2+sin(x)^2-1 to zero. For more information, see ?tensor[simp].
The environment procedure Testzero is used to control the determination of whether its argument is equal to zero. If you write your own procedure, it should return true in that case. For example, Testzero:=testeq will use a fast random tester. A stronger version (but slower) is Testzero:=proc(u) evalb(simplify(u,trig)=0) end proc: Since this procedure is an environment variable, it obeys the rules for environment variables, see ?environment for more information.
This function is part of the tensor package, and can be used in the form petrov(..) only after performing the command with(tensor), or with(tensor, petrov). The function can always be accessed in the long form tensor[petrov].
with⁡tensor:
ψ≔array⁡0..4,1−x2,1,0,x,1−x:
petrov⁡ψ,verify=NONzero
type_I
NONzero
V_=−x4+x2+x−1,I_=x3−x2−5⁢x+1,J_=x4−x2+x−1,D_=x9−30⁢x8−12⁢x7+86⁢x6−75⁢x4−38⁢x3−9⁢x2+39⁢x−26
factor⁡subs⁡NONzero,V_
−−1+x⁢x3+x2−1
This shows that x=1 is a potential special case, but then you are no longer dealing with a quadric. However, you can simplify with respect to the other factor
Testzero:=proc(u) evalb( simplify(u, {x^3+x^2-1})=0) end proc:
petrov⁡ψ,verify=NONzero2
constr2≔simplify⁡NONzero2,x3+x2−1
constr2≔U_=−2⁢x2+x+2,W_=−2⁢x2−17⁢x+2
resultant⁡subs⁡constr2,U_,x3+x2−1,x
19
since this is nonzero, then U_ cannot be zero at the same time as V_ Therefore, except when x=1, you always have four different roots.
Letniowski, F.W., and McLenaghan, R. G. "An Improved Algorithm for Quartic Equation Classification and Petrov Classification." General Relativity and Gravitation, Vol. 20. Plenum Publishing Corporation, (1988): 463-483.
Note: The labels used to return the nonzero quantities, using the 'verify' option correspond to the quantities used in this article, with an underscore appended.
See Also
DifferentialGeometry[Tensor][PetrovType]
tensor(deprecated)
tensor(deprecated)[act]
tensor(deprecated)[npcurve]
tensor(deprecated)[simp]
Download Help Document