dirac_solver 0.0.1
A Dirac ecuation Solver
Cargando...
Buscando...
Nada coincide
DiracMatrices.h
Ir a la documentación de este archivo.
1#pragma once
2
3#include <complex>
4#include <array>
5#include <vector>
6
7namespace Dirac {
8
9using complex = std::complex<double>;
10
11// Una estructura envolvente para el espinor para asegurar que ADL funcione para sobrecargas de operadores.
12struct Spinor {
13 std::array<complex, 4> components;
14
15 Spinor() : components({complex(0,0), complex(0,0), complex(0,0), complex(0,0)}) {}
16 Spinor(const std::array<complex, 4>& comps) : components(comps) {}
17
18 complex& operator[](size_t i) { return components[i]; }
19 const complex& operator[](size_t i) const { return components[i]; }
20};
21
22using Matrix4x4 = std::array<std::array<complex, 4>, 4>;
23
24// Matriz identidad
25const Matrix4x4 I4 = {{
26 {{{1, 0}, {0, 0}, {0, 0}, {0, 0}}},
27 {{{0, 0}, {1, 0}, {0, 0}, {0, 0}}},
28 {{{0, 0}, {0, 0}, {1, 0}, {0, 0}}},
29 {{{0, 0}, {0, 0}, {0, 0}, {1, 0}}},
30}};
31
32// Matriz beta
33const Matrix4x4 beta = {{
34 {{{1, 0}, {0, 0}, {0, 0}, {0, 0}}},
35 {{{0, 0}, {1, 0}, {0, 0}, {0, 0}}},
36 {{{0, 0}, {0, 0}, {-1, 0}, {0, 0}}},
37 {{{0, 0}, {0, 0}, {0, 0}, {-1, 0}}},
38}};
39
40// Matrices alfa (representación estándar)
42 {{{0,0}, {0,0}, {0,0}, {1,0}}},
43 {{{0,0}, {0,0}, {1,0}, {0,0}}},
44 {{{0,0}, {1,0}, {0,0}, {0,0}}},
45 {{{1,0}, {0,0}, {0,0}, {0,0}}},
46}};
47
49 {{{0,0}, {0,0}, {0,0}, {0,-1}}},
50 {{{0,0}, {0,0}, {0,1}, {0,0}}},
51 {{{0,0}, {0,-1}, {0,0}, {0,0}}},
52 {{{0,1}, {0,0}, {0,0}, {0,0}}},
53}};
54
56 {{{0,0}, {0,0}, {1,0}, {0,0}}},
57 {{{0,0}, {0,0}, {0,0}, {-1,0}}},
58 {{{1,0}, {0,0}, {0,0}, {0,0}}},
59 {{{0,0}, {-1,0}, {0,0}, {0,0}}},
60}};
61
62// Función auxiliar para la multiplicación matriz-espinor
63inline Spinor multiply(const Matrix4x4& M, const Spinor& s) {
65 for (int i = 0; i < 4; ++i) {
66 for (int j = 0; j < 4; ++j) {
67 result.components[i] += M[i][j] * s.components[j];
68 }
69 }
70 return result;
71}
72
73// Sobrecargas de operadores para la aritmética de espinores
74inline Spinor operator+(const Spinor& a, const Spinor& b) {
76 for (int i = 0; i < 4; ++i) {
77 result.components[i] = a.components[i] + b.components[i];
78 }
79 return result;
80}
81
82inline Spinor operator-(const Spinor& a, const Spinor& b) {
84 for (int i = 0; i < 4; ++i) {
85 result.components[i] = a.components[i] - b.components[i];
86 }
87 return result;
88}
89
90inline Spinor operator*(const complex& c, const Spinor& s) {
92 for (int i = 0; i < 4; ++i) {
93 result.components[i] = c * s.components[i];
94 }
95 return result;
96}
97
98} // namespace Dirac
Definition DiracMatrices.h:7
Spinor multiply(const Matrix4x4 &M, const Spinor &s)
Definition DiracMatrices.h:63
const Matrix4x4 alpha_y
Definition DiracMatrices.h:48
const Matrix4x4 alpha_z
Definition DiracMatrices.h:55
const Matrix4x4 alpha_x
Definition DiracMatrices.h:41
std::complex< double > complex
Definition DiracMatrices.h:9
const Matrix4x4 beta
Definition DiracMatrices.h:33
Spinor operator-(const Spinor &a, const Spinor &b)
Definition DiracMatrices.h:82
Spinor operator*(const complex &c, const Spinor &s)
Definition DiracMatrices.h:90
std::array< std::array< complex, 4 >, 4 > Matrix4x4
Definition DiracMatrices.h:22
const Matrix4x4 I4
Definition DiracMatrices.h:25
Spinor operator+(const Spinor &a, const Spinor &b)
Definition DiracMatrices.h:74
Definition DiracMatrices.h:12
Spinor(const std::array< complex, 4 > &comps)
Definition DiracMatrices.h:16
std::array< complex, 4 > components
Definition DiracMatrices.h:13
const complex & operator[](size_t i) const
Definition DiracMatrices.h:19
complex & operator[](size_t i)
Definition DiracMatrices.h:18
Spinor()
Definition DiracMatrices.h:15