grggeom.sl 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512
  1. %==========================================================================%
  2. % GRGgeom.sl Geometry %
  3. %==========================================================================%
  4. % GRG 3.2 Standard Lisp Source Code (C) 1988-96 Vadim V. Zhytnikov %
  5. %==========================================================================%
  6. % This file is distributed without any warranty. You may modify it but you %
  7. % are not allowed to remove author's name and/or distribute modified file. %
  8. %==========================================================================%
  9. %------ Coordinate --------------------------------------------------------
  10. % Macro 2 for Coordinates ...
  11. (de x!> (wm) (getel1!> ![cord!] wm))
  12. %------ Dimension ---------------------------------------------------------
  13. % Macro 3 for dim ...
  14. (de dim!> nil ![dim!])
  15. %------ Delta symbols -----------------------------------------------------
  16. (de delta!> (wa wb) (cond ((equal wa wb) 1) (t nil)))
  17. %------ Epsilon tensors 05.96 --------------------------------------------
  18. (de epsilon!> (u)
  19. (cond
  20. ((issame!> u) nil)
  21. (t(proc (wt wp w ww wc)
  22. (setq w u)
  23. (loop!>
  24. (setq wp nil)
  25. (setq ww (ncons (car w)))
  26. (setq w (cdr w))
  27. (while!> w
  28. (setq wc (car w))
  29. (cond ((lessp wc (car ww))
  30. (setq ww (cons (car ww)
  31. (cons wc
  32. (cdr ww))))
  33. (setq wt (not wt))
  34. (setq wp t))
  35. (t (setq ww (cons wc ww))))
  36. (setq w (cdr w)))
  37. (cond ((null wp) (return (cond (wt -1) (t 1)))))
  38. (setq w (reversip ww)))))))
  39. (de issame!> (w)
  40. (cond ((null w) nil)
  41. ((memq (car w) (cdr w)) t)
  42. (t (issame!> (cdr w)))))
  43. (dm epsilf!> (w) (list 'epsilf0!> (list 'quote (cdr w))))
  44. (de epsilf0!> (w)
  45. (prog2
  46. (setq w (epsilon!> w))
  47. (cond (w (list 'times w (car !#!s!d!e!t!G)))
  48. (t nil))))
  49. (dm epsiuf!> (w) (list 'epsiuf0!> (list 'quote (cdr w))))
  50. (de epsiuf0!> (w)
  51. (prog2
  52. (setq w (epsilon!> w))
  53. (cond (w (list 'quotient (list 'times w ![sigprod!]) (car !#!s!d!e!t!G)))
  54. (t nil))))
  55. (dm epsilh!> (w) (list 'epsilh0!> (list 'quote (cdr w))))
  56. (de epsilh0!> (w)
  57. (prog2
  58. (setq w (epsilon!> w))
  59. (cond (w (list 'times w (list 'sqrt
  60. (list 'times ![sigprod!] (car !#!d!e!t!g)))))
  61. (t nil))))
  62. (dm epsiuh!> (w) (list 'epsiuh0!> (list 'quote (cdr w))))
  63. (de epsiuh0!> (w)
  64. (prog2
  65. (setq w (epsilon!> w))
  66. (cond (w (list 'quotient (list 'times w ![sigprod!])
  67. (list 'sqrt
  68. (list 'times ![sigprod!] (car !#!d!e!t!g)))))
  69. (t nil))))
  70. (de epss!> (wa wb)
  71. (cond ((equal wa wb) nil)
  72. ((eqn wa 0) 1)
  73. ((eqn wa 1) -1)
  74. (t nil)))
  75. %------ Basis and Inverse Basis 27.02.91, 05.96 --------------------------
  76. % Basis ...
  77. (de base!> nil
  78. (setq !#!b (copy !#!T)))
  79. (de base1!> nil % 05.96
  80. (prog (w) (setq !#!b (mkt!> 1))
  81. (setq w (aeval (list 'tp (list 'quotient 1 (mkmtetr!> !#!e)))))
  82. (mktetrm!> (cdr w) !#!b)
  83. (return t)))
  84. % Inverse Basis ...
  85. (de ibase!> nil
  86. (prog (w)
  87. (setq w (evalform!>(dfprod!> !#!b)))
  88. (cond ((null w) (prog2 (setq ![er!] 8400) (return !!er!!))))
  89. (setq !#!e (mkt!> 1))
  90. (setq w (aeval (list 'tp (list 'quotient 1 (mkmtetr!> !#!b)))))
  91. (mktetrm!> (cdr w) !#!e)
  92. (return t)))
  93. %------ Sigma Matrix -------------------------------------------------------
  94. (de sigma!> (wm wa wb)
  95. (prog (w)
  96. (setq w
  97. (cond
  98. ((and (eqn wm 0) (eqn wa 1) (eqn wb 1)) 1)
  99. ((and (eqn wm 1) (eqn wa 0) (eqn wb 0)) 1)
  100. ((and (eqn wm 2) (eqn wa 1) (eqn wb 0)) 1)
  101. ((and (eqn wm 3) (eqn wa 0) (eqn wb 1)) 1)
  102. (t nil)))
  103. (cond (w (setq w (car ![sgn!]))))
  104. (return w)))
  105. (de sigmai!> (wm wa wb)
  106. (prog (w)
  107. (setq w
  108. (cond
  109. ((and (eqn wm 0) (eqn wa 1) (eqn wb 1)) 1)
  110. ((and (eqn wm 1) (eqn wa 0) (eqn wb 0)) 1)
  111. ((and (eqn wm 2) (eqn wa 1) (eqn wb 0)) 1)
  112. ((and (eqn wm 3) (eqn wa 0) (eqn wb 1)) 1)
  113. (t nil)))
  114. (return w)))
  115. %------ Signature ----------------------------------------------------------
  116. % Signum ...
  117. (de signum!> (w) (cond ((lessp w 0) -1) (t 1)))
  118. % Signum of Product of Signature, i.e. Signum of the Metric ...
  119. (de sigprod!> nil (signum!> (eval (cons 'times ![sgn!]))))
  120. % Macros 2 Signature diagonal ...
  121. (de diagonal!> (w) (getel1!> ![sgn!] w))
  122. (de pmsgn!> nil (pm!> 1))
  123. (de mpsgn!> nil (mp!> 1))
  124. %------ S - forms ----------------------------------------------------------
  125. (de makesforms!> nil
  126. (prog nil
  127. (setq !#!S (mkt!> 2))
  128. (fordim!> x do (fordim!> y do (cond ((lessp x y)
  129. (putel!> (evalform!> (dfprod2!> (getframe!> x)
  130. (getframe!> y)))
  131. !#!S (list2 x y))))))
  132. (return t)))
  133. %------ Metric -------------------------------------------------------------
  134. (de imetr1!> nil % 05.96
  135. (prog (w)
  136. (cond ((zerop (nz!>(eval!> (list 'det (setq w (mats!> !#!G))))))
  137. (setq ![er!] 6800) (return !!er!!) ))
  138. (setq !#!G!I (mkt!> 2))
  139. (rmats!> !#!G!I (aeval (list 'quotient 1 w)))
  140. (mitype!>)
  141. (return t)))
  142. (de metr0!> nil % 05.96
  143. (prog nil
  144. (msg!> 6801)
  145. (setq !#!G (mkt!> 2))
  146. (fordim!> i do
  147. (putel!> (getel1!> ![sgn!] i) !#!G (list2 i i)))
  148. (mtype!>)
  149. (return t)))
  150. (de metr1!> nil % 05.96
  151. (prog (w)
  152. (cond ((zerop (nz!>(eval!> (list 'det (setq w (mats!> !#!G!I))))))
  153. (setq ![er!] 6800) (return !!er!!) ))
  154. (setq !#!G (mkt!> 2))
  155. (rmats!> !#!G (aeval (list 'quotient 1 w)))
  156. (mtype!>)
  157. (return t)))
  158. (de nullmetric!> nil % 05.96
  159. (prog nil
  160. (cond
  161. (!#!G (msg!> 6820) (return t))
  162. ((equal ![sgn!] '(-1 1 1 1))
  163. (setq !#!G (copy ![nullm!]))
  164. (setq ![mtype!] 1)
  165. (setq ![dtype!] 1)
  166. (return t))
  167. ((equal ![sgn!] '(1 -1 -1 -1))
  168. (setq !#!G (copy ![nullm1!]))
  169. (setq ![mtype!] 1)
  170. (setq ![dtype!] 1)
  171. (return t))
  172. (t (setq ![er!] 7910) (return !!er!!)))))
  173. (de detg1!> nil % 05.96
  174. (prog (w)
  175. (cond ((zerop (nz!> (setq w (eval!> (list 'det (mats!> !#!G))))))
  176. (setq ![er!] 6800) (return !!er!!) ))
  177. (setq !#!d!e!t!G (ncons w))
  178. (return t)))
  179. (de dethg1!> nil % 05.96
  180. (prog (w)
  181. (cond ((zerop (nz!> (setq w (eval!> (list 'det (matsf!> 'gmetr!>))))))
  182. (setq ![er!] 6800) (return !!er!!) ))
  183. (setq !#!d!e!t!g (ncons w))
  184. (return t)))
  185. (de sdetg1!> nil % 05.96
  186. (prog (w)
  187. (cond ((zerop (nz!> (setq w (eval!> (list 'det (mats!> !#!G))))))
  188. (setq ![er!] 6800) (return !!er!!) ))
  189. (setq !#!s!d!e!t!G (ncons (evalalg!>
  190. (list 'sqrt (list 'times ![sigprod!] w)))))
  191. (return t)))
  192. %------ Volume -------------------------------------------------------------
  193. (de vol0!> nil % 05.96
  194. (prog (w)
  195. (fordim!> i do
  196. (cond ((eqn i 0) (setq w (getframe!> 0)))
  197. (t (setq w (dfprod2!> w (getframe!> i))))))
  198. (setq w (evalform!> (fndfpr!> (car !#!s!d!e!t!G) w)))
  199. (cond ((null w) (setq ![er!] 4000) (return !!er!!)))
  200. (setq !#!V!O!L (ncons w))
  201. (return t)))
  202. %------ Frame --------------------------------------------------------------
  203. (de frame1!> nil % 05.96
  204. (prog (w) (setq !#!T (mkt!> 1))
  205. (setq w (aeval (list 'tp (list 'quotient 1 (mkmtetr!> !#!D)))))
  206. (mktetrm!> (cdr w) !#!T)
  207. (ftype!>)
  208. (return t)))
  209. (de iframe1!> nil % 05.96
  210. (prog (w) (setq !#!D (mkt!> 1))
  211. (setq w (aeval (list 'tp (list 'quotient 1 (mkmtetr!> !#!T)))))
  212. (mktetrm!> (cdr w) !#!D)
  213. (fitype!>)
  214. (return t)))
  215. (de frame0!> nil % 05.96
  216. (prog nil
  217. (msg!> 6803)
  218. (setq !#!T (mkt1!>))
  219. (fordim!> i do (putel1!> (mkdx!> i) !#!T i))
  220. (ftype!>)
  221. (return t)))
  222. %----- Macros Metric/Frame components -------------------------------------
  223. % Components of Frame/Inverse Frame ... 05.96
  224. (de ham!> (wa wm) % h^a_m
  225. (cond (![umod!] (vform1!> (getel1!> ![xv!] wm) (getel1!> !#!T wa)))
  226. (t (getfdx!> (getel1!> !#!T wa) wm))))
  227. (de hiam!> (wa wm) % h_a^m
  228. (cond (![umod!] (vform1!> (getel1!> !#!D wa) (getel1!> ![xf!] wm)))
  229. (t (getfdx!> (getel1!> !#!D wa) wm))))
  230. (de gmetr!> (wi wk) % g_ik
  231. (cond((fholop!>) % holonomic frame
  232. (getmetr!> wi wk))
  233. ((motop!>) % `diagonal' metric
  234. (cons 'plus
  235. (foreach!> a in (dimlist!> 0) collect
  236. (mktimes!> (list (diagm!> a)
  237. (ham!> a wi)
  238. (ham!> (ai!> a) wk))))))
  239. (t(prog (w wc) % general case
  240. (fordim!> a do
  241. (fordim!> b do
  242. (cond ((setq wc (getmetr!> a b))
  243. (setq w (cons (mktimes!> (list wc
  244. (ham!> a wi)
  245. (ham!> b wk)))
  246. w))))))
  247. (cond (w (return (cons 'plus w))) (t (return nil)))))))
  248. (de gmetr0!> (wi wk) % g_ik
  249. (cond((fholop!>) % holonomic frame
  250. (getmetr!> wi wk))
  251. ((motop!>) % `diagonal' metric
  252. (cons 'plus
  253. (foreach!> a in (dimlist!> 0) collect
  254. (mktimes!> (list (diagm!> a)
  255. (ham0!> a wi)
  256. (ham0!> (ai!> a) wk))))))
  257. (t(prog (w wc) % general case
  258. (fordim!> a do
  259. (fordim!> b do
  260. (cond ((setq wc (getmetr!> a b))
  261. (setq w (cons (mktimes!> (list wc
  262. (ham0!> a wi)
  263. (ham0!> b wk)))
  264. w))))))
  265. (cond (w (return (cons 'plus w))) (t (return nil)))))))
  266. (de gimetr!> (wi wk) % g^ik
  267. (cond((ifholop!>) % holonomic frame
  268. (getimetr!> wi wk))
  269. ((imotop!>) % `diagonal' metric
  270. (cons 'plus
  271. (foreach!> a in (dimlist!> 0) collect
  272. (mktimes!> (list (diagmi!> a)
  273. (hiam!> a wi)
  274. (hiam!> (ai!> a)wk))))))
  275. (t(prog (w wc)
  276. (fordim!> a do
  277. (fordim!> b do
  278. (cond ((setq wc (getimetr!> a b))
  279. (setq w (cons (mktimes!> (list wc
  280. (hiam!> a wi)
  281. (hiam!> b wk)))
  282. w))))))
  283. (cond (w (return(cons 'plus w))) (t (return nil)))))))
  284. (de huam!> (wa wm) % h^a^mu
  285. (cond ((imotop!>)
  286. (mktimes!> (list (diagmi!> wa) (hiam!> (ai!> wa) wm))))
  287. (t(cons 'plus
  288. (foreach!> b in (dimlist!> 0) collect
  289. (mktimes!> (list (getimetr!> wa b) (hiam!> b wm))))))))
  290. (de hlam!> (wa wm) % h_a_mu
  291. (cond ((motop!>)
  292. (mktimes!> (list (diagm!> wa) (ham!> (ai!> wa) wm))))
  293. (t(cons 'plus
  294. (foreach!> b in (dimlist!> 0) collect
  295. (mktimes!> (list (getmetr!> wa b) (ham!> b wm))))))))
  296. %---------- Spin Coefficients -------------------------------------------
  297. (de spcoef!> (waa wb)
  298. (vform1!> (getiframe!> wb) (getel1!> !#!o!m!e!g!a!u waa)))
  299. %---------- Line-element. 27.12.90, 05.96 ------------------------------
  300. (de showlinel!> nil
  301. (proc (w wx wy wf wm)
  302. (setq wm "Cannot calculate Line-Element.")
  303. (setq ![chain!] nil)
  304. (setq w (request!> '!#!G))
  305. (cond((eq w !!er!!) (return w))
  306. ((null w) (progn (trsf!> '!#!G)(prin2 wm)(terpri)
  307. (setq ![er!] 6046) (return !!er!!))))
  308. (setq ![chain!] nil)
  309. (setq w (request!> '!#!T))
  310. (cond((eq w !!er!!) (return w))
  311. ((null w) (progn (trsf!> '!#!T)(prin2 wm)(terpri)
  312. (setq ![er!] 6046) (return !!er!!))))
  313. (gprinreset!>)
  314. (cond((not(and (fancyon!>) (not !*latex))) (terpri)))
  315. (cond((ifmodo!>) (gprin!> "ds2"))
  316. (t(prog2
  317. (algpri!> " d" )
  318. (algpri!> '(expt !s 2) ))))
  319. (wriassign!> nil)
  320. (cond(!*math (gprin!> "(")))
  321. (fordim!> x do (fordim!> y do
  322. (cond((or(lessp x y)(eqn x y))(progn
  323. (setq w(eval!>(cond ((eqn x y) (gmetr0!> x x))
  324. (t(list 'times 2 (gmetr0!> x y))))))
  325. (setq w (nz!> w))
  326. (cond((and(not(ifmodo!>))(numberp w)(lessp w 0)(not(eqn w -1)))
  327. (setq w (list 'minus (minus w)))))
  328. (cond((or (null w) (eqn w 0)) nil)
  329. ((ifmodo!>)
  330. (progn
  331. (cond(wf (gprin!> "+")))
  332. (setq wx (list2 '!dx (prepdx2!> x)))
  333. (setq wy (list2 '!dx (prepdx2!> y)))
  334. (ooprin!> (list 'times w wx wy))
  335. (setq wf t)))
  336. (t(progn
  337. (algpri!>(cond((eqn w -1) " - ")(wf " + ")(t " ")) )
  338. (cond((not(memq w '(1 -1))) (progn
  339. (cond((pairp w)(algpri!> "(" )))
  340. (algpri!> (aeval w) )
  341. (cond((pairp w)(algpri!> ")" ))) )))
  342. (wridd!>)
  343. (setq wx (prepdx2!> x))
  344. (setq wy (prepdx2!> y))
  345. (cond
  346. ((eqn x y) (prog2
  347. (cond((and ![umod!] (fancyon!>)) (progn
  348. (algpri!> "(" )
  349. (algpri!> wx )
  350. (setq wx ")" ))))
  351. (algpri!> (list 'expt wx 2) )))
  352. (t(progn
  353. (algpri!> wx )
  354. (wridd!>)
  355. (algpri!> wy ))))
  356. (setq wf t)
  357. ))) )))))
  358. (cond ((null wf) (alpri!> nil)))
  359. (cond (!*math (gprin!> ")")))
  360. (grgends!>)
  361. (grgterpri!>)
  362. (terpri)
  363. ))
  364. (de prepdx2!> (wx)
  365. (cond
  366. (![umod!]
  367. (cond ((fancyon!>) (list 'expt '!#!#b wx))
  368. (t (compress (cons '!b (explode2 wx))))))
  369. (t (getel1!> ![cord!] wx))))
  370. (de wridd!> nil
  371. (algpri!>
  372. (cond (![umod!] (cond ((fancyon!>) "\,")
  373. (t " ")))
  374. (t (cond ((fancyon!>) "\,d\,")
  375. (t " d "))))
  376. ))
  377. %------ Spinorial S-forms 06.96 ------------------------------------------
  378. (de ssform!> (wn w2 w3)
  379. (prog (w)
  380. (set wn (mkbox!> wn))
  381. (setq wn (eval wn))
  382. (setq w (evalform!> (chsignf!> (dfprod2!> (getframe!> 0)
  383. (getframe!> w2)))))
  384. (putel1!> w wn 0)
  385. (setq w (evalform!> (fndfpr!> '(quotient 1 2) (dfsum!> (list2
  386. (dfprod2!> (getframe!> 0) (getframe!> 1))
  387. (chsignf!> (dfprod2!> (getframe!> w2) (getframe!> w3))))))))
  388. (putel1!> w wn 1)
  389. (setq w (evalform!> (dfprod2!> (getframe!> 1)
  390. (getframe!> w3))))
  391. (putel1!> w wn 2)
  392. (return t)))
  393. %------ Christoffel symbols 06.96 ---------------------------------------
  394. (de chrt!> (wa)
  395. (list 'times '(quotient 1 2)
  396. (list 'quotient (list 'df (car !#!d!e!t!g) (getel1!> ![cord!] wa))
  397. (car !#!d!e!t!g))))
  398. (de chrf!> (wa wb wc)
  399. (list 'times '(quotient 1 2)
  400. (list 'plus
  401. (list 'df (gmetr!> wa wc) (getel1!> ![cord!] wb))
  402. (list 'df (gmetr!> wa wb) (getel1!> ![cord!] wc))
  403. (chsigna!> (list 'df (gmetr!> wb wc) (getel1!> ![cord!] wa))))))
  404. (de chr!> (wa wb wc)
  405. (evalalg!> (getm!> '!#!C!H!R!F nil (list wa wb wc) '(3 nil nil))))
  406. %------ Tensorial Solver 06.96 -------------------------------------------
  407. % Genral solver for frame connection ...
  408. % W - result, WT = t^a, WN = n_a_b (symmetric)
  409. (de fsolver!> (wr wt wn)
  410. (prog (w ww wc)
  411. (setq ww (mkt!> 1))
  412. (setq w (mkt!> 2))
  413. (set wr (mkt!> 2))
  414. (setq wr (eval wr))
  415. % Creating t_a -> WT
  416. (cond (wt
  417. (fordim!> a do (putel1!> (getlo!> wt a) ww a))
  418. (setq wt ww)
  419. (setq ww nil)))
  420. % Solving for 2*omega_a_b -> W (antisymmetric iff n_a_b=0)
  421. (fordim!> a do (fordim!> b do
  422. (cond ((or (lessp a b) wn)
  423. (setq wc nil)
  424. (fordim!> c do (progn
  425. % ( D_a _| D_b _| t_c ) T^c
  426. (cond (wt
  427. (setq wc (cons
  428. (fndfpr!> (vform1!> (getiframe!> a)
  429. (vform!> (getiframe!> b)
  430. (getel1!> wt c)))
  431. (getframe!> c))
  432. wc))))
  433. % ( D_b _| n_a_c - D_a _| n_b_c ) T^c
  434. (cond (wn
  435. (setq wc (cons
  436. (fndfpr!> (list 'difference
  437. (vform1!> (getiframe!> b) (getel2s!> wn a c))
  438. (vform1!> (getiframe!> a) (getel2s!> wn b c)))
  439. (getframe!> c))
  440. wc))))))
  441. (cond (wt
  442. % - D_a _| t_b
  443. (setq wc (cons
  444. (chsignf!> (vform!> (getiframe!> a) (getel1!> wt b)))
  445. wc))
  446. % D_b _| t_a
  447. (setq wc (cons
  448. (vform!> (getiframe!> b) (getel1!> wt a))
  449. wc))))
  450. (cond (wn
  451. % n_a_b
  452. (setq wc (cons (getel2s!> wn a b) wc))))
  453. (setq wc (evalform!> (dfsum!> wc)))
  454. (putel!> wc w (list2 a b))))))
  455. % Now omega^a_b
  456. (fordim!> a do (fordim!> b do (progn
  457. (setq wc (evalform!>
  458. (cond
  459. ((imotop!>)
  460. (fndfpr!> (mktimes2!> '(quotient 1 2) (diagmi!> a))
  461. (cond (wn (getel2!> w (ai!> a) b))
  462. (t (getasy2!> w (ai!> a) b t)))))
  463. (t (dfsum!> (foreach!> c in (dimlist!> 0) collect
  464. (fndfpr!> (mktimes2!> '(quotient 1 2) (getimetr!> a c))
  465. (cond (wn (getel2!> w c b))
  466. (t (getasy2!> w c b t))))))))))
  467. (putel!> wc wr (list2 a b)) ))) ))
  468. %------ Spinorial Solver 06.96 ------------------------------------------
  469. % General spinorial solver ...
  470. % WD = T - dotted, NIL - undotted
  471. % WR - destination, WZ - Z_AA 3-form
  472. (de ssolver!> (wr wz wd)
  473. (prog (wm00 wm10 wm20 wm01 wm11 wm21 w02 w12 w22 w03 w13 w23
  474. i0 i1 i2 i3 w)
  475. (set wr (mkbox!> wr))
  476. (setq wr (eval wr))
  477. (setq i0 0) (setq i1 1)
  478. (cond (wd (setq i2 3) (setq i3 2)) % undotted
  479. (t (setq i2 2) (setq i3 3))) % dotted
  480. % #( Z_AA/\T^b )
  481. (setq wm00 (dfp2!> (not wd) (getel1!> wz 0) (getframe!> i0)))
  482. (setq wm10 (dfp2!> (not wd) (getel1!> wz 1) (getframe!> i0)))
  483. (setq wm20 (dfp2!> (not wd) (getel1!> wz 2) (getframe!> i0)))
  484. (setq wm01 (dfp2!> (not wd) (getel1!> wz 0) (getframe!> i1)))
  485. (setq wm11 (dfp2!> (not wd) (getel1!> wz 1) (getframe!> i1)))
  486. (setq wm21 (dfp2!> (not wd) (getel1!> wz 2) (getframe!> i1)))
  487. (setq w02 (dfp2!> wd (getel1!> wz 0) (getframe!> i2)))
  488. (setq w12 (dfp2!> wd (getel1!> wz 1) (getframe!> i2)))
  489. (setq w22 (dfp2!> wd (getel1!> wz 2) (getframe!> i2)))
  490. (setq w03 (dfp2!> wd (getel1!> wz 0) (getframe!> i3)))
  491. (setq w13 (dfp2!> wd (getel1!> wz 1) (getframe!> i3)))
  492. (setq w23 (dfp2!> wd (getel1!> wz 2) (getframe!> i3)))
  493. % omega_0
  494. (setq w (evalform!> (fndfpr!> 'i (dfsum!> (list
  495. (fndfpr!> w12 (getframe!> i0))
  496. (fndfpr!> wm00 (getframe!> i1))
  497. (fndfpr!> wm10 (getframe!> i2))
  498. (fndfpr!> w02 (getframe!> i3)))))))
  499. (putel1!> w wr 0)
  500. % omega_1
  501. (setq w (evalform!> (fndfpr!> '(quotient i 2) (dfsum!> (list
  502. (fndfpr!> (list 'plus w22 wm11) (getframe!> i0))
  503. (fndfpr!> (list 'plus w03 wm10) (getframe!> i1))
  504. (fndfpr!> (list 'plus w13 wm20) (getframe!> i2))
  505. (fndfpr!> (list 'plus w12 wm01) (getframe!> i3)))))))
  506. (putel1!> w wr 1)
  507. % omega_2
  508. (setq w (evalform!> (fndfpr!> 'i (dfsum!> (list
  509. (fndfpr!> wm21 (getframe!> i0))
  510. (fndfpr!> w13 (getframe!> i1))
  511. (fndfpr!> w23 (getframe!> i2))
  512. (fndfpr!> wm11 (getframe!> i3)))))))
  513. (putel1!> w wr 2)
  514. ))
  515. (de dfp2!> (wd w1 w2)
  516. (eval!> (duald!>
  517. (cond
  518. ((and wd (not(pmmm!>))) (dfprod2!> w1 w2))
  519. ((and (pmmm!>) (not wd)) (dfprod2!> w1 w2))
  520. (t (dfprod2!> w2 w1)) ))))
  521. %-------------------------------------------------------------------------
  522. % omega from dT with THETA and N ...
  523. (de connec!> nil % 09.96
  524. (prog (wt wn)
  525. % t = dT + TH
  526. (setq wt (mkt!> 1))
  527. (fordim!> a do
  528. (putel1!> (cond (!*torsion (dfsum!> (list
  529. (dex!>(getframe!> a))
  530. (getel1!> !#!T!H!E!T!A a))))
  531. (t (dex!>(getframe!> a))))
  532. wt a))
  533. % n = dG + N
  534. (setq wn (mkt!> 2))
  535. (fordim!> a do (fordim!> b do
  536. (cond ((leq a b)
  537. (putel!> (cond (!*nonmetr (dfsum!> (list
  538. (dfun!>(getmetr!> a b))
  539. (getel2!> !#!N a b))))
  540. (t (dfun!>(getmetr!> a b)) ))
  541. wn (list2 a b))))))
  542. % solving ...
  543. (fsolver!> '!#!o!m!e!g!a wt wn)))
  544. % Riem connection + wa
  545. (de connecplus!> (wa) % 09.96
  546. (prog (wt wn)
  547. % t = dT
  548. (setq wt (mkt!> 1))
  549. (fordim!> a do
  550. (putel1!> (dex!>(getframe!> a)) wt a))
  551. % n = dG
  552. (setq wn (mkt!> 2))
  553. (fordim!> a do (fordim!> b do
  554. (cond ((leq a b)
  555. (putel!> (dfun!>(getmetr!> a b)) wn (list2 a b))))))
  556. % solving ...
  557. (cond (wa (fsolver!> '!#!o!m!e!g!a wt wn))
  558. (t (fsolver!> '!#!r!o!m!e!g!a wt wn)))
  559. % adding wa ...
  560. (cond (wa
  561. (fordim!> a do (fordim!> b do
  562. (putel!> (evalform!> (dfsum!> (list (getel2!> !#!o!m!e!g!a a b)
  563. (getel2!> wa a b))))
  564. !#!o!m!e!g!a (list2 a b)))) ))
  565. ))
  566. % K from THETA and N ...
  567. (de conndef!> nil % 09.96
  568. (prog (wt wn)
  569. % t = TH
  570. (setq wt (mkt!> 1))
  571. (fordim!> a do
  572. (putel1!> (getel1!> !#!T!H!E!T!A a) wt a))
  573. % n = N
  574. (setq wn (mkt!> 2))
  575. (fordim!> a do (fordim!> b do
  576. (cond ((leq a b)
  577. (putel!> (getel2!> !#!N a b) wn (list2 a b))))))
  578. % solving ...
  579. (fsolver!> '!#!K wt wn)))
  580. % KN from N ...
  581. (de nondef!> nil % 09.96
  582. (prog (wt wn)
  583. (setq wt (mkt!> 1))
  584. % n = N
  585. (setq wn (mkt!> 2))
  586. (fordim!> a do (fordim!> b do
  587. (cond ((leq a b)
  588. (putel!> (getel2!> !#!N a b) wn (list2 a b))))))
  589. % solving ...
  590. (fsolver!> '!#!K!N wt wn)))
  591. % KQ from THETA ...
  592. (de contor!> nil % 09.96
  593. (prog (wt wn)
  594. % t = TH
  595. (setq wt (mkt!> 1))
  596. (fordim!> a do
  597. (putel1!> (getel1!> !#!T!H!E!T!A a) wt a))
  598. (setq wn (mkt!> 2))
  599. % solving ...
  600. (fsolver!> '!#!K!Q wt wn)))
  601. % GAMMA from omega ...
  602. (de gfromo!> nil
  603. (prog nil
  604. (setq !#!G!A!M!M!A (mkt!> 2))
  605. (fordim!> a do (fordim!> b do
  606. (putel!> (evalform!> (dfsum!> (list
  607. (getm!> '!#!o!m!e!g!a nil (list2 a b) '(7 8))
  608. (addgamma!> a b))))
  609. !#!G!A!M!M!A (list2 a b)))) ))
  610. % RGAMMA from romega ...
  611. (de rgfromro!> nil
  612. (prog nil
  613. (setq !#!R!G!A!M!M!A (mkt!> 2))
  614. (fordim!> a do (fordim!> b do
  615. (putel!> (evalform!> (dfsum!> (list
  616. (getm!> '!#!r!o!m!e!g!a nil (list2 a b) '(7 8))
  617. (addgamma!> a b))))
  618. !#!R!G!A!M!M!A (list2 a b)))) ))
  619. (de addgamma!> (wm wn)
  620. (prog (w)
  621. (fordim!> ww do
  622. (setq w (cons (fndfpr!> (hiam!> ww wm) (dfun!>(ham!> ww wn))) w)))
  623. (return(dfsum!> w))))
  624. % omega from GAMMA ...
  625. (de ofromg!> nil
  626. (prog nil
  627. (setq !#!o!m!e!g!a (mkt!> 2))
  628. (fordim!> a do (fordim!> b do
  629. (putel!> (evalform!> (dfsum!> (list
  630. (getm!> '!#!G!A!M!M!A nil (list2 a b) '(5 6))
  631. (addomega!> a b))))
  632. !#!o!m!e!g!a (list2 a b)))) ))
  633. (de addomega!> (wa wb)
  634. (prog (w)
  635. (fordim!> ww do
  636. (setq w (cons (fndfpr!> (ham!> wa ww) (dfun!>(hiam!> wb ww))) w)))
  637. (return(dfsum!> w))))
  638. % N from K ...
  639. (de nfromk!> (wk)
  640. (prog nil
  641. (setq !#!N (mkt!> 2))
  642. (fordim!> a do (fordim!> b do (cond ((leq a b)
  643. (putel!> (evalform!> (dfsum!> (list
  644. (getm!> wk nil (list2 a b) '(2 nil))
  645. (getm!> wk nil (list2 b a) '(2 nil))
  646. )))
  647. !#!N (list2 a b)))) ))))
  648. % THETA from K ...
  649. (de qfromk!> (wk)
  650. (prog (w)
  651. (setq !#!T!H!E!T!A (mkt!> 1))
  652. (setq wk (eval wk))
  653. (fordim!> a do (progn
  654. (setq w nil)
  655. (fordim!> b do
  656. (setq w (cons (dfprod2!> (getframe!> b) (getel2!> wk a b)) w)))
  657. (putel1!> (evalform!> (dfsum!> w)) !#!T!H!E!T!A a)))))
  658. % Torsion trace 1-form 08.01.91
  659. (de qqq!> nil
  660. (prog (w)
  661. (fordim!> a do
  662. (setq w (cons (vform!> (getiframe!> a)
  663. (getel1!> !#!T!H!E!T!A a)) w)))
  664. (setq !#!Q!Q (ncons(evalform!>(chsign!> t (dfsum!> w)))))
  665. (return t)))
  666. % Antisymmetric Torsion 3-form 10.96
  667. (de qqqa!> nil
  668. (prog (w)
  669. (fordim!> a do
  670. (setq w (cons (dfprod2!> (getlo!> !#!T a)
  671. (getel1!> !#!T!H!E!T!A a)) w)))
  672. (setq !#!Q!Q!A (ncons (evalform!> (dfsum!> w))))
  673. (return t)))
  674. % roumegau ...
  675. (de ruconnec!> nil
  676. (ssolver!> '!#!r!o!m!e!g!a!u (mapcar !#!S!U 'dex!>) nil))
  677. % romegad ...
  678. (de rdconnec!> nil
  679. (ssolver!> '!#!r!o!m!e!g!a!d (mapcar !#!S!D 'dex!>) t))
  680. % oumegau ...
  681. (de uconnec!> nil
  682. (prog nil
  683. (ssolver!> '!#!o!m!e!g!a!u (mapcar !#!S!U 'dex!>) nil)
  684. (cond (!*torsion
  685. (for!> x (0 1 2) do
  686. (putel1!> (evalform!> (dfsum2!> (getel1!> !#!o!m!e!g!a!u x)
  687. (getel1!> !#!K!U x)))
  688. !#!o!m!e!g!a!u x))))))
  689. % omegad ...
  690. (de dconnec!> nil
  691. (prog nil
  692. (ssolver!> '!#!o!m!e!g!a!d (mapcar !#!S!D 'dex!>) t)
  693. (cond (!*torsion
  694. (for!> x (0 1 2) do
  695. (putel1!> (evalform!> (dfsum2!> (getel1!> !#!o!m!e!g!a!d x)
  696. (getel1!> !#!K!D x)))
  697. !#!o!m!e!g!a!d x))))))
  698. % omegau from omega ...
  699. (de oufromo!> (wu wo)
  700. (prog nil
  701. (set wu (mkbox!> wu))
  702. (setq wu (eval wu))
  703. (putel1!> (evalform!> (mpf!> (getel2!> wo 2 1))) wu 0)
  704. (putel1!> (evalform!> (fndfpr!> (pma!> '(quotient 1 2))
  705. (dfsum2!> (getel2!> wo 1 1) (getel2!> wo 3 3)))) wu 1)
  706. (putel1!> (evalform!> (pmf!> (getel2!> wo 3 0))) wu 2)
  707. ))
  708. % omegad from omega ...
  709. (de odfromo!> (wu wo)
  710. (prog nil
  711. (set wu (mkbox!> wu))
  712. (setq wu (eval wu))
  713. (putel1!> (evalform!> (mpf!> (getel2!> wo 3 1))) wu 0)
  714. (putel1!> (evalform!> (fndfpr!> (pma!> '(quotient 1 2))
  715. (dfsum2!> (getel2!> wo 1 1) (getel2!> wo 2 2)))) wu 1)
  716. (putel1!> (evalform!> (pmf!> (getel2!> wo 2 0))) wu 2)
  717. ))
  718. % omega from omegau+omegad ...
  719. (de ofromos!> (wo wu wd)
  720. (prog (w)
  721. (set wo (mkbox!> wo))
  722. (setq wo (eval wo))
  723. %
  724. (setq w (dfsum2!> (getel1!> wu 1) (getel1!> wd 1)))
  725. (putel!> (evalform!>(mpf!> w)) wo (list2 0 0))
  726. (putel!> (evalform!>(pmf!> w)) wo (list2 1 1))
  727. %
  728. (setq w (dfsum2!> (getel1!> wd 1) (chsign!> t (getel1!> wu 1))))
  729. (putel!> (evalform!>(pmf!> w)) wo (list2 2 2))
  730. (putel!> (evalform!>(mpf!> w)) wo (list2 3 3))
  731. %
  732. (setq w (evalform!>(pmf!>(getel1!> wd 2))))
  733. (putel!> w wo (list2 2 0))
  734. (putel!> w wo (list2 1 3))
  735. %
  736. (setq w (evalform!>(mpf!>(getel1!> wu 0))))
  737. (putel!> w wo (list2 2 1))
  738. (putel!> w wo (list2 0 3))
  739. %
  740. (setq w (evalform!>(pmf!>(getel1!> wu 2))))
  741. (putel!> w wo (list2 3 0))
  742. (putel!> w wo (list2 1 2))
  743. %
  744. (setq w (evalform!>(mpf!>(getel1!> wd 0))))
  745. (putel!> w wo (list2 3 1))
  746. (putel!> w wo (list2 0 2))
  747. ))
  748. % complex conjugation ...
  749. (de conj3!> (wr wss)
  750. (prog nil
  751. (set wr (mkbox!> wr))
  752. (setq wr (eval wr))
  753. (putel1!> (evalform!>(coform!>(getel1!> wss 0))) wr 0)
  754. (putel1!> (evalform!>(coform!>(getel1!> wss 1))) wr 1)
  755. (putel1!> (evalform!>(coform!>(getel1!> wss 2))) wr 2)
  756. ))
  757. %--------------------------------------------------------------------------
  758. % Curvature ...
  759. (de curvature!> nil
  760. (prog (w)
  761. (setq !#!O!M!E!G!A (mkt!> 2))
  762. (fordim!> a do (fordim!> b do (progn
  763. (setq w (ncons (dex!> (getel2!> !#!o!m!e!g!a a b))))
  764. (fordim!> x do
  765. (setq w (cons (dfprod2!> (getel2!> !#!o!m!e!g!a a x)
  766. (getel2!> !#!o!m!e!g!a x b) ) w)))
  767. (putel!> (evalform!> (dfsum!> w)) !#!O!M!E!G!A (list2 a b)))))))
  768. % Spinor Curvature
  769. (de scurvature!> (wr wo)
  770. (prog nil
  771. (set wr (mkbox!> wr))
  772. (setq wr (eval wr))
  773. (putel1!> (evalform!>(dfsum2!> (dex!>(getel1!> wo 0))
  774. (fndfpr!> (pma!> 2) (dfprod2!>
  775. (getel1!> wo 0)
  776. (getel1!> wo 1) )))) wr 0)
  777. (putel1!> (evalform!>(dfsum2!> (dex!>(getel1!> wo 1))
  778. (fndfpr!> (pma!> 1) (dfprod2!>
  779. (getel1!> wo 0)
  780. (getel1!> wo 2) )))) wr 1)
  781. (putel1!> (evalform!>(dfsum2!> (dex!>(getel1!> wo 2))
  782. (fndfpr!> (pma!> 2) (dfprod2!>
  783. (getel1!> wo 1)
  784. (getel1!> wo 2) )))) wr 2)
  785. ))
  786. % Riemann Tensor ...
  787. (de riemm!> nil
  788. (prog (w)
  789. (setq !#!R!I!M (mkt!> 4))
  790. (fordim!> wa do (fordim!> wb do
  791. (fordim!> wc do (fordim!> wd do (cond ((lessp wc wd)
  792. (setq w (vform1!> (getiframe!> wd)
  793. (vform!> (getiframe!> wc)
  794. (getel2!> !#!O!M!E!G!A wa wb))))
  795. (putel!> (evalalg!> w) !#!R!I!M (list wa wb wc wd))))))))))
  796. % Ricci Tensor ...
  797. (de ricci!> nil
  798. (prog (w)
  799. (setq !#!R!I!C (mkt!> 2))
  800. (fordim!> wa do (fordim!> wb do
  801. (cond
  802. ((and (null !*torsion) (null !*nonmetr) (greaterp wa wb)) nil)
  803. (t (progn
  804. (setq w nil)
  805. (fordim!> wx do
  806. (setq w (cons (getrim!> wx wa wx wb) w)))
  807. (putel!> (summa!> w) !#!R!I!C (list2 wa wb)))))))))
  808. % Scalar Curvature ...
  809. (de rscalar!> nil
  810. (prog (w)
  811. (fordim!> wa do (fordim!> wb do
  812. (setq w (cons (multa!> (getimetr!> wa wb)
  813. (cond ((or !*torsion !*nonmetr)
  814. (getel2!> !#!R!I!C wa wb))
  815. (t (getel2s!> !#!R!I!C wa wb))) )
  816. w))))
  817. (setq w (summa!> w))
  818. (setq !#!R!R (ncons w)) ))
  819. % Einstein Tensor ...
  820. (de gtensor!> nil
  821. (prog (w)
  822. (setq !#!G!T (mkt!> 2))
  823. (fordim!> wa do (fordim!> wb do
  824. (cond
  825. ((and (null !*torsion) (null !*nonmetr) (greaterp wa wb)) nil)
  826. (t (progn
  827. (setq w (list2 (getel2!> !#!R!I!C wa wb)
  828. (multa!> '(quotient -1 2)
  829. (multa!> (getmetr!> wa wb)
  830. (car !#!R!R)))))
  831. (putel!> (summa!> w) !#!G!T (list2 wa wb)))))))))
  832. %------- Curvature spinors -------------------------------------------------
  833. % local aux functions ...
  834. (de ousu!> (wa wb)
  835. (dualdi!> (dfprod2!> (getel1!> !#!O!M!E!G!A!U wa)
  836. (getel1!> !#!S!U wb))))
  837. (de ousd!> (wa wb)
  838. (dualdi!> (dfprod2!> (getel1!> !#!O!M!E!G!A!U wa)
  839. (getel1!> !#!S!D wb))))
  840. (de odsu!> (wa wb)
  841. (dualdi!> (dfprod2!> (getel1!> !#!O!M!E!G!A!D wa)
  842. (getel1!> !#!S!U wb))))
  843. (de odsd!> (wa wb)
  844. (dualdi!> (dfprod2!> (getel1!> !#!O!M!E!G!A!D wa)
  845. (getel1!> !#!S!D wb))))
  846. % Scalar curvature ...
  847. (de rrsp!> nil
  848. (prog (wr)
  849. (cond
  850. (!*torsion
  851. (setq wr (summa!> (list (ousu!> 2 0) (ousu!> 0 2)
  852. (multa!> -2 (ousu!> 1 1)))))
  853. (setq wr (evalalg!>
  854. (cond (!*torsion (multa!> 2 (list 'plus wr (coalg!> wr))))
  855. (t (multa!> 4 wr))))) )
  856. (t
  857. (setq wr (evalalg!> (multa!> 8 (list 'difference
  858. (ousu!> 0 2) (ousu!> 1 1))))) ))
  859. (setq !#!R!R (ncons wr))))
  860. % Scalar deviation ...
  861. (de rdsp!> nil
  862. (prog (wr)
  863. (setq wr (summa!> (list (ousu!> 2 0) (ousu!> 0 2)
  864. (multa!> -2 (ousu!> 1 1)))))
  865. (setq wr (evalalg!>
  866. (multa!> '(times -2 i) (list 'difference wr (coalg!> wr)))))
  867. (setq !#!R!D (ncons wr))))
  868. % Weyl spinor ...
  869. (de rwsp!> nil
  870. (progn
  871. (makebox!> '!#!R!W)
  872. (cond
  873. (!*torsion
  874. (putel1!> (evalalg!> (ousu!> 0 0)) !#!R!W 0)
  875. (putel1!> (evalalg!> (multa!> '(quotient 1 2)
  876. (list 'plus (ousu!> 0 1) (ousu!> 1 0)))) !#!R!W 1)
  877. (putel1!> (evalalg!> (list 'plus
  878. (multa!> '(quotient 1 6)
  879. (list 'plus (ousu!> 2 0) (ousu!> 0 2)))
  880. (multa!> '(quotient 2 3) (ousu!> 1 1)))) !#!R!W 2)
  881. (putel1!> (evalalg!> (multa!> '(quotient 1 2)
  882. (list 'plus (ousu!> 1 2) (ousu!> 2 1)))) !#!R!W 3)
  883. (putel1!> (evalalg!> (ousu!> 2 2)) !#!R!W 4) )
  884. (t
  885. (putel1!> (evalalg!> (ousu!> 0 0)) !#!R!W 0)
  886. (putel1!> (evalalg!> (ousu!> 0 1)) !#!R!W 1)
  887. (putel1!> (evalalg!> (list 'plus
  888. (multa!> '(quotient 1 3) (ousu!> 0 2))
  889. (multa!> '(quotient 2 3) (ousu!> 1 1)))) !#!R!W 2)
  890. (putel1!> (evalalg!> (ousu!> 1 2)) !#!R!W 3)
  891. (putel1!> (evalalg!> (ousu!> 2 2)) !#!R!W 4) ) )
  892. t))
  893. % Ricanti spinor ...
  894. (de rasp!> nil
  895. (progn
  896. (makebox!> '!#!R!A)
  897. (putel1!> (evalalg!> (multa!> (cond ((mppp!>) 1) (t -1))
  898. (list 'difference
  899. (ousu!> 1 0) (ousu!> 0 1)))) !#!R!A 0)
  900. (putel1!> (evalalg!> (multa!> (cond ((mppp!>) '(quotient 1 2))
  901. (t '(quotient -1 2)))
  902. (list 'difference
  903. (ousu!> 2 0) (ousu!> 0 2)))) !#!R!A 1)
  904. (putel1!> (evalalg!> (multa!> (cond ((mppp!>) 1) (t -1))
  905. (list 'difference
  906. (ousu!> 2 1) (ousu!> 1 2)))) !#!R!A 2)
  907. t))
  908. % Traceless ricci spinor ...
  909. (de rcsp!> nil
  910. (progn
  911. (makebox!> '!#!R!C)
  912. (for!> x (0 1 2) do (for!> y (0 1 2) do
  913. (cond ((leq x y)
  914. (putel!> (cond (!*torsion (evalalg!> (mpa!> (list 'difference
  915. (ousd!> x y) (odsu!> y x)))))
  916. (t (evalalg!> (mpa!> (multa!> 2 (ousd!> x y))))))
  917. !#!R!C (list2 x y))))))
  918. t))
  919. % Traceless deviation spinor ...
  920. (de rbsp!> nil
  921. (progn
  922. (makebox!> '!#!R!B)
  923. (for!> x (0 1 2) do (for!> y (0 1 2) do
  924. (cond ((leq x y)
  925. (putel!> (evalalg!> (mpa!> (multa!> 'i (list 'plus
  926. (ousd!> x y) (odsu!> y x)))))
  927. !#!R!B (list2 x y))))))
  928. t))
  929. %----- NP formalism via macro 10.96 ---------------------------------------
  930. (de psinp!> (w)
  931. (getel1!> !#!R!W w))
  932. (de phinp!> (wa wb)
  933. (prog (w)
  934. (setq w (cond ((leq wa wb) (getel2!> !#!R!C wa wb))
  935. (t (coalg!> (getel2!> !#!R!C wb wa)))))
  936. (return (cond (w (list 'times (pma!> '(quotient 1 2)) w))
  937. (t nil)))))
  938. (de alphanp!> nil (pma!>(spcoef!> 1 2)))
  939. (de betanp!> nil (pma!>(spcoef!> 1 3)))
  940. (de gammanp!> nil (pma!>(spcoef!> 1 0)))
  941. (de epsilonnp!> nil (pma!>(spcoef!> 1 1)))
  942. (de kappanp!> nil (pma!>(spcoef!> 0 1)))
  943. (de rhonp!> nil (pma!>(spcoef!> 0 2)))
  944. (de sigmanp!> nil (pma!>(spcoef!> 0 3)))
  945. (de taunp!> nil (pma!>(spcoef!> 0 0)))
  946. (de munp!> nil (pma!>(spcoef!> 2 3)))
  947. (de nunp!> nil (pma!>(spcoef!> 2 0)))
  948. (de lambdanp!> nil (pma!>(spcoef!> 2 2)))
  949. (de pinp!> nil (pma!>(spcoef!> 2 1)))
  950. (de dtop!> nil (getiframe!> 0))
  951. (de dddop!> nil (getiframe!> 1))
  952. (de duop!> nil (getiframe!> 3))
  953. (de ddop!> nil (getiframe!> 2))
  954. %----- Geosedics. 10.96 ---------------------------------------------------
  955. (de geodesics!> nil
  956. (prog (w)
  957. (setq !#!G!E!O!q (mkt!> 1))
  958. (fordim!> x do (progn
  959. (setq w (ncons (list 'df (getel1!> ![cord!] x) (car ![apar!]) 2)))
  960. (fordim!> y do (fordim!> z do
  961. (setq w (cons (list 'times (chr!> x y z)
  962. (list 'df (getel1!> ![cord!] y) (car ![apar!]))
  963. (list 'df (getel1!> ![cord!] z) (car ![apar!])))
  964. w))))
  965. (putel1!> (equation!> (evalalg!> (cons 'plus w)) nil) !#!G!E!O!q x)))))
  966. %----- Null Congruence. 10.96 ---------------------------------------------
  967. (de ncnq!> nil
  968. (prog (w)
  969. (setq w (evalalg!> (vprod!> (car !#!K!V) (car !#!K!V))))
  970. (setq !#!N!C!o (ncons(equation!> w nil)))
  971. (cond (w (msg!> 6700)))))
  972. % vec'w
  973. (de getncv!> (w)
  974. (vform1!> (car !#!K!V) (getframe!> w)))
  975. % vec.w
  976. (de getncvlo!> (w)
  977. (vform1!> (car !#!K!V) (getlo!> !#!T w)))
  978. % Riemann omega'a.b
  979. (de rimomega!> (wa wb)
  980. (cond ((or !*torsion !*nonmetr) (getel2!> !#!r!o!m!e!g!a wa wb))
  981. (t (getel2!> !#!o!m!e!g!a wa wb))))
  982. % Riemann omega'a.b.c
  983. (de rimomegac!> (wa wb wc)
  984. (vform1!> (getiframe!> wc) (rimomega!> wa wb)))
  985. (de ncgq!> nil
  986. (prog (w wc)
  987. (setq !#!G!C!o (mkt!> 1))
  988. (fordim!> x do (progn
  989. (setq w (ncons (vfun!> (car !#!K!V) (getncv!> x))))
  990. (fordim!> y do
  991. (setq w (cons (list 'times
  992. (vform1!> (car !#!K!V) (rimomega!> x y))
  993. (getncv!> y)) w)))
  994. (setq w (evalalg!> (cons 'plus w)))
  995. (cond (w (setq wc t)))
  996. (putel1!> (equation!> w nil) !#!G!C!o x)))
  997. (cond (wc (msg!> 6701)))))
  998. % D.a ( vec.b ) = D.a | vec.b - omega'm.b.a vec.m
  999. (de dcnc!> (wa wb)
  1000. (prog (w)
  1001. (setq w (ncons (vfun!> (getiframe!> wa) (getncvlo!> wb))))
  1002. (fordim!> m do
  1003. (setq w (cons (list 'times -1 (rimomegac!> m wb wa)
  1004. (getncvlo!> m)) w)))
  1005. (setq w (evalalg!> (cons 'plus w)))
  1006. (return w)))
  1007. % THETA
  1008. (de nctheta!> nil
  1009. (prog (w)
  1010. (fordim!> x do (fordim!> y do
  1011. (setq w (cons (list 'times '(quotient 1 2)
  1012. (dcnc!> x y)
  1013. (getimetr!> x y)) w))))
  1014. (setq w (evalalg!> (cons 'plus w)))
  1015. (setq !#!t!h!e!t!a!O (ncons w)) ))
  1016. % omega^2
  1017. (de ncomega!> nil
  1018. (prog (w wa wb)
  1019. (fordim!> x do (fordim!> y do
  1020. (fordim!> p do (fordim!> q do (progn
  1021. (setq wa (getimetr!> x p))
  1022. (setq wb (getimetr!> y q))
  1023. (cond ((and wa wb)
  1024. (setq w (cons (list 'times '(quotient 1 4) wa wb (dcnc!> p q)
  1025. (list 'difference (dcnc!> x y) (dcnc!> y x)))
  1026. w)))))))))
  1027. (setq w (evalalg!> (cons 'plus w)))
  1028. (setq !#!o!m!e!g!a!S!Q!O (ncons w)) ))
  1029. % sigma*~sigma
  1030. (de ncsigma!> nil
  1031. (prog (w wa wb)
  1032. (fordim!> x do (fordim!> y do
  1033. (fordim!> p do (fordim!> q do (progn
  1034. (setq wa (getimetr!> x p))
  1035. (setq wb (getimetr!> y q))
  1036. (cond ((and wa wb)
  1037. (setq w (cons (list 'times '(quotient 1 4) wa wb (dcnc!> p q)
  1038. (list 'plus (dcnc!> x y) (dcnc!> y x)))
  1039. w)))))))))
  1040. (setq w (cons 'plus w))
  1041. (setq w (list 'difference w (list 'expt (car !#!t!h!e!t!a!O) 2)))
  1042. (setq w (evalalg!> w))
  1043. (setq !#!s!i!g!m!a!S!Q!O (ncons w)) ))
  1044. %----- Kinematics 10.96 ----------------------------------------------------
  1045. % UV = UUP'a D.a
  1046. (de uvfromuup!> nil
  1047. (prog (w)
  1048. (fordim!> x do
  1049. (setq w (cons (fndfpr!> (getel1!> !#!U!U x) (getiframe!> x)) w)))
  1050. (setq !#!U!V (ncons (evalform!> (dfsum!> w))))))
  1051. % UUp'a = UV _| T'a
  1052. (de uupfromuv!> nil
  1053. (prog nil
  1054. (setq !#!U!U (mkt!> 1))
  1055. (fordim!> x do
  1056. (putel1!> (evalalg!> (vform1!> (car !#!U!V) (getframe!> x)))
  1057. !#!U!U x))
  1058. ))
  1059. (de uudefault!> nil
  1060. (prog nil
  1061. (setq !#!U!U (mkt!> 1))
  1062. (putel1!> 1 !#!U!U 0)
  1063. (msg!> 6805)
  1064. ))
  1065. % USQ = UUP'a UUP.a
  1066. (de usquare!> nil
  1067. (prog (w)
  1068. (fordim!> x do
  1069. (setq w (cons (list 'times (getel1!> !#!U!U x)
  1070. (getloa!> !#!U!U x)) w)))
  1071. (setq w (evalalg!> (cons 'plus w)))
  1072. (cond ((null w) (setq ![er!] 6702) (return !!er!!))
  1073. ((eqn (exprtype!> w) 2) (msg!> 9001)))
  1074. (setq !#!U!S!Q (ncons w))))
  1075. % PRO'a.b
  1076. (de projector!> nil
  1077. (prog (w)
  1078. (setq !#!P!R (mkt!> 2))
  1079. (cond ((null (car !#!U!S!Q)) (setq ![er!] 6702) (return !!er!!)))
  1080. (setq w (list 'quotient 1 (car !#!U!S!Q)))
  1081. (fordim!> a do (fordim!> b do
  1082. (putel!> (evalalg!> (list 'difference (delta!> a b)
  1083. (list 'times w (getel1!> !#!U!U a)
  1084. (getloa!> !#!U!U b))))
  1085. !#!P!R (list2 a b))))))
  1086. (de dcuup!> (wa wb)
  1087. (prog (w)
  1088. (setq w (ncons (vfun!> (getiframe!> wa) (getel1!> !#!U!U wb))))
  1089. (fordim!> wm do
  1090. (setq w (cons (list 'times (getel1!> !#!U!U wm)
  1091. (rimomegac!> wb wm wa)) w)))
  1092. (return (cons 'plus w))))
  1093. (de dcudown!> (wa wb)
  1094. (prog (w)
  1095. (setq w (ncons (vfun!> (getiframe!> wa) (getloa!> !#!U!U wb))))
  1096. (fordim!> wm do
  1097. (setq w (cons (list 'times -1 (getloa!> !#!U!U wm)
  1098. (rimomegac!> wm wb wa)) w)))
  1099. (return (cons 'plus w))))
  1100. (de accelerat!> nil
  1101. (prog (w)
  1102. (setq !#!a!c!c!U (mkt!> 1))
  1103. (fordim!> a do (progn
  1104. (setq w nil)
  1105. (fordim!> m do
  1106. (setq w (cons (list 'times (getel1!> !#!U!U m)
  1107. (dcuup!> m a)) w)))
  1108. (putel1!> (evalalg!> (cons 'plus w)) !#!a!c!c!U a)))))
  1109. (de utheta!> nil
  1110. (prog (w)
  1111. (fordim!> m do (setq w (cons (dcuup!> m m) w)))
  1112. (setq !#!t!h!e!t!a!U (ncons (evalalg!> (cons 'plus w))))))
  1113. (de uomega!> nil
  1114. (prog (w)
  1115. (setq !#!o!m!e!g!a!U (mkt!> 2))
  1116. (fordim!> a do (fordim!> b do (cond ((lessp a b)
  1117. (setq w nil)
  1118. (fordim!> m do (fordim!> n do
  1119. (setq w (cons (list 'times '(quotient 1 2)
  1120. (getel2!> !#!P!R m a) (getel2!> !#!P!R n b)
  1121. (list 'difference (dcudown!> m n)
  1122. (dcudown!> n m))) w))))
  1123. (putel!> (evalalg!> (cons 'plus w)) !#!o!m!e!g!a!U (list2 a b))))))))
  1124. (de usigma!> nil
  1125. (prog (w)
  1126. (setq !#!s!i!g!m!a!U (mkt!> 2))
  1127. (fordim!> a do (fordim!> b do (cond ((leq a b)
  1128. (setq w (ncons (list 'times (list 'quotient -1 ![dim1!])
  1129. (car !#!t!h!e!t!a!U)
  1130. (getm!> '!#!P!R nil (list2 a b) '(2 nil)))))
  1131. (fordim!> m do (fordim!> n do
  1132. (setq w (cons (list 'times '(quotient 1 2)
  1133. (getel2!> !#!P!R m a) (getel2!> !#!P!R n b)
  1134. (list 'plus (dcudown!> m n)
  1135. (dcudown!> n m))) w))))
  1136. (putel!> (evalalg!> (cons 'plus w)) !#!s!i!g!m!a!U (list2 a b))))))))
  1137. %------- Irreducible torsion components. 01.91 ---------------------------
  1138. % Local aux functions ...
  1139. (de qsu!> (wq wss)
  1140. (dualdi!> (dfprod2!> (getel1!> !#!T!H!E!T!A wq) (getel1!> !#!S!U wss))))
  1141. (de qsd!> (wq wss)
  1142. (dualdi!> (dfprod2!> (getel1!> !#!T!H!E!T!A wq) (getel1!> !#!S!D wss))))
  1143. % Tracelass torsion spinor ...
  1144. (de qcfromth!> nil
  1145. (progn
  1146. (makebox!> '!#!Q!C)
  1147. (putel!> (evalalg!> (list 'times 1 (qsu!> 0 0)))
  1148. !#!Q!C (list 0 0))
  1149. (putel!> (evalalg!> (list 'times 1 '(quotient -1 3)
  1150. (list 'plus (qsu!> 3 0) (list 'times -2 (qsu!> 0 1)))))
  1151. !#!Q!C (list 1 0))
  1152. (putel!> (evalalg!> (list 'times 1 (qsu!> 1 2)))
  1153. !#!Q!C (list 3 1))
  1154. (putel!> (evalalg!> (list 'times 1 '(quotient 1 3)
  1155. (list 'plus (qsu!> 0 2) (list 'times -2 (qsu!> 3 1)))))
  1156. !#!Q!C (list 2 0))
  1157. (putel!> (evalalg!> (list 'times -1 (qsu!> 3 2)))
  1158. !#!Q!C (list 3 0))
  1159. (putel!> (evalalg!> (list 'times 1 '(quotient 1 3)
  1160. (list 'plus (qsu!> 1 0) (list 'times -2 (qsu!> 2 1)))))
  1161. !#!Q!C (list 1 1))
  1162. (putel!> (evalalg!> (list 'times -1 (qsu!> 2 0)))
  1163. !#!Q!C (list 0 1))
  1164. (putel!> (evalalg!> (list 'times 1 '(quotient -1 3)
  1165. (list 'plus (qsu!> 2 2) (list 'times -2 (qsu!> 1 1)))))
  1166. !#!Q!C (list 2 1))
  1167. t))
  1168. % Torsion trace vector with spinors ...
  1169. (de qtfromthsp!> nil
  1170. (progn
  1171. (setq !#!Q!T (mkt!> 1))
  1172. (putel1!> (evalalg!> (list 'times (car ![sgn!])
  1173. (list 'plus (qsu!> 1 0) (qsu!> 2 1) (qsd!> 2 1) (qsd!> 0 2))))
  1174. !#!Q!T 2)
  1175. (putel1!> (evalalg!> (list 'times (car ![sgn!]) -1
  1176. (list 'plus (qsu!> 3 1)(qsu!> 0 2)(qsd!> 1 0)(qsd!> 3 1))))
  1177. !#!Q!T 3)
  1178. (putel1!> (evalalg!> (list 'times (car ![sgn!]) -1
  1179. (list 'plus
  1180. (list 'times -1 (list 'plus (qsu!> 3 0) (qsu!> 0 1)))
  1181. (qsd!> 2 0) (qsd!> 0 1))))
  1182. !#!Q!T 0)
  1183. (putel1!> (evalalg!> (list 'times (car ![sgn!]) -1
  1184. (list 'plus
  1185. (qsu!> 1 1) (qsu!> 2 2)
  1186. (list 'times -1 (list 'plus (qsd!> 1 1) (qsd!> 3 2))))))
  1187. !#!Q!T 1)
  1188. t))
  1189. % Torsion pseudotrace vector with spinors ...
  1190. (de qpfromthsp!> nil
  1191. (progn
  1192. (setq !#!Q!P (mkt!> 1))
  1193. (putel1!> (evalalg!> (list 'times (car ![sgn!]) 'i
  1194. (list 'plus (qsu!> 3 0) (qsu!> 0 1) (qsd!> 2 0) (qsd!> 0 1))))
  1195. !#!Q!P 0)
  1196. (putel1!> (evalalg!>(list 'times (car ![sgn!]) '(minus i)
  1197. (list 'plus (qsu!> 1 1) (qsu!> 2 2) (qsd!> 1 1) (qsd!> 3 2))))
  1198. !#!Q!P 1)
  1199. (putel1!> (evalalg!> (list 'times (car ![sgn!]) 'i
  1200. (list 'plus (list 'times -1
  1201. (list 'plus (qsu!> 3 1) (qsu!> 0 2)))
  1202. (qsd!> 1 0) (qsd!> 3 1))))
  1203. !#!Q!P 3)
  1204. (putel1!> (evalalg!>(list 'times (car ![sgn!]) 'i
  1205. (list 'plus (qsu!> 1 0) (qsu!> 2 1)
  1206. (list 'times -1
  1207. (list 'plus (qsd!> 2 1) (qsd!> 0 2))))))
  1208. !#!Q!P 2)
  1209. t))
  1210. %---- Undotted torsion 2-forms. 12.91 ------------------------------------
  1211. % wd - internal variable, fun - get function, wss - s-forms
  1212. (de trfr!> (wd fun wss)
  1213. (prog (w wc)
  1214. (set wd (mkt!> 1))
  1215. (setq wd (eval wd))
  1216. (for!> a (0 1 3) do (progn
  1217. (setq w nil)
  1218. (for!> b (0 1 2) do
  1219. (setq w (cons (fndfpr!> (list 'times (cond ((eqn b 1) -2) (t 1))
  1220. (apply fun (list a b)))
  1221. (getel1!> (eval wss) (si!> b))) w)) )
  1222. (cond (w (putel1!> (evalform!> (dfsum!> w)) wd a)))))
  1223. (return t)))
  1224. % local aux function ...
  1225. (de si!> (w)
  1226. (cond ((eqn w 1) 1)
  1227. ((eqn w 2) 0)
  1228. ((eqn w 0) 2)))
  1229. % Get Traceless Torsion spinor ...
  1230. (de gcf!> (wa wb)
  1231. (cond
  1232. ((and (eqn wa 0) (eqn wb 0)) (getel2!> !#!Q!C 0 0))
  1233. ((and (eqn wa 0) (eqn wb 1)) (getel2!> !#!Q!C 1 0))
  1234. ((and (eqn wa 0) (eqn wb 2)) (getel2!> !#!Q!C 2 0))
  1235. ((and (eqn wa 1) (eqn wb 0)) (getel2!> !#!Q!C 1 1))
  1236. ((and (eqn wa 1) (eqn wb 1)) (getel2!> !#!Q!C 2 1))
  1237. ((and (eqn wa 1) (eqn wb 2)) (getel2!> !#!Q!C 3 1))
  1238. ((and (eqn wa 2) (eqn wb 0)) (list 'times -1 (getel2!> !#!Q!C 0 1)))
  1239. ((and (eqn wa 2) (eqn wb 1)) (list 'times -1 (getel2!> !#!Q!C 1 1)))
  1240. ((and (eqn wa 2) (eqn wb 2)) (list 'times -1 (getel2!> !#!Q!C 2 1)))
  1241. ((and (eqn wa 3) (eqn wb 0)) (list 'times -1 (getel2!> !#!Q!C 1 0)))
  1242. ((and (eqn wa 3) (eqn wb 1)) (list 'times -1 (getel2!> !#!Q!C 2 0)))
  1243. ((and (eqn wa 3) (eqn wb 2)) (list 'times -1 (getel2!> !#!Q!C 3 0))) ))
  1244. % Get Torsion Trace spinor ...
  1245. (de gqf!> (wa wb)
  1246. (gqpf!> wa wb (car ![sgn!]) !#!Q!T))
  1247. % Get Torsion Pseudotrace spinor ...
  1248. (de gpf!> (wa wb)
  1249. (gqpf!> wa wb (cond ((mppp!>) 'i) (t '(minus i))) !#!Q!P))
  1250. (de gqpf!> (wa wb w lst)
  1251. (cond
  1252. ((and (eqn wa 0) (eqn wb 1))
  1253. (list 'times (mkq!> w 6 nil) (getel1!> lst 0)))
  1254. ((and (eqn wa 0) (eqn wb 2))
  1255. (list 'times (mkq!> w 3 t) (getel1!> lst 3)))
  1256. ((and (eqn wa 3) (eqn wb 0))
  1257. (list 'times (mkq!> w 3 nil) (getel1!> lst 0)))
  1258. ((and (eqn wa 3) (eqn wb 1))
  1259. (list 'times (mkq!> w 6 t) (getel1!> lst 3)))
  1260. ((and(eqn wa 2) (eqn wb 1))
  1261. (list 'times (mkq!> w 6 nil) (getel1!> lst 2)))
  1262. ((and (eqn wa 2) (eqn wb 2))
  1263. (list 'times (mkq!> w 3 t) (getel1!> lst 1)))
  1264. ((and (eqn wa 1) (eqn wb 0))
  1265. (list 'times (mkq!> w 3 nil) (getel1!> lst 2)))
  1266. ((and (eqn wa 1) (eqn wb 1))
  1267. (list 'times (mkq!> w 6 t) (getel1!> lst 1))) ))
  1268. (de mkq!> (wd wn wb)
  1269. (list 'quotient (cond (wb (list 'minus wd)) (t wd)) wn))
  1270. (de qtfromqq!> nil
  1271. (prog nil
  1272. (makebox!> '!#!Q!T)
  1273. (fordim!> a do
  1274. (putel1!> (evalalg!> (vform1!> (getup!> !#!D a) (car !#!Q!Q)))
  1275. !#!Q!T a))))
  1276. (de qpfromqqa!> nil
  1277. (prog (w)
  1278. (makebox!> '!#!Q!P)
  1279. (setq w (dual!> (car !#!Q!Q!A)))
  1280. (fordim!> a do
  1281. (putel1!> (evalalg!> (vform1!> (getup!> !#!D a) w))
  1282. !#!Q!P a))))
  1283. %------- Undotted Curvature 2-forms. 01.91 --------------------------------
  1284. % wd - internal variable, fun - get function, wss - s-forms
  1285. (de crfr!> (wd fun wss)
  1286. (prog (w)
  1287. (set wd (mkspace!> '((n . 2))))
  1288. (for!> a (0 1 2) do (progn
  1289. (setq w nil)
  1290. (for!> b (0 1 2) do
  1291. (setq w(cons(fndfpr!>(list 'times
  1292. (cond((eqn b 1) '(minus 2))(t 1))
  1293. (apply fun (list a b)))
  1294. (getel1!> (eval wss) (si!> b)))w)) )
  1295. (cond(w(putel1!>(evalform!>(dfsum!> w)) (eval wd) a)))))
  1296. (return t)))
  1297. % Get Wayl spinor ...
  1298. (de gwf!> (wa wb)
  1299. (getel1!> !#!R!W (plus wa wb)))
  1300. % Get Traceless Ricci spinor ...
  1301. (de gtf!> (wa wb)
  1302. (list 'times (cond ((pmmm!>) '(quotient -1 2))
  1303. (t '(quotient 1 2)))
  1304. (getel2h!> !#!R!C wa wb)))
  1305. % Get Traceless Deviation spinor ...
  1306. (de gbf!> (wa wb)
  1307. (list 'times (cond ((pmmm!>) '(quotient i 2))
  1308. (t '(quotient (minus i) 2)))
  1309. (getel2h!> !#!R!B wa wb)))
  1310. % Get Scalar Curvature spinor ...
  1311. (de gsf!> (wa wb)
  1312. (cond((or(and(eqn wa 0)(eqn wb 2))(and(eqn wa 2)(eqn wb 0)))
  1313. (list 'times '(quotient 1 12) (car !#!R!R)))
  1314. ((and(eqn wa 1)(eqn wb 1))
  1315. (list 'times '(quotient (minus 1) 24)(car !#!R!R)))
  1316. (t nil)))
  1317. % Get Scalar Deviation spinor ...
  1318. (de gdf!> (wa wb)
  1319. (cond((or(and(eqn wa 0)(eqn wb 2))(and(eqn wa 2)(eqn wb 0)))
  1320. (list 'times '(quotient i 12)(car !#!R!D)))
  1321. ((and(eqn wa 1)(eqn wb 1))
  1322. (list 'times '(quotient (minus i) 24)(car !#!R!D)))
  1323. (t nil)))
  1324. % Get Antisymmetric Ricci spinor ...
  1325. (de gaf!> (wa wb)
  1326. (cond((and(eqn wa 0)(eqn wb 1))
  1327. (list 'times (sgnm!>) '(quotient -1 2) (getel1!> !#!R!A 0)))
  1328. ((and(eqn wa 0)(eqn wb 2))
  1329. (list 'times (sgnm!>) -1 (getel1!> !#!R!A 1)))
  1330. ((and(eqn wa 1)(eqn wb 0))
  1331. (list 'times (sgnm!>) '(quotient 1 2) (getel1!> !#!R!A 0)))
  1332. ((and(eqn wa 1)(eqn wb 2))
  1333. (list 'times (sgnm!>) '(quotient -1 2)(getel1!> !#!R!A 2)))
  1334. ((and(eqn wa 2)(eqn wb 0))
  1335. (list 'times (sgnm!>) (getel1!> !#!R!A 1)))
  1336. ((and(eqn wa 2)(eqn wb 1))
  1337. (list 'times (sgnm!>) '(quotient 1 2) (getel1!> !#!R!A 2)))
  1338. (t nil)))
  1339. % Signature ...
  1340. (de sgnm!> nil
  1341. (cond ((pmmm!>) -1) (t 1)))
  1342. %=========== End of GRGgeom.sl ============================================%