Σενάρια υλικού Lua για προσομοίωση ημιαγωγικών συσκευών.
Το OghmaNano υποστηρίζει τη χρήση σεναρίων Lua για τον ορισμό των ιδιοτήτων των υλικών, ως εναλλακτική λύση στην εισαγωγή σταθερών παραμέτρων υλικών ξεχωριστά μέσω του γραφικού επεξεργαστή ηλεκτρικών παραμέτρων. Για τις περισσότερες προσομοιώσεις, οι σταθερές τιμές που εισάγονται μέσω του GUI είναι επαρκείς· η χρήση σεναρίων Lua προορίζεται για περιπτώσεις στις οποίες οι ηλεκτρικές, οπτικές ή θερμικές ιδιότητες των υλικών πρέπει να οριστούν προγραμματιστικά ή να μεταβάλλονται ανάλογα με τη θερμοκρασία, τη θέση (x, y, z), τη σύνθεση ή την πυκνότητα φωτονίων. Παράμετροι όπως το ενεργειακό χάσμα, η ηλεκτρονιακή συγγένεια, η κινητικότητα των φορέων, οι συντελεστές ανασύνθεσης και η θερμική αγωγιμότητα μπορούν, επομένως, να εκφραστούν ως συναρτήσεις και όχι ως απλές σταθερές. Αυτή η σελίδα εξηγεί πώς δομούνται τα σενάρια υλικών Lua, πώς το OghmaNano τα εντοπίζει και τα επιλέγει, πώς συνδέονται με τα υλικά και τα οπτικά σύνολα δεδομένων n/k και πώς χρησιμοποιούνται οι παραμετροποιημένες παράμετροι εντός μιας προσομοίωσης.
1. Τι είναι ένα σενάριο υλικού Lua;
Ένα σενάριο υλικών Lua είναι ένα αρχείο απλού κειμένου .lua στο οποίο ορίζονται οι ιδιότητες του υλικού χρησιμοποιώντας μικρές συναρτήσεις αντί για σταθερές τιμές. Κάθε συνάρτηση επιστρέφει την τιμή μιας συγκεκριμένης παραμέτρου υλικού, όπως το ενεργειακό χάσμα, η ηλεκτρονιακή συγγένεια, η κινητικότητα των φορέων, ο συντελεστής ανασύνθεσης ή η θερμική αγωγιμότητα. Αυτές οι τιμές μπορούν να είναι σταθερές ή μπορούν να μεταβάλλονται ως συναρτήσεις της θερμοκρασίας T και της θέσης (x, y, z). Οι συναρτήσεις μπορούν να ενεργοποιηθούν ή να απενεργοποιηθούν μεμονωμένα, επιτρέποντας στο σενάριο να αντικαθιστά μόνο τις παραμέτρους που θέλετε, ενώ οι υπόλοιπες τιμές συνεχίζουν να προέρχονται από τις τυπικές ρυθμίσεις προσομοίωσης. Μια τυπική συνάρτηση έχει την εξής μορφή:
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
Οποιοδήποτε αρχείο .lua στη βάση δεδομένων OghmaNano Materials αντιμετωπίζεται ως σενάριο υλικού εάν η δήλωση πίνακα local material = {} εμφανίζεται εντός των πρώτων 1000 byte του αρχείου. Αυτό σημαίνει ότι μια κεφαλίδα άδειας χρήσης ή ένα μπλοκ επεξηγηματικών σχολίων μπορεί να εμφανιστεί πριν από τη δήλωση, υπό την προϋπόθεση ότι ο δείκτης παραμένει κοντά στην αρχή του αρχείου. Μπορείτε να προβάλετε και να επεξεργαστείτε το σενάριο ενός υλικού απευθείας από την καρτέλα του επεξεργαστή κώδικα στον επεξεργαστή υλικών ??.
Ένα αρχείο υλικού μπορεί να ορίσει όσα ή λίγα χαρακτηριστικά επιθυμείτε. Μπορεί να ορίσει μόνο το ενεργειακό χάσμα και την ηλεκτρονιακή συγγένεια, ή ένα πλήρες σύνολο παραμέτρων δομής ζώνης, μεταφοράς, ανασύνθεσης και θερμικών ιδιοτήτων. Οι συναρτήσεις που δεν χρειάζεστε μπορούν απλά να παραλειφθούν ή να επιστραφούν με την τιμή enabled = false, έτσι ώστε το μοντέλο να επιστρέφει στην τιμή που είναι αποθηκευμένη στους τυπικούς επεξεργαστές.
enabled σημαία.
CH3NH3PbI3.lua). Το OghmaNano επιλέγει το καταλληλότερο αρχείο για την προσομοίωση.2. Πού αποθηκεύονται τα σενάρια στον δίσκο.
Ένα αρχείο υλικού μπορεί να βρίσκεται σε μία από τις δύο θέσεις, και αυτό καθορίζει τον τρόπο με τον οποίο εμφανίζεται στο OghmaNano:
- Μέσα σε έναν φάκελο υλικού – για παράδειγμα, μέσα στον φάκελο Γαλλίου-Αρσενικού ή MAPI-CH3NH3PbI3. Ένα σενάριο που τοποθετείται εδώ ανήκει σε αυτό το υλικό και εμφανίζεται μέσα στο υλικό όταν το ανοίγετε, μαζί με τα δεδομένα n/k και άλλα αρχεία.
- Εξωτερικά, πρόκειται για έναν φάκελο υλικών – ένα αυτόνομο αρχείο
.luaπου βρίσκεται σε άλλο σημείο της βάσης δεδομένων. Σε αυτή την περίπτωση, εμφανίζεται ως ένα ξεχωριστό αρχείο.luaεντός του προγράμματος περιήγησης της βάσης δεδομένων Υλικών, αντί να είναι συνδεδεμένο με ένα μόνο υλικό.
Στο σχήμα ?? φαίνεται ένα σενάριο που βρίσκεται μέσα σε έναν φάκελο υλικού. Ο φάκελος MAPI-CH3NH3PbI3, που περιέχει δεδομένα περοβσκίτη, περιέχει διάφορα οπτικά σύνολα δεδομένων (n/k) — Ball, Leguy, Leguy-hydrated και Phillips — τα οποία απεικονίζονται με εικονίδια ατόμων, καθώς και ένα μόνο ηλεκτρικό σενάριο, CH3NH3PbI3.lua, το οποίο απεικονίζεται με ένα εικονίδιο αρχείου κώδικα.
3. Ένα ηλεκτρικό σενάριο, πολλά οπτικά σύνολα δεδομένων.
Είναι σύνηθες να υπάρχουν πολλά σύνολα οπτικών σταθερών για ένα υλικό, αλλά μόνο ένα λογικό σύνολο ηλεκτρικών παραμέτρων. Διαφορετικές ερευνητικές ομάδες μετρούν τα n και k σε διαφορετικά εύρη μηκών κύματος, χρησιμοποιώντας διαφορετικά δείγματα και διαφορετικές μεθόδους, επομένως είναι χρήσιμο να διατηρούνται αυτά τα οπτικά σύνολα δεδομένων ξεχωριστά και να επιλέγεται μεταξύ τους για κάθε προσομοίωση. Οι ηλεκτρικές παράμετροι (ενεργειακό χάσμα, συγγένεια, κινητικότητες και ούτω καθεξής), αντίθετα, συνήθως διατηρούνται καλύτερα ως μια ενιαία, συνεπής ορισμός για το υλικό. Αυτή ακριβώς είναι η διάταξη που παρουσιάζεται στο ??: τέσσερα σύνολα δεδομένων n/k, ένα ηλεκτρικό σενάριο.
Όταν χρησιμοποιείται ένα υλικό, το OghmaNano προσπαθεί να επιλέξει αυτόματα το πιο κατάλληλο αρχείο. Εάν δεν υπάρχει ένα σενάριο στο επίπεδο του συγκεκριμένου υλικού που προσομοιώνεται, το μοντέλο θα αναζητήσει προς τα πάνω στην ιεραρχία των φακέλων του υλικού για να βρει ένα κατάλληλο σενάριο για χρήση. Αυτό σημαίνει ότι μπορείτε να επισυνάψετε ένα ηλεκτρικό σενάριο σε ένα λογικό επίπεδο και να το εφαρμόσετε στα σύνολα δεδομένων που ομαδοποιούνται κάτω από αυτό, χωρίς να χρειάζεται να αντιγράψετε τις ίδιες ηλεκτρικές παραμέτρους σε κάθε οπτική παραλλαγή.
Γιατί να τα διαχωρίσουμε; Τα οπτικά δεδομένα είναι συχνά αυτά που αλλάζουν μεταξύ των μετρήσεων – μια μεμβράνη που μετράται στα 800 nm από μια ομάδα και στα 1100 nm από μια άλλη, παράγει δύο έγκυρα διαφορετικά σύνολα δεδομένων n/k. Η ηλεκτρική συμπεριφορά του υλικού δεν συνδέεται με το φάσμα των μηκών κύματος μιας οπτικής μέτρησης, επομένως ένα ενιαίο ηλεκτρικό σενάριο διατηρεί τη φυσική συνέπεια, ανεξάρτητα από το ποιο σύνολο οπτικών δεδομένων χρησιμοποιείται.
4. Ανατομία ενός σεναρίου υλικού.
Το παρακάτω παράδειγμα αποτελεί ένα πλήρες σενάριο ηλεκτρικού υλικού για το AlGaInAs – το τεταρτοστοιχειακό υλικό που βασίζεται στο InP και έχει προσαρμοσμένη σταθερά πλέγματος, και χρησιμοποιείται σε τηλεπικοινωνιακά λέιζερ και ανιχνευτές. Παρουσιάζεται ολόκληρο, ώστε να μπορείτε να δείτε πώς συντίθεται ένα πραγματικό, πλήρως τεκμηριωμένο σενάριο· στη συνέχεια, κάθε συνάρτηση αναλύεται και εξηγείται στην ενότητα Ενότητα 5 που ακολουθεί. Κάντε κλικ για να το αναπτύξετε.
Πλήρες δείγμα σεναρίου — 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).
Εμφάνισε περισσότερα.
-- 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. Οι λειτουργίες αναλυτικά.
Κάθε συνάρτηση σε ένα υλικό σενάριο ακολουθεί το ίδιο μοτίβο: λαμβάνει τον πίνακα state και επιστρέφει μια τιμή value μαζί με μια σημαία enabled. Οι παρακάτω υποενότητες τεκμηριώνουν κάθε ομάδα συναρτήσεων από το παράδειγμα AlGaInAs.
5.1 Η state δομή και η enabled σημαία.
Σε κάθε συνάρτηση περνιέται ένα αντικείμενο state που περιέχει τις τοπικές συνθήκες προσομοίωσης στο σημείο της συσκευής όπου ζητείται η τιμή. Στη Lua, αυτό υλοποιείται ως πίνακας· αν είστε εξοικειωμένοι με τη C, είναι καλύτερο να το θεωρήσετε ως μια δομή struct ή, στην C++, ως μια μικρή κλάση/αντικείμενο, των οποίων τα μέλη περιέχουν την τρέχουσα τοπική κατάσταση. Τα διαθέσιμα πεδία είναι:
state.T— τοπική θερμοκρασία (K).state.x,state.y,state.z— θέση εντός της συσκευής (μέτρα).state.photon_density— τοπική πυκνότητα φωτονίων (m-3).
Επειδή το OghmaNano παρέχει αυτή την τοπική μεταβλητή state στη συνάρτηση, μπορεί να υπολογιστεί μια παράμετρος υλικού με βάση τη θερμοκρασία, τη θέση ή την πυκνότητα φωτονίων, αντί να περιορίζεται σε μια ενιαία σταθερή τιμή. Η δεύτερη τιμή που επιστρέφεται, enabled, ελέγχει εάν το μοντέλο χρησιμοποιεί την τιμή που επιστρέφεται από το σενάριο. Εάν το enabled είναι true, χρησιμοποιείται η τιμή του σεναρίου· εάν είναι false, χρησιμοποιείται η τιμή που είναι αποθηκευμένη στους τυπικούς επεξεργαστές. Αυτό επιτρέπει σε ένα σενάριο να ορίζει μόνο τις παραμέτρους που πρέπει να μεταβάλλονται, αφήνοντας όλες τις άλλες παραμέτρους ως απλές σταθερές τιμές.
5.2 Ταυτότητα: name, description, formula
Αυτές οι τρεις λειτουργίες επιστρέφουν περιγραφικές συμβολοσειρές και όχι φυσικές τιμές. Προσδιορίζουν το υλικό, παρέχουν μια σύντομη, εύκολα κατανοητή περιγραφή και εμφανίζουν τον χημικό του τύπο.
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 Δομή ζωνών: Eg και Xi
Το Eg επιστρέφει το ενεργειακό χάσμα (eV) και το Xi την ηλεκτρονιακή συγγένεια (eV). Μαζί, αυτές οι δύο ποσότητες καθορίζουν τις θέσεις των ακμών της ζώνης αγωγιμότητας και της ζώνης σθένους και χρησιμοποιούνται σε όλο το μοντέλο (βλ. Ενότητα 7). Η ενεργειακή διαφορά του AlGaInAs είναι η πιο χρήσιμη συνάρτηση στο αρχείο: υπολογίζει την ενεργειακή διαφορά στους 300 K από το κλάσμα Al x και στη συνέχεια εφαρμόζει μια μετατόπιση θερμοκρασίας τύπου Varshni, επομένως η επιστρεφόμενη τιμή εξαρτάται από το 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
Παράδειγμα: όταν x = 0,30, ο όρος σύνθεσης στους 300 K δίνει Eg(300 K) ≈ 0,76 + 0,49(0,30) + 0,20(0,30)2 ≈ 0,925 eV (περίπου 1,34 μm). Επειδή το Eg διαβάζει state.T, η αύξηση της θερμοκρασίας της συσκευής μειώνει αυτόματα το ενεργειακό χάσμα μέσω του όρου Varshni – κάτι που μια σταθερή τιμή δεν θα μπορούσε ποτέ να αποτυπώσει.
5.4 Πυκνότητα καταστάσεων: Nc και Nv
Τα Nc και Nv επιστρέφουν τις αποτελεσματικές πυκνότητες καταστάσεων της ζώνης αγωγιμότητας και της ζώνης σθένους (m-3). Σε αυτό το παράδειγμα, και οι δύο τιμές αναφέρονται στους 300 K και κλιμακώνονται ως προς τη θερμοκρασία με την εξίσωση (T/300)1,5, η οποία αντιστοιχεί στο τυπικό αποτέλεσμα της παραβολικής ζώνης. Αυτή η εξάρτηση από τη θερμοκρασία είναι συγκεκριμένη για το υλικό που χρησιμοποιείται εδώ· άλλα υλικά μπορούν να χρησιμοποιήσουν διαφορετικές εξαρτήσεις από τη θερμοκρασία, όπου αυτό είναι κατάλληλο.
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 Κινητικότητα: mu_e, mu_h και κατευθυντικά ψευδώνυμα.
Τα mu_e και mu_h επιστρέφουν τις κινητικότητες των ηλεκτρονίων και των οπών σε χαμηλά μαγνητικά πεδία (m2 V-1 s-1). Σε αυτό το παράδειγμα, οι κινητικότητες κλιμακώνονται ως προς τη θερμοκρασία με την εξίσωση (300/T)1,5, αλλά αυτή η εξάρτηση από τη θερμοκρασία αποτελεί μέρος του συγκεκριμένου μοντέλου υλικού και μπορεί να αντικατασταθεί από μια διαφορετική σχέση, όπου αυτό είναι κατάλληλο. Για παράδειγμα, σε έναν οργανικό ημιαγωγό, η κινητικότητα μπορεί να περιγραφεί με μια εξάρτηση από τη θερμοκρασία τύπου ενεργοποίησης ή άλματος. Το OghmaNano μπορεί επίσης να χρησιμοποιήσει κινητικότητες που εξαρτώνται από την κατεύθυνση, επομένως το αρχείο παρέχει τα mue_x, mue_y, mue_z και muh_x, muh_y, muh_z. Σε αυτό το ισοτροπικό παράδειγμα, το καθένα απλώς επιστρέφει την ίδια αριθμητική τιμή, αλλά για ένα ανισοτροπικό υλικό, κάθε κατεύθυνση μπορεί να έχει τη δική της έκφραση.
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 Διηλεκτρική σταθερά: epsilonr
epsilonr επιστρέφει τη σχετική στατική διηλεκτρική σταθερά (αδιάστατη), η οποία καθορίζει την ηλεκτροστατική συμπεριφορά στον επιλυτή εξίσωσης μεταφοράς-διάχυσης.
function material.epsilonr(state)
-- Relative static permittivity, dimensionless
local enabled = true
local value = 13.4
return value, enabled
end
5.7 Ανασυνδυασμός: ακτινοβολιακός και Auger.
Το free_to_free_recombination επιστρέφει τον συντελεστή ανασυνδυασμού ζώνης-σε-ζώνη (ακτινοβολιακός) (m3 s-1), ενώ τα auger_Cn και auger_Cp επιστρέφουν τους συντελεστές Auger για τα ηλεκτρόνια και τις οπές (m6 s-1). Ο ανασυνδυασμός Auger είναι ένα σημαντικό κανάλι απώλειας στις συσκευές III–V με στενό διάκενο, και η έντασή του αυξάνεται απότομα καθώς το διάκενο στενεύει, επομένως αυτά είναι φυσικοί υποψήφιοι για μια έκφραση που εξαρτάται από τη σύνθεση ή τη θερμοκρασία σε ένα πιο προηγμένο σενάριο.
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 Παγίδες SRH
Οι τέσσερις συναρτήσεις Shockley–Read–Hall περιγράφουν μια ενιαία ισορροπημένη στάθμη παγίδευσης: ss_srh_trap_energy (ενέργεια της παγίδευσης σε σχέση με το μέσο του ενεργειακού χάσματος, eV· η θετική τιμή υποδεικνύει κατεύθυνση προς τη ζώνη αγωγιμότητας), ss_srh_Nt (πυκνότητα παγίδευσης, m-3) και ss_srh_sigma_n / ss_srh_sigma_p (διατομές σύλληψης ηλεκτρονίων και οπών, m2). Αυτές οι παράμετροι εξαρτώνται σε μεγάλο βαθμό από τις ατέλειες και το δείγμα, επομένως οι τιμές στο παράδειγμα αποτελούν απλώς ενδεικτικές τιμές που πρέπει να αντικατασταθούν με τα δικά σας μετρημένα δεδομένα.
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 Θερμικές και δομικές παράμετροι
Οι υπόλοιπες φυσικές ιδιότητες περιγράφουν τη θερμική και δομική συμπεριφορά του υλικού: thermal_kl (θερμική αγωγιμότητα του πλέγματος, W m-1 K-1), heat_capacity (J kg-1 K-1), density (kg m-3), lattice_constant (m, με γραμμική θερμική διαστολή που εφαρμόζεται περίπου στους 300 K) και οι χρόνοι χαλάρωσης ενέργειας των φορέων thermal_tau_e / thermal_tau_h (s). Παρατηρήστε πώς τα thermal_kl και lattice_constant διαβάζουν το state.T για να επιστρέψουν τιμές που εξαρτώνται από τη θερμοκρασία.
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() – ένα εργαλείο υποβοήθησης για αυτοέλεγχο.
Τέλος, η print() είναι μια βοηθητική συνάρτηση και όχι μια ουσιαστική ιδιότητα. Δημιουργεί έναν αντιπροσωπευτικό πίνακα state (300 K, στην αρχή των αξόνων, μηδενική πυκνότητα φωτονίων) και εκτυπώνει κάθε ποσότητα που υπολογίζει το σενάριο. Αυτό είναι χρήσιμο για τον έλεγχο ενός σεναρίου από τη γραμμή εντολών ή σε έναν αυτόνομο διερμηνέα Lua πριν από τη χρήση του σε μια προσομοίωση – ένας γρήγορος τρόπος για να επιβεβαιωθεί ότι οι αριθμοί που προκύπτουν έχουν τις αναμενόμενες τιμές.
6. Χρήση ενός σεναρίου σε μια προσομοίωση.
Μέχρι στιγμής, η συζήτηση επικεντρώθηκε στα σενάρια Lua που είναι αποθηκευμένα στη βάση δεδομένων Υλικών. Για να χρησιμοποιήσετε ένα από αυτά τα σενάρια σε μια πραγματική προσομοίωση συσκευής, ανοίξτε τον επεξεργαστή ηλεκτρικών παραμέτρων για το απαιτούμενο στρώμα. Ο επεξεργαστής μπορεί να λειτουργήσει με δύο διαφορετικούς τρόπους: μπορεί να χρησιμοποιήσει τις συνήθεις, σταθερές τιμές παραμέτρων που είναι αποθηκευμένες στο sim.json ή μπορεί να αντλήσει επιλεγμένες τιμές παραμέτρων απευθείας από ένα σενάριο υλικού Lua.
Από προεπιλογή, η εκτέλεση σεναρίων είναι απενεργοποιημένη και ο επεξεργαστής λειτουργεί με τον συνηθισμένο τρόπο ??. Κάθε παράμετρος αναπαρίσταται από μια επεξεργάσιμη αριθμητική τιμή που είναι αποθηκευμένη στο sim.json. Σε αυτή τη λειτουργία, το σενάριο υλικού Lua δεν χρησιμοποιείται.
Κάνοντας κλικ στο κουμπί "Script", ενεργοποιείται η δυνατότητα δημιουργίας σεναρίων ??. Οι παράμετροι που παρέχονται από το σενάριο αντικαθίστανται στη συνέχεια στον επεξεργαστή με την ένδειξη "Δείτε το σενάριο για την τιμή". Οι παράμετροι των οποίων οι αντίστοιχες συναρτήσεις Lua είναι απενεργοποιημένες, συνεχίζουν να χρησιμοποιούν τις σταθερές τιμές που είναι αποθηκευμένες στο sim.json. Αυτό επιτρέπει σε ένα σενάριο να ελέγχει μόνο τις ιδιότητες που χρειάζεται να ελεγχθούν μέσω σεναρίου, αφήνοντας όλες τις υπόλοιπες παραμέτρους αμετάβλητες.
sim.json και το σενάριο δεν χρησιμοποιείται.
GaAs.lua).
sim.json.
sim.json, όπου εμφανίζονται όλες οι τιμές που θα αλλάξουν.Όταν είναι ενεργοποιημένη η λειτουργία δημιουργίας σεναρίων, εμφανίζεται μια καρτέλα "Επεξεργαστής Κώδικα" δίπλα στην καρτέλα "Παράμετροι" ??. Αυτό σας επιτρέπει να εξετάσετε και να επεξεργαστείτε το σενάριο υλικού Lua απευθείας μέσα στην προσομοίωση, χωρίς να χρειάζεται να επιστρέψετε στη βάση δεδομένων υλικών.
6.1 Επιλογή ενός σεναρίου ή αντιγραφή των τιμών του στο περιβάλλον προσομοίωσης.
Το μικρό μενού δίπλα στο κουμπί "Script" παρέχει δύο διαφορετικούς τρόπους χρήσης ενός υλικού script ??:
- Εισαγωγή αρχείου υλικού — ανοίγει τη βάση δεδομένων Υλικών και σας επιτρέπει να επιλέξετε το αρχείο υλικού Lua που θα χρησιμοποιήσει η προσομοίωση.
- Συμπλήρωση του JSON από ένα σενάριο — εκτελεί το επιλεγμένο σενάριο και αντιγράφει τις προκύπτουσες τιμές παραμέτρων στις αντίστοιχες σταθερές τιμές στο
sim.json.
Αυτές οι δύο προσεγγίσεις εξυπηρετούν διαφορετικούς σκοπούς. Εάν το σενάριο χρησιμοποιηθεί απευθείας, οι λειτουργίες του παραμένουν ενεργές κατά τη διάρκεια της προσομοίωσης. Αυτή είναι η κατάλληλη λειτουργία όταν μια παράμετρος πρέπει να μεταβάλλεται ανάλογα με ποσότητες όπως η θερμοκρασία, η θέση, η σύνθεση ή η πυκνότητα φωτονίων.
Eg και Xi αντικατοπτρίζονται αυτόματα εδώ.Εναλλακτικά, μπορεί να χρησιμοποιηθεί η λειτουργία "Ανάθεση τιμών JSON από σενάριο" όταν θέλετε το σενάριο να παρέχει ένα καθορισμένο σύνολο αρχικών τιμών, αλλά δεν χρειάζεται το σενάριο να παραμένει ενεργό. Το OghmaNano εκτελεί το σενάριο, αποθηκεύει τα αποτελεσματικά αριθμητικά δεδομένα στις κανονικές περιοχές παραμέτρων και, στη συνέχεια, αυτές οι τιμές μπορούν να επεξεργαστούν χειροκίνητα με τον συνηθισμένο τρόπο.
Επειδή η εισαγωγή δεδομένων στο sim.json μπορεί να αντικαταστήσει τις τιμές που υπάρχουν ήδη στην προσομοίωση, το OghmaNano εμφανίζει πρώτα ένα παράθυρο επιβεβαίωσης ??. Στο παράθυρο αυτό εμφανίζεται το σενάριο που χρησιμοποιείται και κάθε παράμετρος που θα αλλάξει, μαζί με την τρέχουσα και την προτεινόμενη τιμή της. Καμία τιμή δεν αλλάζει μέχρι να επιβεβαιωθεί η λειτουργία.
Υπάρχουν δύο τρόποι για να χρησιμοποιήσετε το ίδιο αρχείο σεναρίου: μπορείτε να διατηρήσετε το σενάριο ενεργό όταν οι παράμετροι πρέπει να αλλάζουν κατά τη διάρκεια της προσομοίωσης, ή μπορείτε να χρησιμοποιήσετε τη λειτουργία "Δημιουργία JSON από σενάριο" για να αποκτήσετε ένα σύνολο σταθερών αρχικών τιμών, οι οποίες στη συνέχεια μπορούν να επεξεργαστούν μέσω της κανονικής γραφικής διεπαφής.
7. Σε ποια σημεία χρησιμοποιούνται οι τιμές του σεναρίου;
Οι τιμές που παράγονται από ένα υλικό σενάριο χρησιμοποιούνται σε όλο το μοντέλο, και όχι μόνο στον ηλεκτρικό επιλυτή. Μεγέθη όπως τα Eg και Xi ορίζουν τις θέσεις των ορίων ζώνης όπου απαιτείται. Για παράδειγμα, τα επίπεδα ενέργειας που εμφανίζονται στο διάγραμμα ζωνών/παραμετροποιητή ρυθμού παραγωγής προέρχονται από αυτές τις τιμές ??. Επομένως, η επεξεργασία του χάσματος ζώνης ή της συγγένειας σε ένα σενάριο μεταφέρεται αυτόματα στο διάγραμμα ζωνών, στο οπτικό μοντέλο και στον ηλεκτρικό επιλυτή.
Συνηθισμένες παγίδες
- Η δήλωση
local material = {}πρέπει να εμφανίζεται εντός των πρώτων 1000 byte του αρχείου, διαφορετικά το OghmaNano δεν θα την αναγνωρίσει ως σενάριο υλικού. - Κάθε συνάρτηση πρέπει να επιστρέφει δύο τιμές: την ποσότητα και τη σημαία
enabled. Ένα πλαίσιο εμφανίζει μόνο την ένδειξη «Δείτε το σενάριο για την τιμή» όταν η συνάρτησή του είναιenabled. - Χρησιμοποιήστε μονάδες SI σε όλη την άσκηση (m, m-3, m2 V-1 s-1, eV, όπως αναφέρεται). Ελέγξτε κατά προσέγγιση τη λογικότητα των τιμών — είναι εύλογες;
- Η συμπλήρωση του JSON από το σενάριο αντικαθιστά τις προκαθορισμένες τιμές στο
sim.json. Διαβάστε το παράθυρο διαλόγου επιβεβαίωσης πριν αποδεχτείτε.
Σύνοψη και επόμενα βήματα.
- Ένα σενάριο Lua υλικού ορίζει τις ιδιότητες ως συναρτήσεις της θερμοκρασίας, της θέσης, της σύνθεσης ή της πυκνότητας φωτονίων· είναι προαιρετικό και απαιτείται μόνο για παραμέτρους που μεταβάλλονται ή για τις οποίες υπάρχουν επαρκείς πηγές δεδομένων.
- Τα αρχεία αναγνωρίζονται από το
local material = {}στα πρώτα 1000 byte και μπορούν να βρίσκονται μέσα σε έναν φάκελο υλικού (που εμφανίζεται μαζί με το υλικό) ή να είναι αυτόνομα αρχεία (που εμφανίζονται ως αρχείο.lua). - Ένα ενιαίο ηλεκτρονικό σενάριο χρησιμοποιείται συνήθως για διάφορα οπτικά σύνολα δεδομένων (n/k). Το μοντέλο επιλέγει το καταλληλότερο αρχείο και πραγματοποιεί αναζήτηση προς τα πίσω όταν δεν υπάρχει διαθέσιμο σενάριο στο επίπεδο του υλικού.
- Σε μια προσομοίωση, ο επεξεργαστής παραμέτρων ηλεκτρικού κυκλώματος μπορεί να χρησιμοποιήσει σταθερές τιμές
sim.jsonή ένα σενάριο· η λειτουργία "Ανάκτηση τιμών από σενάριο και εισαγωγή σε JSON" σάς επιτρέπει να εισάγετε τις τιμές του σεναρίου στα σταθερά πεδία. - Στο μοντέλο χρησιμοποιούνται διάφορες παράμετροι, όπως οι
EgκαιXi, συμπεριλαμβανομένου του διαγράμματος ζωνών.
Επόμενο: Επιστρέψτε στην ενότητα Μέρος Γ για να δείτε πώς αποθηκεύεται η βάση δεδομένων ή δείτε τις ενότητες Οπτική βάση δεδομένων και Λήψη περισσότερων υλικών.