li = 0
    for l in arange(0, n):
        for m in arange(-l, l + 1):
            for k in arange(3 if m > 0 else 1):

                if k == 0:
                    psi = Ψ(n, l, m)
                    #pmax = psi.R(clim)**2*clim**2
                elif k == 1:
                    psi = (Ψ(n, l, m) - Ψ(n, l, -m)) / sqrt(2)
                    #pmax = psi.psi_vec[0].R(clim)**2*clim**2
                else:
                    psi = (Ψ(n, l, m) + Ψ(n, l, -m)) / sqrt(2) / 1j
                    #pmax = psi.psi_vec[0].R(clim)**2*clim**2

                clim = coordenada_maxima(
                    psi, umbral=umbral) * 1.3  # Maxima extensión de ejes

                # Grilla para el calculo
                X, Y, Z = mgrid[-clim:clim:N * 1j, -clim:clim:N * 1j,
                                -clim:clim:N * 1j]
                r, phi, theta = sqrt(X**2 + Y**2 + Z**2), arctan2(
                    Y, X), arctan2(sqrt(X**2 + Y**2), Z)
                WF = abs(psi(r, phi, theta))**2

                # Vertices
                vertices, caras, _, _ = measure.marching_cubes_lewiner(
                    WF, WF.max() * umbral, allow_degenerate=False)
                vertices = vertices / N * clim * 2 - clim

                # graficar
                if n < 6:
Exemplo n.º 2
0
#%% Estados Hiperfinos separando Spin nuclear en colores

from orbitales_atomicos import autoestado_SO, autoestado_HF

# Armamos 4 estados diferentes para graficar

psi = autoestado_HF('5P3/2', F=1, mf=1, I=3 / 2)
#estados = autoestado_HF('5S1/2',F=1,mf=0,I=3/2)

# Creamos la figura y los ejes en 3D
fig = plt.figure(figsize=(14, 9))

ax = fig.add_subplot(1, 1, 1, projection='3d')

# Parámetros para mallas
clim = coordenada_maxima(psi, umbral=0.08)  # Maxima extensión de ejes
N = 30  # la grilla tendrá 50³ puntos
umbral = 0.1  # umbral para el cálculo de superficies: límite 10% de probabilidad

# Definimos una grilla de coordenadas cartesianas
# desde -clim hasta +clim con N pts, para cada coordenada
X, Y, Z = mgrid[-clim:clim:N * 1j, -clim:clim:N * 1j, -clim:clim:N * 1j]

# Transformamos a coordenadas esféricas
r, phi, theta = sqrt(X**2 + Y**2 + Z**2), arctan2(Y, X), arctan2(
    sqrt(X**2 + Y**2), Z)

# Armamos listas donde vamos a acumular las caras, vértives y colores de las
# superficies que vamos a calcular
vertices = []
caras = []
from orbitales_atomicos import autoestado_SO

# Armamos 4 estados diferentes para graficar

estados = [autoestado_SO('5P3/2', m=ms) for ms in arange(-3 / 2, 3 / 2 + 1)]

# Creamos la figura y los ejes en 3D
fig = plt.figure(figsize=(14, 9))

axx = []
for ii in range(4):
    axx.append(fig.add_subplot(2, 2, ii + 1, projection='3d'))

# Parámetros para mallas
clim = max([coordenada_maxima(estado, umbral=0.08)
            for estado in estados])  # Maxima extensión de ejes
N = 50  # la grilla tendrá 50³ puntos
umbral = 0.1  # umbral para el cálculo de superficies: límite 10% de probabilidad

# Definimos una grilla de coordenadas cartesianas
# desde -clim hasta +clim con N pts, para cada coordenada
X, Y, Z = mgrid[-clim:clim:N * 1j, -clim:clim:N * 1j, -clim:clim:N * 1j]

# Transformamos a coordenadas esféricas
r, phi, theta = sqrt(X**2 + Y**2 + Z**2), arctan2(Y, X), arctan2(
    sqrt(X**2 + Y**2), Z)

# Recorremos los estados
for ii, psi, ax in zip(range(len(estados)), estados, axx):