Início Exemplos Capturas de ecrã Manual do utilizador Logótipo Bluesky YouTube
OghmaNano Simular células solares orgânicas/Perovskita, OFETs e OLEDs DESCARREGAR

Configuração do solucionador Drift–Diffusion

O solucionador Drift–Diffusion pode ser configurado selecionando Configure na faixa Electrical. Isso abre a janela de configuração do solucionador, onde propriedades numéricas como limites de iteração, tolerâncias de erro e estratégias de convergência podem ser ajustadas. Essas opções permitem ao usuário controlar o desempenho e a estabilidade do solucionador para diferentes simulações de dispositivos.

Configurando o solucionador elétrico

O motor elétrico do OghmaNano resolve um conjunto fortemente acoplado de equações não lineares (Poisson + drift–diffusion, além de qualquer cinética habilitada). Essas equações contêm exponenciais e fortes acoplamentos, portanto são resolvidas iterativamente usando um método de Newton–Raphson sobre um único Jacobiano global. Normalmente você não precisará alterar os valores padrão, mas o painel de configuração permite estabilizar casos difíceis, acelerar casos simples ou inspecionar como os métodos numéricos se comportam.

Abra a configuração indo para a aba Electrical, selecionando Drift–diffusion e escolhendo Configure — veja DD Solver Open. Isso abre a janela mostrada em DD Solver Window, onde você pode ajustar como o solucionador itera e converge.

O que cada seção controla

O painel é dividido em quatro blocos principais que governam diferentes fases de uma execução: First iteration, Later iterations, Voltage ramp e Exit strategy. Em todas as fases, a ideia central é a mesma: começar de uma estimativa, atualizar as incógnitas com passos de Newton e parar quando o erro global for suficientemente pequeno. Um clamp limita a atualização máxima por passo para impedir que o solucionador salte para regiões não físicas. Clamps pequenos → mais lento, mas muito estável; clamps grandes → mais rápido, mas potencialmente instável.

Primeira iteração

Iterações posteriores

Rampa de tensão

Quando você faz uma rampa de uma polarização inicial (por exemplo, 0 V) até um ponto de operação alvo (possivelmente alta tensão), as resoluções intermediárias muitas vezes são apenas pontos intermediários. Este bloco permite usar tolerâncias mais frouxas ou clamps diferentes para avançar mais rapidamente pela rampa, mantendo as resoluções finais do ponto de operação mais rigorosas.

Estratégia de saída

Tipo de solucionador e ferramentas

Orientação prática

Se um caso for sensível (alta dopagem, campos extremos, forte injeção), reduza o clamp e torne mais rigorosa a tolerância do primeiro passo. Para casos fáceis e bem comportados, aumente o clamp para ganhar velocidade. Use o bloco de rampa para avançar rapidamente até o ponto de operação e depois imponha tolerâncias mais rigorosas ali.

Veja também: O ponto de entrada de configuração mostrado em DD Solver Open e a caixa de diálogo completa em DD Solver Window.

Estabilidade do solucionador

O OghmaNano é um simulador numérico que resolve um conjunto fortemente acoplado de equações diferenciais para carga, potencial e recombinação. Como qualquer solucionador numérico, ele requer parâmetros de entrada fisicamente realistas para convergir com sucesso. Valores exatamente zero, infinitamente grandes ou distribuídos por um número excessivo de ordens de grandeza podem fazer com que as operações de matriz subjacentes se tornem instáveis. Para ajudá-lo a evitar esses problemas, esta seção destaca algumas considerações práticas ao configurar suas simulações.

Evitando números muito grandes e muito pequenos

Abra o MATLAB (ou Octave no Linux) e digite a seguinte expressão: \(((1e-1+1e1)-1e1)/1e-1\). Antes de pressionar Enter, avalie-a mentalmente: o \(1e1\) e \(-1e1\) se cancelam, restando \(\frac{1e-1}{1e-1}=1\). Agora substitua as potências de 10 por 19 e tente: \(((1e-19+1e19)-1e19)/1e-19\). Novamente, no papel, o resultado deve ser \(1\).

Entretanto, quando você deixa o computador avaliá-la, a resposta será \(0\), não \(1\). Isso acontece porque computadores armazenam números com precisão limitada (cerca de 15–16 dígitos decimais em uma máquina moderna). Quando você soma \(1e-19\) a \(1e19\), o termo menor se perde por arredondamento, então o computador vê \(1.000000000000000e19\) em vez de \(1.0000000000000000001e19\). Subtrair \(1e19\) então fornece exatamente zero, e a contribuição de \(1e-19\) desaparece.

A precisão numérica importa

Se a sua simulação envolver parâmetros abrangendo muitas ordens de grandeza, o solucionador pode perder precisão. Tente evitar razões extremas, especialmente em mobilidade ou densidade de estados, para garantir estabilidade.

Todos os computadores são afetados por isso, não importa quão poderosos sejam. Para simulações de dispositivos, isso significa que você deve evitar faixas de parâmetros que criem matrizes com números muito grandes e muito pequenos lado a lado. Por exemplo, mobilidades de \(1e-19\) ao lado de \(1e5\) causarão dificuldades numéricas. Isso é particularmente importante ao simular isolantes.

Evite zeros

Valores zero causam erros de divisão por zero. Não defina mobilidades, seções de choque de captura, inclinações de cauda ou densidades de estados exatamente como zero. É aceitável usar zero para constantes de recombinação.

⚠️ Evite zeros exatos

Substitua zeros por valores muito pequenos (por exemplo, \(1e-30\)) para evitar instabilidades numéricas enquanto ainda aproxima “quase zero”.

Passos muito grandes no band gap

Grandes passos de energia no band gap produzem densidades de portadores que são extremamente pequenas ou extremamente grandes, o que leva diretamente aos mesmos problemas de precisão descritos em Evitando números muito grandes e muito pequenos. Mantenha a discretização de energia suficientemente fina para evitar saltos não físicos.

🔍 Verifique sua malha

Se a discretização do seu band gap for muito grosseira, você pode gerar densidades de portadores não físicas. Refine a malha para manter os valores dentro de uma faixa numericamente estável.