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
- Max electrical iterations (first step) — Limite superior de passos de Newton para a primeira resolução (frequentemente em 0 V no escuro). Um limite maior ajuda em partidas iniciais difíceis.
- Electrical clamp (first step) — Escala a atualização máxima de Newton no primeiro passo. Como regra prática: 0.1 é muito seguro (lento), 1.0 é um bom padrão, ≥2.0 pode ser rápido, mas menos estável.
- Desired solver error (first step) — Meta de convergência para a primeira resolução (menor = mais preciso, mas mais lento). Aceitação típica: não pior que \(1\times10^{-5}\); para partidas robustas você pode definir \(1\times10^{-8}\)–\(1\times10^{-9}\).
Iterações posteriores
- Max electrical iterations — Limite de iterações para todas as resoluções subsequentes após a primeira.
- Electrical clamp — Como acima, mas aplicado a todos os passos exceto o primeiro. Muitas vezes você pode relaxar isso em relação ao primeiro passo para ganhar velocidade.
- Desired solver error — Meta de convergência para passos rotineiros. Mantenha consistente com suas necessidades de precisão; \(1\times10^{-6}\)–\(1\times10^{-8}\) são comuns.
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.
- Max electrical iterations (ramp) — Limite para cada passo da rampa.
- Electrical clamp (ramp) — Controle do tamanho do passo durante a rampa.
- Desired solver error (ramp) — Meta de convergência usada apenas para os passos da rampa.
- Newton minimum iterations — Impõe pelo menos este número de passos para que o solucionador não pare cedo apenas porque o resíduo inicial por acaso é pequeno.
Estratégia de saída
- Newton solver clever exit — Se o resíduo “oscila no ruído” (sobe–desce sem tendência), pare de iterar e aceite o melhor estado até o momento.
- Solve Kirchhoff’s current law in Newton solver — Inclui restrições de KCL diretamente no Jacobiano para continuidade de corrente mais rigorosa.
- Quit on convergence problem / Quit on inverted Fermi-level — Proteções de parada rígida para estados obviamente ruins.
Tipo de solucionador e ferramentas
- Newton solver to use — Escolha o algoritmo:
none— Sem resolução elétrica (somente óptica/térmica).newton— Solucionador Newton 1D padrão.
- Matrix solver / Complex matrix solver — Selecione o backend do solucionador linear.
- Slotboom T0 / D0 / n0 — Parâmetros para
newtonnorm. - Use newton cache (experimental) — Grava grandes dados intermediários em disco para reduzir pressão de memória (experimental).
- Solver output verbosity — Controla quanta informação de progresso é impressa.
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.