1;;;;;;;;;;;;;;;;;
2;; project to understand Riemannian geometry and general theory of relativity.
3;;;  since 2021/5
4;;;
5
6
7;; make 4D vector
8(defun make-vector (x1 x2 x3 x4)
9    (let ((vector (create-vector 4 0)))
10        (setf (elt vector 0) x1)
11        (setf (elt vector 1) x2)
12        (setf (elt vector 2) x3)
13        (setf (elt vector 3) x4)
14        vector))
15
16(defun make-metric (v1 v2)
17    (let ((tensor (create-tensor '(4 4))))
18        (for ((i 0 (+ i 1)))
19             ((> i 3) tensor)
20             (for ((j 0 (+ j 1)))
21                  ((> j 3) t)
22                  (setf (aref tensor i j) (* (elt v1 i) (elt v2 j)))))
23        tensor))
24
25(defun create-tensor (dimension)
26    (create-array dimension 0))
27
28(defun symmetricp (tensor)
29    (block exit
30        (for ((i 0 (+ i 1)))
31             ((> i 3) t)
32             (for ((j 0 (+ j 1)))
33                  ((> j 3) t)
34                  (if (not (= (aref tensor i j)
35                              (aref tensor j i)))
36                      (return-from exit nil))))))
37
38(defglobal a (make-vector 1 2 2 1))
39(defglobal b (make-vector 2 1 1 2))
40(defglobal c (make-metric a a))
41
42
43(defun ds2 (g dx)
44    (for ((i 0 (+ i 1))
45          (s 0))
46         ((> i 3) s)
47         (for ((j 0 (+ j 1)))
48              ((> j 3) t)
49              (setq s (* (aref g i j) (elt dx i) (elt dx j))))))
50
51#|
52(defun rank (x)
53    (length (array-dimensions x)))
54
55(defun metric-tensor (n)
56    (create-tensor `(,n ,n)))
57
58;;e.g. p203 tashiro
59(defglobal g
60    (#2a((1 0 0)
61         (0 (lambda (r) (* r r)) 0)
62         (0 0 (lambda (r sita) (* (^ r 2)(^ (sin sita) 2)))))))
63
64(defun ^ (base expo)
65    (expt base exp))
66
67(defun gamma (i j k)
68    (* 0.5 (+ (round (g i j) (x k)) (round (g i k) (x i)) (round (g k j) (x i)))))
69
70(defun r (i j k l)
71    (+ (- (round (gamma i j l) (x k)) (round (gamma i j k) (x l)))
72       (- (* (gamma m j l) (gamma i m k)) (* (gamma m j k) (gamma i m l)))))
73
74(defmacro sum (x y)
75    (let ((dim1 (array-dimensions x))
76          (dim2 (array-dimensions y)))
77        (cond ((= (length dim1) 2) (sum2 x y dim1))
78              ((= (length dim1) 3) (sum3 x y dim1))
79              ((= (length dim1) 4) (sum3 x y dim1)))))
80
81(defmacro sum4 (x y dim))
82
83|#
84
85