示例#1
0
文件: manifold.py 项目: brombo/sympy
print r'%a\cdot\nabla =', dd
print r'%\paren{a\cdot\nabla}\bm{e}_u =', dd * eu
print r'%\paren{a\cdot\nabla}\bm{e}_v =', dd * ev
print r'%\paren{a\cdot\nabla}f =',dd * f

V = Mlt('V',sph2d,nargs=1,fct=True)
T = Mlt('T',sph2d,nargs=2,fct=True)

print '#Tensors on the Unit Sphere'

print 'V =', V
#print 'T =', T
T.Fmt(5,'T')
print '#Tensor Contraction'
print r'T[1,2] =', T.contract(1,2)
print '#Tensor Evaluation'
print r'T(a,b) =', T(a,b)
print r'T(a,b+c) =', T(a,b+c).expand()
print r'T(a,\alpha b) =', T(a,alpha*b)
print '#Geometric Derivative With Respect To Slot'
print r'\nabla_{a_{1}}T =',T.pdiff(1)
print r'\nabla_{a_{2}}T =',T.pdiff(2)
print '#Covariant Derivatives'
print r'\mathcal{D}V =', V.cderiv()
DT = T.cderiv()
#print r'\mathcal{D}T =', DT
DT.Fmt(3,r'\mathcal{D}T')
print r'\mathcal{D}T[1,3](a) =', (DT.contract(1,3))(a)

#Define curve on unit sphere manifold
示例#2
0
文件: test_GA.py 项目: brombo/sympy
def test_submanifolds():

    #Define spherical coordinate system in 3-d

    coords = (r, th, phi) = symbols('r,theta,phi', real=True)

    sp3d = Ga('e_r e_th e_ph', g=[1, r**2, r**2*sin(th)**2], coords=coords)
    (er, eth, ephi) = sp3d.mv()

    #Define coordinates for 2-d (u,v) and 1-d (s) manifolds

    u,v,s,alpha = symbols('u v s alpha',real=True)

    sub_coords = (u,v)

    smap = [1, u, v]  # Coordinate map for sphere of r = 1 in 3-d

    #Define unit sphere manifold

    sph2d = sp3d.sm(smap,sub_coords)
    (eu,ev) = sph2d.mv()

    #Define vector and vector field on unit sphere tangent space

    a = sph2d.mv('a','vector')
    b = sph2d.mv('b','vector')
    c = sph2d.mv('c','vector')
    f = sph2d.mv('f','vector',f=True)

    #Define directional derivative in direction a for unit sphere manifold

    dd = a|sph2d.grad

    assert str(dd) == 'a__u*D{u} + a__v*D{v}'
    assert str(dd * eu) == 'a__v*e_v/tan(u)'
    assert str(dd * ev) == '-a__v*sin(2*u)*e_u/2 + a__u*e_v/tan(u)'
    assert str(dd * f) == '(a__u*D{u}f__u - a__v*f__v*sin(2*u)/2 + a__v*D{v}f__u)*e_u + (a__u*f__v/tan(u) + a__u*D{u}f__v + a__v*f__u/tan(u) + a__v*D{v}f__v)*e_v'

    V = Mlt('V',sph2d,nargs=1,fct=True)
    T = Mlt('T',sph2d,nargs=2,fct=True)

    assert str(T.contract(1,2)) == 'a_1__u**2*D{u}^2T_uu + a_1__u**2*D{v}^2T_uu/sin(u)**2 + a_1__u*a_1__v*D{u}^2T_uv + a_1__u*a_1__v*D{u}^2T_vu + a_1__u*a_1__v*D{v}^2T_uv/sin(u)**2 + a_1__u*a_1__v*D{v}^2T_vu/sin(u)**2 + a_1__v**2*D{u}^2T_vv + a_1__v**2*D{v}^2T_vv/sin(u)**2'

    #Tensor Evaluation

    assert str(T(a,b)) == 'a__u*b__u*T_uu + a__u*b__v*T_uv + a__v*b__u*T_vu + a__v*b__v*T_vv'
    assert str(T(a,b+c).expand()) == 'a__u*b__u*T_uu + a__u*b__v*T_uv + a__u*c__u*T_uu + a__u*c__v*T_uv + a__v*b__u*T_vu + a__v*b__v*T_vv + a__v*c__u*T_vu + a__v*c__v*T_vv'
    assert str(T(a,alpha*b)) == 'a__u*alpha*b__u*T_uu + a__u*alpha*b__v*T_uv + a__v*alpha*b__u*T_vu + a__v*alpha*b__v*T_vv'

    #Geometric Derivative With Respect To Slot

    assert str(T.pdiff(1)) == '(a_1__u*a_2__u*D{u}T_uu + a_1__u*a_2__v*D{u}T_uv + a_1__v*a_2__u*D{u}T_vu + a_1__v*a_2__v*D{u}T_vv)*e_u + (a_1__u*a_2__u*D{v}T_uu + a_1__u*a_2__v*D{v}T_uv + a_1__v*a_2__u*D{v}T_vu + a_1__v*a_2__v*D{v}T_vv)*e_v/sin(u)**2'
    assert str(T.pdiff(2)) == '(a_1__u*a_2__u*D{u}T_uu + a_1__u*a_2__v*D{u}T_uv + a_1__v*a_2__u*D{u}T_vu + a_1__v*a_2__v*D{u}T_vv)*e_u + (a_1__u*a_2__u*D{v}T_uu + a_1__u*a_2__v*D{v}T_uv + a_1__v*a_2__u*D{v}T_vu + a_1__v*a_2__v*D{v}T_vv)*e_v/sin(u)**2'

    #Covariant Derivatives

    assert str(V.cderiv()) == 'a_2__u*(a_1__u*D{u}V_u + a_1__v*D{u}V_v) + a_2__v*(a_1__u*D{v}V_u + a_1__v*D{v}V_v)'

    DT = T.cderiv()

    assert str(DT) == 'a_3__u*(a_1__u*a_2__u*D{u}T_uu + a_1__u*a_2__v*D{u}T_uv + a_1__v*a_2__u*D{u}T_vu + a_1__v*a_2__v*D{u}T_vv) + a_3__v*(a_1__u*a_2__u*D{v}T_uu + a_1__u*a_2__v*D{v}T_uv + a_1__v*a_2__u*D{v}T_vu + a_1__v*a_2__v*D{v}T_vv)'

    #Define curve on unit sphere manifold

    us = Function('u__s')(s)
    vs = Function('v__s')(s)

    #Define 1-d submanifold on unit shpere manifold

    crv1d = sph2d.sm([us,vs],[s])

    (es,) = crv1d.mv()

    #1-D Manifold On Unit Sphere:

    assert str(crv1d.grad) == 'e_s*1/(sin(u__s)**2*D{s}v__s**2 + D{s}u__s**2)*D{s}'

    #Define scalar and vector fields on 1-d manifold tangent space

    g = crv1d.mv('g','scalar',f=True)
    h = crv1d.mv('h','vector',f=True)

    assert str(crv1d.grad * g) == 'D{s}g*e_s/(sin(u__s)**2*D{s}v__s**2 + D{s}u__s**2)'
    assert str(crv1d.grad | h) == 'D{s}h__s + h__s*sin(u__s)**2*D{s}v__s*D{s}^2v__s/(sin(u__s)**2*D{s}v__s**2 + D{s}u__s**2) + h__s*sin(2*u__s)*D{s}u__s*D{s}v__s**2/(2*(sin(u__s)**2*D{s}v__s**2 + D{s}u__s**2)) + h__s*D{s}u__s*D{s}^2u__s/(sin(u__s)**2*D{s}v__s**2 + D{s}u__s**2)'

    return