Skip to main content

Routines for the course "Physical Fundamentals of Microelectronics"

Project description

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.

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

fti-fompy-0.4.0.tar.gz (28.0 kB view hashes)

Uploaded Source

Built Distribution

fti_fompy-0.4.0-py3-none-any.whl (23.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page