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
--figures, --fig-format, --surface фигуры: форматы и выбор поверхности (mid/top/bottom)
--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}, узлов контакта: {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)

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

Все эталонные числа получаются ОДНИМ прогоном python scripts/run_reference.py (из корня; результат — results/reference/reference_v0.6.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.095; узлы ×7.75; w_max +22.3 % 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
Лестница случаев (24 ladder-ступени: кольца, точечные силы, патчи, Леви, свободный край, контакты, пара пластин) rel ≤ замороженных tol («факт × 3») run_reference.py test_ci_cases.py, big-тесты ступеней
Замкнутый контакт круг+основание (фабрика) w_max 3.9e-3; полная сила 3.1e-3 — test_analytic_factory.py

Запуск

pytest -m "not big and not fem"     # быстрые ворота (~1 мин)
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.7.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.7.0
File Size Uploaded
plate_solver-0.7.0.tar.gz 3.2 MB Details

Built distribution (wheel)

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

Total release size: 3.5 MB

Release files / plate_solver-0.7.0.tar.gz

Download URL plate_solver-0.7.0.tar.gz
Size 3.2 MB
Tags Source
SHA-256 checksum
How to use checksums
fc06afbbc7f39f004321578ccb2b5f62add8d8b0a8a76154a22379a41e918398
BLAKE2b-256 checksum
How to use checksums
8865a766c4491ff7372c86495f11160ef5b3899adfcea182391194331d621bb4
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 1, 2026.

Transparency log

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

Download URL plate_solver-0.7.0-py3-none-any.whl
Size 264.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1711a2700a54ad4cad7cc7d112d40a798bda7e1df6df5c68f362ce0f6e3ab57e
BLAKE2b-256 checksum
How to use checksums
836b78743a29e0e9cb996c418b36da9c9ee0f9543304fe04e8ecada3e2bc9468
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 1, 2026.

Transparency log

Release history Release notifications | RSS feed

0.8.0

2 release files

This release

0.7.0 This release

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