-
Notifications
You must be signed in to change notification settings - Fork 62
/
linear_EM_waves.py
100 lines (69 loc) · 2.32 KB
/
linear_EM_waves.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
from __future__ import print_function
import sys
from sympy import symbols,sin,cos,exp,I,Matrix,solve,simplify
from galgebra.printer import Format,xpdf,Print_Function
from galgebra.ga import Ga
from galgebra.metric import linear_expand
def EM_Waves_in_Geom_Calculus_Complex():
#Print_Function()
X = (t,x,y,z) = symbols('t x y z',real=True)
g = '1 # # 0,# 1 # 0,# # 1 0,0 0 0 -1'
coords = (xE,xB,xk,t) = symbols('x_E x_B x_k t',real=True)
(EBkst,eE,eB,ek,et) = Ga.build('e_E e_B e_k e_t',g=g,coords=coords)
i = EBkst.i
E,B,k,w = symbols('E B k omega',real=True)
F = E*eE*et+i*B*eB*et
K = k*ek+w*et
X = xE*eE+xB*eB+xk*ek+t*et
KX = (K|X).scalar()
F = F*exp(I*KX)
g = EBkst.g
print('g =', g)
print('X =', X)
print('K =', K)
print('K|X =', KX)
print('F =', F)
gradF = EBkst.grad*F
gradF = gradF.simplify()
(gradF).Fmt(3,'grad*F = 0')
gradF = gradF.subs({g[0,1]:0,g[0,2]:0,g[1,2]:0})
KX = KX.subs({g[0,1]:0,g[0,2]:0,g[1,2]:0})
print(r'%\mbox{Substituting }e_{E}\cdot e_{B} = e_{E}\cdot e_{k} = e_{B}\cdot e_{k} = 0')
(gradF / (I*exp(I*KX))).Fmt(3,r'%\lp\bm{\nabla}F\rp/\lp ie^{iK\cdot X}\rp = 0')
return
def EM_Waves_in_Geom_Calculus_Real():
#Print_Function()
X = (t,x,y,z) = symbols('t x y z',real=True)
g = '1 # # 0,# 1 # 0,# # 1 0,0 0 0 -1'
coords = (xE,xB,xk,t) = symbols('x_E x_B x_k t',real=True)
(EBkst,eE,eB,ek,et) = Ga.build('e_E e_B e_k e_t',g=g,coords=coords)
i = EBkst.i
E,B,k,w = symbols('E B k omega',real=True)
F = E*eE*et+i*B*eB*et
K = k*ek+w*et
X = xE*eE+xB*eB+xk*ek+t*et
KX = (K|X).scalar()
F = F*sin(KX)
g = EBkst.g
print('g =', g)
print('X =', X)
print('K =', K)
print('K|X =', KX)
F.Fmt(3,'F')
gradF = EBkst.grad*F
gradF = gradF.simplify()
(gradF).Fmt(3,'grad*F = 0')
gradF = gradF.subs({g[0,1]:0,g[0,2]:0,g[1,2]:0})
KX = KX.subs({g[0,1]:0,g[0,2]:0,g[1,2]:0})
print(r'%\mbox{Substituting }e_{E}\cdot e_{B} = e_{E}\cdot e_{k} = e_{B}\cdot e_{k} = 0')
(gradF / (cos(KX))).Fmt(3,r'%\lp\bm{\nabla}F\rp/\lp \f{\cos}{K\cdot X}\rp = 0')
return
def main():
Format()
EM_Waves_in_Geom_Calculus_Complex()
EM_Waves_in_Geom_Calculus_Real()
# xpdf()
xpdf(pdfprog=None)
return
if __name__ == "__main__":
main()