Linguaggio di scripting Lua per la simulazione di dispositivi a semiconduttoreLinguaggio di scripting Lua per la simulazione di dispositivi a semiconduttore
OghmaNano supporta la programmazione di materiali in linguaggio Lua come alternativa all’inserimento manuale dei singoli parametri dei materiali tramite l’editor grafico dei parametri elettrici. Nella maggior parte delle simulazioni, i valori fissi inseriti tramite l’interfaccia grafica sono sufficienti; la programmazione in linguaggio Lua è pensata per i casi in cui le proprietà elettriche, ottiche o termiche dei materiali devono essere definite in modo programmatico o variare in funzione della temperatura, della posizione (x, y, z), della composizione o della densità dei fotoni. Pertanto, parametri quali il gap di banda, l’affinità elettronica, la mobilità dei portatori, i coefficienti di ricombinazione e la conducibilità termica possono essere espressi come funzioni anziché come semplici costanti. In questa pagina viene spiegato come sono strutturati gli script Lua per i materiali, come OghmaNano li individua e li seleziona, come vengono collegati ai materiali e ai set di dati ottici n/k e come i parametri definiti negli script vengono utilizzati all’interno di una simulazione.OghmaNano supporta la programmazione di materiali in linguaggio Lua come alternativa all’inserimento manuale dei singoli parametri dei materiali tramite l’editor grafico dei parametri elettrici. Nella maggior parte delle simulazioni, i valori fissi inseriti tramite l’interfaccia grafica sono sufficienti; la programmazione in linguaggio Lua è pensata per i casi in cui le proprietà elettriche, ottiche o termiche dei materiali devono essere definite in modo programmatico o variare in funzione della temperatura, della posizione (x, y, z), della composizione o della densità dei fotoni. Pertanto, parametri quali il gap di banda, l’affinità elettronica, la mobilità dei portatori, i coefficienti di ricombinazione e la conducibilità termica possono essere espressi come funzioni anziché come semplici costanti. In questa pagina viene spiegato come sono strutturati gli script Lua per i materiali, come OghmaNano li individua e li seleziona, come vengono collegati ai materiali e ai set di dati ottici n/k e come i parametri definiti negli script vengono utilizzati all’interno di una simulazione.
1. Cos'è uno script di materiale Lua?1. Cos'è uno script di materiale Lua?
Uno script Lua per materiali è un file di testo semplice .lua in cui vengono definite le proprietà del materiale utilizzando piccole funzioni anziché valori fissi. Ogni funzione restituisce il valore di un particolare parametro del materiale, come il divario di banda, l'affinità elettronica, la mobilità dei portatori, il coefficiente di ricombinazione o la conducibilità termica. Questi valori possono essere costanti oppure possono variare in funzione della temperatura T e della posizione (x, y, z). Le funzioni possono essere attivate o disattivate individualmente, consentendo allo script di modificare solo i parametri desiderati, mentre i restanti valori continuano a essere ricavati dalle impostazioni standard della simulazione. Una funzione tipica ha questa struttura:Uno script Lua per materiali è un file di testo semplice .lua in cui vengono definite le proprietà del materiale utilizzando piccole funzioni anziché valori fissi. Ogni funzione restituisce il valore di un particolare parametro del materiale, come il divario di banda, l'affinità elettronica, la mobilità dei portatori, il coefficiente di ricombinazione o la conducibilità termica. Questi valori possono essere costanti oppure possono variare in funzione della temperatura T e della posizione (x, y, z). Le funzioni possono essere attivate o disattivate individualmente, consentendo allo script di modificare solo i parametri desiderati, mentre i restanti valori continuano a essere ricavati dalle impostazioni standard della simulazione. Una funzione tipica ha questa struttura:
function material.Eg(state)
-- Band gap, units: eV
local enabled = true
local T = state.T
local value = 1.42 - 4.5e-4*(T - 300.0)
return value, enabled
end
Qualsiasi file .lua presente nel database di materiali OghmaNano viene considerato uno script di materiale se la dichiarazione della tabella local material = {} compare nei primi 1000 byte del file. Ciò significa che un’intestazione di licenza o un blocco di commenti esplicativi possono essere inseriti prima della dichiarazione, a condizione che il marcatore rimanga nella parte superiore del file. È possibile visualizzare e modificare lo script di un materiale direttamente dalla scheda dell’editor di codice nell’editor di materiali ??.Qualsiasi file .lua presente nel database di materiali OghmaNano viene considerato uno script di materiale se la dichiarazione della tabella local material = {} compare nei primi 1000 byte del file. Ciò significa che un’intestazione di licenza o un blocco di commenti esplicativi possono essere inseriti prima della dichiarazione, a condizione che il marcatore rimanga nella parte superiore del file. È possibile visualizzare e modificare lo script di un materiale direttamente dalla scheda dell’editor di codice nell’editor di materiali ??.
Un file di script che definisce le proprietà dei materiali può specificare un numero maggiore o minore di parametri, a seconda delle necessità. Potrebbe definire solo il divario di banda e l’affinità elettronica, oppure un insieme completo di parametri relativi alla struttura delle bande, al trasporto, alla ricombinazione e alle proprietà termiche. Le funzioni di cui non si ha bisogno possono semplicemente essere omesse oppure restituite con il valore enabled = false, in modo che il modello utilizzi il valore memorizzato negli editor standard.Un file di script che definisce le proprietà dei materiali può specificare un numero maggiore o minore di parametri, a seconda delle necessità. Potrebbe definire solo il divario di banda e l’affinità elettronica, oppure un insieme completo di parametri relativi alla struttura delle bande, al trasporto, alla ricombinazione e alle proprietà termiche. Le funzioni di cui non si ha bisogno possono semplicemente essere omesse oppure restituite con il valore enabled = false, in modo che il modello utilizzi il valore memorizzato negli editor standard.
enabled.Nella finestra dell’editor dei materiali, la scheda «Editor del codice» visualizza lo script Lua relativo a un materiale. Ogni proprietà è una piccola funzione che restituisce un valore e un flag enabled.
CH3NH3PbI3.lua). OghmaNano seleziona il file più appropriato per la simulazione.Una singola cartella contiene quattro set di dati ottici (n/k) e uno script elettrico (CH3NH3PbI3.lua). OghmaNano seleziona il file più appropriato per la simulazione.2. Dove vengono memorizzati i file di script sul disco rigido.2. Dove vengono memorizzati i file di script sul disco rigido.
Uno script di materiale può essere memorizzato in una di due posizioni, e questo determina il modo in cui viene visualizzato in OghmaNano:Uno script di materiale può essere memorizzato in una di due posizioni, e questo determina il modo in cui viene visualizzato in OghmaNano:
- All’interno di una cartella di materiali, ad esempio nella cartella «Gallio arseniuro» o «MAPI-CH3NH3PbI3». Uno script inserito in questa cartella è associato al materiale specifico e viene visualizzato all’interno della cartella del materiale quando si apre, insieme ai dati n/k e agli altri file.All’interno di una cartella di materiali, ad esempio nella cartella «Gallio arseniuro» o «MAPI-CH3NH3PbI3». Uno script inserito in questa cartella è associato al materiale specifico e viene visualizzato all’interno della cartella del materiale quando si apre, insieme ai dati n/k e agli altri file.
- All’esterno di una cartella di materiali si trova un file autonomo
.lua, collocato in un’altra posizione all’interno del database. In questo caso, viene visualizzato come un file.luaa sé stante all’interno del browser del database dei materiali, anziché essere associato a un singolo materiale.All’esterno di una cartella di materiali si trova un file autonomo.lua, collocato in un’altra posizione all’interno del database. In questo caso, viene visualizzato come un file.luaa sé stante all’interno del browser del database dei materiali, anziché essere associato a un singolo materiale.
La figura ?? mostra uno script contenuto all’interno di una cartella di materiali. La cartella del perovskite MAPI-CH3NH3PbI3 contiene diversi set di dati ottici (n/k), ovvero Ball, Leguy, Leguy-idratato e Phillips, rappresentati da icone di atomi, insieme a un singolo script elettrico, CH3NH3PbI3.lua, rappresentato da un’icona di file di codice.La figura ?? mostra uno script contenuto all’interno di una cartella di materiali. La cartella del perovskite MAPI-CH3NH3PbI3 contiene diversi set di dati ottici (n/k), ovvero Ball, Leguy, Leguy-idratato e Phillips, rappresentati da icone di atomi, insieme a un singolo script elettrico, CH3NH3PbI3.lua, rappresentato da un’icona di file di codice.
3. Un unico schema elettrico, diversi set di dati ottici.3. Un unico schema elettrico, diversi set di dati ottici.
È prassi comune disporre di diversi set di costanti ottiche per un determinato materiale, ma di un solo set coerente di parametri elettrici. Diversi gruppi di ricerca misurano i valori di n e k in intervalli di lunghezze d’onda differenti, utilizzando campioni e metodi diversi. Pertanto, è utile conservare separatamente ciascuno di questi set di dati ottici e scegliere tra essi in base alla simulazione. I parametri elettrici (banda proibita, affinità elettronica, mobilità, ecc.), al contrario, è preferibile definirli in un’unica definizione coerente per il materiale. Questo è esattamente l’assetto illustrato in ??: quattro set di dati n/k e un unico set di parametri elettrici.È prassi comune disporre di diversi set di costanti ottiche per un determinato materiale, ma di un solo set coerente di parametri elettrici. Diversi gruppi di ricerca misurano i valori di n e k in intervalli di lunghezze d’onda differenti, utilizzando campioni e metodi diversi. Pertanto, è utile conservare separatamente ciascuno di questi set di dati ottici e scegliere tra essi in base alla simulazione. I parametri elettrici (banda proibita, affinità elettronica, mobilità, ecc.), al contrario, è preferibile definirli in un’unica definizione coerente per il materiale. Questo è esattamente l’assetto illustrato in ??: quattro set di dati n/k e un unico set di parametri elettrici.
Quando si utilizza un determinato materiale, OghmaNano cerca di selezionare automaticamente il file più appropriato. Se non è presente uno script a livello del materiale specifico che si sta simulando, il modello effettuerà una ricerca a ritroso nella struttura delle cartelle del materiale per individuare uno script adatto da utilizzare. Ciò significa che è possibile associare un singolo script elettrico a un livello appropriato e farlo applicare ai set di dati raggruppati al di sotto, senza dover duplicare gli stessi parametri elettrici in ogni variante ottica.Quando si utilizza un determinato materiale, OghmaNano cerca di selezionare automaticamente il file più appropriato. Se non è presente uno script a livello del materiale specifico che si sta simulando, il modello effettuerà una ricerca a ritroso nella struttura delle cartelle del materiale per individuare uno script adatto da utilizzare. Ciò significa che è possibile associare un singolo script elettrico a un livello appropriato e farlo applicare ai set di dati raggruppati al di sotto, senza dover duplicare gli stessi parametri elettrici in ogni variante ottica.
Perché separarli? I dati ottici sono spesso l’elemento che varia tra le diverse misurazioni: un film misurato a 800 nm da un gruppo e a 1100 nm da un altro produce due set di dati n/k effettivamente diversi. Il comportamento elettrico del materiale non è legato all’intervallo di lunghezze d’onda di una misurazione ottica, quindi un unico script elettrico mantiene la coerenza fisica indipendentemente dal set di dati ottici con cui viene associato.Perché separarli? I dati ottici sono spesso l’elemento che varia tra le diverse misurazioni: un film misurato a 800 nm da un gruppo e a 1100 nm da un altro produce due set di dati n/k effettivamente diversi. Il comportamento elettrico del materiale non è legato all’intervallo di lunghezze d’onda di una misurazione ottica, quindi un unico script elettrico mantiene la coerenza fisica indipendentemente dal set di dati ottici con cui viene associato.
4. Struttura di uno script per materiali4. Struttura di uno script per materiali
L’esempio riportato di seguito è un esempio completo di script per materiali elettrici relativi all’AlGaInAs, ovvero il composto quaternario a base di InP con reticolo cristallino compatibile, utilizzato per laser e rivelatori per le telecomunicazioni. Viene mostrato nella sua interezza, in modo che si possa vedere come viene strutturato uno script reale e completo, con tutta la documentazione necessaria; ogni funzione viene quindi analizzata e spiegata nella sezione Sezione 5 che segue. Cliccare per espandere.L’esempio riportato di seguito è un esempio completo di script per materiali elettrici relativi all’AlGaInAs, ovvero il composto quaternario a base di InP con reticolo cristallino compatibile, utilizzato per laser e rivelatori per le telecomunicazioni. Viene mostrato nella sua interezza, in modo che si possa vedere come viene strutturato uno script reale e completo, con tutta la documentazione necessaria; ogni funzione viene quindi analizzata e spiegata nella sezione Sezione 5 che segue. Cliccare per espandere.
Esempio completo di testo di riferimento — AlGaInAs.luaEsempio completo di testo di riferimento — AlGaInAs.lua
-- See end of file for copyright, licensing and documentation links.
local material = {}
-- ---------------------------------------------------------------------------
-- NOTES ON AlGaInAs (read before using):
--
-- (Al_x Ga_{1-x})_{0.47} In_{0.53} As, LATTICE-MATCHED to InP (a = 5.869 A). The
-- workhorse quaternary for 1.3-1.55 um telecom lasers, modulators and
-- photodetectors. In is fixed at 0.53 for the InP match, so the single design
-- knob is the Al fraction x on the group-III sublattice.
--
-- DIRECT gap for all x (no crossover in the useful range): ~0.75 eV at x=0
-- (Ga0.47In0.53As, "InGaAs", ~1.65 um) rising to ~1.46 eV at x=1
-- (Al0.48In0.52As, ~0.85 um).
Mostra altroMostra altro
-- Compared with the older InGaAsP telecom
-- quaternary, AlGaInAs offers a larger conduction-band offset (better electron
-- confinement), which is why it is favoured for high-temperature laser
-- operation - a device advantage, captured here only via Xi/Eg.
--
-- The lattice constant is FIXED by the InP match (independent of x). Eg is
-- computed from x; the remaining parameters are given at a representative
-- x = 0.30 (Eg ~ 0.92 eV, ~1.34 um) with InGaAs/AlInAs end points noted.
--
-- REFERENCES
--
-- [1] I. Vurgaftman, J. R. Meyer, L. R. Ram-Mohan, J. Appl. Phys. 89, 5815
-- (2001). [constituent band parameters, bowing]
-- [2] S. Adachi, "Properties of Semiconductor Alloys", Wiley (2009); and
-- S. Adachi, "Physical Properties of III-V Semiconductor Compounds"
-- (1992). [Eg(x), transport, dielectric, thermal]
-- [3] O. Madelung, "Semiconductors: Data Handbook", Springer (2004).
-- ---------------------------------------------------------------------------
function material.name()
local enabled = true
return "AlGaInAs", enabled
end
function material.description()
local enabled = true
return "(AlxGa1-x)0.47In0.53As on InP, x = Al ~ 0.30 (direct gap)", enabled
end
function material.formula()
local enabled = true
return "AlGaInAs", enabled
end
function material.Eg(state)
-- Units: eV
-- Refs: [1],[2]
--
-- Direct gap, lattice-matched to InP, in Al fraction x. 300 K relation
-- [2]: Eg(x) = 0.76 + 0.49*x + 0.20*x^2
-- (0.76 eV at x=0 -> 1.45 eV at x=1). Temperature handled by a
-- Varshni-type shift about 300 K (alpha = 4.0e-4 eV/K, beta = 200 K).
-- x = 0.30 -> ~0.925 eV (~1.34 um) at 300 K. Change al_fraction here
-- and in the functions noted in the header.
local enabled = true
local al_fraction = 0.30
local x = al_fraction
local T = state.T
local eg_300 = 0.76 + 0.49*x + 0.20*x*x
local tshift = 4.0e-4*(90000.0/500.0 - T*T/(T + 200.0))
local value = eg_300 + tshift
return value, enabled
end
function material.Xi(state)
-- Electron affinity
-- Units: eV
-- Refs: [2],[3]
--
-- ~4.45 eV at x = 0.30. Falls with Al (InGaAs ~4.6 -> AlInAs ~4.1 eV);
-- the resulting large conduction-band offset to InP / across the alloy
-- is the key confinement advantage over InGaAsP.
local enabled = true
local value = 4.45
return value, enabled
end
function material.Nc(state)
-- Effective conduction-band density of states
-- Units: m^-3
-- Refs: [2],[3]
--
-- ~4e23 m^-3 at 300 K for x = 0.30 (small direct-valley mass, m_e* ~
-- 0.05-0.07 m0). Endpoints: InGaAs ~2.1e23, AlInAs ~5.4e23 m^-3.
local enabled = true
local T = state.T
local value = 4.0e23*(T/300.0)^1.5
return value, enabled
end
function material.Nv(state)
-- Effective valence-band density of states
-- Units: m^-3
-- Refs: [2],[3]
--
-- ~8e24 m^-3 at 300 K for x = 0.30 (InGaAs ~7.7e24, AlInAs ~9e24 m^-3).
local enabled = true
local T = state.T
local value = 8.0e24*(T/300.0)^1.5
return value, enabled
end
function material.mu_e(state)
-- Low-field electron mobility
-- Units: m^2 V^-1 s^-1
-- Refs: [2]
--
-- ~0.3 m^2/V/s (3000 cm^2/V/s) at x = 0.30 - high (small mass) but
-- alloy-scattering-reduced from InGaAs (~10000-13000 cm^2/V/s) toward
-- AlInAs (~1000-4000 cm^2/V/s). (300/T)^1.5 approximate.
local enabled = true
local T = state.T
local value = 0.30*(300.0/T)^1.5
return value, enabled
end
function material.mue_x(state)
return material.mu_e(state)
end
function material.mue_y(state)
return material.mu_e(state)
end
function material.mue_z(state)
return material.mu_e(state)
end
function material.mu_h(state)
-- Low-field hole mobility
-- Units: m^2 V^-1 s^-1
-- Refs: [2]
--
-- ~0.02 m^2/V/s (200 cm^2/V/s) at x = 0.30 (InGaAs ~300, AlInAs ~100
-- cm^2/V/s). (300/T)^1.5 approximate.
local enabled = true
local T = state.T
local value = 0.02*(300.0/T)^1.5
return value, enabled
end
function material.muh_x(state)
return material.mu_h(state)
end
function material.muh_y(state)
return material.mu_h(state)
end
function material.muh_z(state)
return material.mu_h(state)
end
function material.epsilonr(state)
-- Relative static permittivity
-- Dimensionless
-- Refs: [2],[3]
--
-- ~13.4 at x = 0.30 (InGaAs ~13.9 -> AlInAs ~12.5).
local enabled = true
local value = 13.4
return value, enabled
end
function material.free_to_free_recombination(state)
-- Radiative recombination coefficient
-- Units: m^3 s^-1
-- Refs: representative (see note)
--
-- Direct-gap value ~1e-10 cm^3/s = 1e-16 m^3/s. Representative; refine
-- against measured lifetimes.
local enabled = true
local value = 1.0e-16
return value, enabled
end
function material.auger_Cn(state)
-- Electron Auger recombination coefficient
-- Units: m^6 s^-1
-- Refs: representative (see note)
--
-- ~2e-28 cm^6/s = 2e-40 m^6/s at the InGaAs-rich (narrow-gap) end.
-- Auger is a major loss mechanism in 1.55 um AlGaInAs/InGaAsP lasers
-- and grows sharply as x decreases (gap narrows) - scale accordingly.
local enabled = true
local value = 2.0e-40
return value, enabled
end
function material.auger_Cp(state)
-- Hole Auger recombination coefficient
-- Units: m^6 s^-1
-- Refs: representative (see note)
--
-- As auger_Cn: representative 2e-28 cm^6/s = 2e-40 m^6/s.
local enabled = true
local value = 2.0e-40
return value, enabled
end
function material.ss_srh_trap_energy(state)
-- SRH trap energy relative to the middle of the band gap.
-- Units: eV
--
-- Positive values are above mid-gap (towards the conduction band).
-- Negative values are below mid-gap (towards the valence band).
--
-- Defect-dependent. Lattice-matched InP-based material can be very high
-- quality; set level and density from your own data. Mid-gap default.
local enabled = true
local value = 0.0
return value, enabled
end
function material.ss_srh_Nt(state)
-- SRH trap density
-- Units: m^-3
--
-- Defect-dependent placeholder; set from the intended material
-- quality.
local enabled = true
local value = 1.0e21
return value, enabled
end
function material.ss_srh_sigma_n(state)
-- Electron capture cross section
-- Units: m^2
--
-- Defect-dependent placeholder; set from measurement.
local enabled = true
local value = 1.0e-19
return value, enabled
end
function material.ss_srh_sigma_p(state)
-- Hole capture cross section
-- Units: m^2
--
-- Defect-dependent placeholder; set from measurement.
local enabled = true
local value = 1.0e-19
return value, enabled
end
function material.thermal_kl(state)
-- Thermal conductivity
-- Units: W m^-1 K^-1
-- Refs: [2]
--
-- ~4.5 W/m/K at x = 0.30 - LOW, from strong mass-disorder phonon
-- scattering in this quaternary (well below InP's ~68 or InAs's ~27
-- W/m/K). Weakly dependent in the alloy regime; (300/T)^0.4 approximate.
-- This low kappa contributes to self-heating in InP-based lasers.
local enabled = true
local T = state.T
local value = 4.5*(300.0/T)^0.4
return value, enabled
end
function material.heat_capacity(state)
-- Specific heat capacity
-- Units: J kg^-1 K^-1
-- Refs: [3]
--
-- ~320 J/kg/K near 300 K (interpolated across the constituents).
local enabled = true
local value = 320.0
return value, enabled
end
function material.density(state)
-- Mass density
-- Units: kg m^-3
-- Refs: [3]
--
-- ~5300 kg/m^3 at x = 0.30 (InGaAs ~5500 -> AlInAs ~4650 kg/m^3).
local enabled = true
local value = 5300.0
return value, enabled
end
function material.lattice_constant(state)
-- Cubic lattice constant
-- Units: m
-- Refs: [1],[3]
--
-- FIXED at the InP match, a = 5.8697 A, INDEPENDENT of x (Al substitutes
-- for Ga at constant lattice constant along the InP-matched line).
-- Linear thermal expansion ~4.6e-6 /K (InP-like).
local enabled = true
local T = state.T
local a300 = 5.8697e-10
local expansion = 4.6e-6
local value = a300*(1.0 + expansion*(T - 300.0))
return value, enabled
end
function material.thermal_tau_e(state)
-- Electron energy relaxation time towards the lattice temperature
-- Units: s
--
-- Value basis: III-V family estimate
-- Confidence: Medium
--
-- Reference:
-- https://www.mdpi.com/2673-3978/3/2/16
--
-- Comments:
-- Representative III-V carrier-to-lattice relaxation time. GaAs-like values
-- are typically sub-ps to ps and field dependent.
local enabled = true
local value = 5.000000e-13
return value, enabled
end
function material.thermal_tau_h(state)
-- Hole energy relaxation time towards the lattice temperature
-- Units: s
--
-- Value basis: III-V family estimate
-- Confidence: Medium
--
-- Reference:
-- https://www.mdpi.com/2673-3978/3/2/16
--
-- Comments:
-- Representative III-V carrier-to-lattice relaxation time. GaAs-like values
-- are typically sub-ps to ps and field dependent.
local enabled = true
local value = 5.000000e-13
return value, enabled
end
function material.print()
local state = {
T = 300.0,
x = 0.0,
y = 0.0,
z = 0.0,
photon_density = 0.0,
}
print(string.format("Material: %s", material.name()))
print(string.format("Description: %s", material.description()))
print(string.format("Formula: %s", material.formula()))
print(string.format("Temperature: %.2f K", state.T))
print(string.format("Position: %.6e, %.6e, %.6e m", state.x, state.y, state.z))
print(string.format("Photon density: %.6e m^-3", state.photon_density))
print(string.format("Band gap: %.6f eV", material.Eg(state)))
print(string.format("Electron affinity: %.6f eV", material.Xi(state)))
print(string.format("Electron mobility: %.6e m^2/V/s", material.mu_e(state)))
print(string.format("Hole mobility: %.6e m^2/V/s", material.mu_h(state)))
print(string.format("Nc: %.6e m^-3", material.Nc(state)))
print(string.format("Nv: %.6e m^-3", material.Nv(state)))
print(string.format("Relative permittivity: %.6f", material.epsilonr(state)))
print(string.format("Radiative coeff.: %.6e m^3/s", material.free_to_free_recombination(state)))
print(string.format("Electron Auger coeff.: %.6e m^6/s", material.auger_Cn(state)))
print(string.format("Hole Auger coeff.: %.6e m^6/s", material.auger_Cp(state)))
print(string.format("SRH trap energy: %.6f eV", material.ss_srh_trap_energy(state)))
print(string.format("SRH trap density: %.6e m^-3", material.ss_srh_Nt(state)))
print(string.format("SRH sigma n: %.6e m^2", material.ss_srh_sigma_n(state)))
print(string.format("SRH sigma p: %.6e m^2", material.ss_srh_sigma_p(state)))
print(string.format("Electron energy relax.: %.6e s", material.thermal_tau_e(state)))
print(string.format("Hole energy relax.: %.6e s", material.thermal_tau_h(state)))
print(string.format("Thermal conductivity: %.6e W/m/K", material.thermal_kl(state)))
print(string.format("Heat capacity: %.6e J/kg/K", material.heat_capacity(state)))
print(string.format("Mass density: %.6e kg/m^3", material.density(state)))
end
return material
5. Le funzioni nel dettaglio5. Le funzioni nel dettaglio
Ogni funzione in uno script di materiali segue lo stesso schema: riceve la tabella state e restituisce un valore value insieme a un flag enabled. Le sezioni successive descrivono ciascun gruppo di funzioni dell’esempio AlGaInAs.Ogni funzione in uno script di materiali segue lo stesso schema: riceve la tabella state e restituisce un valore value insieme a un flag enabled. Le sezioni successive descrivono ciascun gruppo di funzioni dell’esempio AlGaInAs.
5.1 La struttura state e il flag enabled5.1 La struttura state e il flag enabled
Ogni funzione riceve in input un oggetto state che contiene le condizioni di simulazione locali nel punto del dispositivo in cui viene richiesto il valore. In Lua, questo è implementato come una tabella; se si ha familiarità con il linguaggio C, è meglio considerarlo come una struttura dati struct, oppure, in C++, come una piccola classe/oggetto i cui membri contengono lo stato locale corrente. I campi disponibili sono:Ogni funzione riceve in input un oggetto state che contiene le condizioni di simulazione locali nel punto del dispositivo in cui viene richiesto il valore. In Lua, questo è implementato come una tabella; se si ha familiarità con il linguaggio C, è meglio considerarlo come una struttura dati struct, oppure, in C++, come una piccola classe/oggetto i cui membri contengono lo stato locale corrente. I campi disponibili sono:
state.T— temperatura locale (in Kelvin).state.T— temperatura locale (in Kelvin).state.x,state.y,state.z: posizione all’interno del dispositivo (in metri).state.x,state.y,state.z: posizione all’interno del dispositivo (in metri).state.photon_density— densità locale di fotoni (m-3).state.photon_density— densità locale di fotoni (m-3).
Poiché OghmaNano fornisce questo valore locale state alla funzione, è possibile calcolare un parametro del materiale in base alla temperatura, alla posizione o alla densità dei fotoni, anziché limitarsi a un singolo valore fisso. Il secondo valore restituito, enabled, determina se il modello utilizza il valore restituito dallo script. Se enabled è true, viene utilizzato il valore dello script; se è false, viene invece utilizzato il valore memorizzato negli editor standard. In questo modo, uno script può definire solo i parametri che devono variare, lasciando tutti gli altri parametri come valori fissi standard.Poiché OghmaNano fornisce questo valore locale state alla funzione, è possibile calcolare un parametro del materiale in base alla temperatura, alla posizione o alla densità dei fotoni, anziché limitarsi a un singolo valore fisso. Il secondo valore restituito, enabled, determina se il modello utilizza il valore restituito dallo script. Se enabled è true, viene utilizzato il valore dello script; se è false, viene invece utilizzato il valore memorizzato negli editor standard. In questo modo, uno script può definire solo i parametri che devono variare, lasciando tutti gli altri parametri come valori fissi standard.
5.2 Identità: name, description, formula5.2 Identità: name, description, formula
Queste tre funzioni restituiscono stringhe descrittive anziché valori numerici. Indicano il tipo di materiale, forniscono una breve descrizione comprensibile e ne riportano la formula chimica.Queste tre funzioni restituiscono stringhe descrittive anziché valori numerici. Indicano il tipo di materiale, forniscono una breve descrizione comprensibile e ne riportano la formula chimica.
function material.name()
local enabled = true
return "AlGaInAs", enabled
end
function material.description()
local enabled = true
return "(AlxGa1-x)0.47In0.53As on InP, x = Al ~ 0.30 (direct gap)", enabled
end
function material.formula()
local enabled = true
return "AlGaInAs", enabled
end
5.3 Struttura a bande: Eg e Xi5.3 Struttura a bande: Eg e Xi
Eg restituisce il divario di banda (eV) e Xi l’affinità elettronica (eV). Insieme, queste due quantità definiscono le posizioni dei bordi delle bande di conduzione e di valenza e vengono utilizzate in tutto il modello (vedere Sezione 7). Il divario di banda dell’AlGaInAs è la funzione più utile presente nel file: calcola il divario a 300 K a partire dalla frazione di Al (x) e quindi applica una correzione di temperatura di tipo Varshni, in modo che il valore restituito dipenda da state.T.Eg restituisce il divario di banda (eV) e Xi l’affinità elettronica (eV). Insieme, queste due quantità definiscono le posizioni dei bordi delle bande di conduzione e di valenza e vengono utilizzate in tutto il modello (vedere Sezione 7). Il divario di banda dell’AlGaInAs è la funzione più utile presente nel file: calcola il divario a 300 K a partire dalla frazione di Al (x) e quindi applica una correzione di temperatura di tipo Varshni, in modo che il valore restituito dipenda da state.T.
function material.Eg(state)
-- Units: eV. Direct gap, lattice-matched to InP, in Al fraction x.
local enabled = true
local al_fraction = 0.30
local x = al_fraction
local T = state.T
local eg_300 = 0.76 + 0.49*x + 0.20*x*x -- 300 K value from composition
local tshift = 4.0e-4*(90000.0/500.0 - T*T/(T + 200.0)) -- Varshni-type shift
local value = eg_300 + tshift
return value, enabled
end
function material.Xi(state)
-- Electron affinity, units: eV
local enabled = true
local value = 4.45
return value, enabled
end
Esempio pratico: quando x = 0,30, il termine relativo alla composizione a 300 K fornisce Eg(300 K) ≈ 0,76 + 0,49(0,30) + 0,20(0,30)2 ≈ 0,925 eV (circa 1,34 μm). Poiché Eg indica state.T, l’aumento della temperatura del dispositivo restringe automaticamente il gap grazie al termine di Varshni, un effetto che un valore fisso non potrebbe mai riprodurre.Esempio pratico: quando x = 0,30, il termine relativo alla composizione a 300 K fornisce Eg(300 K) ≈ 0,76 + 0,49(0,30) + 0,20(0,30)2 ≈ 0,925 eV (circa 1,34 μm). Poiché Eg indica state.T, l’aumento della temperatura del dispositivo restringe automaticamente il gap grazie al termine di Varshni, un effetto che un valore fisso non potrebbe mai riprodurre.
5.4 Densità degli stati: Nc e Nv5.4 Densità degli stati: Nc e Nv
Nc e Nv restituiscono le densità di stati effettive delle bande di conduzione e di valenza (m-3). In questo esempio, entrambe le densità sono indicate a 300 K e vengono scalate in funzione della temperatura secondo la formula (T/300)1,5, che corrisponde al risultato standard per una banda parabolica. Questa dipendenza dalla temperatura è specifica del modello di materiale utilizzato in questo caso; altri materiali possono utilizzare dipendenze dalla temperatura diverse, a seconda delle necessità.Nc e Nv restituiscono le densità di stati effettive delle bande di conduzione e di valenza (m-3). In questo esempio, entrambe le densità sono indicate a 300 K e vengono scalate in funzione della temperatura secondo la formula (T/300)1,5, che corrisponde al risultato standard per una banda parabolica. Questa dipendenza dalla temperatura è specifica del modello di materiale utilizzato in questo caso; altri materiali possono utilizzare dipendenze dalla temperatura diverse, a seconda delle necessità.
function material.Nc(state)
local enabled = true
local T = state.T
local value = 4.0e23*(T/300.0)^1.5
return value, enabled
end
function material.Nv(state)
local enabled = true
local T = state.T
local value = 8.0e24*(T/300.0)^1.5
return value, enabled
end
5.5 Mobilità: mu_e, mu_h e alias direzionali5.5 Mobilità: mu_e, mu_h e alias direzionali
mu_e e mu_h restituiscono la mobilità degli elettroni e delle lacune a basso campo (m2 V-1 s-1). In questo esempio, la mobilità è scalata in funzione della temperatura secondo la relazione (300/T)1,5, ma questa dipendenza dalla temperatura fa parte del modello specifico del materiale e può essere sostituita con una relazione diversa, se necessario. Ad esempio, in un semiconduttore organico, la mobilità potrebbe essere descritta utilizzando una dipendenza dalla temperatura di tipo attivato o a salti. OghmaNano può anche utilizzare mobilità che dipendono dalla direzione, quindi il file fornisce mue_x, mue_y, mue_z e muh_x, muh_y, muh_z. In questo esempio isotropo, ciascuno di essi restituisce semplicemente lo stesso valore scalare, ma per un materiale anisotropo, a ciascuna direzione può essere associata una propria espressione.mu_e e mu_h restituiscono la mobilità degli elettroni e delle lacune a basso campo (m2 V-1 s-1). In questo esempio, la mobilità è scalata in funzione della temperatura secondo la relazione (300/T)1,5, ma questa dipendenza dalla temperatura fa parte del modello specifico del materiale e può essere sostituita con una relazione diversa, se necessario. Ad esempio, in un semiconduttore organico, la mobilità potrebbe essere descritta utilizzando una dipendenza dalla temperatura di tipo attivato o a salti. OghmaNano può anche utilizzare mobilità che dipendono dalla direzione, quindi il file fornisce mue_x, mue_y, mue_z e muh_x, muh_y, muh_z. In questo esempio isotropo, ciascuno di essi restituisce semplicemente lo stesso valore scalare, ma per un materiale anisotropo, a ciascuna direzione può essere associata una propria espressione.
function material.mu_e(state)
-- Low-field electron mobility, units: m^2 V^-1 s^-1
local enabled = true
local T = state.T
local value = 0.30*(300.0/T)^1.5
return value, enabled
end
function material.mue_x(state) return material.mu_e(state) end
function material.mue_y(state) return material.mu_e(state) end
function material.mue_z(state) return material.mu_e(state) end
function material.mu_h(state)
-- Low-field hole mobility, units: m^2 V^-1 s^-1
local enabled = true
local T = state.T
local value = 0.02*(300.0/T)^1.5
return value, enabled
end
function material.muh_x(state) return material.mu_h(state) end
function material.muh_y(state) return material.mu_h(state) end
function material.muh_z(state) return material.mu_h(state) end
5.6 Permittività: epsilonr5.6 Permittività: epsilonr
epsilonr restituisce la permittività statica relativa (grandezza adimensionale), che definisce le proprietà elettrostatiche nel risolutore per il calcolo della diffusione e della deriva.epsilonr restituisce la permittività statica relativa (grandezza adimensionale), che definisce le proprietà elettrostatiche nel risolutore per il calcolo della diffusione e della deriva.
function material.epsilonr(state)
-- Relative static permittivity, dimensionless
local enabled = true
local value = 13.4
return value, enabled
end
5.7 Ricombinazione: processi radiativi e di Auger5.7 Ricombinazione: processi radiativi e di Auger
free_to_free_recombination restituisce il coefficiente di ricombinazione tra bande (ricombinazione radiativa) (m³ s⁻¹), mentre auger_Cn e auger_Cp restituiscono i coefficienti di Auger per gli elettroni e le lacune (m⁶ s⁻¹). La ricombinazione di Auger è un importante meccanismo di perdita nei dispositivi III–V a banda stretta e la sua intensità aumenta notevolmente all’aumentare della riduzione della banda, pertanto questi parametri sono candidati ideali per un’espressione che tenga conto della composizione o della temperatura in uno script più avanzato.free_to_free_recombination restituisce il coefficiente di ricombinazione tra bande (ricombinazione radiativa) (m³ s⁻¹), mentre auger_Cn e auger_Cp restituiscono i coefficienti di Auger per gli elettroni e le lacune (m⁶ s⁻¹). La ricombinazione di Auger è un importante meccanismo di perdita nei dispositivi III–V a banda stretta e la sua intensità aumenta notevolmente all’aumentare della riduzione della banda, pertanto questi parametri sono candidati ideali per un’espressione che tenga conto della composizione o della temperatura in uno script più avanzato.
function material.free_to_free_recombination(state)
-- Radiative recombination coefficient, units: m^3 s^-1
local enabled = true
local value = 1.0e-16
return value, enabled
end
function material.auger_Cn(state)
-- Electron Auger coefficient, units: m^6 s^-1
local enabled = true
local value = 2.0e-40
return value, enabled
end
function material.auger_Cp(state)
-- Hole Auger coefficient, units: m^6 s^-1
local enabled = true
local value = 2.0e-40
return value, enabled
end
5.8 Trappole SRH5.8 Trappole SRH
Le quattro funzioni di Shockley–Read–Hall descrivono un singolo livello di trappola di equilibrio: ss_srh_trap_energy (energia della trappola rispetto al punto medio del gap energetico, eV; un valore positivo indica una posizione più vicina alla banda di conduzione), ss_srh_Nt (densità di trappole, m-3) e ss_srh_sigma_n / ss_srh_sigma_p (sezione d’urto per la cattura di elettroni e lacune, m2). Questi parametri dipendono fortemente dai difetti e dal campione specifico, pertanto i valori riportati nell’esempio sono dei valori indicativi che devono essere sostituiti con i dati misurati.Le quattro funzioni di Shockley–Read–Hall descrivono un singolo livello di trappola di equilibrio: ss_srh_trap_energy (energia della trappola rispetto al punto medio del gap energetico, eV; un valore positivo indica una posizione più vicina alla banda di conduzione), ss_srh_Nt (densità di trappole, m-3) e ss_srh_sigma_n / ss_srh_sigma_p (sezione d’urto per la cattura di elettroni e lacune, m2). Questi parametri dipendono fortemente dai difetti e dal campione specifico, pertanto i valori riportati nell’esempio sono dei valori indicativi che devono essere sostituiti con i dati misurati.
function material.ss_srh_trap_energy(state)
-- Trap energy relative to mid-gap, units: eV
local enabled = true
local value = 0.0
return value, enabled
end
function material.ss_srh_Nt(state)
-- SRH trap density, units: m^-3
local enabled = true
local value = 1.0e21
return value, enabled
end
function material.ss_srh_sigma_n(state)
-- Electron capture cross section, units: m^2
local enabled = true
local value = 1.0e-19
return value, enabled
end
function material.ss_srh_sigma_p(state)
-- Hole capture cross section, units: m^2
local enabled = true
local value = 1.0e-19
return value, enabled
end
5.9 Parametri termici e strutturali5.9 Parametri termici e strutturali
Le restanti proprietà fisiche descrivono il comportamento termico e strutturale del materiale: thermal_kl (conduttività termica del reticolo cristallino, W m-1 K-1), heat_capacity (J kg-1 K-1), density (kg m-3), lattice_constant (m, con espansione termica lineare applicata a circa 300 K) e i tempi di rilassamento dell’energia dei portatori thermal_tau_e / thermal_tau_h (s). Si noti come thermal_kl e lattice_constant restituiscono state.T, fornendo valori dipendenti dalla temperatura.Le restanti proprietà fisiche descrivono il comportamento termico e strutturale del materiale: thermal_kl (conduttività termica del reticolo cristallino, W m-1 K-1), heat_capacity (J kg-1 K-1), density (kg m-3), lattice_constant (m, con espansione termica lineare applicata a circa 300 K) e i tempi di rilassamento dell’energia dei portatori thermal_tau_e / thermal_tau_h (s). Si noti come thermal_kl e lattice_constant restituiscono state.T, fornendo valori dipendenti dalla temperatura.
function material.thermal_kl(state)
-- Thermal conductivity, units: W m^-1 K^-1
local enabled = true
local T = state.T
local value = 4.5*(300.0/T)^0.4
return value, enabled
end
function material.heat_capacity(state)
-- Specific heat capacity, units: J kg^-1 K^-1
local enabled = true
local value = 320.0
return value, enabled
end
function material.density(state)
-- Mass density, units: kg m^-3
local enabled = true
local value = 5300.0
return value, enabled
end
function material.lattice_constant(state)
-- Cubic lattice constant, units: m (with thermal expansion)
local enabled = true
local T = state.T
local a300 = 5.8697e-10
local expansion = 4.6e-6
local value = a300*(1.0 + expansion*(T - 300.0))
return value, enabled
end
function material.thermal_tau_e(state)
-- Electron energy relaxation time, units: s
local enabled = true
local value = 5.000000e-13
return value, enabled
end
function material.thermal_tau_h(state)
-- Hole energy relaxation time, units: s
local enabled = true
local value = 5.000000e-13
return value, enabled
end
5.10 print() – uno strumento di supporto per l’autovalutazione5.10 print() – uno strumento di supporto per l’autovalutazione
Infine, print() è una funzione di supporto piuttosto che una proprietà intrinseca del materiale. Crea una tabella rappresentativa state (300 K, all’origine, densità fotonica pari a zero) e stampa tutti i valori calcolati dallo script. Questo è utile per verificare lo script tramite la riga di comando o in un interprete Lua indipendente, prima di utilizzarlo in una simulazione: un modo rapido per confermare che i risultati ottenuti corrispondano alle grandezze previste.Infine, print() è una funzione di supporto piuttosto che una proprietà intrinseca del materiale. Crea una tabella rappresentativa state (300 K, all’origine, densità fotonica pari a zero) e stampa tutti i valori calcolati dallo script. Questo è utile per verificare lo script tramite la riga di comando o in un interprete Lua indipendente, prima di utilizzarlo in una simulazione: un modo rapido per confermare che i risultati ottenuti corrispondano alle grandezze previste.
6. Utilizzo di uno script in una simulazione6. Utilizzo di uno script in una simulazione
Finora, la discussione si è concentrata sugli script Lua memorizzati nel database dei materiali. Per utilizzare uno di questi script in una simulazione di un dispositivo reale, aprire l’editor dei parametri elettrici per il livello desiderato. L’editor può operare in due modi diversi: può utilizzare i valori dei parametri fissi standard memorizzati in sim.json, oppure può ottenere i valori dei parametri selezionati direttamente da uno script Lua relativo ai materiali.Finora, la discussione si è concentrata sugli script Lua memorizzati nel database dei materiali. Per utilizzare uno di questi script in una simulazione di un dispositivo reale, aprire l’editor dei parametri elettrici per il livello desiderato. L’editor può operare in due modi diversi: può utilizzare i valori dei parametri fissi standard memorizzati in sim.json, oppure può ottenere i valori dei parametri selezionati direttamente da uno script Lua relativo ai materiali.
Per impostazione predefinita, l’esecuzione di script è disabilitata e l’editor funziona normalmente ??. Ogni parametro è rappresentato da un valore numerico modificabile, memorizzato in sim.json. In questa modalità, lo script Lua per i materiali non viene utilizzato.Per impostazione predefinita, l’esecuzione di script è disabilitata e l’editor funziona normalmente ??. Ogni parametro è rappresentato da un valore numerico modificabile, memorizzato in sim.json. In questa modalità, lo script Lua per i materiali non viene utilizzato.
Facendo clic sul pulsante «Script», si abilita la funzione di scripting dei materiali ??. I parametri forniti dallo script vengono quindi sostituiti nell’editor con la dicitura «Fare riferimento allo script per il valore». I parametri le cui corrispondenti funzioni Lua sono disabilitate continuano a utilizzare i valori predefiniti memorizzati in sim.json. In questo modo, è possibile utilizzare uno script per controllare solo le proprietà che devono essere modificate tramite script, lasciando invariati tutti gli altri parametri.Facendo clic sul pulsante «Script», si abilita la funzione di scripting dei materiali ??. I parametri forniti dallo script vengono quindi sostituiti nell’editor con la dicitura «Fare riferimento allo script per il valore». I parametri le cui corrispondenti funzioni Lua sono disabilitate continuano a utilizzare i valori predefiniti memorizzati in sim.json. In questo modo, è possibile utilizzare uno script per controllare solo le proprietà che devono essere modificate tramite script, lasciando invariati tutti gli altri parametri.
sim.json e lo script non viene utilizzato.Script disattivato: i valori fissi vengono memorizzati direttamente in sim.json e lo script non viene utilizzato.
GaAs.lua).La scheda dell’editor di codice all’interno dell’editor dei parametri elettrici, che mostra lo script del materiale attivo (GaAs.lua).
sim.json.Il menu «Script»: l’opzione «Importa script» consente di selezionare un file Lua; l’opzione «Popola JSON dallo script» scrive i relativi valori in sim.json.
sim.json, viene visualizzata una finestra di dialogo di conferma che elenca tutti i valori che verranno modificati.Prima di inserire i dati in sim.json, viene visualizzata una finestra di dialogo di conferma che elenca tutti i valori che verranno modificati.Quando la funzione di scripting è abilitata, viene visualizzata una scheda «Editor di codice» accanto alla scheda «Parametri» ??. In questo modo è possibile visualizzare e modificare direttamente lo script Lua del materiale all’interno della simulazione, senza dover tornare al database dei materiali.Quando la funzione di scripting è abilitata, viene visualizzata una scheda «Editor di codice» accanto alla scheda «Parametri» ??. In questo modo è possibile visualizzare e modificare direttamente lo script Lua del materiale all’interno della simulazione, senza dover tornare al database dei materiali.
6.1 Selezione di uno script o copia dei relativi valori per l’inserimento nella simulazione.6.1 Selezione di uno script o copia dei relativi valori per l’inserimento nella simulazione.
Il piccolo menu a fianco del pulsante «Script» offre due diverse modalità per utilizzare uno script di materiali ??:Il piccolo menu a fianco del pulsante «Script» offre due diverse modalità per utilizzare uno script di materiali ??:
- Importa script materiale: apre il database dei materiali e consente di selezionare lo script Lua per il materiale che deve essere utilizzato nella simulazione.Importa script materiale: apre il database dei materiali e consente di selezionare lo script Lua per il materiale che deve essere utilizzato nella simulazione.
- Popola il file JSON tramite script: esegue lo script selezionato e copia i valori dei parametri risultanti nei corrispondenti valori predefiniti in
sim.json.Popola il file JSON tramite script: esegue lo script selezionato e copia i valori dei parametri risultanti nei corrispondenti valori predefiniti insim.json.
Questi due approcci hanno scopi diversi. Se lo script viene utilizzato direttamente, le sue funzioni rimangono attive durante la simulazione. Questa è la modalità appropriata quando un parametro deve variare in funzione di grandezze quali la temperatura, la posizione, la composizione o la densità di fotoni.Questi due approcci hanno scopi diversi. Se lo script viene utilizzato direttamente, le sue funzioni rimangono attive durante la simulazione. Questa è la modalità appropriata quando un parametro deve variare in funzione di grandezze quali la temperatura, la posizione, la composizione o la densità di fotoni.
Eg e Xi si riflettono automaticamente in questa visualizzazione.Visualizzatore del diagramma a bande/tasso di generazione. I livelli di energia contrassegnati vengono estratti dagli script dei materiali, pertanto le modifiche apportate a Eg e Xi si riflettono automaticamente in questa visualizzazione.In alternativa, è possibile utilizzare la funzione «Popola il file JSON tramite script» quando si desidera che lo script fornisca un insieme ben definito di valori iniziali, ma non è necessario che lo script rimanga attivo. OghmaNano esegue lo script, scrive i risultati ottenuti nei normali campi dei parametri e, a quel punto, è possibile modificare manualmente tali valori nel modo consueto.In alternativa, è possibile utilizzare la funzione «Popola il file JSON tramite script» quando si desidera che lo script fornisca un insieme ben definito di valori iniziali, ma non è necessario che lo script rimanga attivo. OghmaNano esegue lo script, scrive i risultati ottenuti nei normali campi dei parametri e, a quel punto, è possibile modificare manualmente tali valori nel modo consueto.
Poiché l’operazione di popolamento di sim.json può sovrascrivere i valori già presenti nella simulazione, OghmaNano visualizza innanzitutto una finestra di dialogo di conferma ??. Nella finestra di dialogo vengono elencati lo script in uso e vengono mostrati tutti i parametri che subiranno modifiche, insieme ai loro valori attuali e a quelli proposti. Nessun valore viene modificato finché l’operazione non viene confermata.Poiché l’operazione di popolamento di sim.json può sovrascrivere i valori già presenti nella simulazione, OghmaNano visualizza innanzitutto una finestra di dialogo di conferma ??. Nella finestra di dialogo vengono elencati lo script in uso e vengono mostrati tutti i parametri che subiranno modifiche, insieme ai loro valori attuali e a quelli proposti. Nessun valore viene modificato finché l’operazione non viene confermata.
Esistono due modi per utilizzare lo stesso script: è possibile mantenerlo attivo durante la simulazione, in modo che i parametri possano variare, oppure è possibile utilizzare la funzione «Popola JSON dallo script» per ottenere una serie di valori iniziali fissi che possono essere successivamente modificati tramite l’interfaccia grafica standard.Esistono due modi per utilizzare lo stesso script: è possibile mantenerlo attivo durante la simulazione, in modo che i parametri possano variare, oppure è possibile utilizzare la funzione «Popola JSON dallo script» per ottenere una serie di valori iniziali fissi che possono essere successivamente modificati tramite l’interfaccia grafica standard.
7. Dove vengono utilizzati i valori definiti nello script.7. Dove vengono utilizzati i valori definiti nello script.
I valori generati da uno script di materiali vengono utilizzati in tutto il modello, e non solo nel risolutore elettrico. Grandezze come Eg e Xi definiscono le posizioni dei bordi della banda energetica in tutti i punti in cui sono necessarie. Ad esempio, i livelli di energia visualizzati nel diagramma a bande/visualizzatore della velocità di generazione sono ricavati da questi valori ??. Pertanto, la modifica del divario di banda o dell’affinità in uno script si propaga automaticamente al diagramma a bande, al modello ottico e al risolutore elettrico.I valori generati da uno script di materiali vengono utilizzati in tutto il modello, e non solo nel risolutore elettrico. Grandezze come Eg e Xi definiscono le posizioni dei bordi della banda energetica in tutti i punti in cui sono necessarie. Ad esempio, i livelli di energia visualizzati nel diagramma a bande/visualizzatore della velocità di generazione sono ricavati da questi valori ??. Pertanto, la modifica del divario di banda o dell’affinità in uno script si propaga automaticamente al diagramma a bande, al modello ottico e al risolutore elettrico.
Errori comuniErrori comuni
- La dichiarazione
local material = {}deve essere presente nei primi 1000 byte del file, altrimenti OghmaNano non la riconoscerà come script valido.La dichiarazionelocal material = {}deve essere presente nei primi 1000 byte del file, altrimenti OghmaNano non la riconoscerà come script valido. - Ogni funzione deve restituire due valori: la quantità e il flag
enabled. Una casella visualizzerà solo il messaggio «Fare riferimento allo script per il valore» quando la sua funzione èenabled.Ogni funzione deve restituire due valori: la quantità e il flagenabled. Una casella visualizzerà solo il messaggio «Fare riferimento allo script per il valore» quando la sua funzione èenabled. - Utilizzare sempre le unità di misura del Sistema Internazionale (SI) (m, m⁻³, m² V⁻¹ s⁻¹, eV, come indicato). Verificare che i valori ottenuti siano plausibili.Utilizzare sempre le unità di misura del Sistema Internazionale (SI) (m, m⁻³, m² V⁻¹ s⁻¹, eV, come indicato). Verificare che i valori ottenuti siano plausibili.
- L’esecuzione dello script per popolare il file JSON sovrascrive i valori predefiniti in
sim.json. Prima di accettare, leggere attentamente la finestra di dialogo di conferma.L’esecuzione dello script per popolare il file JSON sovrascrive i valori predefiniti insim.json. Prima di accettare, leggere attentamente la finestra di dialogo di conferma.
Riepilogo e prossimi passiRiepilogo e prossimi passi
- Uno script Lua per i materiali definisce le proprietà in funzione della temperatura, della posizione, della composizione o della densità dei fotoni; è facoltativo e necessario solo per parametri variabili o per i quali si dispone di dati precisi.Uno script Lua per i materiali definisce le proprietà in funzione della temperatura, della posizione, della composizione o della densità dei fotoni; è facoltativo e necessario solo per parametri variabili o per i quali si dispone di dati precisi.
- I file vengono riconosciuti da
local material = {}nei primi 1000 byte e possono essere contenuti all’interno di una cartella di materiali (visualizzata insieme al materiale) oppure essere file autonomi (visualizzati come file.lua).I file vengono riconosciuti dalocal material = {}nei primi 1000 byte e possono essere contenuti all’interno di una cartella di materiali (visualizzata insieme al materiale) oppure essere file autonomi (visualizzati come file.lua). - Un singolo script elettrico viene comunemente utilizzato per diversi set di dati ottici (n/k); il modello seleziona il file più appropriato ed effettua una ricerca a ritroso nel caso in cui non sia presente alcuno script a livello del materiale.Un singolo script elettrico viene comunemente utilizzato per diversi set di dati ottici (n/k); il modello seleziona il file più appropriato ed effettua una ricerca a ritroso nel caso in cui non sia presente alcuno script a livello del materiale.
- In una simulazione, l’editor dei parametri elettrici può utilizzare valori fissi
sim.jsonoppure uno script; la funzione «Popola JSON dallo script» consente di inserire i valori dello script nelle caselle predefinite.In una simulazione, l’editor dei parametri elettrici può utilizzare valori fissisim.jsonoppure uno script; la funzione «Popola JSON dallo script» consente di inserire i valori dello script nelle caselle predefinite. - Nel modello vengono utilizzati valori quali
EgeXi, anche nel diagramma a bande.Nel modello vengono utilizzati valori qualiEgeXi, anche nel diagramma a bande.
Successivamente: tornare alla sezione Parte C per scoprire come vengono archiviati i dati nel database, oppure consultare Database ottico e Download di altro materiale.Successivamente: tornare alla sezione Parte C per scoprire come vengono archiviati i dati nel database, oppure consultare Database ottico e Download di altro materiale.