def test_derivatives_in_spherical_coordinates(self): X = (r, th, phi) = symbols('r theta phi') s3d = Ga('e_r e_theta e_phi', g=[1, r ** 2, r ** 2 * sin(th) ** 2], coords=X, norm=True) (er, eth, ephi) = s3d.mv() grad = s3d.grad f = s3d.mv('f', 'scalar', f=True) A = s3d.mv('A', 'vector', f=True) B = s3d.mv('B', 'bivector', f=True) assert str(f) == 'f' assert str(A) == 'A__r*e_r + A__theta*e_theta + A__phi*e_phi' assert str(B) == 'B__rtheta*e_r^e_theta + B__rphi*e_r^e_phi + B__thetaphi*e_theta^e_phi' assert str(grad*f) == 'D{r}f*e_r + D{theta}f*e_theta/r + D{phi}f*e_phi/(r*sin(theta))' assert str((grad|A).simplify()) == '(r*D{r}A__r + 2*A__r + A__theta/tan(theta) + D{theta}A__theta + D{phi}A__phi/sin(theta))/r' assert str(-s3d.I()*(grad^A)) == '(A__phi/tan(theta) + D{theta}A__phi - D{phi}A__theta/sin(theta))*e_r/r + (-r*D{r}A__phi - A__phi + D{phi}A__r/sin(theta))*e_theta/r + (r*D{r}A__theta + A__theta - D{theta}A__r)*e_phi/r' assert latex(grad) == r'\boldsymbol{e}_{r} \frac{\partial}{\partial r} + \boldsymbol{e}_{\theta } \frac{1}{r} \frac{\partial}{\partial \theta } + \boldsymbol{e}_{\phi } \frac{1}{r \sin{\left (\theta \right )}} \frac{\partial}{\partial \phi }' assert latex(B|(eth^ephi)) == r'- B^{\theta \phi } {\left (r,\theta ,\phi \right )}' assert str(grad^B) == '(r*D{r}B__thetaphi - B__rphi/tan(theta) + 2*B__thetaphi - D{theta}B__rphi + D{phi}B__rtheta/sin(theta))*e_r^e_theta^e_phi/r' return
def derivatives_in_rectangular_coordinates(): Print_Function() X = (x, y, z) = symbols('x y z') o3d = Ga('e_x e_y e_z', g=[1, 1, 1], coords=X) (ex, ey, ez) = o3d.mv() grad = o3d.grad f = o3d.mv('f', 'scalar', f=True) A = o3d.mv('A', 'vector', f=True) B = o3d.mv('B', 'bivector', f=True) C = o3d.mv('C', 'mv') print('f =', f) print('A =', A) print('B =', B) print('C =', C) print('grad*f =', grad * f) print('grad|A =', grad | A) print('grad*A =', grad * A) print('-I*(grad^A) =', -o3d.I() * (grad ^ A)) print('grad*B =', grad * B) print('grad^B =', grad ^ B) print('grad|B =', grad | B) return
def test_derivatives_in_rectangular_coordinates(self): X = (x, y, z) = symbols('x y z') o3d = Ga('e_x e_y e_z', g=[1, 1, 1], coords=X) (ex, ey, ez) = o3d.mv() grad = o3d.grad f = o3d.mv('f', 'scalar', f=True) A = o3d.mv('A', 'vector', f=True) B = o3d.mv('B', 'bivector', f=True) C = o3d.mv('C', 'mv', f=True) assert str(f) == 'f' assert str(A) == 'A__x*e_x + A__y*e_y + A__z*e_z' assert str(B) == 'B__xy*e_x^e_y + B__xz*e_x^e_z + B__yz*e_y^e_z' assert str(C) == 'C + C__x*e_x + C__y*e_y + C__z*e_z + C__xy*e_x^e_y + C__xz*e_x^e_z + C__yz*e_y^e_z + C__xyz*e_x^e_y^e_z' assert str(grad*f) == 'D{x}f*e_x + D{y}f*e_y + D{z}f*e_z' assert str(grad|A) == 'D{x}A__x + D{y}A__y + D{z}A__z' assert str(grad*A) == 'D{x}A__x + D{y}A__y + D{z}A__z + (-D{y}A__x + D{x}A__y)*e_x^e_y + (-D{z}A__x + D{x}A__z)*e_x^e_z + (-D{z}A__y + D{y}A__z)*e_y^e_z' assert str(-o3d.I()*(grad^A)) == '(-D{z}A__y + D{y}A__z)*e_x + (D{z}A__x - D{x}A__z)*e_y + (-D{y}A__x + D{x}A__y)*e_z' assert str(grad*B) == '(-D{y}B__xy - D{z}B__xz)*e_x + (D{x}B__xy - D{z}B__yz)*e_y + (D{x}B__xz + D{y}B__yz)*e_z + (D{z}B__xy - D{y}B__xz + D{x}B__yz)*e_x^e_y^e_z' assert str(grad^B) == '(D{z}B__xy - D{y}B__xz + D{x}B__yz)*e_x^e_y^e_z' assert str(grad|B) == '(-D{y}B__xy - D{z}B__xz)*e_x + (D{x}B__xy - D{z}B__yz)*e_y + (D{x}B__xz + D{y}B__yz)*e_z' assert str(grad<A) == 'D{x}A__x + D{y}A__y + D{z}A__z' assert str(grad>A) == 'D{x}A__x + D{y}A__y + D{z}A__z' assert str(grad<B) == '(-D{y}B__xy - D{z}B__xz)*e_x + (D{x}B__xy - D{z}B__yz)*e_y + (D{x}B__xz + D{y}B__yz)*e_z' assert str(grad>B) == '0' assert str(grad<C) == 'D{x}C__x + D{y}C__y + D{z}C__z + (-D{y}C__xy - D{z}C__xz)*e_x + (D{x}C__xy - D{z}C__yz)*e_y + (D{x}C__xz + D{y}C__yz)*e_z + D{z}C__xyz*e_x^e_y - D{y}C__xyz*e_x^e_z + D{x}C__xyz*e_y^e_z' assert str(grad>C) == 'D{x}C__x + D{y}C__y + D{z}C__z + D{x}C*e_x + D{y}C*e_y + D{z}C*e_z' return
def signature_test(): Print_Function() e3d = Ga('e1 e2 e3', g=[1, 1, 1]) print('e3d.g =', e3d.g) print('Signature = (3,0) I =', e3d.I(), ' I**2 =', e3d.I() * e3d.I()) e3d = Ga('e1 e2 e3', g=[2, 2, 2]) print('e3d.g =', e3d.g) print('Signature = (3,0) I =', e3d.I(), ' I**2 =', e3d.I() * e3d.I()) sp4d = Ga('e1 e2 e3 e4', g=[1, -1, -1, -1]) print('e3d.g =', sp4d.g) print('Signature = (1,3) I =', sp4d.I(), ' I**2 =', sp4d.I() * sp4d.I()) sp4d = Ga('e1 e2 e3 e4', g=[2, -2, -2, -2]) print('e3d.g =', sp4d.g) print('Signature = (1,3) I =', sp4d.I(), ' I**2 =', sp4d.I() * sp4d.I()) e4d = Ga('e1 e2 e3 e4', g=[1, 1, 1, 1]) print('e4d.g =', e4d.g) print('Signature = (4,0) I =', e4d.I(), ' I**2 =', e4d.I() * e4d.I()) cf3d = Ga('e1 e2 e3 e4 e5', g=[1, 1, 1, 1, -1]) print('cf4d.g =', cf3d.g) print('Signature = (4,1) I =', cf3d.I(), ' I**2 =', cf3d.I() * cf3d.I()) cf3d = Ga('e1 e2 e3 e4 e5', g=[2, 2, 2, 2, -2]) print('cf4d.g =', cf3d.g) print('Signature = (4,1) I =', cf3d.I(), ' I**2 =', cf3d.I() * cf3d.I()) return
def signature_test(): Print_Function() e3d = Ga('e1 e2 e3', g=[1, 1, 1]) print('g =', e3d.g) print(r'%Signature = (3,0)\: I =', e3d.I(), r'\: I^{2} =', e3d.I() * e3d.I()) e3d = Ga('e1 e2 e3', g=[2, 2, 2]) print('g =', e3d.g) print(r'%Signature = (3,0)\: I =', e3d.I(), '|; I^{2} =', e3d.I() * e3d.I()) sp4d = Ga('e1 e2 e3 e4', g=[1, -1, -1, -1]) print('g =', sp4d.g) print(r'%Signature = (1,3)\: I =', sp4d.I(), r'\: I^{2} =', sp4d.I() * sp4d.I()) sp4d = Ga('e1 e2 e3 e4', g=[2, -2, -2, -2]) print('g =', sp4d.g) print(r'%Signature = (1,3)\: I =', sp4d.I(), r'\: I^{2} =', sp4d.I() * sp4d.I()) e4d = Ga('e1 e2 e3 e4', g=[1, 1, 1, 1]) print('g =', e4d.g) print(r'%Signature = (4,0)\: I =', e4d.I(), r'\: I^{2} =', e4d.I() * e4d.I()) cf3d = Ga('e1 e2 e3 e4 e5', g=[1, 1, 1, 1, -1]) print('g =', cf3d.g) print(r'%Signature = (4,1)\: I =', cf3d.I(), r'\: I^{2} =', cf3d.I() * cf3d.I()) cf3d = Ga('e1 e2 e3 e4 e5', g=[2, 2, 2, 2, -2]) print('g =', cf3d.g) print(r'%Signature = (4,1)\: I =', cf3d.I(), r'\: I^{2} =', cf3d.I() * cf3d.I()) return