Simulación por computadora de la ecuación de Schrödinger [duplicado]

Estoy buscando un programa de computadora que simule la ecuación de Schrödinger (digamos para una sola partícula) en dos dimensiones y para potenciales y estados iniciales especificados por el usuario. Las situaciones típicas que tengo en mente son el experimento de la doble rendija, el oscilador armónico, Aharonov-Bohm, el efecto túnel, etc. Lamentablemente, solo pude encontrar el caso unidimensional en la web.

Entonces, ¿hay algunos programas 2d disponibles?

PD: No creo que mi pregunta sea un duplicado de esta . Solo pregunto por una sola partícula, no por miles. Por otro lado, quiero libertad en mi elección de potencial. También quiero una solución numérica de una PDE, mientras que la otra pregunta se trata (hasta donde yo entiendo, que no está muy lejos) de una simulación de Monte Carlo. De todos modos, estos son requisitos completamente diferentes.

¿Está buscando un programa que haga todo el trabajo por usted y solo muestre resultados, o está buscando un entorno de programación para escribirlo usted mismo?
Pregunta posiblemente relacionada: physics.stackexchange.com/q/18969
@nuke wiz Estoy buscando ambos. Un programa que hace todo el trabajo por mí y que es fácil de modificar.
Esta pregunta parece estar fuera de tema porque está solicitando un programa (consulte esta publicación de Meta sobre preguntas computacionales dentro/fuera del tema ) y no sobre física.
Relacionado: physics.stackexchange.com/q/10311/2451 y enlaces allí.

Respuestas (2)

Probablemente esto no sea exactamente lo que está buscando, pero si está buscando los estados límite independientes del tiempo de un sistema, el método hamiltoniano de cuadrícula de Fourier puede ser aplicable. Aquí hay una aplicación de esto al siguiente pozo potencial de aspecto extraño:

ingrese la descripción de la imagen aquí

Aquí hay algunos estados ligados de baja energía:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Y aquí están algunos de los estados de alta energía:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Usé una superficie potencial de aspecto bastante simétrico, pero puedes hacer formas arbitrarias o líneas onduladas si realmente quisieras.

Aquí está el código de Mathematica usado para dibujar el potencial y calcular los estados ligados. Tenga en cuenta que en 2D, solo usar 81 puntos de cuadrícula en cada dimensión significa que tiene que diagonalizar un 6561 × 6561 matriz, que puede tardar varios minutos. A continuación se definen los ejes espaciales y se construye la matriz de energía cinética:

$HistoryLength = 0;
hue = Compile[{{z, _Complex}}, {(1.0 Arg[-z] + \[Pi])/(2 \[Pi]), 
    Exp[1 - Max[Abs[z], 1]], Min[Abs[z], 1]}, 
   CompilationTarget -> "C", RuntimeAttributes -> {Listable}];
vec[A_] := Flatten[Transpose[A, Reverse[Range[ArrayDepth[A]]]]];
nx1 = 8;
np1 = 8;
nn1 = nx1 np1;
L1 = 8;
\[CapitalDelta]x1 = L1/nx1;
\[CapitalDelta]p1 = 2 \[Pi]/\[CapitalDelta]x1;
\[Alpha]1 = \[CapitalDelta]p1/(2 \[CapitalDelta]x1);
pMax1 = \[CapitalDelta]p1 np1/2;
axis1 = (Range[nn1] - 1/2) L1/nn1;
TRow1 = If[EvenQ[nn1], 
   1/2 Append[
     Table[(2.0 pMax1^2)/nn1^2 (-1)^j/Sin[\[Pi] j/nn1]^2, {j, 
       nn1 - 1}], pMax1^2/3 (1 + 2.0/nn1^2)], 
   1/2 Append[
     Table[(2.0 pMax1^2)/nn1^2 ((-1)^j Cos[\[Pi] j/nn1])/
       Sin[\[Pi] j/nn1]^2, {j, nn1 - 1}], 
     pMax1^2/3 (1 + 1.0/nn1^2)]];
T1 = MapIndexed[RotateRight, ConstantArray[TRow1, nn1]];
nx2 = 8;
np2 = 8;
nn2 = nx2 np2;
L2 = 8;
\[CapitalDelta]x2 = L2/nx2;
\[CapitalDelta]p2 = 2 \[Pi]/\[CapitalDelta]x2;
\[Alpha]2 = \[CapitalDelta]p2/(2 \[CapitalDelta]x2);
pMax2 = \[CapitalDelta]p2 np2/2;
axis2 = (Range[nn2] - 1/2) L2/nn2;
TRow2 = If[EvenQ[nn2], 
   1/2 Append[
     Table[(2.0 pMax2^2)/nn2^2 (-1)^j/Sin[\[Pi] j/nn2]^2, {j, 
       nn2 - 1}], pMax2^2/3 (1 + 2.0/nn2^2)], 
   1/2 Append[
     Table[(2.0 pMax2^2)/nn2^2 ((-1)^j Cos[\[Pi] j/nn2])/
       Sin[\[Pi] j/nn2]^2, {j, nn2 - 1}], 
     pMax2^2/3 (1 + 1.0/nn2^2)]];
T2 = MapIndexed[RotateRight, ConstantArray[TRow2, nn2]];

Lo siguiente le permite ingresar una superficie potencial y trazarla (el código a continuación toma Potentialla extraña superficie en forma de cruz que mostré al principio, pero se puede cambiar a otras formas):

\[Delta] = 0.3;
Potential[x1_, 
   x2_] := -600 \[Delta]/(Sqrt[(x1 - L1/2)^2] + \[Delta]) \[Delta]/(
    Sqrt[(x2 - L2/2)^2] + \[Delta]) - 
   300 \[Delta]/(
    Abs[Sqrt[(x1 - L1/2)^2 + (x2 - L2/2)^2] - 2] + \[Delta]);
Hamiltonian[x1_, p1_, x2_, p2_] := (p1^2 + p2^2)/2 + Potential[x1, x2];
DensityPlot[Hamiltonian[x1, 0, x2, 0], {x1, 0, L1}, {x2, 0, L2}, 
 PlotRange -> All, PlotPoints -> 90, ColorFunction -> GrayLevel]

Lo siguiente construye el hamiltoniano y lo diagonaliza:

V = DiagonalMatrix[
   vec[Table[
     Potential[axis1[[k1]], axis2[[k2]]], {k1, nn1}, {k2, nn2}]]];
T = KroneckerProduct[T2, IdentityMatrix[nn1]] + 
   KroneckerProduct[IdentityMatrix[nn2], T1];
H = T + V;
{\[Lambda], \[CapitalLambda]} = {#1[[Ordering[#1]]], \
#2[[Ordering[#1]]]} & @@ Eigensystem[H];

Y lo siguiente traza los estados enlazados:

mat[v_] := Partition[v, nn1]\[Transpose];
interp[m_] := 
  8 InverseFourier[
    RotateLeft[
     PadRight[RotateRight[Fourier[m], Floor[Dimensions[m]/2]], 
      8 Dimensions[m]], Floor[Dimensions[m]/2]]];
Manipulate[{\[Lambda][[k]], 
  If[Abs[\[Lambda][[k - 1]] - \[Lambda][[k]]] <= 0.01 || 
    Abs[\[Lambda][[k + 1]] - \[Lambda][[k]]] <= 0.01, "Mixed", 
   "Pure"], 
  Image[hue[20 interp[mat[\[CapitalLambda][[k]]]]], ColorSpace -> Hue,
    Magnification -> 1]}, {k, 1, 500, 1}]

Desafortunadamente, no recuerdo exactamente qué sistema de unidades físicas usa el código, pero sí recuerdo que lo escribí parcialmente basado en la exposición de David Tannor del método FGH como se describe en su libro Quantum Mechanics: A Time-Dependent Perspective .

Fantásticas tramas y gracias por el código +1. Estoy seguro de que algunas personas se divertirán con eso. ¿Ha pensado en ponerlo en el sitio de Wolfram Demonstrations? Además, me encanta su página de usuario, pero ¿hay alguna posibilidad de que podamos conocer una pequeña parte de los antecedentes de alguien que claramente tiene un conocimiento considerable de muchos campos de la física?
@DumpsterDoofus aunque su código funciona (y todavía tengo que entenderlo), recibo una advertencia para la primera parte: "Compilar :: nogen: no se pudo generar una biblioteca a partir de la función compilada. >>".

Hay algunas herramientas de simulación disponibles en línea, pero si le son útiles depende de los detalles de sus requisitos.

Consulte la lista de simuladores cuánticos aquí .
O este .

¡Gracias! En realidad, estoy buscando algo más flexible, donde pueda jugar con diferentes potenciales, etc.
@JanWeidner Una respuesta muy tardía, lo sé, pero recientemente decidí intentar hacer algunas simulaciones de ecuaciones de Schrödinger atractivas, en 2D y 3D. Terminé escribiendo mi propia aplicación para hacer el trabajo numérico y luego usando ParaView para el renderizado. He publicado algunos de los resultados en YouTube y mi código y ejecutables en GitHub . La aplicación te permite ingresar una función arbitraria para la energía potencial.