A resposta de Kyle Kanos parece ser muito completa, mas pensei em acrescentar minha própria experiência. O método Fourier (SSFM) em etapas divididas é extremamente fácil de executar e mexer; você pode prototipá-lo em algumas linhas do Mathematica e é extremamente estável numericamente. Isso envolve transmitir apenas operadores unitários no seu conjunto de dados, para que ele automaticamente economize probabilidade / poder (o último se você estiver resolvendo as equações de Maxwell com ele, que é onde está minha experiência). Para uma equação de Schrödinger unidimensional (ou seja, apenas variação e ), é extremamente rápida, mesmo como código do Mathematica. E se você precisar acelerar, realmente precisará de um bom código FFT no idioma de destino (minha experiência está em C ++).xt
O que você estaria fazendo é uma versão disfarçada do Método de Propagação de Feixe para propagação óptica por meio de um guia de ondas de seção transversal variável (análogo aos potenciais variáveis no tempo), portanto, seria útil procurar isso também.
A maneira como vejo o SSFM / BPM é a seguinte. Sua fundamentação é a fórmula do produto Trotter da teoria de Lie:
limm→∞(exp(Dtm)exp(Vtm))m=exp((D+V)t)(1)
que às vezes é chamado de operador de equação de divisão neste contexto. Seu conjunto de dados é uma grade discreta ou de valores complexos que representam em um determinado momento . Então você imagina isso (você não precisa fazer isso; eu ainda estou falando conceitualmente) grade gritante escrita como um vetor de coluna de elemento (para uma grade , temos ) e, em seguida, sua equação de Schrödinger tem a forma:x−yx−y−zψ(x,y,z)tNΨ1024×1024N=10242=1048576
dtΨ=KΨ=(D+V(t))Ψ(2)
onde é uma matriz enviesada-Hermitiana, um elemento de e será mapeado com o tempo crescente por um elemento daquele grupo de parâmetros . ( fator no no RHS para que eu possa falar mais facilmente em termos teóricos de Lie). Dado o tamanho de , o habitat natural dos operadores é um grupo de mentiras completamente colossal, portanto PHEW! Sim, eu ainda estou falando em termos totalmente teóricos! Agora, o queK=D+VN×Nu(N)Ψexp(Kt)iℏK=D+VNU(N)D+Vparece? Ainda imaginando por enquanto, poderia ser pensada como uma versão de diferença finita de , em que é um potencial "médio" conveniente para o problema em questão.iℏ∇2/(2m)−iℏ−1V0+iℏ−1(V0−V(x,y,z,t0))V0
Nós deixamos:
DV==iℏ2m∇2−iℏ−1V0iℏ−1(V0−V(x,y,z,t))(3)
Por que eu os dividi assim ficará claro abaixo.
O ponto sobre é que ele pode ser trabalhado analiticamente para uma onda plana: é um operador de multiplicação simples em coordenadas de momento. Portanto, para elaborar , aqui estão as três primeiras etapas de um ciclo SSFM / BPM:DΨ↦exp(ΔtD)Ψ
- Atribua FFT ao conjunto de dados para transformá-lo em um conjunto de pesos de superposição de ondas planas: agora as coordenadas da grade foram alteradas de para ;ΨΨ~x,y,zkx,ky,kz
- Compartilhe simplesmente multiplicando cada ponto da grade por ;Ψ~↦exp(ΔtD)Ψ~exp(iΔt(V0−k2x+k2y+k2z)/ℏ)
Distribua FFT inverso para mapear nossa grade de volta paraexp(ΔtD)Ψ
Agora, estamos de volta ao domínio da posição. Este é o melhor domínio para transmitir ao operador claro: aqui é um operador de multiplicação simples. Então, aqui está o seu último passo no seu ciclo algorítmico:VV
Distribua o operador simplesmente multiplicando cada ponto da grade pelo fator de faseΨ↦exp(ΔtV)Ψexp(iΔt(V0−V(x,y,z,t))/ℏ)
.... e então você inicia sua próxima etapa e alterna repetidamente. Claramente, é muito fácil inserir potenciais de variação temporal no código.ΔtV(x,y,z,t)
Então você vê que simplesmente escolhe pequeno o suficiente para que a fórmula Trotter (1) entre em ação: você está simplesmente aproximando a ação do operador e você alterna com sua FFT entre coordenadas de posição e momento, ou seja, os domínios em que e são operadores simples de multiplicação.Δtexp(D+VΔt)≈exp(DΔt)exp(VΔt)VD
Observe que você está sempre transmitindo, mesmo no mundo discreto, operadores unitários: FFTs e fatores de fase pura.
Um ponto que você precisa ter cuidado é que, à medida que seu se torna pequeno, você deve garantir que o espaçamento da grade espacial também diminua. Caso contrário, suponha que o espaçamento da grade espacial seja . Então, o significado físico de uma etapa discreta é que os efeitos de difração estão viajando a uma velocidade ; ao simular as equações e guias de ondas de Maxwell, é necessário garantir que essa velocidade seja muito menor que . Ouso dizer que limites se aplicam à equação de Schrödinger: não tenho experiência direta aqui, mas parece divertido e talvez você possa postar seus resultados em algum momento!ΔtΔxΔx/Δtc
Um segundo ponto de "experiência" com esse tipo de coisa - eu quase apostaria que é assim que você seguirá suas idéias. Muitas vezes temos idéias que queremos fazer simulações simples, rápidas e sujas, mas nunca funciona dessa maneira! Eu começaria com o SSFM, como descrevi acima, pois é muito fácil executar e você verá rapidamente se seus resultados são físicos ou não. Posteriormente, você pode usar seu código, digamos, Mathematica SSFM, para verificar os resultados de um código mais sofisticado que você pode acabar criando, digamos, um código Crank Nicolson, seguindo as linhas da resposta de Kyle Kanos .
Limites de erro
A realização da fórmula de Dynkin do teorema de Baker-Campbell-Hausdorff:
exp(DΔt)exp(V)Δt)=exp((D+V)Δt+12[D,V]Δt2+⋯)
convergindo para alguns mostra que o método é preciso segunda ordem e pode mostrar que:
Δt>0
exp(DΔt)exp(V)Δt)exp(−12[D,V]Δt2)=exp((D+V)Δt+O(Δt3))
Em teoria, você pode, portanto, usar o termo para estimar o erro e defina seu acordo. Isso não é tão fácil quanto parece e, na prática, os limites acabam sendo estimativas aproximadas do erro. O problema é que:exp(V)Δt)exp(−12[D,V]Δt2)Δt
Δt22[D,V]=−iΔt22m(∂2xV(x,t)+2∂xV(x,t)∂x)
e não há prontamente transformados em coordenadas em que seja um operador de multiplicação simples. Portanto, você deve se contentar com e use-o para estimar seu erro, calculando para o seu solução em desenvolvimento atualmente e usando-a para definir seu[D,V]exp(−12[D,V]Δt2)≈e−iφΔt2(id−(12[D,V]−iφ(t))Δt2)(id−(12[D,V]−iφ(t))Δt2)ψψ(x,t)Δtimediatamente após cada ciclo do algoritmo. É claro que você pode fazer dessas idéias a base para um controlador de tamanho de etapa adaptável para sua simulação. Aqui é uma fase global retirada do conjunto de dados para minimizar a norma ; é claro que muitas vezes você pode eliminar uma fase global: dependendo do que você está fazendo com os resultados da simulação, muitas vezes não somos incomodados por uma fase constante global .φ(12[D,V]−iφ(t))Δt2exp(∫φdt)
Um documento relevante sobre erros no SSFM / BPM é:
Lars Thylén. "O método de propagação de feixe: uma análise de sua aplicabilidade", Optical and Quantum Electronics 15 (1983) pp433-439 .
Lars Thylén pensa nos erros em termos teóricos que não são de Lie (os grupos de mentiras são meus propensos, então eu gosto de procurar interpretações deles), mas suas idéias são essencialmente as mesmas que as anteriores.