{"id":25204407,"url":"https://github.com/kononovarseniy/fompy","last_synced_at":"2025-05-12T23:11:29.889Z","repository":{"id":57432463,"uuid":"303601110","full_name":"kononovarseniy/fompy","owner":"kononovarseniy","description":"FOMpy - подпрограммы для курса \"Физические Основы Микроэлектроники\" (2020)","archived":false,"fork":false,"pushed_at":"2021-10-19T08:15:07.000Z","size":536,"stargazers_count":4,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-11T14:10:06.246Z","etag":null,"topics":["phisics","semiconductor-physics"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kononovarseniy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-10-13T05:49:59.000Z","updated_at":"2023-08-19T11:07:46.000Z","dependencies_parsed_at":"2022-09-19T07:00:17.931Z","dependency_job_id":null,"html_url":"https://github.com/kononovarseniy/fompy","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kononovarseniy%2Ffompy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kononovarseniy%2Ffompy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kononovarseniy%2Ffompy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kononovarseniy%2Ffompy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kononovarseniy","download_url":"https://codeload.github.com/kononovarseniy/fompy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253837452,"owners_count":21971984,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["phisics","semiconductor-physics"],"created_at":"2025-02-10T08:17:48.294Z","updated_at":"2025-05-12T23:11:29.870Z","avatar_url":"https://github.com/kononovarseniy.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![PyPI version](https://img.shields.io/pypi/v/fti-fompy.svg)](https://pypi.python.org/pypi/fti-fompy/)\n[![PyPI license](https://img.shields.io/pypi/l/fti-fompy.svg)](https://pypi.python.org/pypi/fti-fompy/)\n![PyPI - Downloads](https://img.shields.io/pypi/dm/fti-fompy?label=pypi%20downloads) \u003cbr/\u003e\n[![GitHub contributors](https://img.shields.io/github/contributors/kononovarseniy/fompy)](https://github.com/kononovarseniy/fompy/graphs/contributors)\n![GitHub commit activity](https://img.shields.io/github/commit-activity/w/kononovarseniy/fompy)\n![Coverage](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fkononovarseniy%2F44e4ca5d46404d5c37ab1b8661bd6675%2Fraw%2Fcoverage.json) \u003cbr/\u003e\n[![GitHub milestone](https://img.shields.io/github/milestones/progress/kononovarseniy/fompy/1)](https://github.com/kononovarseniy/fompy/milestone/1)\n\n# FOMpy\n\nFOMpy — подпрограммы и классы для курса «Физические основы микроэлектроники» (ФОМЭ).\nИдея проекта в том, чтобы совместными усилиями создать достаточную базу подпрограмм для решения задач по ФОМЭ.\n\nДокументация модуля с приведением используемых формул и единиц измерения доступна \n[по этой ссылке](https://kononovarseniy.github.io/fompy/).\n\n**Важно!** Основной системой единиц для расчётов является СГС (Гауссова система единиц).\nО том, как работать с единицами измерения, читайте в разделе [Единицы измерения](#единицы-измерения).\n\n## Установка\n\nДанная инструкция поможет вам начать использовать пакет FOMpy в вашем проекте \nили работать с ним как с калькулятором.\n\nС целью избежать возможных проблем с установкой зависимостей,\nрекомендуется [установка в виртуальной среде](#установка-в-виртуальной-среде).\n\n### Глобальная установка\n\nДля того чтобы установить FOMpy глобально, выполните команду\n```console\n$ pip install fti-fompy\n```\n\n### Установка в виртуальной среде\n\n- Создайте виртуальную среду (возможно, придётся написать ```python3``` вместо ```python```):\n    ```console\n    $ python -m venv .venv\n    ```\n\n- Запустите виртуальную среду:\n    ```console\n    $ source ./venv/bin/activate\n    ```\n  **Важно!** В дальнейшем эту команду нужно будет выполнять каждый раз перед запуском скриптов, работающих с FOMpy.\n  Эффект действует до закрытия окна терминала или вызова команды ```deactivate```.\n  \n- Установите пакет FOMpy:\n    ```console\n    $ pip install fti-fompy\n    ```\n\n### Удобный скрипт для запуска\n\nВы можете настроить терминал таким образом, чтобы одной командой в нём \nзапускался интерпретатор Python, сразу после запуска готовый к работе с FOMpy.\n\n- Добавьте в файл ```~/.bashrc``` (или другой rc-файл в зависимости от вашей командной оболочки) следующие строки:\n    ```sh\n    FOMPY_IMPORTS=\"\n    from math import *\n    from fompy.constants import *\n    from fompy.materials import *\n    from fompy.models import *\n    from fompy.units import unit\n    \"\n    \n    fompy() {\n        cd \u003cПуть до папки с FOMpy\u003e # Эти две строки нужны только для \n        source .venv/bin/activate  # запуска виртуальной среды\n        PYTHONSTARTUP=\u003c(echo \"$FOMPY_IMPORTS\") python\n    }\n    ```\n  \n- Перезапустите терминал.\n\n- Наберите команду\n    ```console\n    $ fompy\n    ```\n  Теперь этой командой вы можете вызывать интерпретатор ```python```, \n  в котором уже будут импортированы все нужные модули FOMpy.\n\n## Использование\n\nВ этом разделе объясняется, как наиболее эффективно работать с единицами измерения, \nа также представлены несколько примеров, демонстрирующих применение пакета FOMpy\nдля решения простейших типичных задач.\n\nПодробное описание доступных подпрограмм, классов и их методов можно прочитать \n[по этой ссылке](https://kononovarseniy.github.io/fompy/).\nВ документации методов приведены используемые формулы и уравнения, \nа также указаны единицы измерения физических величин.\n\n### Единицы измерения\n\nС единицами физических величин в расчётах необходимо обращаться осторожно. \nВажно помнить, что в пакете FOMpy **\u003cu\u003eвезде используется система СГС\u003c/u\u003e**: \nкак в возвращаемых значениях функций, так и в аргументах, передаваемых тем же функциям. \nВсе физические константы также приведены в единицах СГС.\n\nФункционал, облегчающий работу с единицами измерения, расположен \nв модулях `fompy.constants` и `fompy.units`. \nДокументация методов и подпрограмм снабжена обозначениями принимаемых и возвращаемых единиц \nв квадратных скобках, например, \n\\[g\\] \u0026mdash; грамм, \\[statV\\] \u0026mdash; статвольт, \\[1\\] \u0026mdash; безразмерная единица.\n\n#### Функция `fompy.units.unit()`\n\nОбщий интерфейс для работы с единицами предоставляется функцией `fompy.units.unit()`. \nПример использования:\n```python\ns = Semiconductor(me_eff= 0.1 * unit('MeV_m'), mh_eff= 4. * 10**(-28), Eg= 1. * unit('eV'))\n```\nЗдесь масса электрона задана эквивалентным значением энергии покоя в МэВ, \nмасса дырки сразу приведена в граммах, а размер запрещённой зоны равен 1 эВ.\n\nСтрока, передаваемая функции `unit()`, может содержать\n* наименование единицы измерения (обязательно);\n* дольную или кратную приставку в виде префикса к наименованию;\n* рациональная степень;\n* пробельные символы (где угодно, но **не** между приставкой и наименованием единицы).\n\nПоказатель степени по умолчанию равен 1, в иных случаях он присоединяется в виде суффикса справа от \nнаименования единицы. Этот суффикс выглядит так: `^` + знак (`-` для отрицательной степени, \n`+` для положительной степени) + целое или рациональное число. Знаки умножения, возведения в степень, и знак `+` в показателе степени \u0026mdash; необязательны.\n\nПримеры: микрометр в минус третьей степени \u0026mdash; `um^-3` или `um-3`; вольт \u0026mdash; `V`, или `V ^1`, или `V ^ +1`; вольт в степени 3/2 \u0026mdash; `V ^ 3/2`, `V 3/2`.\n\nКомбинации разных единиц строятся с помощью символов `/` для частного и `*`/отсутствие символа для произведения.\nВажный момент: символ `/` делит обозначение на числитель и знаменатель. Всё, что записано после него, станет множителем с \nпротивоположной по знаку степенью. В качестве числителя может выступать `1`.\n\nФункция всегда способна отличить знак `/` в показателе степени от знака `/` разделяющего числитель и знаменатель, поскольку знаменатель не может начинаться с числа.\n\nПримеры: ом-метр \u0026mdash; `Ohm m`, или `Ohm * m`, или `Ohm / m-1`; \nсекунда в минус первой степени \u0026mdash; `s^-1` или `1 / s`; \nгенри = кг м\u003csup\u003e2\u003c/sup\u003e с\u003csup\u003e\u0026minus;2\u003c/sup\u003e А\u003csup\u003e\u0026minus;2\u003c/sup\u003e \u0026mdash; `kg m^2 / s^2 A^2`.\n\nПоддерживаются следующие наименования единиц измерения:\n\nПодстрока | Единица\n--- | --- \n`m` | метр\n`g` | грамм\n`s` | секунда\n`K` | кельвин\n`A` | ампер\n`eV` | электронвольт\n`eV_m` | 1 эВ/c\u003csup\u003e2\u003c/sup\u003e (масса, эквивалентная энергии покоя 1 эВ)\n`eV_T` | 1 эВ/k\u003csub\u003eB\u003c/sub\u003e (температура, эквивалентная тепловой энергии 1 эВ)\n`Hz` | герц\n`N` | ньютон\n`J` | джоуль\n`W` | ватт\n`Pa` | паскаль\n`C` | кулон\n`V` | вольт\n`Ohm` | ом\n`F` | фарад\n`Wb` | вебер\n`T` | тесла\n`H` | генри\n\nТаблица дольных и кратных десятичных приставок:\n\nПодстрока | Множитель | Приставка\n--- | --- | ---\n`y` | 10\u003csup\u003e\u0026minus;24\u003c/sup\u003e | иокто-\n`z` | 10\u003csup\u003e\u0026minus;21\u003c/sup\u003e | зепто-\n`a` | 10\u003csup\u003e\u0026minus;18\u003c/sup\u003e | атто-\n`f` | 10\u003csup\u003e\u0026minus;15\u003c/sup\u003e | фемто-\n`p` | 10\u003csup\u003e\u0026minus;12\u003c/sup\u003e | пико-\n`n` | 10\u003csup\u003e\u0026minus;9\u003c/sup\u003e | нано-\n`u` | 10\u003csup\u003e\u0026minus;6\u003c/sup\u003e | микро-\n`m` | 10\u003csup\u003e\u0026minus;3\u003c/sup\u003e | милли-\n`c` | 10\u003csup\u003e\u0026minus;2\u003c/sup\u003e | санти-\n`d` | 10\u003csup\u003e\u0026minus;1\u003c/sup\u003e | деци-\n`da` | 10\u003csup\u003e1\u003c/sup\u003e | дека-\n`h` | 10\u003csup\u003e2\u003c/sup\u003e | гекто-\n`k` | 10\u003csup\u003e3\u003c/sup\u003e | кило-\n`M` | 10\u003csup\u003e6\u003c/sup\u003e | мега-\n`G` | 10\u003csup\u003e9\u003c/sup\u003e | гига-\n`T` | 10\u003csup\u003e12\u003c/sup\u003e | тера-\n`P` | 10\u003csup\u003e15\u003c/sup\u003e | пета-\n`E` | 10\u003csup\u003e18\u003c/sup\u003e | экса-\n`Z` | 10\u003csup\u003e21\u003c/sup\u003e | зетта-\n`Y` | 10\u003csup\u003e24\u003c/sup\u003e | иотта-\n\n#### Физические константы\n\nФизические константы определены в модуле `fompy.constants`. Все значения приведены в единицах системы СГС.\n\nТаблица представленных констант:\n\nИмя объекта | Константа\n--- | ---\n`c` | скорость света\n`k` | постоянная Больцмана\n`Na` | постоянная Авогадро\n`R` | универсальная газовая постоянная\n`sigma` | константа Стефана-Больцмана\n`me` | масса электрона\n`mp` | масса протона\n`mn` | масса нейтрона\n`e` | заряд электрона\n`h` | постоянная Планка\n`h_bar` | редуцированная постоянная Планка\n`eV` | 1 эВ\n`eV_m` | 1 эВ/c\u003csup\u003e2\u003c/sup\u003e (масса, эквивалентная энергии покоя 1 эВ)\n`eV_T` | 1 эВ/k\u003csub\u003eB\u003c/sub\u003e (температура, эквивалентная тепловой энергии 1 эВ)\n`amu` | атомная единица массы (дальтон)\n`angstrom` | ангстрем\n`volt` | 1 В\n`ampere` | 1 А\n`ohm` | 1 Ом\n`farad` | 1 Ф\n`henry` | 1 Гн\n`Ry` | постоянная Ридберга\n`a0` | радиус Бора\n\n### Примеры\n\n#### Пример 1: расчёт концентрации дырок в легированном полупроводнике\n\nНеобходимо найти концентрацию дырок в кремнии Si, легированном акцепторной примесью.\nТемпература *T* = 300 К, концентрация акцепторной примеси \n*N\u003csub\u003ea\u003c/sub\u003e* = 10\u003csup\u003e17\u003c/sup\u003e см\u003csup\u003e\u0026minus;3\u003c/sup\u003e,\nакцепторный уровень *E\u003csub\u003ea\u003c/sub\u003e* = 0,3 эВ (от вершины валентной зоны *E\u003csub\u003ev\u003c/sub\u003e* = 0).\n\n- Подготавливаем интерпретатор Python — воспользуемся [удобной настройкой Unix shell](#удобный-скрипт-для-запуска):\n  ```console\n  $ fompy\n  ```\n\n- Создаём объект легированного полупроводника ```fompy.models.DopedSemiconductor```: \n  * задаём в качестве базового материала кремний ```fompy.materials.Si```;\n  * приводим значения для акцепторных концентрации *N\u003csub\u003ea\u003c/sub\u003e* и уровня *E\u003csub\u003ea\u003c/sub\u003e*; \n  * зануляем параметры донорной примеси *N\u003csub\u003ed\u003c/sub\u003e* и *E\u003csub\u003ed\u003c/sub\u003e* (считаем, что она отсутствует).\n  ```python\n  \u003e\u003e\u003e si_p = DopedSemiconductor(Si, 10**17, 0.3 * eV, 0, 0)\n  ```\n  **Важно!** Применение эВ требует домножения на величину ```fompy.constants.eV```, \n  равную значению 1 эВ в единицах СГС. Либо можно взамен воспользоваться функцией ```fompy.units.unit()```, описанной \n  в разделе [Единицы измерения](#единицы-измерения).\n  \n- Находим концентрацию дырок (температура *T* = 300 К по умолчанию, уровень Ферми вычисляется автоматически):\n  ```python\n  \u003e\u003e\u003e n_p = si_p.p_concentration()\n  \u003e\u003e\u003e print(\"{:e}\".format(n_p))\n  3.778950e+15\n  ```\n\n#### Пример 2: определение проводимости\n\nТребуется вычислить проводимость материала при заданных концентрации \nэлектронов *n\u003csub\u003en\u003c/sub\u003e* = 2,0 \u0026middot; 10\u003csup\u003e16\u003c/sup\u003e см\u003csup\u003e\u0026minus;3\u003c/sup\u003e \nи дырок *n\u003csub\u003ep\u003c/sub\u003e* = 8,5 \u0026middot; 10\u003csup\u003e16\u003c/sup\u003e см\u003csup\u003e\u0026minus;3\u003c/sup\u003e, а также\nподвижности электронов \u0026mu;*\u003csub\u003en\u003c/sub\u003e* = 3,9 \u0026middot; 10\u003csup\u003e3\u003c/sup\u003e \nсм\u003csup\u003e2\u003c/sup\u003e В\u003csup\u003e\u0026minus;1\u003c/sup\u003e с\u003csup\u003e\u0026minus;1\u003c/sup\u003e \nи дырок \u0026mu;*\u003csub\u003ep\u003c/sub\u003e* = 1,9 \u0026middot; 10\u003csup\u003e3\u003c/sup\u003e \nсм\u003csup\u003e2\u003c/sup\u003e В\u003csup\u003e\u0026minus;1\u003c/sup\u003e с\u003csup\u003e\u0026minus;1\u003c/sup\u003e.\n\n- Подготавливаем интерпретатор Python:\n  ```console\n  $ fompy\n  ```\n\n- Находим проводимость с помощью подпрограммы ```fompy.models.conductivity(n, n_mob, p, p_mob)```. Здесь для перевода \n  [единиц измерения](#единицы-измерения) мы пользуемся функцией ```fompy.units.unit()```.\n  ```python\n  \u003e\u003e\u003e sigma = conductivity(2. * 10**16, 3900. * unit('cm^2 / V s'), 8.5 * 10**16, 1900. * unit('cm^2 / V s'))\n  \u003e\u003e\u003e print(\"{:e}\".format(sigma))\n  3.448655e+13\n  ```\n\n## Лицензия\n\n[MIT](LICENSE.md)\n\n## Помощь проекту и поддержка пользователей\n\nЕсли вы желаете внести свой вклад в проект, следуйте инструкциям в файле [CONTRIBUTING.md](CONTRIBUTING.md). \nНа репозитории действуют [правила поведения](CODE_OF_CONDUCT.md).\n\nПредложения и пожелания по функционалу, наполнению проекта и исправлению ошибок принимаются на сайте репозитория \nв разделе [Issues](https://github.com/kononovarseniy/fompy/issues).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkononovarseniy%2Ffompy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkononovarseniy%2Ffompy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkononovarseniy%2Ffompy/lists"}