Skip to main content

plate-solver

CI License: MIT DOI

plate-solver computes bending and unilateral (Signorini) contact of thin elastic plates of arbitrary planform: R-functions (Rvachev) describe the geometry, a spectral Ritz method solves the bending, the generalized reaction method resolves contact with a free boundary, and refined-theory corrections (Karman–Timoshenko–Naghdi type) account for transverse shear and compression. Every shipped number is defended by test gates; every canonical reference solution is self-certified. Documentation is in Russian.

Комплекс программ для расчёта изгиба и одностороннего контакта упругих пластин произвольного очертания: R-функции В. Л. Рвачёва для геометрии, метод Ритца для изгиба, метод обобщённой реакции для контакта со свободной границей, поправки уточнённой теории типа Кармана–Тимошенко–Нагди.

Прогиб Напряжения Контакт
прогиб w(x, y), L-форма со штампом напряжения лицевых поверхностей контактный планшет (МОР)

Документация: CASE_SCHEMA (схема case-файлов) · THEORY (теория) · API · ARCHITECTURE · FEATURES (матрица возможностей) · NOTES (журнал тонкостей).

Триада «Модель — Алгоритм — Программа» (по Самарскому):

  • Модель — изгиб пластины (расщепление бигармоники D·Δ²w = q̃ на две задачи Пуассона) и поправки уточнённой теории типа Кармана–Тимошенко–Нагди (поперечный сдвиг + поперечное обжатие, ktn.py);
  • Геометрия — граница произвольной области R-функциями В. Л. Рвачёва (ω(x, y) = 0); структура решения w = ω·Φ удовлетворяет краевым условиям тождественно;
  • Численный метод — Ритц на базисе ω·Φ (Φ — полиномы Чебышёва), матрица Ритца факторизуется один раз (Холецкий);
  • Контакт — метод обобщённой реакции (МОР) для одностороннего контакта со свободной границей: r ← max(0, r + β(w − Δ)).

Статус: работает. Изгиб (мягкий шарнир и жёсткое защемление), контакт МОР на неканонических областях (L-форма с входящим углом), поправки КТН, 1D-задел (балка-полоса, штамп) и верификационная лестница — всё покрыто тест-воротами (см. таблицу ниже) и воспроизводится одним прогоном.

Установка

pip install plate-solver

Из исходников (для разработки — тесты и МКЭ-верификация):

python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"        # + ".[dev,fem]" для независимой МКЭ-верификации

Быстрый старт через case-файлы

Постановка задачи описывается TOML-файлом (схема — docs/CASE_SCHEMA.md):

plate-solve --new annulus        # шаблон annulus.toml (закомментирован)
plate-solve annulus.toml         # решить: result.json + фигуры
plate-verify annulus.toml        # таблица «эталон | значение | rel | статус», exit 0/1
plate-verify annulus.toml --sweep p=2:12:2   # сходимость: md + csv + png
plate-ladder cases/ci            # каталог случаев → сводный md с провенансом
Команда Что делает
plate-solve case.toml решает постановку, пишет result.json (+фигуры)
plate-solve --new KIND шаблон case-файла (circle/rectangle/L/annulus/ellipse/compose)
plate-verify case.toml сверка с эталонами [verify], exit 0/1 по tol
plate-solve --check case.toml только валидация постановки (для CI), exit 0/1
plate-solve --report … одностраничный md-отчёт по кейсу
plate-replot dir/ перерисовать фигуры из fields.npz без пересчёта
plate-profile dir/ --key w --from x0,y0 --to x1,y1 профиль поля вдоль сечения (+CSV, наложения)
--sweep p=2:12:2, Q=… свип дискретизации (md+csv+png), в solve и verify; --out у plate-verify действует только со свипом
--figures, --fig-format, --surface фигуры: форматы и выбор поверхности (mid/top/bottom); только plate-solve — plate-verify их отклоняет (у plate-replot свои --fig-format/--surface)
--grid N сетка вывода полей/фигур (на числа решения не влияет); после расчёта — result.regrid(N)
plate-ladder КАТАЛОГ прогон реестра случаев, сводка с провенансом
--version версия пакета (все пять команд)
--help справка по команде с примерами внизу (все пять команд)

Нагрузки в схеме: uniform (q0), patch (q0 + зона тем же геометрическим языком), gaussian (гладкая локализованная, аналитический Δq для КТН), point (P, x0, y0 — регуляризованное пятно eps; exact = true — ИСТИННАЯ δ там, где функционал ограничен: classic clamped и karman, v0.7.0 — см. docs/NOTES.md §18), expr (произвольная гладкая q0·g(x, y) выражением за токен-оградой, v0.7.0) и line (погонная вдоль отрезка, v0.7.0); плюс thermal_moment (термоизгиб) при uniform. Произвольное поле доступно и через API (f_values в узлах квадратуры, пример в CASE_SCHEMA).

Реестры: cases/ladder/ — полные ступени верификации (лестница), cases/ci/ — лёгкие копии, каждая автоматически является CI-тестом. Блок-схема диспетчера — docs/dispatch_flow.md.

Быстрый старт через API: контакт L-формы с жёстким основанием

from plate_solver import Config, viz
from plate_solver.contact import solve_contact
from plate_solver.geometry import make_L

cfg = Config(h=0.06, p=10, Q=120, Delta=5.0e-5, max_iter=8000)
res = solve_contact(cfg, make_L(side=1.0, cut=0.5))  # изгиб + односторонний контакт (МОР)
print(f"итераций МОР: {res.iters}, сошлось: {res.converged}")   # ЧИТАТЬ ОБЯЗАТЕЛЬНО
print(f"узлов контакта: {int((res.r_nodes > 0).sum())}")
print(f"комплементарность: {res.comp_residual:.1e}, перелёт зазора: {res.gap_overshoot:.1e}")
viz.plot_contact_summary(cfg, res).savefig("contact_L.png", dpi=150)

Флаг res.converged в этом примере — False: классический контакт под жёстким основанием «полусходится» (пик давления у кромки зоны растёт с бюджетом — особенность решения Кирхгофа, docs/NOTES.md §11), поэтому смотреть надо на невязку комплементарности и перелёт зазора, а не на флаг. Тракт case-файла в таком случае пишет предупреждение в Result.warnings; уточнённые теории (ktn_linear/ktn_full) сходятся за счёт члена податливости.

Числа ↔ скрипты ↔ тесты

Все эталонные числа получаются ОДНИМ прогоном python scripts/run_reference.py (из корня; результат — results/reference/reference_v0.8.md + csv, заморожен SHA-256: tests/test_reference_hash.py) и защищены тест-воротами:

Результат Ключевые числа Скрипт Тест-ворота
Верификация на круге ошибка < 0.1 %; модельный разрыв мягкого шарнира 26.42 % run_circle.py test_plate_circle.py
Верификация L-формы (МКЭ) RFM↔FEM-Marcus 2.64 %; парадокс Сапонджяна 54.86 % run_lshape_verify.py test_lshape.py
Контакт МОР на L-форме 8000 итер.; 67/10800 узлов; r_max = 112.58; комплементарность 8.59e-2 run_lshape_contact.py test_contact.py
Поправки КТН (классика ↔ КТН) пик реакции ×0.54; узлы ×1.94; w_max +2.8 % run_ktn.py test_ktn.py
1D-штамп (эталон Maple) согласие 2.4 % (L²) run_stamp_1d.py test_stamp.py
Верификация 1D↔2D (круг) 1D↔2D↔аналитика, 0.1 % run_circle_1d_2d.py test_circle_1d_2d.py
Вклад R-функций (vs штраф) 1 % при N=9 против N=25; лучше cond run_rvachev_vs_penalty.py test_rvachev_vs_penalty.py
Лестница верификации изгиба машинная точность → эталоны run_ladder_*.py test_ladder.py
Лестница случаев (28 ladder-ступеней: кольца, точечные силы, патчи, Леви, свободный край, контакты, пара пластин) rel ≤ замороженных tol («факт × 3») run_reference.py test_ci_cases.py, big-тесты ступеней
Замкнутый контакт круг+основание (фабрика) w_max 3.9e-3; полная сила 3.1e-3 — test_analytic_factory.py
Сертификат КТН-контакта (редукция к сертифицированной классике) пол дискретизации 2.7e-3; поправка гаснет как h² — test_contact_ktn_certificate.py
Плато реакции при малом зазоре (L-форма) зона 84 % площади, r/q₀ = 1.06 в глубине, F/Q = 0.80 — test_lshape_plateau.py

Запуск

pytest -m "not big and not fem"     # быстрые ворота (~15–20 мин на ядре)
pytest                              # все ворота (big: Q≥1024; fem: scikit-fem)
python examples/circular_plate.py   # минимальный пример (аналитика)
python scripts/run_reference.py     # единый эталонный прогон (из корня)
ruff check .                        # стиль

pytest работает и без установки пакета: пути src/ и scripts/ прописаны в pyproject.toml.

Снимок исходников одной командой: git archive -o plate-solver.zip HEAD (войдёт ровно отслеживаемое дерево — с docs/, cases/, notebooks/).

Структура

src/plate_solver/    модули плоско:
  problem, dispatch, cli, config           case-файлы: схема, диспетчер, CLI
  geometry, basis, quadrature, assembler   область (R-функции) и дискретизация
  poisson, plate, clamped, radial          решатели изгиба (Ритц)
  membrane, ktn_full, theory, ktn_solver   нелинейные теории (Карман, полная КТН)
  contact, contact_nl, contact_face, ktn   контакт (МОР) и поправки КТН
  eigenmodes, faces, diagnostics, export   собств. задачи, лицевые, поля/VTK
  exprfield                                безопасные выражения f(x, y) схемы
  mor1d, green1d, stamp, stamp_ritz        1D-задел (балка-полоса, штамп)
  analytic, analytic_auto, benchmarks      эталоны (аналитика, Карман)
  ladder, penalty, verify_fem              лестница верификации, МКЭ-дублёр
  radial_ktn, fd_contact                   верификационные кирпичи (1D КТН, КР+МОР)
  viz                                      графика
  data/                                    эталон Maple (см. data/README.md)
cases/               ci/ — быстрые case-файлы (каждый — CI-тест); ladder/ — тяжёлые
notebooks/           обучающая цепочка 01–09 (см. notebooks/README.md)
scripts/             run_*.py — расчётные серии; run_reference.py — эталонный отчёт;
                     reproduce_all.py — конвейер воспроизводимости
tests/               тест-ворота (маркеры big и fem — см. pyproject)
examples/            минимальные воспроизводимые примеры
docs/NOTES.md        тонкости и подводные камни (журнал заметок)

Оценка качества и провенанс верификации

Комплекс сопровождается по трём независимым осям оценки научно-исследовательского расчётного ПО — добротность (инженерное качество), достоверность (верификация и валидация), доступность (FAIR4RS):

  • добротность — тест-ворота на каждый метод, CI (несколько версий Python + ruff в конвейере), зафиксированные зависимости, вычисляемая матрица возможностей (docs/FEATURES.md), эталонный прогон под SHA-контролем, систематические негативные тесты входного языка схемы (tests/test_negative_schema.py);
  • достоверность — верификационная лестница возрастающей сложности: аналитические эталоны (в т.ч. самосертифицирующийся генератор), MMS, перекрёстные проверки независимыми методами и программами (МКЭ scikit-fem, конечно-разностный дублёр контакта, 1D-оракул КТН), редукционная верификация единой параметрической модели; межмодельные расхождения фиксируются означенным статусом, а не выдаются за дефект. Методология следует практике V&V вычислительной механики (ASME V&V 10; семейство ГОСТ Р 57700), валидация модели — унаследованная, с явным источником;
  • доступность — архивная запись с concept- и version-DOI, двуязычные машиночитаемые метаданные (CITATION.cff, .zenodo.json, codemeta.json), квалифицированные связи с публикациями и машиночитаемый провенанс верификации: блок vvprov:verification в codemeta.json перечисляет верификационные акты (эталон, тип проверки, метрика, достигнутая величина, статус, версия, воспроизводящий артефакт); блок самопроверяем — tests/test_vvprov.py сверяет записи с репозиторием и версией.

Цитирование

При использовании комплекса просьба ссылаться на архивную запись Zenodo. Для ссылки на проект в целом используйте concept DOI (всегда указывает на последнюю версию): https://doi.org/10.5281/zenodo.21218627

DOI конкретной версии выдаётся Zenodo на каждый релиз — см. раздел «Versions» на странице записи (concept DOI выше всегда ведёт на последнюю). Полные метаданные цитирования — в CITATION.cff (машиночитаемо; codemeta.json — то же в схеме CodeMeta/schema.org).

Лицензия

MIT (см. LICENSE).

Metadata

Release files for plate-solver 0.8.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for plate-solver 0.8.0
File Size Uploaded
plate_solver-0.8.0.tar.gz 3.4 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for plate-solver 0.8.0
File Interpreter ABI Platform
plate_solver-0.8.0-py3-none-any.whl Python 3 none any Details

Total release size: 3.7 MB

Release files / plate_solver-0.8.0.tar.gz

Download URL plate_solver-0.8.0.tar.gz
Size 3.4 MB
Tags Source
SHA-256 checksum
How to use checksums
103913ae2f5a0f62daeadaf54860d9d7af7056797e89d49c3b145d2593b7ba72
BLAKE2b-256 checksum
How to use checksums
1933618d37c1f3d527b00fb24f8b966af967cd8bc4a0b0641d7283dabfc96f2b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.

Transparency log

Release files / plate_solver-0.8.0-py3-none-any.whl

Download URL plate_solver-0.8.0-py3-none-any.whl
Size 311.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ef6e56b6ecaafbba09b04cc76af2490ad319e00e3108c4dd9458fe08bb1733ec
BLAKE2b-256 checksum
How to use checksums
c34b6e86f876d8f66d1e51256c9e05f8f1389453d322ad487af7446177f1cb93
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.8.0 This release

2 release files

0.7.0

2 release files

0.6.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page