From ab8ed8b8ad649c4f592c5461a69a085a83b6cbb7 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 1 Mar 2026 01:24:03 +0000 Subject: [PATCH] docs: add Russian user guide for structural engineers (v10.0.0) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Comprehensive instruction document for mechanical/structural engineers covering CLI usage, parameter selection, typical workflows, result interpretation, and FAQ. Fixes A_wall_cell preset reference value (1.82e-2 m², not 2.69e-2 m²). https://claude.ai/code/session_01KdWbFFKR5RAz9B55evMtuK --- docs/user_guide_v10_ru.md | 826 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 826 insertions(+) create mode 100644 docs/user_guide_v10_ru.md diff --git a/docs/user_guide_v10_ru.md b/docs/user_guide_v10_ru.md new file mode 100644 index 0000000..7ca801f --- /dev/null +++ b/docs/user_guide_v10_ru.md @@ -0,0 +1,826 @@ +# Инструкция по использованию Venting v10.0.0 + +## Для инженера-расчётчика механики (прочность, геометрия) + +> **Цель этого документа** — дать инженеру-прочнисту, который отвечает за панели/перегородки и знает геометрию конструкции, но не является специалистом по газодинамике и теплообмену, полную инструкцию по запуску расчётов, выбору параметров и интерпретации результатов. + +--- + +## 1. Что делает программа и зачем она нужна + +### 1.1 Задача + +При откачке вакуумной камеры (или при выведении на орбиту) давление снаружи конструкции падает. Внутри панелей, полостей и отсеков газ не успевает выйти мгновенно — он выходит через отверстия и щели. Из-за этого на стенках и перегородках возникает **перепад давления ΔP**. + +Программа Venting вычисляет этот перепад `|ΔP|` во времени для каждой перегородки/интерфейса и определяет: + +- **Где** и **когда** возникает максимальный ΔP. +- Насколько велик этот перепад (это нагрузка на конструкцию). +- Какой режим течения в отверстиях (дозвуковой или запертый/choked). + +### 1.2 Что вам нужно получить от расчёта + +Как инженеру-прочнисту вам нужен один ключевой результат: **максимальный перепад давления |ΔP| на каждой перегородке** (в Паскалях). Это давление вы затем используете как квазистатическую нагрузку в своей прочностной модели. + +### 1.3 Физическая модель (упрощённо) + +Модель — это **цепочка ячеек** (объёмов с газом), соединённых отверстиями: + +``` +ячейка10 → ячейка9 → ... → ячейка2 → ячейка1 → [вестибюль] → (выход наружу) → P_ext(t) +``` + +Каждая ячейка = один объём с однородным давлением, температурой, массой газа. Связи между ячейками = отверстия с определённой пропускной способностью. Снаружи давление задаётся профилем `P_ext(t)`. + +**Это НЕ CFD** — нет пространственных полей. Но для оценки нагрузок это стандартный инженерный подход. + +--- + +## 2. Установка + +### 2.1 Требования + +- Python 3.10 или выше. +- pip (менеджер пакетов Python). + +### 2.2 Установка из репозитория + +```bash +# Клонировать репозиторий +git clone https://github.com/test1card/venting.git +cd venting + +# Создать виртуальное окружение (рекомендуется) +python -m venv .venv + +# Активировать (Linux/Mac) +source .venv/bin/activate +# Активировать (Windows) +.venv\Scripts\activate + +# Установить пакет +pip install -e . +``` + +Для установки с инструментами разработки (тесты, линтеры): + +```bash +pip install -e ".[dev]" +``` + +Для установки с GUI: + +```bash +pip install -e ".[gui]" +``` + +### 2.3 Проверка установки + +```bash +python -m venting gate +``` + +Должно напечатать результаты gate-тестов без ошибок. Если все тесты прошли — установка корректна. + +--- + +## 3. Два способа работы: CLI и GUI + +### 3.1 CLI (командная строка) — для автоматизации и batch-расчётов + +```bash +python -m venting <команда> [параметры] +``` + +### 3.2 GUI (графический интерфейс) — для интерактивной работы + +```bash +python -m venting gui +``` + +GUI — это окно с полями ввода, живыми графиками и кнопками. Все параметры из CLI доступны и в GUI. Далее в инструкции параметры описываются в терминах CLI, но названия полей в GUI идентичны. + +--- + +## 4. Команды CLI — обзор + +| Команда | Назначение | +|---------|------------| +| `gate` | Запуск валидационных тестов (проверка корректности кода) | +| `sweep` | Один расчёт для заданных диаметров отверстий | +| `thermal` | Расчёт с перебором по коэффициенту теплообмена h | +| `sweep2d` | Параметрическое исследование по двум спискам диаметров | +| `mc` | Монте-Карло анализ неопределённости Cd | +| `compare` | Сравнение двух ранее выполненных расчётов | +| `gui` | Запуск графического интерфейса | + +--- + +## 5. Параметры — полное описание + +Параметры разделены на категории. Для каждого параметра указано: название, тип, умолчание, единицы, физический смысл и **рекомендация для инженера-механика** (что ставить, если не знаете). + +### 5.1 ГЕОМЕТРИЯ СЕТИ (это знает расчётчик механики) + +Эти параметры описывают вашу конструкцию. Их вы определяете из чертежей / CAD-модели. + +#### 5.1.1 Параметры CLI для команды `sweep` + +| Параметр CLI | GUI-поле | Ед. изм. | Умолчание | Описание | +|---|---|---|---|---| +| `--d-int` | `d_int_mm` | мм | 2.0 | **Диаметр внутренних отверстий** (между ячейками). Это диаметр одного отверстия в перегородке между соседними полостями. Берётся с чертежа. | +| `--d-exit` | `d_exit_mm` | мм | 2.0 | **Диаметр выходного отверстия** (из вестибюля наружу). Это отверстие, через которое газ уходит из конструкции в вакуумную камеру / в космос. | +| `--n-int` | `n_int_per_interface` | шт. | 1 | **Количество отверстий на одном интерфейсе** (перегородке) между ячейками. Если в перегородке просверлено 4 отверстия — ставьте 4. | +| `--n-exit` | `n_exit` | шт. | 1 | **Количество выходных отверстий** из вестибюля наружу. | + +**Пресет геометрии панели (зашит в CLI по умолчанию):** + +В CLI используется фиксированный пресет размеров ячейки (из предыдущих версий проекта): + +| Параметр | Значение | Описание | +|---|---|---| +| Площадь ячейки | 4708.28 мм² | Площадь проекции одной ячейки | +| Площадь вестибюля | 5200.0 мм² | Площадь проекции вестибюля | +| Высота ячейки | 27.94 мм | Зазор (высота полости) | +| V_cell | ≈1.316×10⁻⁴ м³ | Объём одной ячейки (площадь × высота) | +| V_vest | ≈1.453×10⁻⁴ м³ | Объём вестибюля | +| A_wall_cell | ≈1.82×10⁻² м² | Площадь стенок ячейки (для теплообмена) | +| A_wall_vest | ≈2.02×10⁻² м² | Площадь стенок вестибюля | + +> ⚠️ **Если ваша геометрия отличается от пресета** — используйте GUI, где все поля (V_cell_m3, V_vest_m3, A_wall_cell_m2, A_wall_vest_m2) можно задать вручную. + +#### 5.1.2 Параметры сети (топология) + +| Параметр CLI | GUI-поле | Умолчание | Описание | +|---|---|---|---| +| `--topology` | `topology` | `single_chain` | **Топология сети.** Два варианта: `single_chain` — одна цепочка ячеек, входящая в вестибюль. `two_chain_shared_vest` — две разные цепочки (A и B) сходятся в один общий вестибюль. | +| `--n-chain-b` | `N_chain_b` | 10 | **Длина второй цепочки (B)** для топологии `two_chain_shared_vest`. Первая цепочка (A) всегда имеет длину N_chain=10. | + +**N_chain** (число ячеек в цепочке) зашито = 10, **N_par** (число параллельных ветвей) = 2. Это значит, что модель агрегирует 2 параллельных идентичных цепочки по 10 ячеек. + +**Когда какую топологию выбирать:** + +- `single_chain` — стандартный случай, одна панель с последовательными ячейками и одним выходом. **Используйте по умолчанию.** +- `two_chain_shared_vest` — если у вас две разные группы ячеек (например, разные секции панели), которые выходят через один общий вестибюль. + +#### 5.1.3 Параметры для модели короткой трубки (short_tube / fanno) + +Если отверстия имеют **значительную толщину стенки** (не тонкая мембрана, а, например, 1–10 мм толщины), используется модель `short_tube` или `fanno` вместо модели идеального отверстия `orifice`. + +| Параметр CLI | GUI-поле | Ед. изм. | Умолчание | Описание | +|---|---|---|---|---| +| `--int-model` | `int_model` | — | `orifice` | Модель внутренних отверстий: `orifice`, `short_tube` или `fanno` | +| `--exit-model` | `exit_model` | — | `orifice` | Модель выходного отверстия: `orifice`, `short_tube` или `fanno` | +| `--L-int-mm` | `L_int_mm` | мм | 0.0 | **Длина канала внутреннего отверстия** = толщина перегородки. Если стенка 3 мм — ставьте 3. | +| `--L-exit-mm` | `L_exit_mm` | мм | 0.0 | **Длина канала выходного отверстия** = толщина стенки на выходе. | +| `--K-in-int` | `K_in_int` | — | 0.5 | Коэффициент потерь на входе (внутренние отверстия). | +| `--K-out-int` | `K_out_int` | — | 1.0 | Коэффициент потерь на выходе (внутренние отверстия). | +| `--eps-int-um` | `eps_int_um` | мкм | 0.0 | Шероховатость стенки канала внутреннего отверстия. | +| `--K-in-exit` | `K_in_exit` | — | 0.5 | Коэффициент потерь на входе (выходное отверстие). | +| `--K-out-exit` | `K_out_exit` | — | 1.0 | Коэффициент потерь на выходе (выходное отверстие). | +| `--eps-exit-um` | `eps_exit_um` | мкм | 0.0 | Шероховатость стенки канала выходного отверстия. | + +**Когда какую модель выбирать:** + +| Ситуация | Модель | Пояснение | +|---|---|---| +| Тонкая стенка/мембрана (< 0.5 мм) | `orifice` | Стандартная модель тонкого отверстия. Используйте по умолчанию. | +| Толстая стенка (0.5–20 мм) | `short_tube` | Учитывает трение в канале и потери на вход/выход. | +| Длинный канал (L/D > 5) | `fanno` | Учитывает запирание потока трением (Fanno choking). | + +> 🔧 **Рекомендация для механика:** Выбор модели зависит от L/D отношения вашего отверстия. Если L/D < 1 — используйте `orifice`. Если 1 < L/D < 5 — `short_tube`. Если L/D > 5 — `fanno`. Длину L берите как толщину стенки из чертежа. Диаметр D — это d_int или d_exit. + +> 🔧 **Рекомендация по K_in, K_out, eps:** +> - **K_in = 0.5** — стандарт для острой кромки на входе. Оставьте по умолчанию. +> - **K_out = 1.0** — стандарт для внезапного расширения. Оставьте по умолчанию. +> - **eps = 0** — гладкие отверстия. Для сверлёных отверстий в алюминии можно поставить 1–5 мкм, для литья 10–50 мкм. **Если не знаете — оставьте 0.** + +### 5.2 ПАРАМЕТРЫ ГАЗА И РАСХОДА (можно не знать — есть рекомендации) + +Эти параметры описывают газодинамику. Если вы не специалист — используйте рекомендованные значения. + +#### 5.2.1 Коэффициент расхода Cd + +| Параметр CLI | GUI-поле | Умолчание | Описание | +|---|---|---|---| +| `--cd-int` | `Cd_int` | 0.62 | **Коэффициент расхода внутренних отверстий.** Безразмерный, 0 < Cd ≤ 1. | +| `--cd-exit` | `Cd_exit` | 0.62 | **Коэффициент расхода выходного отверстия.** | + +**Что такое Cd** (для механика): Идеальный расход через отверстие считается по формуле газодинамики. Реальный расход меньше из-за сужения струи и потерь. Cd — множитель: реальный_расход = Cd × идеальный_расход. + +**Какое значение ставить:** + +| Тип отверстия | Рекомендуемый Cd | Примечание | +|---|---|---| +| Круглое отверстие с острой кромкой | 0.60 – 0.65 | **Стандарт. Используйте 0.62 по умолчанию.** | +| Скруглённая кромка (r/d > 0.1) | 0.80 – 0.95 | Если кромки обработаны / зенкованы | +| Щель / вытянутое отверстие | 0.55 – 0.65 | Зависит от соотношения сторон | +| Сопло (конфузор) | 0.90 – 0.98 | Специально спроектированный канал | + +> ⚠️ **Cd — ГЛАВНЫЙ источник неопределённости в расчёте.** Всегда делайте анализ чувствительности: считайте с Cd = 0.5 и Cd = 0.7 и смотрите разброс ΔP. Для этого используйте команду `mc` (Монте-Карло). + +#### 5.2.2 Начальные условия (зашиты в коде) + +Эти параметры зашиты как константы и не задаются через CLI: + +| Параметр | Значение | Описание | +|---|---|---| +| P₀ | 101325 Па (1 атм) | Начальное давление во всех ячейках | +| T₀ | 300 K (27°C) | Начальная температура | +| Газ | Сухой воздух | γ = 1.4, R = 287.05 Дж/(кг·К) | + +> Для воздуха при комнатных условиях эти значения корректны. Если у вас азот или другой газ — результат будет незначительно отличаться (γ азота тоже ≈ 1.4). Для гелия, аргона или других газов модель потребует модификации кода. + +### 5.3 ПРОФИЛЬ ВНЕШНЕГО ДАВЛЕНИЯ P_ext(t) (спросите у испытателей) + +Профиль описывает, как давление снаружи конструкции падает во времени. Это задаётся режимом откачки вакуумной камеры или условиями выведения. + +| Параметр CLI | GUI-поле | Умолчание | Описание | +|---|---|---|---| +| `--profile` | `profile_kind` | `linear` | Тип профиля: `linear`, `step`, `barometric`, `table` | +| `--rate-mmhg` | `rate_mmhg_per_s` | 20.0 | Скорость снижения давления (для linear и barometric), мм рт. ст./с | +| `--step-time` | `step_time_s` | 0.01 | Время мгновенного сброса давления (для step), с | +| `--profile-file` | `profile_file` | (пусто) | Путь к CSV-файлу (для table) | +| `--profile-pressure-unit` | `profile_pressure_unit` | `Pa` | Единицы давления в CSV-файле: `Pa` или `mmHg` | + +#### Описание типов профилей: + +**`linear`** — давление падает линейно от 1 атм до 0: + +``` +P_ext(t) = 101325 - rate × t, где rate = rate_mmhg × 133.322 Па/с +``` + +При `--rate-mmhg 20` давление упадёт до нуля за ≈ 38 секунд. + +> **Когда использовать:** Стандартный случай откачки камеры с постоянной скоростью. **Используйте по умолчанию, если не знаете реальный профиль.** + +**`step`** — мгновенный сброс давления до нуля: + +``` +P_ext(t) = 101325 при t < step_time, P_ext = 0 при t ≥ step_time +``` + +> **Когда использовать:** Моделирование мгновенной разгерметизации. Это **наихудший случай** — даёт максимально возможный ΔP. Используйте для консервативной оценки. + +**`barometric`** — экспоненциальное падение: + +``` +P_ext(t) = P₀ × exp(-t/τ), где τ = P₀ / (rate_mmhg × 133.322) +``` + +> **Когда использовать:** Более реалистичная модель откачки, когда скорость откачки замедляется при низком давлении. + +**`table`** — произвольный профиль из CSV-файла: + +CSV-файл должен содержать два столбца без заголовка: + +``` +t_s,P_Pa +0.0,101325 +10.0,80000 +20.0,50000 +30.0,20000 +60.0,1000 +120.0,10 +``` + +Первый столбец — время в секундах, второй — давление (в Па или в мм рт. ст., в зависимости от `--profile-pressure-unit`). + +> **Когда использовать:** Если у вас есть реальная запись давления в камере от испытателей. Это самый точный вариант. + +> ⚠️ **Важно:** Если давление в CSV задано в мм рт. ст., обязательно укажите `--profile-pressure-unit mmHg`. Программа проверяет диапазон и выдаст ошибку, если вы по ошибке укажете мм рт. ст. как Паскали. + +#### Какой профиль выбрать — дерево решений: + +``` +Есть реальная запись P(t) из камеры? +├── Да → --profile table --profile-file my_data.csv +└── Нет + ├── Нужна консервативная оценка (наихудший случай)? + │ └── Да → --profile step --step-time 0.01 + └── Нужна реалистичная оценка? + ├── Знаете скорость откачки? + │ └── Да → --profile linear --rate-mmhg <значение> + └── Не знаете скорость? + └── --profile linear --rate-mmhg 20 (по умолчанию) +``` + +**Типичные скорости откачки для справки:** + +| Условия | rate_mmhg, мм рт.ст./с | Пояснение | +|---|---|---| +| Медленная откачка | 5 – 10 | Щадящий режим | +| Стандартная откачка | 15 – 25 | Типичный режим испытаний | +| Быстрая откачка | 40 – 100 | Форсированный режим | +| Мгновенный сброс | `step` | Наихудший сценарий | + +### 5.4 ТЕРМОДИНАМИЧЕСКИЙ РЕЖИМ (можно не знать — есть рекомендации) + +При стравливании газ **охлаждается** (адиабатическое расширение). Степень охлаждения влияет на ΔP. + +| Параметр CLI | GUI-поле | Умолчание | Описание | +|---|---|---|---| +| `--thermo` | `thermo` | `isothermal` | Термомодель: `isothermal`, `intermediate`, `variable` | +| `--h` | `h_conv_W_m2K` | 0.0 | Коэффициент конвективного теплообмена газ–стенка, Вт/(м²·К) | + +#### Описание термомоделей: + +**`isothermal`** — температура газа постоянна (T = 300 K = const). Решается только уравнение массы. + +> **Когда использовать:** Если процесс медленный (десятки секунд), а стенки массивные. Газ успевает нагреться от стенок. **Для первого приближения всегда начинайте с `isothermal`.** Для прочностной оценки это обычно даёт разумный результат. + +**`intermediate`** — решается и масса, и температура; свойства газа (cp, cv) берутся постоянными. + +> **Когда использовать:** Если хотите учесть охлаждение газа. Параметр `--h` управляет теплообменом со стенками: при h = 0 → чистая адиабата (газ максимально охлаждается), при h → ∞ → приближается к изотерме. + +**`variable`** — то же, что `intermediate`, но свойства газа (cp, cv, γ) зависят от температуры по NASA-7 полиномам. + +> **Когда использовать:** Для наиболее точного расчёта, когда температура может значительно отклоняться от 300 K. + +#### Что ставить, если не знаете: + +| Ваша ситуация | Рекомендация | +|---|---| +| Первый расчёт, нужна быстрая оценка | `--thermo isothermal` | +| Хотите консервативную оценку (больший ΔP) | `--thermo isothermal` | +| Хотите учесть охлаждение газа | `--thermo intermediate --h 5` | +| Хотите параметрическое исследование по h | Используйте команду `thermal` | +| Быстрый процесс (step-профиль) | `--thermo intermediate --h 0` (адиабата) | + +> 🔧 **Рекомендация:** Изотермический режим для вашей задачи (получить максимальный ΔP для прочностного расчёта) обычно адекватен. Если хотите убедиться — запустите `thermal` с разными `h` и сравните. + +#### Коэффициент теплообмена h — что это и какой ставить: + +Параметр `--h` (Вт/(м²·К)) описывает, насколько быстро стенки подогревают остывающий газ. + +| Значение h | Физический смысл | Примерное соответствие | +|---|---|---| +| 0 | Адиабата (нет теплообмена) | Газ максимально охлаждается | +| 1 – 5 | Слабый теплообмен | Естественная конвекция в закрытой полости | +| 5 – 15 | Умеренный теплообмен | Типичная оценка для малых полостей | +| 15 – 50 | Интенсивный теплообмен | Вынужденная конвекция | +| 100+ | Практически изотерма | Стенки мгновенно нагревают газ | + +### 5.5 МОДЕЛЬ СТЕНКИ (для продвинутых расчётов) + +Эти параметры нужны, только если вы используете `--thermo intermediate` или `--thermo variable` и хотите учесть динамику температуры стенки. + +| Параметр CLI | GUI-поле | Умолчание | Описание | +|---|---|---|---| +| `--wall-model` | `wall_model` | `fixed` | Модель стенки: `fixed` или `lumped` | +| `--wall-C-per-area` | `wall_C_per_area_J_m2K` | 1e9 | Теплоёмкость стенки на единицу площади, Дж/(м²·К) | +| `--wall-h-out` | `wall_h_out_W_m2K` | 0.0 | Теплообмен стенки с внешней средой, Вт/(м²·К) | +| `--wall-T-inf` | `wall_T_inf_K` | 300.0 | Температура внешней среды, К | +| `--wall-emissivity` | `wall_emissivity` | 0.0 | Степень черноты поверхности стенки (для радиационного теплообмена) | +| `--wall-T-sur` | `wall_T_sur_K` | 300.0 | Температура окружающих поверхностей (для радиации), К | +| `--wall-q-flux` | `wall_q_flux_W_m2` | 0.0 | Дополнительный тепловой поток на стенку, Вт/м² | + +**`fixed`** — температура стенки постоянна (= T_wall = 300 K). **Используйте по умолчанию.** + +**`lumped`** — стенка моделируется как сосредоточенная теплоёмкость. Её температура меняется от теплообмена с газом, с внешней средой и от радиации. Нужно, если стенки тонкие и могут заметно остывать при контакте с холодным газом. + +> 🔧 **Рекомендация для механика:** Оставьте `--wall-model fixed`. Это приемлемо для подавляющего большинства случаев. Модель `lumped` нужна только для специфических задач, обсуждаемых с термистом. + +### 5.6 ВНЕШНЯЯ МОДЕЛЬ (profile vs dynamic_pump) + +| Параметр CLI | GUI-поле | Умолчание | Описание | +|---|---|---|---| +| `--external-model` | `external_model` | `profile` | Модель внешнего давления: `profile` или `dynamic_pump` | +| `--V-ext` | `V_ext_m3` | 0.1 | Объём внешней вакуумной камеры, м³ | +| `--T-ext` | `T_ext_K` | 300.0 | Температура газа в камере, К | +| `--pump-speed-m3s` | `pump_speed_m3s` | 0.0 | Производительность насоса, м³/с | +| `--P-ult-Pa` | `P_ult_Pa` | 0.0 | Предельное давление насоса, Па | + +**`profile`** — давление снаружи задаётся аналитическим профилем (linear/step/barometric/table). **Используйте по умолчанию.** + +**`dynamic_pump`** — вместо профиля моделируется реальная камера: объём камеры V_ext + насос с конечной производительностью. Давление в камере вычисляется как результат баланса: газ, вытекающий из панели, попадает в камеру, а насос откачивает камеру. + +> 🔧 **Рекомендация для механика:** Используйте `--external-model profile` с подходящим профилем. Модель `dynamic_pump` нужна, если вы моделируете конкретную испытательную установку с известными параметрами насоса и камеры. + +### 5.7 ПАРАМЕТРЫ РЕШАТЕЛЯ + +| Параметр CLI | GUI-поле | Умолчание | Описание | +|---|---|---|---| +| `--duration` | `duration_s` | 150.0 | Длительность расчёта, секунды | +| `--npts` | `n_pts` | 800 | Количество точек вывода | +| `--do-plots` | — | нет | Генерировать графики (добавьте флаг) | + +> 🔧 **Рекомендация:** Duration должен быть достаточным, чтобы ΔP успел вырасти и уменьшиться. Для линейного профиля с rate=20 мм рт.ст./с давление упадёт до 0 за ~38 с, поэтому duration=150 с — с запасом. Для быстрых step-профилей может хватить duration=10 с. + +--- + +## 6. Типовые сценарии (кейсы) + +### 6.1 Кейс 1: Быстрая оценка «по умолчанию» + +**Ситуация:** Вам нужна первая прикидка ΔP для панели с отверстиями 2 мм. + +```bash +python -m venting sweep --profile linear --d-int 2 --d-exit 2 --cd-int 0.62 --cd-exit 0.62 +``` + +Все остальные параметры — по умолчанию (isothermal, orifice, linear 20 мм рт.ст./с). + +### 6.2 Кейс 2: Консервативная оценка (наихудший случай) + +**Ситуация:** Нужен максимально возможный ΔP для обоснования прочности. + +```bash +python -m venting sweep --profile step --step-time 0.01 --d-int 2 --d-exit 2 --cd-int 0.5 --cd-exit 0.5 +``` + +Здесь используются: мгновенный сброс давления (step), минимальный разумный Cd=0.5. Это даст верхнюю границу ΔP. + +### 6.3 Кейс 3: Подбор диаметра отверстий + +**Ситуация:** Нужно подобрать диаметр отверстий, чтобы ΔP не превысил допустимое значение. + +```bash +python -m venting sweep2d --profile linear --d-int-list 1.0,1.5,2.0,3.0,4.0 --d-exit-list 2.0,3.0,4.0 +``` + +Это запустит расчёт для всех комбинаций d_int × d_exit. Вы получите таблицу ΔP и сможете выбрать минимальные диаметры, при которых ΔP < [ваш допуск]. + +### 6.4 Кейс 4: Анализ влияния толщины стенки (short_tube) + +**Ситуация:** Стенка перегородки толстая (5 мм), отверстия диаметром 2 мм. L/D = 5/2 = 2.5. Нужна модель short_tube. + +```bash +python -m venting sweep --profile linear \ + --d-int 2 --d-exit 4 \ + --int-model short_tube --L-int-mm 5 \ + --exit-model short_tube --L-exit-mm 3 \ + --K-in-int 0.5 --K-out-int 1.0 --eps-int-um 0 \ + --K-in-exit 0.5 --K-out-exit 1.0 --eps-exit-um 0 \ + --cd-int 0.62 --cd-exit 0.62 +``` + +### 6.5 Кейс 5: Учёт охлаждения газа — параметрическое исследование по h + +**Ситуация:** Хотите понять, как теплообмен влияет на ΔP. + +```bash +python -m venting thermal --profile linear --d 2 --h-list 0,1,5,15,100 +``` + +Это запустит 5 расчётов с разными коэффициентами теплообмена. При h=0 — адиабата (максимальное охлаждение), при h=100 — почти изотерма. + +### 6.6 Кейс 6: Анализ неопределённости Cd (Монте-Карло) + +**Ситуация:** Cd точно не известен. Нужно оценить разброс ΔP. + +```bash +python -m venting mc --profile linear \ + --d-int 2 --d-exit 2 \ + --cd-int-range 0.5,0.7 --cd-exit-range 0.55,0.65 \ + --n-samples 200 --seed 42 +``` + +Параметры: +- `--cd-int-range 0.5,0.7` — Cd внутренних отверстий равномерно от 0.5 до 0.7. +- `--cd-exit-range 0.55,0.65` — Cd выходного отверстия от 0.55 до 0.65. +- `--n-samples 200` — 200 случайных реализаций. +- `--seed 42` — фиксированное зерно для воспроизводимости. + +На выходе: статистика (среднее, медиана, 5-й и 95-й перцентили) по ΔP для каждого интерфейса. + +### 6.7 Кейс 7: Реальный профиль откачки из CSV + +**Ситуация:** У вас есть запись давления из камеры — файл `chamber_pressure.csv`. + +```bash +python -m venting sweep --profile table \ + --profile-file chamber_pressure.csv \ + --profile-pressure-unit Pa \ + --d-int 2 --d-exit 3 --duration 300 +``` + +Если давление в файле записано в мм рт. ст.: + +```bash +python -m venting sweep --profile table \ + --profile-file chamber_pressure.csv \ + --profile-pressure-unit mmHg \ + --d-int 2 --d-exit 3 --duration 300 +``` + +### 6.8 Кейс 8: Модель с конкретной вакуумной камерой (dynamic_pump) + +**Ситуация:** Камера объёмом 0.5 м³, насос с производительностью 0.02 м³/с, предельное давление 10 Па. + +```bash +python -m venting sweep \ + --external-model dynamic_pump \ + --V-ext 0.5 --pump-speed-m3s 0.02 --P-ult-Pa 10 \ + --d-int 2 --d-exit 3 +``` + +### 6.9 Кейс 9: Две цепочки ячеек с общим вестибюлем + +**Ситуация:** Две секции панели: секция A — 10 ячеек, секция B — 5 ячеек, общий вестибюль. + +```bash +python -m venting sweep --profile linear \ + --topology two_chain_shared_vest \ + --n-chain-b 5 \ + --d-int 2 --d-exit 3 +``` + +### 6.10 Кейс 10: Сравнение двух расчётов + +**Ситуация:** Вы сделали два расчёта (например, с разными диаметрами) и хотите сравнить. + +```bash +python -m venting compare results/20260301_120000_sweep results/20260301_120500_sweep +``` + +Можно добавить `--output comparison.csv` для экспорта. + +--- + +## 7. Интерпретация результатов + +### 7.1 Где лежат результаты + +Каждый расчёт создаёт папку: + +``` +results/_/ +``` + +### 7.2 Файлы в папке результатов + +| Файл | Описание | +|---|---| +| `run.json` | Полный набор параметров для воспроизводимости (timestamp, commit, платформа, параметры) | +| `summary.csv` | **Главный файл** — ключевые метрики для каждого интерфейса (ребра) | +| `*.npz` | Временные ряды (t, m, T, P, P_ext) для построения графиков в Python | +| `*_meta.json` | Метаданные, включая validity flags | + +### 7.3 Как читать summary.csv + +Ключевые столбцы: + +| Столбец | Что значит | Что вам нужно | +|---|---|---| +| `edge` | Имя интерфейса, например `exit`, `A(cell1↔vest)`, `B(cell3↔cell2)` | Определяет, о какой перегородке речь | +| `max_abs_dP_Pa` | **Максимальный перепад давления**, Па | ⭐ **Это ваша нагрузка на конструкцию** | +| `t_peak_s` | Время пика ΔP, секунды | Когда нагрузка максимальна | +| `r_peak` | Отношение P_down/P_up в момент пика | Характеризует интенсивность перепада | +| `regime` | `CHOKED` или `subsonic` | Режим течения (см. ниже) | +| `peak_type` | `boundary(...)` или `internal` | Откуда берётся пик (см. ниже) | +| `tau_exit_s` | Характерное время продувки, секунды | Масштаб времени процесса | + +### 7.4 Что означают режимы течения + +- **`subsonic`** — поток дозвуковой. ΔP умеренный. Расход растёт с ростом перепада. +- **`CHOKED`** — поток запертый (скорость газа в отверстии достигла скорости звука). Расход больше не растёт с ростом ΔP. Это часто является «бутылочным горлом» — причиной максимального ΔP. + +> Если режим `CHOKED` — это означает, что отверстие является ограничивающим элементом. Увеличение диаметра или числа отверстий снизит ΔP. + +### 7.5 Что означает peak_type + +- **`boundary(P_ext=0)`** — пик ΔP совпадает с моментом, когда внешнее давление достигает нуля. Это нормально для линейного профиля. +- **`boundary(step_to_vacuum)`** — пик при мгновенном сбросе давления. +- **`internal`** — пик порождён внутренней динамикой сети (переходный процесс). Это может быть важным, если внутренний пик выше пика на границе. + +### 7.6 Пример интерпретации + +``` +edge: exit, max_abs_dP_Pa: 850, regime: CHOKED, t_peak_s: 38.0 +edge: A(cell1↔vest), max_abs_dP_Pa: 120, regime: subsonic, t_peak_s: 37.5 +edge: B(cell2↔cell1),max_abs_dP_Pa: 45, regime: subsonic, t_peak_s: 37.0 +``` + +Интерпретация: Максимальная нагрузка — 850 Па на выходной стенке (между вестибюлем и внешней средой). Выходное отверстие — запертое (choked), это бутылочное горло. На внутренних перегородках нагрузка значительно меньше (120 Па и 45 Па). Если 850 Па для выходной стенки неприемлемо — нужно увеличить d_exit или n_exit. + +### 7.7 Validity flags (проверка корректности) + +В файле `*_meta.json` содержатся автоматические проверки валидности модели: + +| Flag | Что проверяет | Что значит `warning` | +|---|---|---| +| `state_integrity` | Нет NaN/Inf, отрицательных масс/температур | Если `fail` — расчёт некорректен | +| `acoustic_uniformity_0D` | Допустимость 0D-модели | Процесс слишком быстрый для 0D-приближения | +| `thermo_fit_range` | Температура в диапазоне 200–1000 K | Свойства газа вне области аппроксимации | +| `knudsen_regime` | Число Кнудсена (Kn < 0.01 — континуум) | Давление настолько низкое, что модель сплошной среды неприменима | +| `short_tube_flow` | Число Маха и потери в short_tube | Число Маха в трубке > 0.3 | +| `external_pressure_units` | Проверка единиц внешнего давления | Значения выглядят как мм рт. ст., поданные как Паскали | + +> 🔧 **Рекомендация:** Всегда проверяйте validity flags. Если все `ok` — расчёту можно доверять в рамках модельных допущений. Если есть `warning` — обсудите с газодинамиком или термистом. + +--- + +## 8. GUI — графический интерфейс + +### 8.1 Запуск + +```bash +python -m venting gui +``` + +### 8.2 Возможности GUI + +GUI дублирует все возможности CLI с визуальным интерфейсом: + +- Все поля геометрии и параметров доступны как текстовые поля. +- Выбор модели отверстий (orifice / short_tube / fanno) — выпадающие списки. +- Выбор профиля, термомодели, модели стенки — выпадающие списки. +- **Live-график** — обновляется в процессе расчёта. +- **Кнопка Stop** — прервать расчёт. +- **Таблица validity** — сразу видны флаги корректности. +- **Save / Load JSON** — сохранение и загрузка конфигурации случая. +- **Export** — npz, meta.json, validity.json, summary.csv. + +### 8.3 Порядок работы в GUI + +1. Заполните геометрию: V_cell, V_vest, A_wall_cell, A_wall_vest, d_int, d_exit, n_int, n_exit. +2. Выберите модель отверстий. Для первого приближения — `orifice`. +3. Установите Cd_int = 0.62, Cd_exit = 0.62 (или другие, если знаете). +4. Выберите профиль (обычно `linear`, rate = 20). +5. Выберите термомодель (обычно `isothermal`). +6. Нажмите **Run**. +7. Наблюдайте за графиком давлений. +8. После завершения проверьте таблицу validity flags и значения ΔP. +9. При необходимости сохраните конфигурацию (Save JSON) и экспортируйте результаты. + +### 8.4 Save / Load конфигурации + +GUI позволяет сохранить все параметры в JSON-файл и загрузить их позже. Это удобно для: + +- Воспроизводимости расчётов. +- Передачи параметров коллегам. +- Серий расчётов с небольшими изменениями. + +--- + +## 9. Справочная таблица — «Что мне ставить?» + +Сводная таблица для инженера-механика, который не хочет разбираться в газодинамике: + +| Параметр | Рекомендация по умолчанию | Когда менять | +|---|---|---| +| **d_int, d_exit** | Из чертежа | Всегда задавать по чертежу | +| **n_int, n_exit** | Из чертежа | Всегда задавать по чертежу | +| **L_int, L_exit** | 0 (orifice) или из чертежа (short_tube) | Если стенка > 0.5 мм | +| **Cd_int** | 0.62 | Если нет экспериментальных данных | +| **Cd_exit** | 0.62 | Если нет экспериментальных данных | +| **profile** | `linear` | Если нет реальной записи P(t) | +| **rate_mmhg** | 20 | Уточнить у испытателей | +| **thermo** | `isothermal` | Если хотите учесть охлаждение → `intermediate` | +| **h** | 0 (при intermediate) | 0 → адиабата, 5–15 → типичный теплообмен | +| **wall_model** | `fixed` | Менять только по согласованию с термистом | +| **external_model** | `profile` | `dynamic_pump` — только если знаете параметры камеры/насоса | +| **topology** | `single_chain` | `two_chain_shared_vest` — если две секции с общим выходом | +| **int_model / exit_model** | `orifice` | `short_tube` если стенка толстая; `fanno` если L/D > 5 | +| **K_in_int** | 0.5 | Стандарт для острой кромки | +| **K_out_int** | 1.0 | Стандарт для внезапного расширения | +| **eps** | 0 | Для обработанных поверхностей | +| **duration** | 150 с | Увеличить, если процесс длинный | +| **npts** | 800 | Увеличить для гладких графиков | + +--- + +## 10. Пошаговый алгоритм для первого расчёта + +### Шаг 1 — Соберите геометрию + +Из чертежей/CAD определите: + +- Диаметр отверстий между ячейками: d_int (мм) +- Количество отверстий между ячейками: n_int +- Диаметр выходного отверстия: d_exit (мм) +- Количество выходных отверстий: n_exit +- Толщину перегородок (если > 0.5 мм): L_int, L_exit (мм) +- Объёмы полостей (если отличаются от пресета): V_cell, V_vest (м³) +- Площади стенок полостей (если отличаются): A_wall_cell, A_wall_vest (м²) + +### Шаг 2 — Определите профиль давления + +Спросите у испытателей или используйте: +- `linear` с rate=20 — стандарт +- `step` — наихудший случай + +### Шаг 3 — Запустите расчёт + +```bash +python -m venting sweep --profile linear --d-int <ваш d_int> --d-exit <ваш d_exit> +``` + +### Шаг 4 — Прочитайте summary.csv + +Найдите `max_abs_dP_Pa` для каждого интерфейса. Это ваши нагрузки. + +### Шаг 5 — Проверьте validity flags + +Откройте `*_meta.json`. Все флаги должны быть `ok`. + +### Шаг 6 — Анализ чувствительности + +Запустите Монте-Карло по Cd: + +```bash +python -m venting mc --profile linear --d-int --d-exit \ + --cd-int-range 0.5,0.7 --cd-exit-range 0.5,0.7 --n-samples 100 +``` + +### Шаг 7 — Используйте результат + +Возьмите 95-й перцентиль ΔP из Монте-Карло как расчётную нагрузку для прочностного анализа. + +--- + +## 11. Часто задаваемые вопросы + +### Q: Какой Cd ставить, если не знаю? + +**A:** 0.62 — стандарт для круглого отверстия с острой кромкой. Обязательно сделайте sweep по Cd (команда `mc` с диапазоном 0.5–0.7). + +### Q: Что даёт бóльший ΔP — isothermal или adiabatic? + +**A:** Зависит от момента времени и конкретной конфигурации. Изотерма не всегда консервативна. Для полной картины запустите `thermal` с h-list. + +### Q: Можно ли задать разные диаметры/Cd для разных перегородок? + +**A:** В GUI все параметры (d_int, Cd_int, L_int, n_int) могут быть заданы как скаляр (одно значение для всех интерфейсов). Если нужны разные значения для каждого интерфейса — это возможно программно через Python API (передав списки вместо скаляров в `NetworkConfig`), но не через CLI. + +### Q: Что делать, если validity flag показывает `warning` по Knudsen? + +**A:** Число Кнудсена > 0.01 означает, что давление очень низкое и модель сплошной среды начинает разрушаться. Для оценки пиковых ΔP (которые возникают при более высоких давлениях) это обычно не критично. Warning появляется на поздних стадиях, когда давление уже почти выровнялось. + +### Q: Мой расчёт показывает CHOKED на выходе. Это плохо? + +**A:** Нет, это нормальная физика. Choked означает, что скорость газа в отверстии достигла скорости звука. Расход не может вырасти больше. Это часто является причиной максимального ΔP. Чтобы снизить ΔP — увеличьте диаметр или количество выходных отверстий. + +### Q: Как перевести результат в нагрузку для FEM? + +**A:** `max_abs_dP_Pa` — это квазистатическое давление. Приложите его как равномерно распределённое давление на соответствующую перегородку в вашей FEM-модели. Знак: давление приложено изнутри наружу (от ячейки с бóльшим давлением к ячейке с меньшим). + +### Q: Сколько времени занимает расчёт? + +**A:** Один расчёт sweep — обычно 1–10 секунд. Монте-Карло с 100 samples — 1–5 минут. sweep2d — зависит от числа комбинаций. + +--- + +## 12. Ограничения модели (что программа НЕ делает) + +- **Это не CFD** — нет пространственных полей скорости, давления, температуры внутри полости. +- **Нет акустики** — ударные волны и звуковые колебания не моделируются. +- **Нет 3D-эффектов струи** — модель не учитывает, куда именно направлен поток внутри полости. +- **Cd — главная неопределённость** — реальный Cd зависит от геометрии кромок, числа Рейнольдса, шероховатости. Всегда делайте анализ чувствительности. +- **Газ — только сухой воздух** — для других газов (гелий, аргон, CO₂) нужна модификация кода. +- **Жёсткие объёмы** — деформация стенок под давлением не учитывается (нет связи с FEM). + +--- + +## Приложение A: Единицы измерения + +| Величина | Единица в CLI | Единица в GUI | Внутренняя единица | +|---|---|---|---| +| Давление | мм рт. ст./с (rate), Па (profile) | Па, мм рт. ст. | Па | +| Диаметр | мм | мм | м | +| Длина канала | мм | мм | м | +| Объём | — (пресет) | м³ | м³ | +| Площадь стенки | — (пресет) | м² | м² | +| Температура | К | К | К | +| Теплообмен h | Вт/(м²·К) | Вт/(м²·К) | Вт/(м²·К) | +| Шероховатость | мкм | мкм | м | +| Время | с | с | с | +| Производительность насоса | м³/с | м³/с | м³/с | + +## Приложение B: Формулы (для справки) + +**Уравнение состояния идеального газа:** + +P·V = m·R·T, где R = 287.05 Дж/(кг·К) для воздуха. + +**Критическое отношение давлений (порог choking):** + +r* = (2/(γ+1))^(γ/(γ-1)) ≈ 0.528 для γ = 1.4 + +Если P_down/P_up ≤ 0.528 — поток запертый (choked). + +**Характерное время продувки (tau_exit):** + +tau = (V_total · P₀) / (R · T₀ · ṁ_choked) + +Где ṁ_choked = Cd · A_exit · P₀ · C_choked / √(R·T₀) + +## Приложение C: Пример CSV-файла профиля + +```csv +0.0,101325 +5.0,90000 +10.0,75000 +15.0,55000 +20.0,35000 +25.0,18000 +30.0,8000 +40.0,2000 +60.0,500 +90.0,100 +120.0,10 +``` + +Столбцы: время (с), давление (Па). Без заголовка.