Routines for the course "Physical Fundamentals of Microelectronics"
Project description
FOMpy
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()
Общий интерфейс для работы с единицами предоставляется функцией 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 |
радиус Бора |
Примеры
Пример 1: расчёт концентрации дырок в легированном полупроводнике
Необходимо найти концентрацию дырок в кремнии 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
Пример 2: определение проводимости
Требуется вычислить проводимость материала при заданных концентрации электронов 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.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file fti-fompy-0.4.0.tar.gz
.
File metadata
- Download URL: fti-fompy-0.4.0.tar.gz
- Upload date:
- Size: 28.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.9.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b6ca7aef03e3a079083c6290d3ea8c1e2ba0ea99c62112fb5743f75fa8054cfb |
|
MD5 | f61a5de8672e962962d872d0c2fc9942 |
|
BLAKE2b-256 | 050cf5da32c2732a94662e59a4026a26bc2b50df840eaa9eb7afcf60ea2dcea7 |
File details
Details for the file fti_fompy-0.4.0-py3-none-any.whl
.
File metadata
- Download URL: fti_fompy-0.4.0-py3-none-any.whl
- Upload date:
- Size: 23.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.9.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8c3b15529c6dfe975f5d35e05b1068a58a388498013c1cdcc525440f34db3ef3 |
|
MD5 | e72bdedc1c24643946880ab759123306 |
|
BLAKE2b-256 | b9f7fab72e46d9b2f3236e2ae944cee802596bb86342fa2562078c8134f125a5 |