# Display connection coefficients under a change of chart

Anonymous

I want to define the connection components as the derivative of a scalar field in one frame and calculate their values in another frame.

M = Manifold(4, 'M', latex_name=r'\mathcal{M}')
X.<t,x,y,z> = M.chart()
U = M.open_subset('U', coord_def={X: (y!=0, x<0)})
X_U = X.restrict(U)
var('l', latex_name='\lambda')
Y.<t,l,th,r> = U.chart(r't:(0,+oo) l:(0,pi) th:(0,2*pi):\theta r:(0,+oo)')
Omega = var('Omega')
transit_Y_to_X = Y.transition_map(X_U, [t, r*cos(th)*cos(l+Omega*t), r*cos(th)*sin(l+Omega*t), r*sin(th)])

nabla = M.affine_connection('nabla', r'\nabla')
phi = M.scalar_field(function('Phi', latex_name='\Phi')(x, y, z), name='phi', latex_name='\phi')

e = X_U.frame()

nabla[1,0,0] = e[1](phi).expr()


Then

nabla.display(coordinate_labels=False, only_nonredundant=True)


show that the coefficients are good in the X_U chart, but the change of coordinate fail

nabla.display(frame=Y.frame(), chart=Y, coordinate_labels=False, only_nonredundant=True)


What is wrong ?

edit retag close merge delete

Sort by » oldest newest most voted

The issue arises because the transition map from chart Y to chart X_U has not been defined. You must implement it as follows, just after the definition of transit_Y_to_X:

transit_Y_to_X.set_inverse(t, atan2(y, x) - Omega*t, atan2(z, sqrt(x^2+y^2)), sqrt(x^2+y^2+z^2),
verbose=True)
transit_Y_to_X.inverse().display()


Then the display of the connection coefficients w.r.t. Y.frame() works, albeit quite slow (*).

(*) while investing your issue, I've discovered that the computation can be significantly improved by reordering some loops; this is now Trac #28543.

more

Thanks a lot. I also applied your patch and the computation is much faster. I have a question on the results, but I will ask separately.

( 2019-09-27 21:05:26 +0200 )edit