FOMpy — подпрограммы и классы для курса «Физические основы микроэлектроники» (ФОМЭ). Идея проекта в том, чтобы совместными усилиями создать достаточную базу подпрограмм для решения задач по ФОМЭ.
Документация модуля с приведением используемых формул и единиц измерения доступна по этой ссылке.
Важно! Основной системой единиц для расчётов является СГС (Гауссова система единиц). О том, как работать с единицами измерения, читайте в разделе Единицы измерения.
Данная инструкция поможет вам начать использовать пакет FOMpy в вашем проекте или работать с ним как с калькулятором.
С целью избежать возможных проблем с установкой зависимостей, рекомендуется установка в виртуальной среде.
Для того чтобы установить FOMpy глобально, выполните команду
$ pip install fti-fompy
-
Создайте виртуальную среду (возможно, придётся написать
python3
вместоpython
):$ python -m venv .venv
-
Запустите виртуальную среду:
$ source ./venv/bin/activate
Важно! В дальнейшем эту команду нужно будет выполнять каждый раз перед запуском скриптов, работающих с FOMpy. Эффект действует до закрытия окна терминала или вызова команды
deactivate
. -
Установите пакет FOMpy:
$ pip install fti-fompy
Вы можете настроить терминал таким образом, чтобы одной командой в нём запускался интерпретатор Python, сразу после запуска готовый к работе с FOMpy.
-
Добавьте в файл
~/.bashrc
(или другой rc-файл в зависимости от вашей командной оболочки) следующие строки:FOMPY_IMPORTS=" from math import * from fompy.constants import * from fompy.materials import * from fompy.models import * from fompy.units import unit " fompy() { cd <Путь до папки с FOMpy> # Эти две строки нужны только для source .venv/bin/activate # запуска виртуальной среды PYTHONSTARTUP=<(echo "$FOMPY_IMPORTS") python }
-
Перезапустите терминал.
-
Наберите команду
$ fompy
Теперь этой командой вы можете вызывать интерпретатор
python
, в котором уже будут импортированы все нужные модули FOMpy.
В этом разделе объясняется, как наиболее эффективно работать с единицами измерения, а также представлены несколько примеров, демонстрирующих применение пакета FOMpy для решения простейших типичных задач.
Подробное описание доступных подпрограмм, классов и их методов можно прочитать по этой ссылке. В документации методов приведены используемые формулы и уравнения, а также указаны единицы измерения физических величин.
С единицами физических величин в расчётах необходимо обращаться осторожно. Важно помнить, что в пакете FOMpy везде используется система СГС: как в возвращаемых значениях функций, так и в аргументах, передаваемых тем же функциям. Все физические константы также приведены в единицах СГС.
Функционал, облегчающий работу с единицами измерения, расположен
в модулях fompy.constants
и fompy.units
.
Документация методов и подпрограмм снабжена обозначениями принимаемых и возвращаемых единиц
в квадратных скобках, например,
[g] — грамм, [statV] — статвольт, [1] — безразмерная единица.
Общий интерфейс для работы с единицами предоставляется функцией fompy.units.unit()
.
Пример использования:
s = Semiconductor(me_eff= 0.1 * unit('MeV_m'), mh_eff= 4. * 10**(-28), Eg= 1. * unit('eV'))
Здесь масса электрона задана эквивалентным значением энергии покоя в МэВ, масса дырки сразу приведена в граммах, а размер запрещённой зоны равен 1 эВ.
Строка, передаваемая функции unit()
, может содержать
- наименование единицы измерения (обязательно);
- дольную или кратную приставку в виде префикса к наименованию;
- рациональная степень;
- пробельные символы (где угодно, но не между приставкой и наименованием единицы).
Показатель степени по умолчанию равен 1, в иных случаях он присоединяется в виде суффикса справа от
наименования единицы. Этот суффикс выглядит так: ^
+ знак (-
для отрицательной степени,
+
для положительной степени) + целое или рациональное число. Знаки умножения, возведения в степень, и знак +
в показателе степени — необязательны.
Примеры: микрометр в минус третьей степени — um^-3
или um-3
; вольт — V
, или V ^1
, или V ^ +1
; вольт в степени 3/2 — V ^ 3/2
, V 3/2
.
Комбинации разных единиц строятся с помощью символов /
для частного и *
/отсутствие символа для произведения.
Важный момент: символ /
делит обозначение на числитель и знаменатель. Всё, что записано после него, станет множителем с
противоположной по знаку степенью. В качестве числителя может выступать 1
.
Функция всегда способна отличить знак /
в показателе степени от знака /
разделяющего числитель и знаменатель, поскольку знаменатель не может начинаться с числа.
Примеры: ом-метр — Ohm m
, или Ohm * m
, или Ohm / m-1
;
секунда в минус первой степени — s^-1
или 1 / s
;
генри = кг м2 с−2 А−2 — kg m^2 / s^2 A^2
.
Поддерживаются следующие наименования единиц измерения:
Подстрока | Единица |
---|---|
m |
метр |
g |
грамм |
s |
секунда |
K |
кельвин |
A |
ампер |
eV |
электронвольт |
eV_m |
1 эВ/c2 (масса, эквивалентная энергии покоя 1 эВ) |
eV_T |
1 эВ/kB (температура, эквивалентная тепловой энергии 1 эВ) |
Hz |
герц |
N |
ньютон |
J |
джоуль |
W |
ватт |
Pa |
паскаль |
C |
кулон |
V |
вольт |
Ohm |
ом |
F |
фарад |
Wb |
вебер |
T |
тесла |
H |
генри |
Таблица дольных и кратных десятичных приставок:
Подстрока | Множитель | Приставка |
---|---|---|
y |
10−24 | иокто- |
z |
10−21 | зепто- |
a |
10−18 | атто- |
f |
10−15 | фемто- |
p |
10−12 | пико- |
n |
10−9 | нано- |
u |
10−6 | микро- |
m |
10−3 | милли- |
c |
10−2 | санти- |
d |
10−1 | деци- |
da |
101 | дека- |
h |
102 | гекто- |
k |
103 | кило- |
M |
106 | мега- |
G |
109 | гига- |
T |
1012 | тера- |
P |
1015 | пета- |
E |
1018 | экса- |
Z |
1021 | зетта- |
Y |
1024 | иотта- |
Физические константы определены в модуле fompy.constants
. Все значения приведены в единицах системы СГС.
Таблица представленных констант:
Имя объекта | Константа |
---|---|
c |
скорость света |
k |
постоянная Больцмана |
Na |
постоянная Авогадро |
R |
универсальная газовая постоянная |
sigma |
константа Стефана-Больцмана |
me |
масса электрона |
mp |
масса протона |
mn |
масса нейтрона |
e |
заряд электрона |
h |
постоянная Планка |
h_bar |
редуцированная постоянная Планка |
eV |
1 эВ |
eV_m |
1 эВ/c2 (масса, эквивалентная энергии покоя 1 эВ) |
eV_T |
1 эВ/kB (температура, эквивалентная тепловой энергии 1 эВ) |
amu |
атомная единица массы (дальтон) |
angstrom |
ангстрем |
volt |
1 В |
ampere |
1 А |
ohm |
1 Ом |
farad |
1 Ф |
henry |
1 Гн |
Ry |
постоянная Ридберга |
a0 |
радиус Бора |
Необходимо найти концентрацию дырок в кремнии Si, легированном акцепторной примесью. Температура T = 300 К, концентрация акцепторной примеси Na = 1017 см−3, акцепторный уровень Ea = 0,3 эВ (от вершины валентной зоны Ev = 0).
-
Подготавливаем интерпретатор Python — воспользуемся удобной настройкой Unix shell:
$ fompy
-
Создаём объект легированного полупроводника
fompy.models.DopedSemiconductor
:- задаём в качестве базового материала кремний
fompy.materials.Si
; - приводим значения для акцепторных концентрации Na и уровня Ea;
- зануляем параметры донорной примеси Nd и Ed (считаем, что она отсутствует).
>>> si_p = DopedSemiconductor(Si, 10**17, 0.3 * eV, 0, 0)
Важно! Применение эВ требует домножения на величину
fompy.constants.eV
, равную значению 1 эВ в единицах СГС. Либо можно взамен воспользоваться функциейfompy.units.unit()
, описанной в разделе Единицы измерения. - задаём в качестве базового материала кремний
-
Находим концентрацию дырок (температура T = 300 К по умолчанию, уровень Ферми вычисляется автоматически):
>>> n_p = si_p.p_concentration() >>> print("{:e}".format(n_p)) 3.778950e+15
Требуется вычислить проводимость материала при заданных концентрации электронов nn = 2,0 · 1016 см−3 и дырок np = 8,5 · 1016 см−3, а также подвижности электронов μn = 3,9 · 103 см2 В−1 с−1 и дырок μp = 1,9 · 103 см2 В−1 с−1.
-
Подготавливаем интерпретатор Python:
$ fompy
-
Находим проводимость с помощью подпрограммы
fompy.models.conductivity(n, n_mob, p, p_mob)
. Здесь для перевода единиц измерения мы пользуемся функциейfompy.units.unit()
.>>> sigma = conductivity(2. * 10**16, 3900. * unit('cm^2 / V s'), 8.5 * 10**16, 1900. * unit('cm^2 / V s')) >>> print("{:e}".format(sigma)) 3.448655e+13
Если вы желаете внести свой вклад в проект, следуйте инструкциям в файле CONTRIBUTING.md. На репозитории действуют правила поведения.
Предложения и пожелания по функционалу, наполнению проекта и исправлению ошибок принимаются на сайте репозитория в разделе Issues.