Skip to content

FOMpy - подпрограммы для курса "Физические Основы Микроэлектроники" (2020)

License

Notifications You must be signed in to change notification settings

kononovarseniy/fompy

Repository files navigation

PyPI version PyPI license PyPI - Downloads
GitHub contributors GitHub commit activity Coverage
GitHub milestone

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 А−2kg 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

Лицензия

MIT

Помощь проекту и поддержка пользователей

Если вы желаете внести свой вклад в проект, следуйте инструкциям в файле CONTRIBUTING.md. На репозитории действуют правила поведения.

Предложения и пожелания по функционалу, наполнению проекта и исправлению ошибок принимаются на сайте репозитория в разделе Issues.

About

FOMpy - подпрограммы для курса "Физические Основы Микроэлектроники" (2020)

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages