https://github.com/kononovarseniy/fompy
FOMpy - подпрограммы для курса "Физические Основы Микроэлектроники" (2020)
https://github.com/kononovarseniy/fompy
phisics semiconductor-physics
Last synced: about 1 year ago
JSON representation
FOMpy - подпрограммы для курса "Физические Основы Микроэлектроники" (2020)
- Host: GitHub
- URL: https://github.com/kononovarseniy/fompy
- Owner: kononovarseniy
- License: mit
- Created: 2020-10-13T05:49:59.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2021-10-19T08:15:07.000Z (over 4 years ago)
- Last Synced: 2025-04-11T14:10:06.246Z (about 1 year ago)
- Topics: phisics, semiconductor-physics
- Language: Python
- Homepage:
- Size: 523 KB
- Stars: 4
- Watchers: 2
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
[](https://pypi.python.org/pypi/fti-fompy/)
[](https://pypi.python.org/pypi/fti-fompy/)

[](https://github.com/kononovarseniy/fompy/graphs/contributors)


[](https://github.com/kononovarseniy/fompy/milestone/1)
# FOMpy
FOMpy — подпрограммы и классы для курса «Физические основы микроэлектроники» (ФОМЭ).
Идея проекта в том, чтобы совместными усилиями создать достаточную базу подпрограмм для решения задач по ФОМЭ.
Документация модуля с приведением используемых формул и единиц измерения доступна
[по этой ссылке](https://kononovarseniy.github.io/fompy/).
**Важно!** Основной системой единиц для расчётов является СГС (Гауссова система единиц).
О том, как работать с единицами измерения, читайте в разделе [Единицы измерения](#единицы-измерения).
## Установка
Данная инструкция поможет вам начать использовать пакет FOMpy в вашем проекте
или работать с ним как с калькулятором.
С целью избежать возможных проблем с установкой зависимостей,
рекомендуется [установка в виртуальной среде](#установка-в-виртуальной-среде).
### Глобальная установка
Для того чтобы установить FOMpy глобально, выполните команду
```console
$ pip install fti-fompy
```
### Установка в виртуальной среде
- Создайте виртуальную среду (возможно, придётся написать ```python3``` вместо ```python```):
```console
$ python -m venv .venv
```
- Запустите виртуальную среду:
```console
$ source ./venv/bin/activate
```
**Важно!** В дальнейшем эту команду нужно будет выполнять каждый раз перед запуском скриптов, работающих с FOMpy.
Эффект действует до закрытия окна терминала или вызова команды ```deactivate```.
- Установите пакет FOMpy:
```console
$ pip install fti-fompy
```
### Удобный скрипт для запуска
Вы можете настроить терминал таким образом, чтобы одной командой в нём
запускался интерпретатор Python, сразу после запуска готовый к работе с FOMpy.
- Добавьте в файл ```~/.bashrc``` (или другой rc-файл в зависимости от вашей командной оболочки) следующие строки:
```sh
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
}
```
- Перезапустите терминал.
- Наберите команду
```console
$ fompy
```
Теперь этой командой вы можете вызывать интерпретатор ```python```,
в котором уже будут импортированы все нужные модули FOMpy.
## Использование
В этом разделе объясняется, как наиболее эффективно работать с единицами измерения,
а также представлены несколько примеров, демонстрирующих применение пакета FOMpy
для решения простейших типичных задач.
Подробное описание доступных подпрограмм, классов и их методов можно прочитать
[по этой ссылке](https://kononovarseniy.github.io/fompy/).
В документации методов приведены используемые формулы и уравнения,
а также указаны единицы измерения физических величин.
### Единицы измерения
С единицами физических величин в расчётах необходимо обращаться осторожно.
Важно помнить, что в пакете FOMpy **везде используется система СГС**:
как в возвращаемых значениях функций, так и в аргументах, передаваемых тем же функциям.
Все физические константы также приведены в единицах СГС.
Функционал, облегчающий работу с единицами измерения, расположен
в модулях `fompy.constants` и `fompy.units`.
Документация методов и подпрограмм снабжена обозначениями принимаемых и возвращаемых единиц
в квадратных скобках, например,
\[g\] — грамм, \[statV\] — статвольт, \[1\] — безразмерная единица.
#### Функция `fompy.units.unit()`
Общий интерфейс для работы с единицами предоставляется функцией `fompy.units.unit()`.
Пример использования:
```python
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](#удобный-скрипт-для-запуска):
```console
$ fompy
```
- Создаём объект легированного полупроводника ```fompy.models.DopedSemiconductor```:
* задаём в качестве базового материала кремний ```fompy.materials.Si```;
* приводим значения для акцепторных концентрации *Na* и уровня *Ea*;
* зануляем параметры донорной примеси *Nd* и *Ed* (считаем, что она отсутствует).
```python
>>> si_p = DopedSemiconductor(Si, 10**17, 0.3 * eV, 0, 0)
```
**Важно!** Применение эВ требует домножения на величину ```fompy.constants.eV```,
равную значению 1 эВ в единицах СГС. Либо можно взамен воспользоваться функцией ```fompy.units.unit()```, описанной
в разделе [Единицы измерения](#единицы-измерения).
- Находим концентрацию дырок (температура *T* = 300 К по умолчанию, уровень Ферми вычисляется автоматически):
```python
>>> 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:
```console
$ fompy
```
- Находим проводимость с помощью подпрограммы ```fompy.models.conductivity(n, n_mob, p, p_mob)```. Здесь для перевода
[единиц измерения](#единицы-измерения) мы пользуемся функцией ```fompy.units.unit()```.
```python
>>> 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](LICENSE.md)
## Помощь проекту и поддержка пользователей
Если вы желаете внести свой вклад в проект, следуйте инструкциям в файле [CONTRIBUTING.md](CONTRIBUTING.md).
На репозитории действуют [правила поведения](CODE_OF_CONDUCT.md).
Предложения и пожелания по функционалу, наполнению проекта и исправлению ошибок принимаются на сайте репозитория
в разделе [Issues](https://github.com/kononovarseniy/fompy/issues).