dirac_solver 0.0.1
A Dirac ecuation Solver
Cargando...
Buscando...
Nada coincide
Referencia de la clase dirac_solver.initial_state.GaussianPacket

Métodos públicos

 __init__ (self, constant_spinor, center=[0, 0, 0], spatial_width=1)
 
 evaluate (self, grid_position)
 
 evaluate_on_grid (self, grid)
 

Atributos públicos

 constant_spinor
 
 center
 
 spatial_width
 

Documentación de constructores y destructores

◆ __init__()

dirac_solver.initial_state.GaussianPacket.__init__ (   self,
  constant_spinor,
  center = [0,0,0],
  spatial_width = 1 
)
@brief el spinor constante entra como parametro
98 def __init__(self, constant_spinor, center = [0,0,0], spatial_width = 1):
99 """
100 @brief el spinor constante entra como parametro
101 """
102 self.constant_spinor = constant_spinor
103 self.center = np.array(center)
104 self.spatial_width = spatial_width
105

Documentación de funciones miembro

◆ evaluate()

dirac_solver.initial_state.GaussianPacket.evaluate (   self,
  grid_position 
)
@brief calcula el estado base en un punto exacto
106 def evaluate(self, grid_position):
107 """
108 @brief calcula el estado base en un punto exacto
109 """
110 x = np.array(grid_position)
111 p0 = self.constant_spinor.momentum
112 x0 = self.center
113
114 # Pad the position vector 'x' to match the dimension of momentum and center vectors
115 if len(x) < len(p0):
116 padded_x = np.zeros(len(p0), dtype=float)
117 padded_x[:len(x)] = x.flatten()
118 x = padded_x
119
120 sigma0 = self.spatial_width
121 u_p0 = self.constant_spinor.constant_spinor
122
123 p0_dot_x = np.dot(p0, x)
124 exponent_norm = np.linalg.norm(x - x0)**2
125
126 spatial_part = np.exp(1j * p0_dot_x) * np.exp(-exponent_norm / (4 + sigma0**2))
127
128 dirac_spinor = u_p0 * spatial_part
129
130 """
131 @brief Devuelve el spinor calculado en el punto
132 """
133 return dirac_spinor
134

◆ evaluate_on_grid()

dirac_solver.initial_state.GaussianPacket.evaluate_on_grid (   self,
  grid 
)
@brief Calcula el estado inicial en toda la malla.
@param grid: Objeto Grid sobre el que se evaluará el paquete.
@return: Un array de NumPy con la forma (n_points, 4)
135 def evaluate_on_grid(self, grid):
136 """
137 @brief Calcula el estado inicial en toda la malla.
138 @param grid: Objeto Grid sobre el que se evaluará el paquete.
139 @return: Un array de NumPy con la forma (n_points, 4)
140 """
141 n_points = grid.shape[0] # Assuming 1D for now
142 psi_0 = np.zeros((n_points, 4), dtype=np.complex128)
143
144 for i in range(n_points):
145 position = grid.coords[i]
146 spinor_at_point = self.evaluate(position)
147 psi_0[i, :] = spinor_at_point.flatten()
148
149 return psi_0
150
151# """
152# @class GaussianWavePacket
153# @brief Clase para inicializar el paquete de ondas gaussiano.
154# """
155#
156#
157# class GaussianWavePacket:
158# """
159# @brief En esta clase se construye un paquete de ondas gaussiano.
160# """
161# def __init__(self, momentum=[0,0,0], mass=1.0, packet_width=1.0, spin_orientation='up_z'):
162# """
163# @brief Inicializa los parametros fisicos del paquete de ondas
164# @param momemtum: Momentum del paquete de ondas (array), por defecto: [0,0,0]
165# @param mass: Masa en reposo de la particula (float), por defecto: 1.0
166# @param packet_width: Ancho inicial del paquete (float), por defecto: 1.0
167# @param spin_orientation: Orientación del spin. (char), por defecto: 'up_z'
168# """
169#
170# self.p_vec = np.array(momentum)
171# self.mass = mass
172# self.x0 = packet_width
173# self.spin = spin_orientation
174#
175# consts = Constants()
176# self.c = consts.get("c")
177# self.HBAR = consts.get("HBAR")
178#
179#
180#
181#
182# self._precompute_spinor()
183#
184# def _precompute_spinor(self):
185# """
186# @brief En este metodo se calcula la parte espinorial constante del paquete de ondas
187# @note Se ejecuta al crearse el objeto, es de uso interno.
188# """
189# """
190# @brief Aqui calculamos la energia relativista del paquete de ondas:
191# """
192#
193# p_mag = np.linalg.norm(self.p_vec)
194#
195# if p_mag == 0:
196# """
197# @todo Este condicional se podria eliminar si el sqrt eliminara la potencia cuadrada al ser p_mag = 0
198# """
199# self.energy = self.mass * (self.c**2)
200# else:
201# self.energy = np.sqrt((p_mag * self.c)**2 + (self.mass * self.c**2)**2)
202#
203# """
204# @brief Se calcula la constante de normalización N:
205# """
206# N = ( (2 * np.pi )**(3/2) * (self.x0)**3 )**(-1/2)
207#
208# """
209# @brief Se calcula el factor de normalización:
210# """
211# norm_factor = np.sqrt((self.energy + self.mass*(self.c**2)) / (2 * self.energy))
212#
213# """
214# @brief Se construye el spinor base:
215# """
216#
217# px, py, pz = self.p_vec
218# spinor = np.zeros(4, dtype=np.complex128)
219#
220# if self.spin == 'up_z':
221# spinor[0] = 1.0
222# spinor[1] = 0.0
223# spinor[2] = ((pz * self.c)/(self.energy + (self.mass * (self.c**2))))
224# spinor[3] = ( ((px - (1j * py))*self.c ) / (self.energy + (self.mass*(self.c**2))) )
225# else:
226# raise NotImplementedError(f"Spin orientation '{self.spin}' is not supported.")
227# """
228# @warning Es necesario implementar las otras componentes
229# """
230#
231# """
232# @brief Se aplica la normalizacion a nuestro vertor 4x1
233# @note Es necesario construir el termino faltante con al geometria.
234# """
235#
236# self.spinor_vector = N * norm_factor * spinor
237# print("Objeto creado (falta aplicarle la geometria)")
238

Documentación de datos miembro

◆ center

dirac_solver.initial_state.GaussianPacket.center

◆ constant_spinor

dirac_solver.initial_state.GaussianPacket.constant_spinor

◆ spatial_width

dirac_solver.initial_state.GaussianPacket.spatial_width

La documentación de esta clase está generada del siguiente archivo: