Σπίτι Παραδείγματα Στιγμιότυπα οθόνης Εγχειρίδιο χρήστη Λογότυπο της Bluesky YouTube ☰
OghmaNano Πλατφόρμα προσομοίωσης πολλαπλών φυσικών πεδίων για οπτοηλεκτρονικές συσκευές και φωτονικά συστήματα. Λήψη Οδηγός γρήγορης εκκίνησης

Σενάρια υλικού Lua για προσομοίωση ημιαγωγικών συσκευών.

Το OghmaNano υποστηρίζει τη χρήση σεναρίων Lua για τον ορισμό των ιδιοτήτων των υλικών, ως εναλλακτική λύση στην εισαγωγή σταθερών παραμέτρων υλικών ξεχωριστά μέσω του γραφικού επεξεργαστή ηλεκτρικών παραμέτρων. Για τις περισσότερες προσομοιώσεις, οι σταθερές τιμές που εισάγονται μέσω του GUI είναι επαρκείς· η χρήση σεναρίων Lua προορίζεται για περιπτώσεις στις οποίες οι ηλεκτρικές, οπτικές ή θερμικές ιδιότητες των υλικών πρέπει να οριστούν προγραμματιστικά ή να μεταβάλλονται ανάλογα με τη θερμοκρασία, τη θέση (x, y, z), τη σύνθεση ή την πυκνότητα φωτονίων. Παράμετροι όπως το ενεργειακό χάσμα, η ηλεκτρονιακή συγγένεια, η κινητικότητα των φορέων, οι συντελεστές ανασύνθεσης και η θερμική αγωγιμότητα μπορούν, επομένως, να εκφραστούν ως συναρτήσεις και όχι ως απλές σταθερές. Αυτή η σελίδα εξηγεί πώς δομούνται τα σενάρια υλικών Lua, πώς το OghmaNano τα εντοπίζει και τα επιλέγει, πώς συνδέονται με τα υλικά και τα οπτικά σύνολα δεδομένων n/k και πώς χρησιμοποιούνται οι παραμετροποιημένες παράμετροι εντός μιας προσομοίωσης.

You do not need a script for most work. As explained in Part A, fixed material parameters can be typed straight into the standard editors. A Lua script is only needed when you want a property to vary with temperature, position, composition, or photon density, or when you want a single well-defined, self-documenting source for a material's electrical parameters.

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, έτσι ώστε το μοντέλο να επιστρέφει στην τιμή που είναι αποθηκευμένη στους τυπικούς επεξεργαστές.

OghmaNano Material editor showing the Code editor tab with a Lua material script defining mue_x, mue_y, mue_z and mu_h functions for the material m-MTDATA:TPBi
Η καρτέλα του επεξεργαστή κώδικα στον επεξεργαστή υλικών, η οποία εμφανίζει το σενάριο Lua για ένα υλικό. Κάθε ιδιότητα είναι μια μικρή συνάρτηση που επιστρέφει μια τιμή και μια enabled σημαία.
OghmaNano Open file dialog inside the material folder MAPI-CH3NH3PbI3, showing four optical n/k datasets (Ball, Leguy, Leguy-hydrated, Phillips) shown as atom icons alongside a single electrical Lua script CH3NH3PbI3.lua shown as a code-file icon
Ένας ενιαίος φάκελος περιέχει τέσσερα οπτικά σύνολα δεδομένων (n/k) και ένα ηλεκτρικό σενάριο (CH3NH3PbI3.lua). Το OghmaNano επιλέγει το καταλληλότερο αρχείο για την προσομοίωση.

2. Πού αποθηκεύονται τα σενάρια στον δίσκο.

Ένα αρχείο υλικού μπορεί να βρίσκεται σε μία από τις δύο θέσεις, και αυτό καθορίζει τον τρόπο με τον οποίο εμφανίζεται στο OghmaNano:

Στο σχήμα ?? φαίνεται ένα σενάριο που βρίσκεται μέσα σε έναν φάκελο υλικού. Ο φάκελος 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++, ως μια μικρή κλάση/αντικείμενο, των οποίων τα μέλη περιέχουν την τρέχουσα τοπική κατάσταση. Τα διαθέσιμα πεδία είναι:

Επειδή το 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. Αυτό επιτρέπει σε ένα σενάριο να ελέγχει μόνο τις ιδιότητες που χρειάζεται να ελεγχθούν μέσω σεναρίου, αφήνοντας όλες τις υπόλοιπες παραμέτρους αμετάβλητες.

OghmaNano Electrical parameter editor with the Script button off, showing ordinary fixed numeric values typed into each box (electron mobility 0.85, hole mobility 0.04, Xi 4.05, Eg 1.42, and so on) stored in sim.json
Όταν η λειτουργία Script είναι απενεργοποιημένη, οι σταθερές τιμές αποθηκεύονται απευθείας στο sim.json και το σενάριο δεν χρησιμοποιείται.
OghmaNano Electrical parameter editor with the Script button depressed, showing Parameters and Code editor tabs and every parameter box greyed out reading See script for value
Όταν είναι ενεργοποιημένο το σενάριο, οι παράμετροι που έχουν οριστεί εμφανίζουν πλέον την ένδειξη «Δείτε το σενάριο για την τιμή» και υπολογίζονται από το σενάριο Lua.
OghmaNano Electrical parameter editor Code editor tab showing the GaAs.lua material script source, with material.name, material.description and material.formula functions visible
Η καρτέλα του επεξεργαστή κώδικα εντός του επεξεργαστή ηλεκτρικών παραμέτρων, η οποία εμφανίζει το ενεργό σενάριο υλικού (GaAs.lua).
OghmaNano Electrical parameter editor showing the Script dropdown menu with two options: Import material script and Populate json from script
Το μενού "Script": Η επιλογή "Import material script" επιλέγει ένα αρχείο Lua· η επιλογή "Populate json from script" γράφει τις τιμές του στο sim.json.
OghmaNano confirmation dialog listing the values that would be updated when populating the JSON from GaAs.lua, showing each parameter changing from its old to its new value
Το παράθυρο επιβεβαίωσης που εμφανίζεται πριν από την εισαγωγή δεδομένων στο sim.json, όπου εμφανίζονται όλες οι τιμές που θα αλλάξουν.

Όταν είναι ενεργοποιημένη η λειτουργία δημιουργίας σεναρίων, εμφανίζεται μια καρτέλα "Επεξεργαστής Κώδικα" δίπλα στην καρτέλα "Παράμετροι" ??. Αυτό σας επιτρέπει να εξετάσετε και να επεξεργαστείτε το σενάριο υλικού Lua απευθείας μέσα στην προσομοίωση, χωρίς να χρειάζεται να επιστρέψετε στη βάση δεδομένων υλικών.

6.1 Επιλογή ενός σεναρίου ή αντιγραφή των τιμών του στο περιβάλλον προσομοίωσης.

Το μικρό μενού δίπλα στο κουμπί "Script" παρέχει δύο διαφορετικούς τρόπους χρήσης ενός υλικού script ??:

Αυτές οι δύο προσεγγίσεις εξυπηρετούν διαφορετικούς σκοπούς. Εάν το σενάριο χρησιμοποιηθεί απευθείας, οι λειτουργίες του παραμένουν ενεργές κατά τη διάρκεια της προσομοίωσης. Αυτή είναι η κατάλληλη λειτουργία όταν μια παράμετρος πρέπει να μεταβάλλεται ανάλογα με ποσότητες όπως η θερμοκρασία, η θέση, η σύνθεση ή η πυκνότητα φωτονίων.

OghmaNano Optical simulation editor showing the generation rate profile overlaid on a band-energy diagram for an ITO / PEDOT:PSS / P3HT:PCBM / Al device, with the labelled energy levels (-4.7, -5.1, -3.8, -4.9, -3.5, -8.3 eV) taken from the material scripts
Η εφαρμογή προβολής του διαγράμματος ζωνών/της συχνότητας δημιουργίας. Οι επισημασμένες ενεργειακές στάθμες αντλούνται από τα αρχεία υλικών, επομένως οι αλλαγές στις παραμέτρους Eg και Xi αντικατοπτρίζονται αυτόματα εδώ.

Εναλλακτικά, μπορεί να χρησιμοποιηθεί η λειτουργία "Ανάθεση τιμών JSON από σενάριο" όταν θέλετε το σενάριο να παρέχει ένα καθορισμένο σύνολο αρχικών τιμών, αλλά δεν χρειάζεται το σενάριο να παραμένει ενεργό. Το OghmaNano εκτελεί το σενάριο, αποθηκεύει τα αποτελεσματικά αριθμητικά δεδομένα στις κανονικές περιοχές παραμέτρων και, στη συνέχεια, αυτές οι τιμές μπορούν να επεξεργαστούν χειροκίνητα με τον συνηθισμένο τρόπο.

Επειδή η εισαγωγή δεδομένων στο sim.json μπορεί να αντικαταστήσει τις τιμές που υπάρχουν ήδη στην προσομοίωση, το OghmaNano εμφανίζει πρώτα ένα παράθυρο επιβεβαίωσης ??. Στο παράθυρο αυτό εμφανίζεται το σενάριο που χρησιμοποιείται και κάθε παράμετρος που θα αλλάξει, μαζί με την τρέχουσα και την προτεινόμενη τιμή της. Καμία τιμή δεν αλλάζει μέχρι να επιβεβαιωθεί η λειτουργία.

Υπάρχουν δύο τρόποι για να χρησιμοποιήσετε το ίδιο αρχείο σεναρίου: μπορείτε να διατηρήσετε το σενάριο ενεργό όταν οι παράμετροι πρέπει να αλλάζουν κατά τη διάρκεια της προσομοίωσης, ή μπορείτε να χρησιμοποιήσετε τη λειτουργία "Δημιουργία JSON από σενάριο" για να αποκτήσετε ένα σύνολο σταθερών αρχικών τιμών, οι οποίες στη συνέχεια μπορούν να επεξεργαστούν μέσω της κανονικής γραφικής διεπαφής.

7. Σε ποια σημεία χρησιμοποιούνται οι τιμές του σεναρίου;

Οι τιμές που παράγονται από ένα υλικό σενάριο χρησιμοποιούνται σε όλο το μοντέλο, και όχι μόνο στον ηλεκτρικό επιλυτή. Μεγέθη όπως τα Eg και Xi ορίζουν τις θέσεις των ορίων ζώνης όπου απαιτείται. Για παράδειγμα, τα επίπεδα ενέργειας που εμφανίζονται στο διάγραμμα ζωνών/παραμετροποιητή ρυθμού παραγωγής προέρχονται από αυτές τις τιμές ??. Επομένως, η επεξεργασία του χάσματος ζώνης ή της συγγένειας σε ένα σενάριο μεταφέρεται αυτόματα στο διάγραμμα ζωνών, στο οπτικό μοντέλο και στον ηλεκτρικό επιλυτή.

Συνηθισμένες παγίδες

Σύνοψη και επόμενα βήματα.

Επόμενο: Επιστρέψτε στην ενότητα Μέρος Γ για να δείτε πώς αποθηκεύεται η βάση δεδομένων ή δείτε τις ενότητες Οπτική βάση δεδομένων και Λήψη περισσότερων υλικών.