-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathAngularMomentumDensityTensor.wl
640 lines (639 loc) · 65.3 KB
/
AngularMomentumDensityTensor.wl
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
(* ::Package:: *)
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, index1_, index2_]] :=
AngularMomentumDensityTensor[ResourceFunction["StressEnergyTensor"][ResourceFunction["MetricTensor"][
metricMatrixRepresentation, coordinates, metricIndex1, metricIndex2], matrixRepresentation, index1, index2],
(Superscript["\[FormalCapitalX]", ToString[#1]] & ) /@ Range[Length[coordinates]], False, False, False] /;
SymbolName[stressEnergyTensor] === "StressEnergyTensor" && SymbolName[metricTensor] === "MetricTensor" &&
Length[Dimensions[metricMatrixRepresentation]] == 2 && Length[coordinates] == Length[metricMatrixRepresentation] &&
BooleanQ[metricIndex1] && BooleanQ[metricIndex2] && Length[Dimensions[matrixRepresentation]] == 2 &&
Length[coordinates] == Length[matrixRepresentation] && BooleanQ[index1] && BooleanQ[index2]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, index1_, index2_], positionVector_List] :=
AngularMomentumDensityTensor[ResourceFunction["StressEnergyTensor"][ResourceFunction["MetricTensor"][
metricMatrixRepresentation, coordinates, metricIndex1, metricIndex2], matrixRepresentation, index1, index2],
positionVector, False, False, False] /; SymbolName[stressEnergyTensor] === "StressEnergyTensor" &&
SymbolName[metricTensor] === "MetricTensor" && Length[Dimensions[metricMatrixRepresentation]] == 2 &&
Length[coordinates] == Length[metricMatrixRepresentation] && BooleanQ[metricIndex1] && BooleanQ[metricIndex2] &&
Length[Dimensions[matrixRepresentation]] == 2 && Length[coordinates] == Length[matrixRepresentation] &&
BooleanQ[index1] && BooleanQ[index2] && Length[coordinates] == Length[positionVector]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_], index1_,
index2_, index3_] := AngularMomentumDensityTensor[ResourceFunction["StressEnergyTensor"][
ResourceFunction["MetricTensor"][metricMatrixRepresentation, coordinates, metricIndex1, metricIndex2],
matrixRepresentation, stressEnergyIndex1, stressEnergyIndex2], (Superscript["\[FormalCapitalX]", ToString[#1]] & ) /@
Range[Length[coordinates]], index1, index2, index3] /; SymbolName[stressEnergyTensor] === "StressEnergyTensor" &&
SymbolName[metricTensor] === "MetricTensor" && Length[Dimensions[metricMatrixRepresentation]] == 2 &&
Length[coordinates] == Length[metricMatrixRepresentation] && BooleanQ[metricIndex1] && BooleanQ[metricIndex2] &&
Length[Dimensions[matrixRepresentation]] == 2 && Length[coordinates] == Length[matrixRepresentation] &&
BooleanQ[stressEnergyIndex1] && BooleanQ[stressEnergyIndex2] && BooleanQ[index1] && BooleanQ[index2] &&
BooleanQ[index3]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_],
positionVector_List, index1_, index2_, index3_]["TensorRepresentation"] :=
Module[{angularMomentumDensityTensor}, angularMomentumDensityTensor =
Normal[SparseArray[(Module[{index = #1}, index -> (coordinates[[index[[1]]]] - positionVector[[index[[1]]]])*
matrixRepresentation[[index[[2]],index[[3]]]] - (coordinates[[index[[2]]]] - positionVector[[index[[2]]]])*
matrixRepresentation[[index[[1]],index[[3]]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]],
3]]]; If[index1 === True && index2 === True && index3 === True,
Normal[SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[index[[1]],#1[[1]]]]*
metricMatrixRepresentation[[index[[2]],#1[[2]]]]*metricMatrixRepresentation[[#1[[3]],index[[3]]]]*
angularMomentumDensityTensor[[#1[[1]],#1[[2]],#1[[3]]]] & ) /@ Tuples[Range[
Length[metricMatrixRepresentation]], 3]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 3]]],
If[index1 === False && index2 === False && index3 === False, angularMomentumDensityTensor,
If[index1 === True && index2 === False && index3 === False,
Normal[SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[index[[1]],#1]]*
angularMomentumDensityTensor[[#1,index[[2]],index[[3]]]] & ) /@ Range[Length[
metricMatrixRepresentation]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 3]]],
If[index1 === False && index2 === True && index3 === False,
Normal[SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[index[[2]],#1]]*
angularMomentumDensityTensor[[index[[1]],#1,index[[3]]]] & ) /@ Range[Length[
metricMatrixRepresentation]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 3]]],
If[index1 === False && index2 === False && index3 === True,
Normal[SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[#1,index[[3]]]]*
angularMomentumDensityTensor[[index[[1]],index[[2]],#1]] & ) /@ Range[Length[
metricMatrixRepresentation]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 3]]],
If[index1 === True && index2 === True && index3 === False,
Normal[SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[index[[1]],#1[[1]]]]*
metricMatrixRepresentation[[index[[2]],#1[[2]]]]*angularMomentumDensityTensor[[#1[[1]],#1[[2]],
index[[3]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 2]]] & ) /@
Tuples[Range[Length[metricMatrixRepresentation]], 3]]], If[index1 === True && index2 === False &&
index3 === True, Normal[SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[
index[[1]],#1[[1]]]]*metricMatrixRepresentation[[#1[[2]],index[[3]]]]*
angularMomentumDensityTensor[[#1[[1]],index[[2]],#1[[2]]]] & ) /@ Tuples[Range[Length[
metricMatrixRepresentation]], 2]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 3]]],
If[index1 === False && index2 === True && index3 === True, Normal[SparseArray[(Module[{index = #1},
index -> Total[(metricMatrixRepresentation[[index[[2]],#1[[1]]]]*metricMatrixRepresentation[[#1[[2]],
index[[3]]]]*angularMomentumDensityTensor[[index[[1]],#1[[1]],#1[[2]]]] & ) /@
Tuples[Range[Length[metricMatrixRepresentation]], 2]]] & ) /@ Tuples[
Range[Length[metricMatrixRepresentation]], 3]]], Indeterminate]]]]]]]]] /;
SymbolName[stressEnergyTensor] === "StressEnergyTensor" && SymbolName[metricTensor] === "MetricTensor" &&
Length[Dimensions[metricMatrixRepresentation]] == 2 && Length[coordinates] == Length[metricMatrixRepresentation] &&
BooleanQ[metricIndex1] && BooleanQ[metricIndex2] && Length[Dimensions[matrixRepresentation]] == 2 &&
Length[coordinates] == Length[matrixRepresentation] && BooleanQ[stressEnergyIndex1] &&
BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] && BooleanQ[index1] &&
BooleanQ[index2] && BooleanQ[index3]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_],
positionVector_List, index1_, index2_, index3_]["ReducedTensorRepresentation"] :=
Module[{angularMomentumDensityTensor}, angularMomentumDensityTensor =
Normal[SparseArray[(Module[{index = #1}, index -> (coordinates[[index[[1]]]] - positionVector[[index[[1]]]])*
matrixRepresentation[[index[[2]],index[[3]]]] - (coordinates[[index[[2]]]] - positionVector[[index[[2]]]])*
matrixRepresentation[[index[[1]],index[[3]]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]],
3]]]; If[index1 === True && index2 === True && index3 === True,
FullSimplify[Normal[SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[index[[1]],
#1[[1]]]]*metricMatrixRepresentation[[index[[2]],#1[[2]]]]*metricMatrixRepresentation[[#1[[3]],
index[[3]]]]*angularMomentumDensityTensor[[#1[[1]],#1[[2]],#1[[3]]]] & ) /@ Tuples[
Range[Length[metricMatrixRepresentation]], 3]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]],
3]]]], If[index1 === False && index2 === False && index3 === False,
FullSimplify[angularMomentumDensityTensor], If[index1 == True && index2 === False && index3 === False,
FullSimplify[Normal[SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[index[[1]],#1]]*
angularMomentumDensityTensor[[#1,index[[2]],index[[3]]]] & ) /@ Range[Length[
metricMatrixRepresentation]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 3]]]],
If[index1 === False && index2 === True && index3 === False, FullSimplify[
Normal[SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[index[[2]],#1]]*
angularMomentumDensityTensor[[index[[1]],#1,index[[3]]]] & ) /@ Range[Length[
metricMatrixRepresentation]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 3]]]],
If[index1 === False && index2 === False && index3 === True, FullSimplify[
Normal[SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[#1,index[[3]]]]*
angularMomentumDensityTensor[[index[[1]],index[[2]],#1]] & ) /@ Range[Length[
metricMatrixRepresentation]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 3]]]],
If[index1 == True && index2 === True && index3 === False, FullSimplify[
Normal[SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[index[[1]],#1[[1]]]]*
metricMatrixRepresentation[[index[[2]],#1[[2]]]]*angularMomentumDensityTensor[[#1[[1]],#1[[2]],
index[[3]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 2]]] & ) /@ Tuples[
Range[Length[metricMatrixRepresentation]], 3]]]], If[index1 === True && index2 === False &&
index3 === True, FullSimplify[Normal[SparseArray[(Module[{index = #1}, index -> Total[
(metricMatrixRepresentation[[index[[1]],#1[[1]]]]*metricMatrixRepresentation[[#1[[2]],index[[3]]]]*
angularMomentumDensityTensor[[#1[[1]],index[[2]],#1[[2]]]] & ) /@ Tuples[Range[Length[
metricMatrixRepresentation]], 2]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]],
3]]]], If[index1 === False && index2 === True && index3 === True, FullSimplify[
Normal[SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[index[[2]],#1[[1]]]]*
metricMatrixRepresentation[[#1[[2]],index[[3]]]]*angularMomentumDensityTensor[[index[[1]],#1[[1]],
#1[[2]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 2]]] & ) /@
Tuples[Range[Length[metricMatrixRepresentation]], 3]]]], Indeterminate]]]]]]]]] /;
SymbolName[stressEnergyTensor] === "StressEnergyTensor" && SymbolName[metricTensor] === "MetricTensor" &&
Length[Dimensions[metricMatrixRepresentation]] == 2 && Length[coordinates] == Length[metricMatrixRepresentation] &&
BooleanQ[metricIndex1] && BooleanQ[metricIndex2] && Length[Dimensions[matrixRepresentation]] == 2 &&
Length[coordinates] == Length[matrixRepresentation] && BooleanQ[stressEnergyIndex1] &&
BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] && BooleanQ[index1] &&
BooleanQ[index2] && BooleanQ[index3]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_],
positionVector_List, index1_, index2_, index3_]["MetricTensor"] :=
ResourceFunction["MetricTensor"][metricMatrixRepresentation, coordinates, metricIndex1, metricIndex2] /;
SymbolName[stressEnergyTensor] === "StressEnergyTensor" && SymbolName[metricTensor] === "MetricTensor" &&
Length[Dimensions[metricMatrixRepresentation]] == 2 && Length[coordinates] == Length[metricMatrixRepresentation] &&
BooleanQ[metricIndex1] && BooleanQ[metricIndex2] && Length[Dimensions[matrixRepresentation]] == 2 &&
Length[coordinates] == Length[matrixRepresentation] && BooleanQ[stressEnergyIndex1] &&
BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] && BooleanQ[index1] &&
BooleanQ[index2] && BooleanQ[index3]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_],
positionVector_List, index1_, index2_, index3_]["StressEnergyTensor"] :=
ResourceFunction["StressEnergyTensor"][ResourceFunction["MetricTensor"][metricMatrixRepresentation, coordinates,
metricIndex1, metricIndex2], matrixRepresentation, stressEnergyIndex1, stressEnergyIndex2] /;
SymbolName[stressEnergyTensor] === "StressEnergyTensor" && SymbolName[metricTensor] === "MetricTensor" &&
Length[Dimensions[metricMatrixRepresentation]] == 2 && Length[coordinates] == Length[metricMatrixRepresentation] &&
BooleanQ[metricIndex1] && BooleanQ[metricIndex2] && Length[Dimensions[matrixRepresentation]] == 2 &&
Length[coordinates] == Length[matrixRepresentation] && BooleanQ[stressEnergyIndex1] &&
BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] && BooleanQ[index1] &&
BooleanQ[index2] && BooleanQ[index3]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_],
positionVector_List, index1_, index2_, index3_]["Coordinates"] :=
coordinates /; SymbolName[stressEnergyTensor] === "StressEnergyTensor" &&
SymbolName[metricTensor] === "MetricTensor" && Length[Dimensions[metricMatrixRepresentation]] == 2 &&
Length[coordinates] == Length[metricMatrixRepresentation] && BooleanQ[metricIndex1] && BooleanQ[metricIndex2] &&
Length[Dimensions[matrixRepresentation]] == 2 && Length[coordinates] == Length[matrixRepresentation] &&
BooleanQ[stressEnergyIndex1] && BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] &&
BooleanQ[index1] && BooleanQ[index2] && BooleanQ[index3]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_],
positionVector_List, index1_, index2_, index3_]["CoordinateOneForms"] :=
(If[Head[#1] === Subscript, Subscript[StringJoin["\[FormalD]", ToString[First[#1]]], ToString[Last[#1]]],
If[Head[#1] === Superscript, Superscript[StringJoin["\[FormalD]", ToString[First[#1]]], ToString[Last[#1]]],
StringJoin["\[FormalD]", ToString[#1]]]] & ) /@ coordinates /; SymbolName[stressEnergyTensor] === "StressEnergyTensor" &&
SymbolName[metricTensor] === "MetricTensor" && Length[Dimensions[metricMatrixRepresentation]] == 2 &&
Length[coordinates] == Length[metricMatrixRepresentation] && BooleanQ[metricIndex1] && BooleanQ[metricIndex2] &&
Length[Dimensions[matrixRepresentation]] == 2 && Length[coordinates] == Length[matrixRepresentation] &&
BooleanQ[stressEnergyIndex1] && BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] &&
BooleanQ[index1] && BooleanQ[index2] && BooleanQ[index3]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_],
positionVector_List, index1_, index2_, index3_]["Indices"] := {index1, index2, index3} /;
SymbolName[stressEnergyTensor] === "StressEnergyTensor" && SymbolName[metricTensor] === "MetricTensor" &&
Length[Dimensions[metricMatrixRepresentation]] == 2 && Length[coordinates] == Length[metricMatrixRepresentation] &&
BooleanQ[metricIndex1] && BooleanQ[metricIndex2] && Length[Dimensions[matrixRepresentation]] == 2 &&
Length[coordinates] == Length[matrixRepresentation] && BooleanQ[stressEnergyIndex1] &&
BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] && BooleanQ[index1] &&
BooleanQ[index2] && BooleanQ[index3]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_],
positionVector_List, index1_, index2_, index3_]["CovariantQ"] :=
If[index1 === True && index2 === True && index3 === True, True, False] /;
SymbolName[stressEnergyTensor] === "StressEnergyTensor" && SymbolName[metricTensor] === "MetricTensor" &&
Length[Dimensions[metricMatrixRepresentation]] == 2 && Length[coordinates] == Length[metricMatrixRepresentation] &&
BooleanQ[metricIndex1] && BooleanQ[metricIndex2] && Length[Dimensions[matrixRepresentation]] == 2 &&
Length[coordinates] == Length[matrixRepresentation] && BooleanQ[stressEnergyIndex1] &&
BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] && BooleanQ[index1] &&
BooleanQ[index2] && BooleanQ[index3]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_],
positionVector_List, index1_, index2_, index3_]["ContravariantQ"] :=
If[index1 === False && index2 === False && index3 === False, True, False] /;
SymbolName[stressEnergyTensor] === "StressEnergyTensor" && SymbolName[metricTensor] === "MetricTensor" &&
Length[Dimensions[metricMatrixRepresentation]] == 2 && Length[coordinates] == Length[metricMatrixRepresentation] &&
BooleanQ[metricIndex1] && BooleanQ[metricIndex2] && Length[Dimensions[matrixRepresentation]] == 2 &&
Length[coordinates] == Length[matrixRepresentation] && BooleanQ[stressEnergyIndex1] &&
BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] && BooleanQ[index1] &&
BooleanQ[index2] && BooleanQ[index3]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_],
positionVector_List, index1_, index2_, index3_]["MixedQ"] :=
If[ !((index1 === True && index2 === True && index3 === True) || (index1 === False && index2 === False &&
index3 === False)), True, False] /; SymbolName[stressEnergyTensor] === "StressEnergyTensor" &&
SymbolName[metricTensor] === "MetricTensor" && Length[Dimensions[metricMatrixRepresentation]] == 2 &&
Length[coordinates] == Length[metricMatrixRepresentation] && BooleanQ[metricIndex1] && BooleanQ[metricIndex2] &&
Length[Dimensions[matrixRepresentation]] == 2 && Length[coordinates] == Length[matrixRepresentation] &&
BooleanQ[stressEnergyIndex1] && BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] &&
BooleanQ[index1] && BooleanQ[index2] && BooleanQ[index3]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_],
positionVector_List, index1_, index2_, index3_]["Symbol"] :=
If[index1 === True && index2 === True && index3 === True, Subscript["\[FormalCapitalM]", "\[FormalRho]\[FormalMu]\[FormalNu]"],
If[index1 === False && index2 === False && index3 === False, Superscript["\[FormalCapitalM]", "\[FormalRho]\[FormalMu]\[FormalNu]"],
If[index1 === True && index2 === False && index3 === False, Subsuperscript["\[FormalCapitalM]", "\[FormalRho]", "\[FormalMu]\[FormalNu]"],
If[index1 === False && index2 === True && index3 === False, Subsuperscript["\[FormalCapitalM]", "\[FormalMu]", "\[FormalRho]\[FormalNu]"],
If[index1 === False && index2 === False && index3 === True, Subsuperscript["\[FormalCapitalM]", "\[FormalNu]", "\[FormalRho]\[FormalMu]"],
If[index1 === True && index2 === True && index3 === False, Subsuperscript["\[FormalCapitalM]", "\[FormalRho]\[FormalMu]", "\[FormalNu]"],
If[index1 === True && index2 === False && index3 === True, Subsuperscript["\[FormalCapitalM]", "\[FormalRho]\[FormalNu]", "\[FormalMu]"],
If[index1 === False && index2 === True && index3 === True, Subsuperscript["\[FormalCapitalM]", "\[FormalMu]\[FormalNu]", "\[FormalRho]"],
Indeterminate]]]]]]]] /; SymbolName[stressEnergyTensor] === "StressEnergyTensor" &&
SymbolName[metricTensor] === "MetricTensor" && Length[Dimensions[metricMatrixRepresentation]] == 2 &&
Length[coordinates] == Length[metricMatrixRepresentation] && BooleanQ[metricIndex1] && BooleanQ[metricIndex2] &&
Length[Dimensions[matrixRepresentation]] == 2 && Length[coordinates] == Length[matrixRepresentation] &&
BooleanQ[stressEnergyIndex1] && BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] &&
BooleanQ[index1] && BooleanQ[index2] && BooleanQ[index3]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_],
positionVector_List, index1_, index2_, index3_]["VanishingAngularMomentumDensityQ"] :=
Module[{angularMomentumDensityTensor, fieldEquations},
angularMomentumDensityTensor = Normal[SparseArray[
(Module[{index = #1}, index -> (coordinates[[index[[1]]]] - positionVector[[index[[1]]]])*
matrixRepresentation[[index[[2]],index[[3]]]] - (coordinates[[index[[2]]]] - positionVector[[index[[2]]]])*
matrixRepresentation[[index[[1]],index[[3]]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]],
3]]]; fieldEquations = FullSimplify[Thread[Catenate[Catenate[angularMomentumDensityTensor]] ==
Catenate[Catenate[ConstantArray[0, {Length[metricMatrixRepresentation], Length[metricMatrixRepresentation],
Length[metricMatrixRepresentation]}]]]]]; If[fieldEquations === True, True,
If[fieldEquations === False, False, If[Length[Select[fieldEquations, #1 === True & ]] ==
Length[metricMatrixRepresentation]*Length[metricMatrixRepresentation]*Length[metricMatrixRepresentation], True,
False]]]] /; SymbolName[stressEnergyTensor] === "StressEnergyTensor" &&
SymbolName[metricTensor] === "MetricTensor" && Length[Dimensions[metricMatrixRepresentation]] == 2 &&
Length[coordinates] == Length[metricMatrixRepresentation] && BooleanQ[metricIndex1] && BooleanQ[metricIndex2] &&
Length[Dimensions[matrixRepresentation]] == 2 && Length[coordinates] == Length[matrixRepresentation] &&
BooleanQ[stressEnergyIndex1] && BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] &&
BooleanQ[index1] && BooleanQ[index2] && BooleanQ[index3]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_],
positionVector_List, index1_, index2_, index3_]["VanishingAngularMomentumDensityConditions"] :=
Module[{angularMomentumDensityTensor, fieldEquations},
angularMomentumDensityTensor = Normal[SparseArray[
(Module[{index = #1}, index -> (coordinates[[index[[1]]]] - positionVector[[index[[1]]]])*
matrixRepresentation[[index[[2]],index[[3]]]] - (coordinates[[index[[2]]]] - positionVector[[index[[2]]]])*
matrixRepresentation[[index[[1]],index[[3]]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]],
3]]]; fieldEquations = FullSimplify[Thread[Catenate[Catenate[angularMomentumDensityTensor]] ==
Catenate[Catenate[ConstantArray[0, {Length[metricMatrixRepresentation], Length[metricMatrixRepresentation],
Length[metricMatrixRepresentation]}]]]]]; If[fieldEquations === True, {},
If[fieldEquations === False, Indeterminate, If[Length[Select[fieldEquations, #1 === False & ]] > 0, Indeterminate,
DeleteDuplicates[Reverse /@ Sort /@ Select[fieldEquations, #1 =!= True & ]]]]]] /;
SymbolName[stressEnergyTensor] === "StressEnergyTensor" && SymbolName[metricTensor] === "MetricTensor" &&
Length[Dimensions[metricMatrixRepresentation]] == 2 && Length[coordinates] == Length[metricMatrixRepresentation] &&
BooleanQ[metricIndex1] && BooleanQ[metricIndex2] && Length[Dimensions[matrixRepresentation]] == 2 &&
Length[coordinates] == Length[matrixRepresentation] && BooleanQ[stressEnergyIndex1] &&
BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] && BooleanQ[index1] &&
BooleanQ[index2] && BooleanQ[index3]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_],
positionVector_List, index1_, index2_, index3_]["IndexContractions"] :=
Module[{angularMomentumDensityTensor, newAngularMomentumDensityTensor},
angularMomentumDensityTensor = Normal[SparseArray[
(Module[{index = #1}, index -> (coordinates[[index[[1]]]] - positionVector[[index[[1]]]])*
matrixRepresentation[[index[[2]],index[[3]]]] - (coordinates[[index[[2]]]] - positionVector[[index[[2]]]])*
matrixRepresentation[[index[[1]],index[[3]]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]],
3]]]; If[(index1 === True && index2 === True && index3 === True) || (index1 === False && index2 === False &&
index3 === False), Association[], If[index1 === True && index2 === False && index3 === False,
newAngularMomentumDensityTensor = Normal[SparseArray[
(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[index[[1]],#1]]*
angularMomentumDensityTensor[[#1,index[[2]],index[[3]]]] & ) /@ Range[Length[
metricMatrixRepresentation]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 3]]];
Association[Subsuperscript["\[FormalCapitalM]", "\[FormalSigma]", "\[FormalSigma]\[FormalNu]"] ->
(Module[{index = #1}, Total[(newAngularMomentumDensityTensor[[#1,#1,index]] & ) /@ Range[
Length[metricMatrixRepresentation]]]] & ) /@ Range[Length[metricMatrixRepresentation]],
Subsuperscript["\[FormalCapitalM]", "\[FormalSigma]", "\[FormalMu]\[FormalSigma]"] -> (Module[{index = #1}, Total[(newAngularMomentumDensityTensor[[#1,index,
#1]] & ) /@ Range[Length[metricMatrixRepresentation]]]] & ) /@
Range[Length[metricMatrixRepresentation]]], If[index1 === False && index2 === True && index3 === False,
newAngularMomentumDensityTensor = Normal[SparseArray[(Module[{index = #1}, index ->
Total[(metricMatrixRepresentation[[index[[2]],#1]]*angularMomentumDensityTensor[[index[[1]],#1,
index[[3]]]] & ) /@ Range[Length[metricMatrixRepresentation]]]] & ) /@
Tuples[Range[Length[metricMatrixRepresentation]], 3]]];
Association[Subsuperscript["\[FormalCapitalM]", "\[FormalSigma]", "\[FormalSigma]\[FormalNu]"] ->
(Module[{index = #1}, Total[(newAngularMomentumDensityTensor[[#1,#1,index]] & ) /@
Range[Length[metricMatrixRepresentation]]]] & ) /@ Range[Length[metricMatrixRepresentation]],
Subsuperscript["\[FormalCapitalM]", "\[FormalSigma]", "\[FormalRho]\[FormalSigma]"] -> (Module[{index = #1}, Total[(newAngularMomentumDensityTensor[[index,
#1,#1]] & ) /@ Range[Length[metricMatrixRepresentation]]]] & ) /@
Range[Length[metricMatrixRepresentation]]], If[index1 === False && index2 === False && index3 === True,
newAngularMomentumDensityTensor = Normal[SparseArray[(Module[{index = #1}, index ->
Total[(metricMatrixRepresentation[[#1,index[[3]]]]*angularMomentumDensityTensor[[index[[1]],index[[2]],
#1]] & ) /@ Range[Length[metricMatrixRepresentation]]]] & ) /@ Tuples[Range[
Length[metricMatrixRepresentation]], 3]]]; Association[Subsuperscript["\[FormalCapitalM]", "\[FormalSigma]", "\[FormalSigma]\[FormalMu]"] ->
(Module[{index = #1}, Total[(newAngularMomentumDensityTensor[[#1,index,#1]] & ) /@
Range[Length[metricMatrixRepresentation]]]] & ) /@ Range[Length[metricMatrixRepresentation]],
Subsuperscript["\[FormalCapitalM]", "\[FormalSigma]", "\[FormalRho]\[FormalSigma]"] -> (Module[{index = #1}, Total[(newAngularMomentumDensityTensor[[index,
#1,#1]] & ) /@ Range[Length[metricMatrixRepresentation]]]] & ) /@
Range[Length[metricMatrixRepresentation]]], If[index1 === True && index2 === True && index3 === False,
newAngularMomentumDensityTensor = Normal[SparseArray[(Module[{index = #1}, index ->
Total[(metricMatrixRepresentation[[index[[1]],#1[[1]]]]*metricMatrixRepresentation[[index[[2]],
#1[[2]]]]*angularMomentumDensityTensor[[#1[[1]],#1[[2]],index[[3]]]] & ) /@
Tuples[Range[Length[metricMatrixRepresentation]], 2]]] & ) /@ Tuples[
Range[Length[metricMatrixRepresentation]], 3]]]; Association[Subsuperscript["\[FormalCapitalM]", "\[FormalSigma]\[FormalMu]", "\[FormalSigma]"] ->
(Module[{index = #1}, Total[(newAngularMomentumDensityTensor[[#1,index,#1]] & ) /@
Range[Length[metricMatrixRepresentation]]]] & ) /@ Range[Length[metricMatrixRepresentation]],
Subsuperscript["\[FormalCapitalM]", "\[FormalRho]\[FormalSigma]", "\[FormalSigma]"] -> (Module[{index = #1}, Total[(newAngularMomentumDensityTensor[[index,
#1,#1]] & ) /@ Range[Length[metricMatrixRepresentation]]]] & ) /@ Range[Length[
metricMatrixRepresentation]]], If[index1 === True && index2 === False && index3 === True,
newAngularMomentumDensityTensor = Normal[SparseArray[(Module[{index = #1}, index ->
Total[(metricMatrixRepresentation[[index[[1]],#1[[1]]]]*metricMatrixRepresentation[[#1[[2]],
index[[3]]]]*angularMomentumDensityTensor[[#1[[1]],index[[2]],#1[[2]]]] & ) /@
Tuples[Range[Length[metricMatrixRepresentation]], 2]]] & ) /@ Tuples[
Range[Length[metricMatrixRepresentation]], 3]]]; Association[Subsuperscript["\[FormalCapitalM]", "\[FormalSigma]\[FormalNu]", "\[FormalSigma]"] ->
(Module[{index = #1}, Total[(newAngularMomentumDensityTensor[[#1,#1,index]] & ) /@
Range[Length[metricMatrixRepresentation]]]] & ) /@ Range[Length[metricMatrixRepresentation]],
Subsuperscript["\[FormalCapitalM]", "\[FormalRho]\[FormalSigma]", "\[FormalSigma]"] -> (Module[{index = #1}, Total[(newAngularMomentumDensityTensor[[
index,#1,#1]] & ) /@ Range[Length[metricMatrixRepresentation]]]] & ) /@ Range[
Length[metricMatrixRepresentation]]], If[index1 === False && index2 === True && index3 === True,
newAngularMomentumDensityTensor = Normal[SparseArray[(Module[{index = #1}, index -> Total[
(metricMatrixRepresentation[[index[[2]],#1[[1]]]]*metricMatrixRepresentation[[#1[[2]],index[[3]]]]*
angularMomentumDensityTensor[[index[[1]],#1[[1]],#1[[2]]]] & ) /@ Tuples[Range[Length[
metricMatrixRepresentation]], 2]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]],
3]]]; Association[Subsuperscript["\[FormalCapitalM]", "\[FormalSigma]\[FormalNu]", "\[FormalSigma]"] -> (Module[{index = #1},
Total[(newAngularMomentumDensityTensor[[#1,#1,index]] & ) /@ Range[Length[
metricMatrixRepresentation]]]] & ) /@ Range[Length[metricMatrixRepresentation]],
Subsuperscript["\[FormalCapitalM]", "\[FormalMu]\[FormalSigma]", "\[FormalSigma]"] -> (Module[{index = #1}, Total[(newAngularMomentumDensityTensor[[#1,
index,#1]] & ) /@ Range[Length[metricMatrixRepresentation]]]] & ) /@
Range[Length[metricMatrixRepresentation]]], Indeterminate]]]]]]]] /;
SymbolName[stressEnergyTensor] === "StressEnergyTensor" && SymbolName[metricTensor] === "MetricTensor" &&
Length[Dimensions[metricMatrixRepresentation]] == 2 && Length[coordinates] == Length[metricMatrixRepresentation] &&
BooleanQ[metricIndex1] && BooleanQ[metricIndex2] && Length[Dimensions[matrixRepresentation]] == 2 &&
Length[coordinates] == Length[matrixRepresentation] && BooleanQ[stressEnergyIndex1] &&
BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] && BooleanQ[index1] &&
BooleanQ[index2] && BooleanQ[index3]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_],
positionVector_List, index1_, index2_, index3_]["ReducedIndexContractions"] :=
Module[{angularMomentumDensityTensor, newAngularMomentumDensityTensor},
angularMomentumDensityTensor = Normal[SparseArray[
(Module[{index = #1}, index -> (coordinates[[index[[1]]]] - positionVector[[index[[1]]]])*
matrixRepresentation[[index[[2]],index[[3]]]] - (coordinates[[index[[2]]]] - positionVector[[index[[2]]]])*
matrixRepresentation[[index[[1]],index[[3]]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]],
3]]]; If[(index1 === True && index2 === True && index3 === True) || (index1 === False && index2 === False &&
index3 === False), Association[], If[index1 === True && index2 === False && index3 === False,
newAngularMomentumDensityTensor = Normal[SparseArray[
(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[index[[1]],#1]]*
angularMomentumDensityTensor[[#1,index[[2]],index[[3]]]] & ) /@ Range[Length[
metricMatrixRepresentation]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 3]]];
Association[Subsuperscript["\[FormalCapitalM]", "\[FormalSigma]", "\[FormalSigma]\[FormalNu]"] -> FullSimplify[
(Module[{index = #1}, Total[(newAngularMomentumDensityTensor[[#1,#1,index]] & ) /@
Range[Length[metricMatrixRepresentation]]]] & ) /@ Range[Length[metricMatrixRepresentation]]],
Subsuperscript["\[FormalCapitalM]", "\[FormalSigma]", "\[FormalMu]\[FormalSigma]"] -> FullSimplify[
(Module[{index = #1}, Total[(newAngularMomentumDensityTensor[[#1,index,#1]] & ) /@
Range[Length[metricMatrixRepresentation]]]] & ) /@ Range[Length[metricMatrixRepresentation]]]],
If[index1 === False && index2 === True && index3 === False, newAngularMomentumDensityTensor =
Normal[SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[index[[2]],#1]]*
angularMomentumDensityTensor[[index[[1]],#1,index[[3]]]] & ) /@ Range[Length[
metricMatrixRepresentation]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 3]]];
Association[Subsuperscript["\[FormalCapitalM]", "\[FormalSigma]", "\[FormalSigma]\[FormalNu]"] -> FullSimplify[
(Module[{index = #1}, Total[(newAngularMomentumDensityTensor[[#1,#1,index]] & ) /@
Range[Length[metricMatrixRepresentation]]]] & ) /@ Range[Length[metricMatrixRepresentation]]],
Subsuperscript["\[FormalCapitalM]", "\[FormalSigma]", "\[FormalRho]\[FormalSigma]"] -> FullSimplify[(Module[{index = #1}, Total[
(newAngularMomentumDensityTensor[[index,#1,#1]] & ) /@ Range[Length[metricMatrixRepresentation]]]] & ) /@
Range[Length[metricMatrixRepresentation]]]], If[index1 === False && index2 === False && index3 === True,
newAngularMomentumDensityTensor = Normal[SparseArray[(Module[{index = #1}, index ->
Total[(metricMatrixRepresentation[[#1,index[[3]]]]*angularMomentumDensityTensor[[index[[1]],index[[2]],
#1]] & ) /@ Range[Length[metricMatrixRepresentation]]]] & ) /@ Tuples[Range[
Length[metricMatrixRepresentation]], 3]]]; Association[Subsuperscript["\[FormalCapitalM]", "\[FormalSigma]", "\[FormalSigma]\[FormalMu]"] ->
FullSimplify[(Module[{index = #1}, Total[(newAngularMomentumDensityTensor[[#1,index,#1]] & ) /@
Range[Length[metricMatrixRepresentation]]]] & ) /@ Range[Length[metricMatrixRepresentation]]],
Subsuperscript["\[FormalCapitalM]", "\[FormalSigma]", "\[FormalRho]\[FormalSigma]"] -> FullSimplify[(Module[{index = #1},
Total[(newAngularMomentumDensityTensor[[index,#1,#1]] & ) /@ Range[Length[
metricMatrixRepresentation]]]] & ) /@ Range[Length[metricMatrixRepresentation]]]],
If[index1 === True && index2 === True && index3 === False, newAngularMomentumDensityTensor =
Normal[SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[index[[1]],#1[[1]]]]*
metricMatrixRepresentation[[index[[2]],#1[[2]]]]*angularMomentumDensityTensor[[#1[[1]],#1[[2]],
index[[3]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 2]]] & ) /@ Tuples[
Range[Length[metricMatrixRepresentation]], 3]]]; Association[Subsuperscript["\[FormalCapitalM]", "\[FormalSigma]\[FormalMu]", "\[FormalSigma]"] ->
FullSimplify[(Module[{index = #1}, Total[(newAngularMomentumDensityTensor[[#1,index,#1]] & ) /@
Range[Length[metricMatrixRepresentation]]]] & ) /@ Range[Length[metricMatrixRepresentation]]],
Subsuperscript["\[FormalCapitalM]", "\[FormalRho]\[FormalSigma]", "\[FormalSigma]"] -> FullSimplify[(Module[{index = #1},
Total[(newAngularMomentumDensityTensor[[index,#1,#1]] & ) /@ Range[Length[
metricMatrixRepresentation]]]] & ) /@ Range[Length[metricMatrixRepresentation]]]],
If[index1 === True && index2 === False && index3 === True, newAngularMomentumDensityTensor =
Normal[SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[index[[1]],#1[[1]]]]*
metricMatrixRepresentation[[#1[[2]],index[[3]]]]*angularMomentumDensityTensor[[#1[[1]],index[[2]],
#1[[2]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 2]]] & ) /@
Tuples[Range[Length[metricMatrixRepresentation]], 3]]]; Association[
Subsuperscript["\[FormalCapitalM]", "\[FormalSigma]\[FormalNu]", "\[FormalSigma]"] -> FullSimplify[(Module[{index = #1}, Total[
(newAngularMomentumDensityTensor[[#1,#1,index]] & ) /@ Range[Length[
metricMatrixRepresentation]]]] & ) /@ Range[Length[metricMatrixRepresentation]]],
Subsuperscript["\[FormalCapitalM]", "\[FormalRho]\[FormalSigma]", "\[FormalSigma]"] -> FullSimplify[(Module[{index = #1}, Total[
(newAngularMomentumDensityTensor[[index,#1,#1]] & ) /@ Range[Length[
metricMatrixRepresentation]]]] & ) /@ Range[Length[metricMatrixRepresentation]]]],
If[index1 === False && index2 === True && index3 === True, newAngularMomentumDensityTensor =
Normal[SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[index[[2]],#1[[1]]]]*
metricMatrixRepresentation[[#1[[2]],index[[3]]]]*angularMomentumDensityTensor[[index[[1]],#1[[1]],
#1[[2]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 2]]] & ) /@
Tuples[Range[Length[metricMatrixRepresentation]], 3]]]; Association[Subsuperscript["\[FormalCapitalM]", "\[FormalSigma]\[FormalNu]",
"\[FormalSigma]"] -> FullSimplify[(Module[{index = #1}, Total[(newAngularMomentumDensityTensor[[#1,#1,index]] & ) /@
Range[Length[metricMatrixRepresentation]]]] & ) /@ Range[Length[metricMatrixRepresentation]]],
Subsuperscript["\[FormalCapitalM]", "\[FormalMu]\[FormalSigma]", "\[FormalSigma]"] -> FullSimplify[(Module[{index = #1}, Total[
(newAngularMomentumDensityTensor[[#1,index,#1]] & ) /@ Range[Length[
metricMatrixRepresentation]]]] & ) /@ Range[Length[metricMatrixRepresentation]]]],
Indeterminate]]]]]]]] /; SymbolName[stressEnergyTensor] === "StressEnergyTensor" &&
SymbolName[metricTensor] === "MetricTensor" && Length[Dimensions[metricMatrixRepresentation]] == 2 &&
Length[coordinates] == Length[metricMatrixRepresentation] && BooleanQ[metricIndex1] && BooleanQ[metricIndex2] &&
Length[Dimensions[matrixRepresentation]] == 2 && Length[coordinates] == Length[matrixRepresentation] &&
BooleanQ[stressEnergyIndex1] && BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] &&
BooleanQ[index1] && BooleanQ[index2] && BooleanQ[index3]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_],
positionVector_List, index1_, index2_, index3_]["CovariantDerivatives"] :=
Module[{newMetricMatrixRepresentation, newCoordinates, newMatrixRepresentation, newPositionVector, christoffelSymbols,
angularMomentumDensityTensor, newAngularMomentumDensityTensor},
newMetricMatrixRepresentation = metricMatrixRepresentation /. (#1 -> ToExpression[#1] & ) /@
Select[coordinates, StringQ]; newCoordinates = coordinates /. (#1 -> ToExpression[#1] & ) /@
Select[coordinates, StringQ]; newMatrixRepresentation = matrixRepresentation /.
(#1 -> ToExpression[#1] & ) /@ Select[coordinates, StringQ]; newPositionVector =
positionVector /. (#1 -> ToExpression[#1] & ) /@ Select[coordinates, StringQ];
christoffelSymbols = Normal[SparseArray[
(Module[{index = #1}, index -> Total[((1/2)*Inverse[newMetricMatrixRepresentation][[index[[1]],#1]]*
(D[newMetricMatrixRepresentation[[#1,index[[3]]]], newCoordinates[[index[[2]]]]] +
D[newMetricMatrixRepresentation[[index[[2]],#1]], newCoordinates[[index[[3]]]]] -
D[newMetricMatrixRepresentation[[index[[2]],index[[3]]]], newCoordinates[[#1]]]) & ) /@
Range[Length[newMetricMatrixRepresentation]]]] & ) /@ Tuples[Range[Length[newMetricMatrixRepresentation]],
3]]]; angularMomentumDensityTensor =
Normal[SparseArray[(Module[{index = #1}, index -> (newCoordinates[[index[[1]]]] - newPositionVector[[index[[1]]]])*
newMatrixRepresentation[[index[[2]],index[[3]]]] - (newCoordinates[[index[[2]]]] - newPositionVector[[
index[[2]]]])*newMatrixRepresentation[[index[[1]],index[[3]]]]] & ) /@
Tuples[Range[Length[newMetricMatrixRepresentation]], 3]]];
If[index1 === True && index2 === True && index3 === True,
newAngularMomentumDensityTensor = Normal[SparseArray[
(Module[{index = #1}, index -> Total[(newMetricMatrixRepresentation[[index[[1]],#1[[1]]]]*
newMetricMatrixRepresentation[[index[[2]],#1[[2]]]]*newMetricMatrixRepresentation[[#1[[3]],index[[3]]]]*
angularMomentumDensityTensor[[#1[[1]],#1[[2]],#1[[3]]]] & ) /@ Tuples[Range[Length[
newMetricMatrixRepresentation]], 3]]] & ) /@ Tuples[Range[Length[newMetricMatrixRepresentation]],
3]]]; Association[(Module[{index = #1}, StringJoin[ToString[Subscript["\[Del]", ToString[newCoordinates[[
index[[1]]]], StandardForm]], StandardForm], ToString[Subscript["\[FormalCapitalM]", StringJoin[
ToString[newCoordinates[[index[[2]]]], StandardForm], ToString[newCoordinates[[index[[3]]]],
StandardForm], ToString[newCoordinates[[index[[4]]]], StandardForm]]], StandardForm]] ->
D[newAngularMomentumDensityTensor[[index[[2]],index[[3]],index[[4]]]], newCoordinates[[index[[1]]]]] -
Total[(christoffelSymbols[[#1,index[[1]],index[[2]]]]*newAngularMomentumDensityTensor[[#1,index[[3]],
index[[4]]]] & ) /@ Range[Length[newMetricMatrixRepresentation]]] -
Total[(christoffelSymbols[[#1,index[[1]],index[[3]]]]*newAngularMomentumDensityTensor[[index[[2]],#1,
index[[4]]]] & ) /@ Range[Length[newMetricMatrixRepresentation]]] -
Total[(christoffelSymbols[[#1,index[[1]],index[[4]]]]*newAngularMomentumDensityTensor[[index[[2]],
index[[3]],#1]] & ) /@ Range[Length[newMetricMatrixRepresentation]]]] & ) /@
Tuples[Range[Length[newMetricMatrixRepresentation]], 4] /. (ToExpression[#1] -> #1 & ) /@
Select[coordinates, StringQ]], If[index1 === False && index2 === False && index3 === False,
newAngularMomentumDensityTensor = angularMomentumDensityTensor;
Association[(Module[{index = #1}, StringJoin[ToString[Subscript["\[Del]", ToString[newCoordinates[[index[[1]]]],
StandardForm]], StandardForm], ToString[Superscript["\[FormalCapitalM]", StringJoin[ToString[newCoordinates[[
index[[2]]]], StandardForm], ToString[newCoordinates[[index[[3]]]], StandardForm],
ToString[newCoordinates[[index[[4]]]], StandardForm]]], StandardForm]] ->
D[newAngularMomentumDensityTensor[[index[[2]],index[[3]],index[[4]]]], newCoordinates[[index[[1]]]]] +
Total[(christoffelSymbols[[index[[2]],index[[1]],#1]]*newAngularMomentumDensityTensor[[#1,index[[3]],
index[[4]]]] & ) /@ Range[Length[newMetricMatrixRepresentation]]] + Total[
(christoffelSymbols[[index[[3]],index[[1]],#1]]*newAngularMomentumDensityTensor[[index[[2]],#1,
index[[4]]]] & ) /@ Range[Length[newMetricMatrixRepresentation]]] + Total[
(christoffelSymbols[[index[[4]],index[[1]],#1]]*newAngularMomentumDensityTensor[[index[[2]],index[[3]],
#1]] & ) /@ Range[Length[newMetricMatrixRepresentation]]]] & ) /@
Tuples[Range[Length[newMetricMatrixRepresentation]], 4] /. (ToExpression[#1] -> #1 & ) /@
Select[coordinates, StringQ]], If[index1 === True && index2 === False && index3 === False,
newAngularMomentumDensityTensor = Normal[SparseArray[(Module[{index = #1}, index ->
Total[(newMetricMatrixRepresentation[[index[[1]],#1]]*angularMomentumDensityTensor[[#1,index[[2]],
index[[3]]]] & ) /@ Range[Length[newMetricMatrixRepresentation]]]] & ) /@
Tuples[Range[Length[newMetricMatrixRepresentation]], 3]]];
Association[(Module[{index = #1}, StringJoin[ToString[Subscript["\[Del]", ToString[newCoordinates[[index[[1]]]],
StandardForm]], StandardForm], ToString[Subsuperscript["\[FormalCapitalM]", ToString[newCoordinates[[index[[2]]]],
StandardForm], StringJoin[ToString[newCoordinates[[index[[3]]]], StandardForm], ToString[
newCoordinates[[index[[4]]]], StandardForm]]], StandardForm]] -> D[newAngularMomentumDensityTensor[[
index[[2]],index[[3]],index[[4]]]], newCoordinates[[index[[1]]]]] +
Total[(christoffelSymbols[[index[[3]],index[[1]],#1]]*newAngularMomentumDensityTensor[[index[[2]],#1,
index[[4]]]] & ) /@ Range[Length[newMetricMatrixRepresentation]]] +
Total[(christoffelSymbols[[index[[4]],index[[1]],#1]]*newAngularMomentumDensityTensor[[index[[2]],
index[[3]],#1]] & ) /@ Range[Length[newMetricMatrixRepresentation]]] -
Total[(christoffelSymbols[[#1,index[[1]],index[[2]]]]*newAngularMomentumDensityTensor[[#1,index[[3]],
index[[4]]]] & ) /@ Range[Length[newMetricMatrixRepresentation]]]] & ) /@
Tuples[Range[Length[newMetricMatrixRepresentation]], 4] /. (ToExpression[#1] -> #1 & ) /@
Select[coordinates, StringQ]], If[index1 === False && index2 === True && index3 === False,
newAngularMomentumDensityTensor = Normal[SparseArray[(Module[{index = #1}, index ->
Total[(newMetricMatrixRepresentation[[index[[2]],#1]]*angularMomentumDensityTensor[[index[[1]],#1,
index[[3]]]] & ) /@ Range[Length[newMetricMatrixRepresentation]]]] & ) /@
Tuples[Range[Length[newMetricMatrixRepresentation]], 3]]];
Association[(Module[{index = #1}, StringJoin[ToString[Subscript["\[Del]", ToString[newCoordinates[[index[[1]]]],
StandardForm]], StandardForm], ToString[Subsuperscript["\[FormalCapitalM]", ToString[newCoordinates[[index[[3]]]],
StandardForm], StringJoin[ToString[newCoordinates[[index[[2]]]], StandardForm], ToString[
newCoordinates[[index[[4]]]], StandardForm]]], StandardForm]] -> D[newAngularMomentumDensityTensor[[
index[[2]],index[[3]],index[[4]]]], newCoordinates[[index[[1]]]]] + Total[
(christoffelSymbols[[index[[2]],index[[1]],#1]]*newAngularMomentumDensityTensor[[#1,index[[3]],
index[[4]]]] & ) /@ Range[Length[newMetricMatrixRepresentation]]] +
Total[(christoffelSymbols[[index[[4]],index[[1]],#1]]*newAngularMomentumDensityTensor[[index[[2]],
index[[3]],#1]] & ) /@ Range[Length[newMetricMatrixRepresentation]]] -
Total[(christoffelSymbols[[#1,index[[1]],index[[3]]]]*newAngularMomentumDensityTensor[[index[[2]],#1,
index[[4]]]] & ) /@ Range[Length[newMetricMatrixRepresentation]]]] & ) /@
Tuples[Range[Length[newMetricMatrixRepresentation]], 4] /. (ToExpression[#1] -> #1 & ) /@
Select[coordinates, StringQ]]]]]]] /; SymbolName[stressEnergyTensor] === "StressEnergyTensor" &&
SymbolName[metricTensor] === "MetricTensor" && Length[Dimensions[metricMatrixRepresentation]] == 2 &&
Length[coordinates] == Length[metricMatrixRepresentation] && BooleanQ[metricIndex1] && BooleanQ[metricIndex2] &&
Length[Dimensions[matrixRepresentation]] == 2 && Length[coordinates] == Length[matrixRepresentation] &&
BooleanQ[stressEnergyIndex1] && BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] &&
BooleanQ[index1] && BooleanQ[index2] && BooleanQ[index3]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_],
positionVector_List, index1_, index2_, index3_]["ContinuityEquations"] :=
Module[{newMetricMatrixRepresentation, newCoordinates, newMatrixRepresentation, newPositionVector, christoffelSymbols,
angularMomentumDensityTensor}, newMetricMatrixRepresentation = metricMatrixRepresentation /.
(#1 -> ToExpression[#1] & ) /@ Select[coordinates, StringQ];
newCoordinates = coordinates /. (#1 -> ToExpression[#1] & ) /@ Select[coordinates, StringQ];
newMatrixRepresentation = matrixRepresentation /. (#1 -> ToExpression[#1] & ) /@ Select[coordinates, StringQ];
newPositionVector = positionVector /. (#1 -> ToExpression[#1] & ) /@ Select[coordinates, StringQ];
christoffelSymbols = Normal[SparseArray[
(Module[{index = #1}, index -> Total[((1/2)*Inverse[newMetricMatrixRepresentation][[index[[1]],#1]]*
(D[newMetricMatrixRepresentation[[#1,index[[3]]]], newCoordinates[[index[[2]]]]] +
D[newMetricMatrixRepresentation[[index[[2]],#1]], newCoordinates[[index[[3]]]]] -
D[newMetricMatrixRepresentation[[index[[2]],index[[3]]]], newCoordinates[[#1]]]) & ) /@
Range[Length[newMetricMatrixRepresentation]]]] & ) /@ Tuples[Range[Length[newMetricMatrixRepresentation]],
3]]]; angularMomentumDensityTensor =
Normal[SparseArray[(Module[{index = #1}, index -> (newCoordinates[[index[[1]]]] - newPositionVector[[index[[1]]]])*
newMatrixRepresentation[[index[[2]],index[[3]]]] - (newCoordinates[[index[[2]]]] - newPositionVector[[
index[[2]]]])*newMatrixRepresentation[[index[[1]],index[[3]]]]] & ) /@
Tuples[Range[Length[newMetricMatrixRepresentation]], 3]]];
(Module[{index = #1}, Total[(D[angularMomentumDensityTensor[[First[index],Last[index],#1]], newCoordinates[[
#1]]] & ) /@ Range[Length[newMetricMatrixRepresentation]]] +
Total[(christoffelSymbols[[First[index],First[#1],Last[#1]]]*angularMomentumDensityTensor[[Last[#1],
Last[index],First[#1]]] & ) /@ Tuples[Range[Length[newMetricMatrixRepresentation]], 2]] +
Total[(christoffelSymbols[[Last[index],First[#1],Last[#1]]]*angularMomentumDensityTensor[[First[index],
Last[#1],First[#1]]] & ) /@ Tuples[Range[Length[newMetricMatrixRepresentation]], 2]] +
Total[(christoffelSymbols[[First[#1],First[#1],Last[#1]]]*angularMomentumDensityTensor[[First[index],
Last[index],Last[#1]]] & ) /@ Tuples[Range[Length[newMetricMatrixRepresentation]], 2]] == 0] & ) /@
Tuples[Range[Length[newMetricMatrixRepresentation]], 2] /. (ToExpression[#1] -> #1 & ) /@
Select[coordinates, StringQ]] /; SymbolName[stressEnergyTensor] === "StressEnergyTensor" &&
SymbolName[metricTensor] === "MetricTensor" && Length[Dimensions[metricMatrixRepresentation]] == 2 &&
Length[coordinates] == Length[metricMatrixRepresentation] && BooleanQ[metricIndex1] && BooleanQ[metricIndex2] &&
Length[Dimensions[matrixRepresentation]] == 2 && Length[coordinates] == Length[matrixRepresentation] &&
BooleanQ[stressEnergyIndex1] && BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] &&
BooleanQ[index1] && BooleanQ[index2] && BooleanQ[index3]
AngularMomentumDensityTensor[(stressEnergyTensor_)[(metricTensor_)[metricMatrixRepresentation_List, coordinates_List,
metricIndex1_, metricIndex2_], matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_],
positionVector_List, index1_, index2_, index3_]["ReducedContinuityEquations"] :=
Module[{newMetricMatrixRepresentation, newCoordinates, newMatrixRepresentation, newPositionVector, christoffelSymbols,
angularMomentumDensityTensor}, newMetricMatrixRepresentation = metricMatrixRepresentation /.
(#1 -> ToExpression[#1] & ) /@ Select[coordinates, StringQ];
newCoordinates = coordinates /. (#1 -> ToExpression[#1] & ) /@ Select[coordinates, StringQ];
newMatrixRepresentation = matrixRepresentation /. (#1 -> ToExpression[#1] & ) /@ Select[coordinates, StringQ];
newPositionVector = positionVector /. (#1 -> ToExpression[#1] & ) /@ Select[coordinates, StringQ];
christoffelSymbols = Normal[SparseArray[
(Module[{index = #1}, index -> Total[((1/2)*Inverse[newMetricMatrixRepresentation][[index[[1]],#1]]*
(D[newMetricMatrixRepresentation[[#1,index[[3]]]], newCoordinates[[index[[2]]]]] +
D[newMetricMatrixRepresentation[[index[[2]],#1]], newCoordinates[[index[[3]]]]] -
D[newMetricMatrixRepresentation[[index[[2]],index[[3]]]], newCoordinates[[#1]]]) & ) /@
Range[Length[newMetricMatrixRepresentation]]]] & ) /@ Tuples[Range[Length[newMetricMatrixRepresentation]],
3]]]; angularMomentumDensityTensor =
Normal[SparseArray[(Module[{index = #1}, index -> (newCoordinates[[index[[1]]]] - newPositionVector[[index[[1]]]])*
newMatrixRepresentation[[index[[2]],index[[3]]]] - (newCoordinates[[index[[2]]]] - newPositionVector[[
index[[2]]]])*newMatrixRepresentation[[index[[1]],index[[3]]]]] & ) /@
Tuples[Range[Length[newMetricMatrixRepresentation]], 3]]];
FullSimplify[(Module[{index = #1}, Total[(D[angularMomentumDensityTensor[[First[index],Last[index],#1]],
newCoordinates[[#1]]] & ) /@ Range[Length[newMetricMatrixRepresentation]]] +
Total[(christoffelSymbols[[First[index],First[#1],Last[#1]]]*angularMomentumDensityTensor[[Last[#1],
Last[index],First[#1]]] & ) /@ Tuples[Range[Length[newMetricMatrixRepresentation]], 2]] +
Total[(christoffelSymbols[[Last[index],First[#1],Last[#1]]]*angularMomentumDensityTensor[[First[index],
Last[#1],First[#1]]] & ) /@ Tuples[Range[Length[newMetricMatrixRepresentation]], 2]] +
Total[(christoffelSymbols[[First[#1],First[#1],Last[#1]]]*angularMomentumDensityTensor[[First[index],
Last[index],Last[#1]]] & ) /@ Tuples[Range[Length[newMetricMatrixRepresentation]], 2]] == 0] & ) /@
Tuples[Range[Length[newMetricMatrixRepresentation]], 2] /. (ToExpression[#1] -> #1 & ) /@
Select[coordinates, StringQ]]] /; SymbolName[stressEnergyTensor] === "StressEnergyTensor" &&
SymbolName[metricTensor] === "MetricTensor" && Length[Dimensions[metricMatrixRepresentation]] == 2 &&
Length[coordinates] == Length[metricMatrixRepresentation] && BooleanQ[metricIndex1] && BooleanQ[metricIndex2] &&
Length[Dimensions[matrixRepresentation]] == 2 && Length[coordinates] == Length[matrixRepresentation] &&
BooleanQ[stressEnergyIndex1] && BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] &&
BooleanQ[index1] && BooleanQ[index2] && BooleanQ[index3]
AngularMomentumDensityTensor /:
MakeBoxes[angularMomentumDensityTensor:AngularMomentumDensityTensor[(stressEnergyTensor_)[
(metricTensor_)[metricMatrixRepresentation_List, coordinates_List, metricIndex1_, metricIndex2_],
matrixRepresentation_List, stressEnergyIndex1_, stressEnergyIndex2_], positionVector_List, index1_, index2_,
index3_], format_] := Module[{tensorRepresentation, newTensorRepresentation, type, symbol, dimensions, eigenvalues,
positiveEigenvalues, negativeEigenvalues, signature, icon},
tensorRepresentation = Normal[SparseArray[
(Module[{index = #1}, index -> (coordinates[[index[[1]]]] - positionVector[[index[[1]]]])*matrixRepresentation[[
index[[2]],index[[3]]]] - (coordinates[[index[[2]]]] - positionVector[[index[[2]]]])*
matrixRepresentation[[index[[1]],index[[3]]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]],
3]]]; If[index1 === True && index2 === True && index3 === True,
newTensorRepresentation = Normal[SparseArray[(Module[{index = #1}, index -> Total[
(metricMatrixRepresentation[[index[[1]],#1[[1]]]]*metricMatrixRepresentation[[index[[2]],#1[[2]]]]*
metricMatrixRepresentation[[#1[[3]],index[[3]]]]*tensorRepresentation[[#1[[1]],#1[[2]],
#1[[3]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 3]]] & ) /@
Tuples[Range[Length[metricMatrixRepresentation]], 3]]]; type = "Covariant";
symbol = Subscript["\[FormalCapitalM]", "\[FormalRho]\[FormalMu]\[FormalNu]"], If[index1 === False && index2 === False && index3 === False,
newTensorRepresentation = tensorRepresentation; type = "Contravariant"; symbol = Superscript["\[FormalCapitalM]", "\[FormalRho]\[FormalMu]\[FormalNu]"],
If[index1 === True && index2 === False && index3 === False,
newTensorRepresentation = Normal[SparseArray[(Module[{index = #1}, index -> Total[
(metricMatrixRepresentation[[index[[1]],#1]]*tensorRepresentation[[#1,index[[2]],index[[3]]]] & ) /@
Range[Length[metricMatrixRepresentation]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]],
3]]]; type = "Mixed"; symbol = Subsuperscript["\[FormalCapitalM]", "\[FormalRho]", "\[FormalMu]\[FormalNu]"],
If[index1 === False && index2 === True && index3 === False, newTensorRepresentation =
Normal[SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[index[[2]],#1]]*
tensorRepresentation[[index[[1]],#1,index[[3]]]] & ) /@ Range[Length[
metricMatrixRepresentation]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 3]]];
type = "Mixed"; symbol = Subsuperscript["\[FormalCapitalM]", "\[FormalMu]", "\[FormalRho]\[FormalNu]"], If[index1 === False && index2 === False &&
index3 === True, newTensorRepresentation = Normal[SparseArray[(Module[{index = #1}, index ->
Total[(metricMatrixRepresentation[[#1,index[[3]]]]*tensorRepresentation[[index[[1]],index[[2]],
#1]] & ) /@ Range[Length[metricMatrixRepresentation]]]] & ) /@ Tuples[
Range[Length[metricMatrixRepresentation]], 3]]]; type = "Mixed";
symbol = Subsuperscript["\[FormalCapitalM]", "\[FormalNu]", "\[FormalRho]\[FormalMu]"], If[index1 === True && index2 === True && index3 === False,
newTensorRepresentation = Normal[SparseArray[(Module[{index = #1}, index -> Total[
(metricMatrixRepresentation[[index[[1]],#1[[1]]]]*metricMatrixRepresentation[[index[[2]],#1[[2]]]]*
tensorRepresentation[[#1[[1]],#1[[2]],index[[3]]]] & ) /@ Tuples[Range[Length[
metricMatrixRepresentation]], 2]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]],
3]]]; type = "Mixed"; symbol = Subsuperscript["\[FormalCapitalM]", "\[FormalRho]\[FormalMu]", "\[FormalNu]"],
If[index1 === True && index2 === False && index3 === True, newTensorRepresentation = Normal[
SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[index[[1]],#1[[1]]]]*
metricMatrixRepresentation[[#1[[2]],index[[3]]]]*tensorRepresentation[[#1[[1]],index[[2]],
#1[[2]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 2]]] & ) /@
Tuples[Range[Length[metricMatrixRepresentation]], 3]]]; type = "Mixed"; symbol = Subsuperscript["\[FormalCapitalM]",
"\[FormalRho]\[FormalNu]", "\[FormalMu]"], If[index1 === False && index2 === True && index3 === True, newTensorRepresentation =
Normal[SparseArray[(Module[{index = #1}, index -> Total[(metricMatrixRepresentation[[index[[2]],#1[[1]]]]*
metricMatrixRepresentation[[#1[[2]],index[[3]]]]*tensorRepresentation[[index[[1]],#1[[1]],
#1[[2]]]] & ) /@ Tuples[Range[Length[metricMatrixRepresentation]], 2]]] & ) /@
Tuples[Range[Length[metricMatrixRepresentation]], 3]]]; type = "Mixed"; symbol = Subsuperscript["\[FormalCapitalM]",
"\[FormalMu]\[FormalNu]", "\[FormalRho]"], newTensorRepresentation = ConstantArray[Indeterminate,
{Length[metricMatrixRepresentation], Length[metricMatrixRepresentation], Length[
metricMatrixRepresentation]}]; type = Indeterminate; symbol = Indeterminate]]]]]]]];
dimensions = Length[metricMatrixRepresentation]; eigenvalues = Eigenvalues[metricMatrixRepresentation];
positiveEigenvalues = Select[eigenvalues, #1 > 0 & ]; negativeEigenvalues = Select[eigenvalues, #1 < 0 & ];
If[Length[positiveEigenvalues] + Length[negativeEigenvalues] == Length[metricMatrixRepresentation],
If[Length[positiveEigenvalues] == Length[metricMatrixRepresentation] || Length[negativeEigenvalues] ==
Length[metricMatrixRepresentation], signature = "Riemannian",
If[Length[positiveEigenvalues] == 1 || Length[negativeEigenvalues] == 1, signature = "Lorentzian",
signature = "Pseudo-Riemannian"]], signature = Indeterminate];
icon = MatrixPlot[Total[newTensorRepresentation], ImageSize ->
Dynamic[{Automatic, 3.5*(CurrentValue["FontCapHeight"]/AbsoluteCurrentValue[Magnification])}], Frame -> False,
FrameTicks -> None]; BoxForm`ArrangeSummaryBox["AngularMomentumDensityTensor", angularMomentumDensityTensor,
icon, {{BoxForm`SummaryItem[{"Type: ", type}], BoxForm`SummaryItem[{"Symbol: ", symbol}]},
{BoxForm`SummaryItem[{"Dimensions: ", dimensions}], BoxForm`SummaryItem[{"Signature: ", signature}]}},
{{BoxForm`SummaryItem[{"Coordinates: ", coordinates}]}}, format, "Interpretable" -> Automatic]] /;
SymbolName[stressEnergyTensor] === "StressEnergyTensor" && SymbolName[metricTensor] === "MetricTensor" &&
Length[Dimensions[metricMatrixRepresentation]] == 2 && Length[coordinates] == Length[metricMatrixRepresentation] &&
BooleanQ[metricIndex1] && BooleanQ[metricIndex2] && Length[Dimensions[matrixRepresentation]] == 2 &&
Length[coordinates] == Length[matrixRepresentation] && BooleanQ[stressEnergyIndex1] &&
BooleanQ[stressEnergyIndex2] && Length[coordinates] == Length[positionVector] && BooleanQ[index1] &&
BooleanQ[index2] && BooleanQ[index3]