Configurazione del risolutore per il modello di trasporto-diffusioneConfigurazione del risolutore per il modello di trasporto-diffusione
Il risolutore Drift-Diffusion può essere configurato selezionando l’opzione Configura nella barra multifunzione relativa alle proprietà elettriche. In questo modo si apre la finestra di configurazione del risolutore, dove è possibile regolare le proprietà numeriche, come i limiti di iterazione, le tolleranze di errore e le strategie di convergenza. Queste opzioni consentono all’utente di controllare le prestazioni e la stabilità del risolutore per diverse simulazioni di dispositivi.Il risolutore Drift-Diffusion può essere configurato selezionando l’opzione Configura nella barra multifunzione relativa alle proprietà elettriche. In questo modo si apre la finestra di configurazione del risolutore, dove è possibile regolare le proprietà numeriche, come i limiti di iterazione, le tolleranze di errore e le strategie di convergenza. Queste opzioni consentono all’utente di controllare le prestazioni e la stabilità del risolutore per diverse simulazioni di dispositivi.
Configurazione del risolutore elettricoConfigurazione del risolutore elettrico
Il motore elettrico di OghmaNano risolve un insieme di equazioni non lineari strettamente correlate (Poisson + diffusione-trasporto, oltre a qualsiasi modello cinetico attivato). Queste equazioni contengono esponenziali e forti interazioni, pertanto vengono risolte in modo iterativo utilizzando un metodo di Newton-Raphson su una singola matrice Jacobiana globale. In genere, non sarà necessario modificare le impostazioni predefinite, ma il pannello di configurazione consente di stabilizzare i casi più complessi, velocizzare quelli più semplici o analizzare il comportamento dei calcoli numerici.Il motore elettrico di OghmaNano risolve un insieme di equazioni non lineari strettamente correlate (Poisson + diffusione-trasporto, oltre a qualsiasi modello cinetico attivato). Queste equazioni contengono esponenziali e forti interazioni, pertanto vengono risolte in modo iterativo utilizzando un metodo di Newton-Raphson su una singola matrice Jacobiana globale. In genere, non sarà necessario modificare le impostazioni predefinite, ma il pannello di configurazione consente di stabilizzare i casi più complessi, velocizzare quelli più semplici o analizzare il comportamento dei calcoli numerici.
Aprire la configurazione accedendo alla scheda «Elettrica», selezionando «Drift-diffusion» e scegliendo «Configura» – vedere DD Solver Open. Si aprirà la finestra mostrata in DD Solver Window, dove sarà possibile regolare il modo in cui il risolutore esegue le iterazioni e raggiunge la convergenza.Aprire la configurazione accedendo alla scheda «Elettrica», selezionando «Drift-diffusion» e scegliendo «Configura» – vedere DD Solver Open. Si aprirà la finestra mostrata in DD Solver Window, dove sarà possibile regolare il modo in cui il risolutore esegue le iterazioni e raggiunge la convergenza.
Quali funzioni controlla ciascuna sezione.Quali funzioni controlla ciascuna sezione.
Il pannello è suddiviso in quattro sezioni principali che regolano le diverse fasi di un ciclo di calcolo: prima iterazione, iterazioni successive, incremento della tensione e strategia di uscita. In tutte le fasi, l’idea di base è la stessa: partire da un’ipotesi iniziale, aggiornare le variabili sconosciute mediante passaggi di Newton e interrompere il processo quando l’errore globale è sufficientemente piccolo. Un limite massimo restringe l’entità massima dell’aggiornamento per ogni passaggio, evitando che il risolutore si sposti in regioni fisicamente irrealistiche. Limiti piccoli → processo più lento ma molto stabile; limiti grandi → processo più veloce ma potenzialmente instabile.Il pannello è suddiviso in quattro sezioni principali che regolano le diverse fasi di un ciclo di calcolo: prima iterazione, iterazioni successive, incremento della tensione e strategia di uscita. In tutte le fasi, l’idea di base è la stessa: partire da un’ipotesi iniziale, aggiornare le variabili sconosciute mediante passaggi di Newton e interrompere il processo quando l’errore globale è sufficientemente piccolo. Un limite massimo restringe l’entità massima dell’aggiornamento per ogni passaggio, evitando che il risolutore si sposti in regioni fisicamente irrealistiche. Limiti piccoli → processo più lento ma molto stabile; limiti grandi → processo più veloce ma potenzialmente instabile.
Prima versione.Prima versione.
- Numero massimo di iterazioni elettriche (prima fase) — Limite superiore del numero di passi di Newton per la prima soluzione (spesso a 0 V in condizioni di oscurità). Un valore più elevato facilita le operazioni di avvio a freddo, che possono risultare più complesse.Numero massimo di iterazioni elettriche (prima fase) — Limite superiore del numero di passi di Newton per la prima soluzione (spesso a 0 V in condizioni di oscurità). Un valore più elevato facilita le operazioni di avvio a freddo, che possono risultare più complesse.
- Limitatore di corrente (prima fase): regola l’incremento massimo di Newton nella prima fase. In linea di massima: 0,1 è un valore molto sicuro (ma comporta una maggiore lentezza), 1,0 è un buon valore predefinito, ≥2,0 può essere più rapido, ma meno stabile.Limitatore di corrente (prima fase): regola l’incremento massimo di Newton nella prima fase. In linea di massima: 0,1 è un valore molto sicuro (ma comporta una maggiore lentezza), 1,0 è un buon valore predefinito, ≥2,0 può essere più rapido, ma meno stabile.
- Errore desiderato del risolutore (primo passo): valore di convergenza desiderato per la prima iterazione (un valore inferiore indica maggiore precisione, ma tempi di calcolo più lunghi). Valore tipico accettabile: non superiore a \(1\times10^{-5}\); per una maggiore stabilità all’avvio, è possibile impostare un valore compreso tra \(1\times10^{-8}\) e \(1\times10^{-9}\).Errore desiderato del risolutore (primo passo): valore di convergenza desiderato per la prima iterazione (un valore inferiore indica maggiore precisione, ma tempi di calcolo più lunghi). Valore tipico accettabile: non superiore a \(1\times10^{-5}\); per una maggiore stabilità all’avvio, è possibile impostare un valore compreso tra \(1\times10^{-8}\) e \(1\times10^{-9}\).
Versioni successiveVersioni successive
- Numero massimo di iterazioni elettriche: limite al numero di iterazioni per tutte le successive soluzioni, a partire dalla prima.Numero massimo di iterazioni elettriche: limite al numero di iterazioni per tutte le successive soluzioni, a partire dalla prima.
- Morsetto elettrico: come descritto in precedenza, ma applicato a ogni fase successiva alla prima. In genere, è possibile allentare leggermente la pressione in questa fase per velocizzare il processo.Morsetto elettrico: come descritto in precedenza, ma applicato a ogni fase successiva alla prima. In genere, è possibile allentare leggermente la pressione in questa fase per velocizzare il processo.
- Errore desiderato del risolutore: valore di convergenza per i singoli passaggi dell’algoritmo. Mantenere la coerenza con il livello di precisione richiesto; \(1\times10^{-6}\)–\(1\times10^{-8}\) sono valori comunemente utilizzati.Errore desiderato del risolutore: valore di convergenza per i singoli passaggi dell’algoritmo. Mantenere la coerenza con il livello di precisione richiesto; \(1\times10^{-6}\)–\(1\times10^{-8}\) sono valori comunemente utilizzati.
Rampa di tensioneRampa di tensione
Quando si passa da una condizione di polarizzazione iniziale (ad esempio, 0 V) a un punto di funzionamento desiderato (possibilmente con alta tensione), le soluzioni intermedie spesso rappresentano semplicemente dei punti di passaggio. Questo blocco consente di utilizzare tolleranze più ampie o diverse soglie per attraversare più rapidamente la fase di transizione, mantenendo al contempo elevata la precisione nella soluzione del punto di funzionamento finale.Quando si passa da una condizione di polarizzazione iniziale (ad esempio, 0 V) a un punto di funzionamento desiderato (possibilmente con alta tensione), le soluzioni intermedie spesso rappresentano semplicemente dei punti di passaggio. Questo blocco consente di utilizzare tolleranze più ampie o diverse soglie per attraversare più rapidamente la fase di transizione, mantenendo al contempo elevata la precisione nella soluzione del punto di funzionamento finale.
- Numero massimo di iterazioni elettriche (rampa) — Limite per ogni fase della rampa.Numero massimo di iterazioni elettriche (rampa) — Limite per ogni fase della rampa.
- Morsetto elettrico (rampa): controllo dell’incremento durante la fase di rampa.Morsetto elettrico (rampa): controllo dell’incremento durante la fase di rampa.
- Errore desiderato del risolutore (durante la fase di «rampa») — Obiettivo di convergenza utilizzato solo per le fasi di «rampa».Errore desiderato del risolutore (durante la fase di «rampa») — Obiettivo di convergenza utilizzato solo per le fasi di «rampa».
- Numero minimo di iterazioni del metodo di Newton: imposta un numero minimo di passaggi per evitare che l’algoritmo di risoluzione si interrompa prematuramente, anche se il valore residuo iniziale risulta essere piccolo.Numero minimo di iterazioni del metodo di Newton: imposta un numero minimo di passaggi per evitare che l’algoritmo di risoluzione si interrompa prematuramente, anche se il valore residuo iniziale risulta essere piccolo.
Strategia di uscitaStrategia di uscita
- Solutore di Newton: uscita intelligente — Se il residuo «oscilla casualmente» (varia in modo irregolare senza una tendenza definita), interrompere le iterazioni e accettare la soluzione migliore ottenuta finora.Solutore di Newton: uscita intelligente — Se il residuo «oscilla casualmente» (varia in modo irregolare senza una tendenza definita), interrompere le iterazioni e accettare la soluzione migliore ottenuta finora.
- Risolvere la legge di Kirchhoff sulle correnti utilizzando il solutore di Newton: includere direttamente le condizioni della legge di Kirchhoff sulle correnti nella matrice Jacobiana per garantire una maggiore continuità delle correnti.Risolvere la legge di Kirchhoff sulle correnti utilizzando il solutore di Newton: includere direttamente le condizioni della legge di Kirchhoff sulle correnti nella matrice Jacobiana per garantire una maggiore continuità delle correnti.
- Interrompere il calcolo in caso di problemi di convergenza / Interrompere il calcolo in caso di livello di Fermi invertito: implementare meccanismi di sicurezza che interrompano il calcolo in modo definitivo quando si riscontrano stati evidentemente non validi.Interrompere il calcolo in caso di problemi di convergenza / Interrompere il calcolo in caso di livello di Fermi invertito: implementare meccanismi di sicurezza che interrompano il calcolo in modo definitivo quando si riscontrano stati evidentemente non validi.
Tipo di risolutore e strumentiTipo di risolutore e strumenti
- Solutore di Newton da utilizzare: scegli l’algoritmo:
none— Nessuna soluzione elettrica (solo soluzioni ottiche/termiche).newton— Solutore standard di Newton monodimensionale.
none— Nessuna soluzione elettrica (solo soluzioni ottiche/termiche).newton— Solutore standard di Newton monodimensionale.
- Risolutore di matrici / Risolutore di matrici complesse: selezionare il motore di calcolo per la risoluzione di sistemi lineari.Risolutore di matrici / Risolutore di matrici complesse: selezionare il motore di calcolo per la risoluzione di sistemi lineari.
- Slotboom T0 / D0 / n0: parametri per
newtonnorm.Slotboom T0 / D0 / n0: parametri pernewtonnorm. - Utilizza la cache di Newton (in fase di sperimentazione): salva su disco grandi quantità di dati intermedi per ridurre il carico sulla memoria (in fase di sperimentazione).Utilizza la cache di Newton (in fase di sperimentazione): salva su disco grandi quantità di dati intermedi per ridurre il carico sulla memoria (in fase di sperimentazione).
- Livello di dettaglio dell’output del risolutore: determina la quantità di informazioni sullo stato di avanzamento che vengono visualizzate.Livello di dettaglio dell’output del risolutore: determina la quantità di informazioni sullo stato di avanzamento che vengono visualizzate.
Consigli praticiConsigli pratici
Se il caso è delicato (elevato livello di drogaggio, campi estremi, forte iniezione), abbassare il blocco di regolazione e ridurre la tolleranza del primo passaggio. Per i casi più semplici e stabili, alzare il blocco di regolazione per aumentare la velocità. Utilizzare il blocco di rampa per raggiungere rapidamente il punto di funzionamento desiderato, quindi applicare tolleranze più rigorose in quel punto.Se il caso è delicato (elevato livello di drogaggio, campi estremi, forte iniezione), abbassare il blocco di regolazione e ridurre la tolleranza del primo passaggio. Per i casi più semplici e stabili, alzare il blocco di regolazione per aumentare la velocità. Utilizzare il blocco di rampa per raggiungere rapidamente il punto di funzionamento desiderato, quindi applicare tolleranze più rigorose in quel punto.
Consultare anche: il punto di accesso alla configurazione mostrato in DD Solver Open e la finestra di dialogo completa in DD Solver Window.Consultare anche: il punto di accesso alla configurazione mostrato in DD Solver Open e la finestra di dialogo completa in DD Solver Window.
Stabilità del risolutoreStabilità del risolutore
OghmaNano è un simulatore numerico che risolve un sistema di equazioni differenziali strettamente correlate, relative alla carica, al potenziale e alla ricombinazione. Come tutti i risolutori numerici, richiede parametri di input fisicamente realistici per ottenere una convergenza ottimale. Valori esattamente pari a zero, infinitamente grandi o distribuiti su un intervallo di valori troppo ampio possono causare instabilità nelle operazioni matriciali sottostanti. Per aiutarvi a evitare questi problemi, questa sezione illustra alcune considerazioni pratiche da tenere presente quando si configurano le simulazioni.OghmaNano è un simulatore numerico che risolve un sistema di equazioni differenziali strettamente correlate, relative alla carica, al potenziale e alla ricombinazione. Come tutti i risolutori numerici, richiede parametri di input fisicamente realistici per ottenere una convergenza ottimale. Valori esattamente pari a zero, infinitamente grandi o distribuiti su un intervallo di valori troppo ampio possono causare instabilità nelle operazioni matriciali sottostanti. Per aiutarvi a evitare questi problemi, questa sezione illustra alcune considerazioni pratiche da tenere presente quando si configurano le simulazioni.
Evitare numeri eccessivamente grandi o eccessivamente piccoli.Evitare numeri eccessivamente grandi o eccessivamente piccoli.
Apri MATLAB (o Octave su Linux) e digita la seguente espressione: \(((1e-1+1e1)-1e1)/1e-1\). Prima di premere Invio, calcola mentalmente il risultato: \(1e1\) e \(-1e1\) si annullano a vicenda, lasciando \(\frac{1e-1}{1e-1}=1\). Ora sostituisci le potenze di 10 con 19 e prova: \(((1e-19+1e19)-1e19)/1e-19\). Anche in questo caso, il risultato dovrebbe essere \(1\).Apri MATLAB (o Octave su Linux) e digita la seguente espressione: \(((1e-1+1e1)-1e1)/1e-1\). Prima di premere Invio, calcola mentalmente il risultato: \(1e1\) e \(-1e1\) si annullano a vicenda, lasciando \(\frac{1e-1}{1e-1}=1\). Ora sostituisci le potenze di 10 con 19 e prova: \(((1e-19+1e19)-1e19)/1e-19\). Anche in questo caso, il risultato dovrebbe essere \(1\).
Tuttavia, quando si lascia che sia il computer a calcolare il risultato, la risposta sarà \(0\) e non \(1\). Questo accade perché i computer memorizzano i numeri con una precisione limitata (circa 15-16 cifre decimali in un computer moderno). Quando si somma \(1e-19\) a \(1e19\), il termine più piccolo viene perso a causa dell'arrotondamento, quindi il computer visualizza \(1.000000000000000e19\) invece di \(1.0000000000000000001e19\). Sottraendo \(1e19\), si ottiene esattamente zero e il contributo di \(1e-19\) scompare.Tuttavia, quando si lascia che sia il computer a calcolare il risultato, la risposta sarà \(0\) e non \(1\). Questo accade perché i computer memorizzano i numeri con una precisione limitata (circa 15-16 cifre decimali in un computer moderno). Quando si somma \(1e-19\) a \(1e19\), il termine più piccolo viene perso a causa dell'arrotondamento, quindi il computer visualizza \(1.000000000000000e19\) invece di \(1.0000000000000000001e19\). Sottraendo \(1e19\), si ottiene esattamente zero e il contributo di \(1e-19\) scompare.
La precisione numerica è importante.La precisione numerica è importante.
Se la simulazione prevede parametri che coprono un intervallo di valori eccessivamente ampio, il risolutore potrebbe perdere precisione. Cercate di evitare rapporti estremi, soprattutto in termini di mobilità o densità degli stati, per garantire la stabilità.Se la simulazione prevede parametri che coprono un intervallo di valori eccessivamente ampio, il risolutore potrebbe perdere precisione. Cercate di evitare rapporti estremi, soprattutto in termini di mobilità o densità degli stati, per garantire la stabilità.
Tutti i computer sono interessati da questo problema, indipendentemente dalla loro potenza. Nel caso delle simulazioni di dispositivi, ciò significa che è necessario evitare intervalli di parametri che generino matrici contenenti numeri molto grandi e molto piccoli affiancati. Ad esempio, l’utilizzo contemporaneo delle mobilità di \(1e-19\) e \(1e5\) può causare problemi numerici. Questo è particolarmente importante quando si simulano materiali isolanti.Tutti i computer sono interessati da questo problema, indipendentemente dalla loro potenza. Nel caso delle simulazioni di dispositivi, ciò significa che è necessario evitare intervalli di parametri che generino matrici contenenti numeri molto grandi e molto piccoli affiancati. Ad esempio, l’utilizzo contemporaneo delle mobilità di \(1e-19\) e \(1e5\) può causare problemi numerici. Questo è particolarmente importante quando si simulano materiali isolanti.
Evitare gli zeri.Evitare gli zeri.
I valori pari a zero causano errori di divisione per zero. Non impostare le mobilità, le sezioni d’urto di cattura, le pendenze della coda o le densità degli stati esattamente a zero. È accettabile utilizzare lo zero per le costanti di ricombinazione.I valori pari a zero causano errori di divisione per zero. Non impostare le mobilità, le sezioni d’urto di cattura, le pendenze della coda o le densità degli stati esattamente a zero. È accettabile utilizzare lo zero per le costanti di ricombinazione.
⚠️ Evitare l’uso di zeri esatti.⚠️ Evitare l’uso di zeri esatti.
Sostituire gli zeri con valori molto piccoli (ad esempio \(1e-30\)) per evitare instabilità numeriche, mantenendo comunque un’approssimazione di «quasi zero».Sostituire gli zeri con valori molto piccoli (ad esempio \(1e-30\)) per evitare instabilità numeriche, mantenendo comunque un’approssimazione di «quasi zero».
Notevoli progressi nell’ambito della ricerca sui semiconduttori.Notevoli progressi nell’ambito della ricerca sui semiconduttori.
Grandi variazioni di energia all’interno del gap di banda generano densità di portatori che sono o estremamente basse o estremamente alte, il che porta direttamente agli stessi problemi di precisione descritti in Evitare numeri molto grandi e molto piccoli. Mantenere una discretizzazione dell’energia sufficientemente fine per evitare salti non fisici.Grandi variazioni di energia all’interno del gap di banda generano densità di portatori che sono o estremamente basse o estremamente alte, il che porta direttamente agli stessi problemi di precisione descritti in Evitare numeri molto grandi e molto piccoli. Mantenere una discretizzazione dell’energia sufficientemente fine per evitare salti non fisici.
🔍 Controlla la tua rete.🔍 Controlla la tua rete.
Se la discretizzazione della banda proibita è troppo grossolana, è possibile che vengano generate densità di portatori non realistiche. Affina la griglia per mantenere i valori all’interno di un intervallo numericamente stabile.Se la discretizzazione della banda proibita è troppo grossolana, è possibile che vengano generate densità di portatori non realistiche. Affina la griglia per mantenere i valori all’interno di un intervallo numericamente stabile.