Vector Field Modules¶
The set of vector fields along a differentiable manifold with values on
a differentiable manifold
via a differentiable map
(possibly
and
) is a module over the algebra
of differentiable scalar fields on
. If
is the identity
map, this module is considered a Lie algebroid under the Lie bracket
(cf. Wikipedia article Lie_algebroid). It is a free module if and only if
is
parallelizable. Accordingly, there are two classes for vector field modules:
VectorFieldModule
for vector fields with values on a generic (in practice, not parallelizable) differentiable manifold.
VectorFieldFreeModule
for vector fields with values on a parallelizable manifold.
AUTHORS:
- Eric Gourgoulhon, Michal Bejger (2014-2015): initial version
- Travis Scrimshaw (2016): structure of Lie algebroid (trac ticket #20771)
REFERENCES:
- [KN1963]
- [Lee2013]
- [ONe1983]
-
class
sage.manifolds.differentiable.vectorfield_module.
VectorFieldFreeModule
(domain, dest_map=None)¶ Bases:
sage.tensor.modules.finite_rank_free_module.FiniteRankFreeModule
Free module of vector fields along a differentiable manifold
with values on a parallelizable manifold
, via a differentiable map
.
Given a differentiable map
the vector field module
is the set of all vector fields of the type
(where
is the tangent bundle of
) such that
where
is the tangent space to
at the point
.
Since
is parallelizable, the set
is a free module over
, the ring (algebra) of differentiable scalar fields on
(see
DiffScalarFieldAlgebra
). In fact, it carries the structure of a finite-dimensional Lie algebroid (cf. Wikipedia article Lie_algebroid).The standard case of vector fields on a differentiable manifold corresponds to
and
; we then denote
by merely
. Other common cases are
being an immersion and
being a curve in
(
is then an open interval of
).
Note
If
is not parallelizable, the class
VectorFieldModule
should be used instead, foris no longer a free module.
INPUT:
domain
– differentiable manifoldalong which the vector fields are defined
dest_map
– (default:None
) destination map(type:
DiffMap
); ifNone
, it is assumed thatand
is the identity map of
(case of vector fields on
)
EXAMPLES:
Module of vector fields on
:
sage: M = Manifold(2, 'R^2') sage: cart.<x,y> = M.chart() # Cartesian coordinates on R^2 sage: XM = M.vector_field_module() ; XM Free module X(R^2) of vector fields on the 2-dimensional differentiable manifold R^2 sage: XM.category() Category of finite dimensional modules over Algebra of differentiable scalar fields on the 2-dimensional differentiable manifold R^2 sage: XM.base_ring() is M.scalar_field_algebra() True
Since
is obviously parallelizable,
XM
is a free module:sage: isinstance(XM, FiniteRankFreeModule) True
Some elements:
sage: XM.an_element().display() 2 d/dx + 2 d/dy sage: XM.zero().display() zero = 0 sage: v = XM([-y,x]) ; v Vector field on the 2-dimensional differentiable manifold R^2 sage: v.display() -y d/dx + x d/dy
An example of module of vector fields with a destination map
different from the identity map, namely a mapping
, where
is an open interval of
:
sage: I = Manifold(1, 'I') sage: canon.<t> = I.chart('t:(0,2*pi)') sage: Phi = I.diff_map(M, coord_functions=[cos(t), sin(t)], name='Phi', ....: latex_name=r'\Phi') ; Phi Differentiable map Phi from the 1-dimensional differentiable manifold I to the 2-dimensional differentiable manifold R^2 sage: Phi.display() Phi: I --> R^2 t |--> (x, y) = (cos(t), sin(t)) sage: XIM = I.vector_field_module(dest_map=Phi) ; XIM Free module X(I,Phi) of vector fields along the 1-dimensional differentiable manifold I mapped into the 2-dimensional differentiable manifold R^2 sage: XIM.category() Category of finite dimensional modules over Algebra of differentiable scalar fields on the 1-dimensional differentiable manifold I
The rank of the free module
is the dimension of the manifold
, namely two:
sage: XIM.rank() 2
A basis of it is induced by the coordinate vector frame of
:
sage: XIM.bases() [Vector frame (I, (d/dx,d/dy)) with values on the 2-dimensional differentiable manifold R^2]
Some elements of this module:
sage: XIM.an_element().display() 2 d/dx + 2 d/dy sage: v = XIM([t, t^2]) ; v Vector field along the 1-dimensional differentiable manifold I with values on the 2-dimensional differentiable manifold R^2 sage: v.display() t d/dx + t^2 d/dy
The test suite is passed:
sage: TestSuite(XIM).run()
Let us now consider the module of vector fields on the circle
; we start by constructing the
manifold:
sage: M = Manifold(1, 'S^1') sage: U = M.open_subset('U') # the complement of one point sage: c_t.<t> = U.chart('t:(0,2*pi)') # the standard angle coordinate sage: V = M.open_subset('V') # the complement of the point t=pi sage: M.declare_union(U,V) # S^1 is the union of U and V sage: c_u.<u> = V.chart('u:(0,2*pi)') # the angle t-pi sage: t_to_u = c_t.transition_map(c_u, (t-pi,), intersection_name='W', ....: restrictions1 = t!=pi, restrictions2 = u!=pi) sage: u_to_t = t_to_u.inverse() sage: W = U.intersection(V)
cannot be covered by a single chart, so it cannot be covered by a coordinate frame. It is however parallelizable and we introduce a global vector frame as follows. We notice that on their common subdomain,
, the coordinate vectors
and
coincide, as we can check explicitly:
sage: c_t.frame()[0].display(c_u.frame().restrict(W)) d/dt = d/du
Therefore, we can extend
to all
and hence to all
, to form a vector field on
whose components w.r.t. both
and
are 1:
sage: e = M.vector_frame('e') sage: U.set_change_of_frame(e.restrict(U), c_t.frame(), ....: U.tangent_identity_field()) sage: V.set_change_of_frame(e.restrict(V), c_u.frame(), ....: V.tangent_identity_field()) sage: e[0].display(c_t.frame()) e_0 = d/dt sage: e[0].display(c_u.frame()) e_0 = d/du
Equipped with the frame
, the manifold
is manifestly parallelizable:
sage: M.is_manifestly_parallelizable() True
Consequently, the module of vector fields on
is a free module:
sage: XM = M.vector_field_module() ; XM Free module X(S^1) of vector fields on the 1-dimensional differentiable manifold S^1 sage: isinstance(XM, FiniteRankFreeModule) True sage: XM.category() Category of finite dimensional modules over Algebra of differentiable scalar fields on the 1-dimensional differentiable manifold S^1 sage: XM.base_ring() is M.scalar_field_algebra() True
The zero element:
sage: z = XM.zero() ; z Vector field zero on the 1-dimensional differentiable manifold S^1 sage: z.display() zero = 0 sage: z.display(c_t.frame()) zero = 0
The module
coerces to any module of vector fields defined on a subdomain of
, for instance
:
sage: XU = U.vector_field_module() ; XU Free module X(U) of vector fields on the Open subset U of the 1-dimensional differentiable manifold S^1 sage: XU.has_coerce_map_from(XM) True sage: XU.coerce_map_from(XM) Conversion map: From: Free module X(S^1) of vector fields on the 1-dimensional differentiable manifold S^1 To: Free module X(U) of vector fields on the Open subset U of the 1-dimensional differentiable manifold S^1
The conversion map is actually the restriction of vector fields defined on
to
.
The Sage test suite for modules is passed:
sage: TestSuite(XM).run()
-
Element
¶ alias of
VectorFieldParal
-
ambient_domain
()¶ Return the manifold in which the vector fields of
self
take their values.If the module is
, returns the codomain
of
.
OUTPUT:
- a
DifferentiableManifold
representing the manifold in which the vector fields ofself
take their values
EXAMPLES:
sage: M = Manifold(3, 'M') sage: X.<x,y,z> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.ambient_domain() 3-dimensional differentiable manifold M sage: U = Manifold(2, 'U') sage: Y.<u,v> = U.chart() sage: Phi = U.diff_map(M, {(Y,X): [u+v, u-v, u*v]}, name='Phi') sage: XU = U.vector_field_module(dest_map=Phi) sage: XU.ambient_domain() 3-dimensional differentiable manifold M
- a
-
basis
(symbol=None, latex_symbol=None, from_frame=None)¶ Define a basis of
self
.A basis of the vector field module is actually a vector frame along the differentiable manifold
over which the vector field module is defined.
If the basis specified by the given symbol already exists, it is simply returned. If no argument is provided the module’s default basis is returned.
INPUT:
symbol
– (string; default:None
) a letter (of a few letters) to denote a generic element of the basis; ifNone
andfrom_frame = None
the module’s default basis is returnedlatex_symbol
– (string; default:None
) symbol to denote a generic element of the basis; ifNone
, the value ofsymbol
is usedfrom_frame
– (default:None
) vector frameon the codomain
of the destination map
of
self
; the returned basisis then such that for all
, we have
OUTPUT:
- a
VectorFrame
representing a basis onself
EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: e = XM.basis('e'); e Vector frame (M, (e_0,e_1))
See
VectorFrame
for more examples and documentation.
-
destination_map
()¶ Return the differential map associated to
self
.The differential map associated to this module is the map
such that this module is the set
of all vector fields of the type
(where
is the tangent bundle of
) such that
where
is the tangent space to
at the point
.
OUTPUT:
- a
DiffMap
representing the differential map
EXAMPLES:
sage: M = Manifold(3, 'M') sage: X.<x,y,z> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.destination_map() Identity map Id_M of the 3-dimensional differentiable manifold M sage: U = Manifold(2, 'U') sage: Y.<u,v> = U.chart() sage: Phi = U.diff_map(M, {(Y,X): [u+v, u-v, u*v]}, name='Phi') sage: XU = U.vector_field_module(dest_map=Phi) sage: XU.destination_map() Differentiable map Phi from the 2-dimensional differentiable manifold U to the 3-dimensional differentiable manifold M
- a
-
domain
()¶ Return the domain of the vector fields in
self
.If the module is
, returns the domain
of
.
OUTPUT:
- a
DifferentiableManifold
representing the domain of the vector fields that belong to this module
EXAMPLES:
sage: M = Manifold(3, 'M') sage: X.<x,y,z> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.domain() 3-dimensional differentiable manifold M sage: U = Manifold(2, 'U') sage: Y.<u,v> = U.chart() sage: Phi = U.diff_map(M, {(Y,X): [u+v, u-v, u*v]}, name='Phi') sage: XU = U.vector_field_module(dest_map=Phi) sage: XU.domain() 2-dimensional differentiable manifold U
- a
-
dual_exterior_power
(p)¶ Return the
-th exterior power of the dual of
self
.If the vector field module is
, the
-th exterior power of its dual is the set
of
-forms along
with values on
. It is a module over
, the ring (algebra) of differentiable scalar fields on
.
INPUT:
p
– non-negative integer
OUTPUT:
- for
, a
DiffFormFreeModule
representing the module; for
, the base ring, i.e.
, is returned instead
EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.dual_exterior_power(2) Free module /\^2(M) of 2-forms on the 2-dimensional differentiable manifold M sage: XM.dual_exterior_power(1) Free module /\^1(M) of 1-forms on the 2-dimensional differentiable manifold M sage: XM.dual_exterior_power(1) is XM.dual() True sage: XM.dual_exterior_power(0) Algebra of differentiable scalar fields on the 2-dimensional differentiable manifold M sage: XM.dual_exterior_power(0) is M.scalar_field_algebra() True
See also
DiffFormFreeModule
for more examples and documentation.
-
general_linear_group
()¶ Return the general linear group of
self
.If the vector field module is
, the general linear group is the group
of automorphisms of
. Note that an automorphism of
can also be viewed as a field along
of automorphisms of the tangent spaces of
.
OUTPUT:
- a
AutomorphismFieldParalGroup
representing
EXAMPLE:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.general_linear_group() General linear group of the Free module X(M) of vector fields on the 2-dimensional differentiable manifold M
See also
AutomorphismFieldParalGroup
for more examples and documentation.- a
-
metric
(name, signature=None, latex_name=None)¶ Construct a pseudo-Riemannian metric (nondegenerate symmetric bilinear form) on the current vector field module.
A pseudo-Riemannian metric of the vector field module is actually a field of tangent-space non-degenerate symmetric bilinear forms along the manifold
on which the vector field module is defined.
INPUT:
name
– (string) name given to the metricsignature
– (integer; default:None
) signatureof the metric:
, where
(resp.
) is the number of positive terms (resp. number of negative terms) in any diagonal writing of the metric components; if
signature
is not provided,is set to the manifold’s dimension (Riemannian signature)
latex_name
– (string; default:None
) LaTeX symbol to denote the metric; ifNone
, it is formed fromname
OUTPUT:
- instance of
PseudoRiemannianMetricParal
representing the defined pseudo-Riemannian metric.
EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.metric('g') Riemannian metric g on the 2-dimensional differentiable manifold M sage: XM.metric('g', signature=0) Lorentzian metric g on the 2-dimensional differentiable manifold M
See also
PseudoRiemannianMetricParal
for more documentation.
-
sym_bilinear_form
(name=None, latex_name=None)¶ Construct a symmetric bilinear form on
self
.A symmetric bilinear form on the vector field module is actually a field of tangent-space symmetric bilinear forms along the differentiable manifold
over which the vector field module is defined.
INPUT:
name
– string (default:None
); name given to the automorphismlatex_name
– string (default:None
); LaTeX symbol to denote the automorphism; ifNone
, the LaTeX symbol is set toname
OUTPUT:
- a
TensorFieldParal
of tensor typeand symmetric
EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.sym_bilinear_form(name='a') Field of symmetric bilinear forms a on the 2-dimensional differentiable manifold M
See also
TensorFieldParal
for more examples and documentation.
-
tensor
(tensor_type, name=None, latex_name=None, sym=None, antisym=None, specific_type=None)¶ Construct a tensor on
self
.The tensor is actually a tensor field along the differentiable manifold
over which
self
is defined.INPUT:
tensor_type
– pair (k,l) with k being the contravariant rank and l the covariant rankname
– (string; default:None
) name given to the tensorlatex_name
– (string; default:None
) LaTeX symbol to denote the tensor; if none is provided, the LaTeX symbol is set toname
sym
– (default:None
) a symmetry or a list of symmetries among the tensor arguments: each symmetry is described by a tuple containing the positions of the involved arguments, with the convention position=0 for the first argument; for instance:sym = (0,1)
for a symmetry between the 1st and 2nd argumentssym = [(0,2), (1,3,4)]
for a symmetry between the 1st and 3rd arguments and a symmetry between the 2nd, 4th and 5th arguments
antisym
– (default:None
) antisymmetry or list of antisymmetries among the arguments, with the same convention as forsym
specific_type
– (default:None
) specific subclass ofTensorFieldParal
for the output
OUTPUT:
- a
TensorFieldParal
representing the tensor defined onself
with the provided characteristics
EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.tensor((1,2), name='t') Tensor field t of type (1,2) on the 2-dimensional differentiable manifold M sage: XM.tensor((1,0), name='a') Vector field a on the 2-dimensional differentiable manifold M sage: XM.tensor((0,2), name='a', antisym=(0,1)) 2-form a on the 2-dimensional differentiable manifold M
See
TensorFieldParal
for more examples and documentation.
-
tensor_from_comp
(tensor_type, comp, name=None, latex_name=None)¶ Construct a tensor on
self
from a set of components.The tensor is actually a tensor field along the differentiable manifold
over which the vector field module is defined. The tensor symmetries are deduced from those of the components.
INPUT:
tensor_type
– pairwith
being the contravariant rank and
the covariant rank
comp
–Components
; the tensor components in a given basisname
– string (default:None
); name given to the tensorlatex_name
– string (default:None
); LaTeX symbol to denote the tensor; ifNone
, the LaTeX symbol is set toname
OUTPUT:
- a
TensorFieldParal
representing the tensor defined on the vector field module with the provided characteristics
EXAMPLES:
A 2-dimensional set of components transformed into a type-
tensor field:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() sage: XM = M.vector_field_module() sage: from sage.tensor.modules.comp import Components sage: comp = Components(M.scalar_field_algebra(), X.frame(), 2, ....: output_formatter=XM._output_formatter) sage: comp[:] = [[1+x, -y], [x*y, 2-y^2]] sage: t = XM.tensor_from_comp((1,1), comp, name='t'); t Tensor field t of type (1,1) on the 2-dimensional differentiable manifold M sage: t.display() t = (x + 1) d/dx*dx - y d/dx*dy + x*y d/dy*dx + (-y^2 + 2) d/dy*dy
The same set of components transformed into a type-
tensor field:
sage: t = XM.tensor_from_comp((0,2), comp, name='t'); t Tensor field t of type (0,2) on the 2-dimensional differentiable manifold M sage: t.display() t = (x + 1) dx*dx - y dx*dy + x*y dy*dx + (-y^2 + 2) dy*dy
-
tensor_module
(k, l)¶ Return the free module of all tensors of type
defined on
self
.INPUT:
k
– non-negative integer; the contravariant rank, the tensor type beingl
– non-negative integer; the covariant rank, the tensor type being
OUTPUT:
- a
TensorFieldFreeModule
representing the free module of type-tensors on the vector field module
EXAMPLES:
A tensor field module on a 2-dimensional differentiable manifold:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.tensor_module(1,2) Free module T^(1,2)(M) of type-(1,2) tensors fields on the 2-dimensional differentiable manifold M
The special case of tensor fields of type (1,0):
sage: XM.tensor_module(1,0) Free module X(M) of vector fields on the 2-dimensional differentiable manifold M
The result is cached:
sage: XM.tensor_module(1,2) is XM.tensor_module(1,2) True sage: XM.tensor_module(1,0) is XM True
See also
TensorFieldFreeModule
for more examples and documentation.
-
class
sage.manifolds.differentiable.vectorfield_module.
VectorFieldModule
(domain, dest_map=None)¶ Bases:
sage.structure.unique_representation.UniqueRepresentation
,sage.structure.parent.Parent
Module of vector fields along a differentiable manifold
with values on a differentiable manifold
, via a differentiable map
.
Given a differentiable map
the vector field module
is the set of all vector fields of the type
(where
is the tangent bundle of
) such that
where
is the tangent space to
at the point
.
The set
is a module over
, the ring (algebra) of differentiable scalar fields on
(see
DiffScalarFieldAlgebra
). Furthermore, it is a Lie algebroid under the Lie bracket (cf. Wikipedia article Lie_algebroid)over the scalarfields if
is the identity map. That is to say the Lie bracket is antisymmetric, bilinear over the base field, satisfies the Jacobi identity, and
.
The standard case of vector fields on a differentiable manifold corresponds to
and
; we then denote
by merely
. Other common cases are
being an immersion and
being a curve in
(
is then an open interval of
).
Note
If
is parallelizable, the class
VectorFieldFreeModule
should be used instead.INPUT:
domain
– differentiable manifoldalong which the vector fields are defined
dest_map
– (default:None
) destination map(type:
DiffMap
); ifNone
, it is assumed thatand
is the identity map of
(case of vector fields on
)
EXAMPLES:
Module of vector fields on the 2-sphere:
sage: M = Manifold(2, 'M') # the 2-dimensional sphere S^2 sage: U = M.open_subset('U') # complement of the North pole sage: c_xy.<x,y> = U.chart() # stereographic coordinates from the North pole sage: V = M.open_subset('V') # complement of the South pole sage: c_uv.<u,v> = V.chart() # stereographic coordinates from the South pole sage: M.declare_union(U,V) # S^2 is the union of U and V sage: xy_to_uv = c_xy.transition_map(c_uv, (x/(x^2+y^2), y/(x^2+y^2)), ....: intersection_name='W', restrictions1= x^2+y^2!=0, ....: restrictions2= u^2+v^2!=0) sage: uv_to_xy = xy_to_uv.inverse() sage: XM = M.vector_field_module() ; XM Module X(M) of vector fields on the 2-dimensional differentiable manifold M
is a module over the algebra
:
sage: XM.category() Category of modules over Algebra of differentiable scalar fields on the 2-dimensional differentiable manifold M sage: XM.base_ring() is M.scalar_field_algebra() True
is not a free module:
sage: isinstance(XM, FiniteRankFreeModule) False
because
is not parallelizable:
sage: M.is_manifestly_parallelizable() False
On the contrary, the module of vector fields on
is a free module, since
is parallelizable (being a coordinate domain):
sage: XU = U.vector_field_module() sage: isinstance(XU, FiniteRankFreeModule) True sage: U.is_manifestly_parallelizable() True
The zero element of the module:
sage: z = XM.zero() ; z Vector field zero on the 2-dimensional differentiable manifold M sage: z.display(c_xy.frame()) zero = 0 sage: z.display(c_uv.frame()) zero = 0
The module
coerces to any module of vector fields defined on a subdomain of
, for instance
:
sage: XU.has_coerce_map_from(XM) True sage: XU.coerce_map_from(XM) Conversion map: From: Module X(M) of vector fields on the 2-dimensional differentiable manifold M To: Free module X(U) of vector fields on the Open subset U of the 2-dimensional differentiable manifold M
The conversion map is actually the restriction of vector fields defined on
to
.
-
Element
¶ alias of
VectorField
-
alternating_form
(degree, name=None, latex_name=None)¶ Construct an alternating form on the vector field module.
An alternating form on the vector field module is actually a differential form along the differentiable manifold
over which the vector field module is defined.
INPUT:
degree
– the degree of the alternating form (i.e. its tensor rank)name
– (string; optional) name given to the alternating formlatex_name
– (string; optional) LaTeX symbol to denote the alternating form; if none is provided, the LaTeX symbol is set toname
OUTPUT:
- instance of
DiffForm
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.alternating_form(2, name='a') 2-form a on the 2-dimensional differentiable manifold M sage: XM.alternating_form(1, name='a') 1-form a on the 2-dimensional differentiable manifold M
See also
DiffForm
for more examples and documentation.
-
ambient_domain
()¶ Return the manifold in which the vector fields of this module take their values.
If the module is
, returns the codomain
of
.
OUTPUT:
- instance of
DifferentiableManifold
representing the manifold in which the vector fields of this module take their values
EXAMPLES:
sage: M = Manifold(5, 'M') sage: XM = M.vector_field_module() sage: XM.ambient_domain() 5-dimensional differentiable manifold M sage: U = Manifold(2, 'U') sage: Phi = U.diff_map(M, name='Phi') sage: XU = U.vector_field_module(dest_map=Phi) sage: XU.ambient_domain() 5-dimensional differentiable manifold M
- instance of
-
automorphism
(name=None, latex_name=None)¶ Construct an automorphism of the vector field module.
An automorphism of the vector field module is actually a field of tangent-space automorphisms along the differentiable manifold
over which the vector field module is defined.
INPUT:
name
– (string; optional) name given to the automorphismlatex_name
– (string; optional) LaTeX symbol to denote the automorphism; if none is provided, the LaTeX symbol is set toname
OUTPUT:
- instance of
AutomorphismField
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.automorphism() Field of tangent-space automorphisms on the 2-dimensional differentiable manifold M sage: XM.automorphism(name='a') Field of tangent-space automorphisms a on the 2-dimensional differentiable manifold M
See also
AutomorphismField
for more examples and documentation.
-
destination_map
()¶ Return the differential map associated to this module.
The differential map associated to this module is the map
such that this module is the set
of all vector fields of the type
(where
is the tangent bundle of
) such that
where
is the tangent space to
at the point
.
OUTPUT:
- instance of
DiffMap
representing the differential map
EXAMPLES:
sage: M = Manifold(5, 'M') sage: XM = M.vector_field_module() sage: XM.destination_map() Identity map Id_M of the 5-dimensional differentiable manifold M sage: U = Manifold(2, 'U') sage: Phi = U.diff_map(M, name='Phi') sage: XU = U.vector_field_module(dest_map=Phi) sage: XU.destination_map() Differentiable map Phi from the 2-dimensional differentiable manifold U to the 5-dimensional differentiable manifold M
- instance of
-
domain
()¶ Return the domain of the vector fields in this module.
If the module is
, returns the domain
of
.
OUTPUT:
- instance of
DifferentiableManifold
representing the domain of the vector fields that belong to this module
EXAMPLES:
sage: M = Manifold(5, 'M') sage: XM = M.vector_field_module() sage: XM.domain() 5-dimensional differentiable manifold M sage: U = Manifold(2, 'U') sage: Phi = U.diff_map(M, name='Phi') sage: XU = U.vector_field_module(dest_map=Phi) sage: XU.domain() 2-dimensional differentiable manifold U
- instance of
-
dual
()¶ Return the dual module.
EXAMPLE:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.dual() Module /\^1(M) of 1-forms on the 2-dimensional differentiable manifold M
-
dual_exterior_power
(p)¶ Return the
-th exterior power of the dual of the vector field module.
If the vector field module is
, the
-th exterior power of its dual is the set
of
-forms along
with values on
. It is a module over
, the ring (algebra) of differentiable scalar fields on
.
INPUT:
p
– non-negative integer
OUTPUT:
- for
, instance of
DiffFormModule
representing the module; for
, the base ring, i.e.
, is returned instead
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.dual_exterior_power(2) Module /\^2(M) of 2-forms on the 2-dimensional differentiable manifold M sage: XM.dual_exterior_power(1) Module /\^1(M) of 1-forms on the 2-dimensional differentiable manifold M sage: XM.dual_exterior_power(1) is XM.dual() True sage: XM.dual_exterior_power(0) Algebra of differentiable scalar fields on the 2-dimensional differentiable manifold M sage: XM.dual_exterior_power(0) is M.scalar_field_algebra() True
See also
DiffFormModule
for more examples and documentation.
-
general_linear_group
()¶ Return the general linear group of
self
.If the vector field module is
, the general linear group is the group
of automorphisms of
. Note that an automorphism of
can also be viewed as a field along
of automorphisms of the tangent spaces of
.
OUTPUT:
- instance of class
AutomorphismFieldGroup
representing
EXAMPLE:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.general_linear_group() General linear group of the Module X(M) of vector fields on the 2-dimensional differentiable manifold M
See also
AutomorphismFieldGroup
for more examples and documentation.- instance of class
-
identity_map
(name='Id', latex_name=None)¶ Construct the identity map on the vector field module.
The identity map on the vector field module is actually a field of tangent-space identity maps along the differentiable manifold
over which the vector field module is defined.
INPUT:
name
– (string; default:'Id'
) name given to the identity maplatex_name
– (string; optional) LaTeX symbol to denote the identity map; if none is provided, the LaTeX symbol is set to'\mathrm{Id}'
ifname
is'Id'
and toname
otherwise
OUTPUT:
- instance of
AutomorphismField
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.identity_map() Field of tangent-space identity maps on the 2-dimensional differentiable manifold M
-
linear_form
(name=None, latex_name=None)¶ Construct a linear form on the vector field module.
A linear form on the vector field module is actually a field of linear forms (i.e. a 1-form) along the differentiable manifold
over which the vector field module is defined.
INPUT:
name
– (string; optional) name given to the linear formlatex_name
– (string; optional) LaTeX symbol to denote the linear form; if none is provided, the LaTeX symbol is set toname
OUTPUT:
- instance of
DiffForm
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.linear_form() 1-form on the 2-dimensional differentiable manifold M sage: XM.linear_form(name='a') 1-form a on the 2-dimensional differentiable manifold M
See also
DiffForm
for more examples and documentation.
-
metric
(name, signature=None, latex_name=None)¶ Construct a pseudo-Riemannian metric (nondegenerate symmetric bilinear form) on the current vector field module.
A pseudo-Riemannian metric of the vector field module is actually a field of tangent-space non-degenerate symmetric bilinear forms along the manifold
on which the vector field module is defined.
INPUT:
name
– (string) name given to the metricsignature
– (integer; default:None
) signatureof the metric:
, where
(resp.
) is the number of positive terms (resp. number of negative terms) in any diagonal writing of the metric components; if
signature
is not provided,is set to the manifold’s dimension (Riemannian signature)
latex_name
– (string; default:None
) LaTeX symbol to denote the metric; ifNone
, it is formed fromname
OUTPUT:
- instance of
PseudoRiemannianMetric
representing the defined pseudo-Riemannian metric.
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.metric('g') Riemannian metric g on the 2-dimensional differentiable manifold M sage: XM.metric('g', signature=0) Lorentzian metric g on the 2-dimensional differentiable manifold M
See also
PseudoRiemannianMetric
for more documentation.
-
tensor
(tensor_type, name=None, latex_name=None, sym=None, antisym=None, specific_type=None)¶ Construct a tensor on
self
.The tensor is actually a tensor field on the domain of the vector field module.
INPUT:
tensor_type
– pair (k,l) with k being the contravariant rank and l the covariant rankname
– (string; default:None
) name given to the tensorlatex_name
– (string; default:None
) LaTeX symbol to denote the tensor; if none is provided, the LaTeX symbol is set toname
sym
– (default:None
) a symmetry or a list of symmetries among the tensor arguments: each symmetry is described by a tuple containing the positions of the involved arguments, with the convention position=0 for the first argument; for instance:sym=(0,1)
for a symmetry between the 1st and 2nd argumentssym=[(0,2),(1,3,4)]
for a symmetry between the 1st and 3rd arguments and a symmetry between the 2nd, 4th and 5th arguments
antisym
– (default:None
) antisymmetry or list of antisymmetries among the arguments, with the same convention as forsym
specific_type
– (default:None
) specific subclass ofTensorField
for the output
OUTPUT:
- instance of
TensorField
representing the tensor defined on the vector field module with the provided characteristics
EXAMPLES:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.tensor((1,2), name='t') Tensor field t of type (1,2) on the 2-dimensional differentiable manifold M sage: XM.tensor((1,0), name='a') Vector field a on the 2-dimensional differentiable manifold M sage: XM.tensor((0,2), name='a', antisym=(0,1)) 2-form a on the 2-dimensional differentiable manifold M
See also
TensorField
for more examples and documentation.
-
tensor_module
(k, l)¶ Return the module of type-
tensors on
self
.INPUT:
k
– non-negative integer; the contravariant rank, the tensor type beingl
– non-negative integer; the covariant rank, the tensor type being
OUTPUT:
- instance of
TensorFieldModule
representing the moduleof type-
tensors on the vector field module
EXAMPLES:
A tensor field module on a 2-dimensional differentiable manifold:
sage: M = Manifold(2, 'M') sage: XM = M.vector_field_module() sage: XM.tensor_module(1,2) Module T^(1,2)(M) of type-(1,2) tensors fields on the 2-dimensional differentiable manifold M
The special case of tensor fields of type (1,0):
sage: XM.tensor_module(1,0) Module X(M) of vector fields on the 2-dimensional differentiable manifold M
The result is cached:
sage: XM.tensor_module(1,2) is XM.tensor_module(1,2) True sage: XM.tensor_module(1,0) is XM True
See
TensorFieldModule
for more examples and documentation.
-
zero
()¶ Return the zero of
self
.EXAMPLES:
sage: M = Manifold(2, 'M') sage: X.<x,y> = M.chart() # makes M parallelizable sage: XM = M.vector_field_module() sage: XM.zero() Vector field zero on the 2-dimensional differentiable manifold M