Перейти к содержанию

Архитектура решения

Решение OpenCS построено по принципам модульности, разделения ответственности (Separation of Concerns) и чистоты вычислительных ядер от платформенно-зависимого UI.


Диаграмма зависимостей проектов

graph TD
    subgraph UI ["Пользовательский интерфейс (WPF / Windows)"]
        OpenCS["OpenCS (WPF App)"]
    end

    subgraph Bridges ["Адаптеры и мосты"]
        CSfea_CScore["CSfea.CScore (Мост моделей)"]
    end

    subgraph FEA ["МКЭ и Теплофизика (CSfea)"]
        CSfea_Core["CSfea.Core (МКЭ-ядро)"]
        CSfea_Thermal["CSfea.Thermal (Теплопередача)"]
        CSfea_Torsion["CSfea.Torsion (Кручение Сен-Венан)"]
        CSfea_Sparse["CSfea.Sparse (Разреженные матрицы)"]
        CSparse["CSfea.Sparse.CSparse (Interop)"]
    end

    subgraph CoreDomain ["Расчётное ядро и Нормы (CScore)"]
        CScore["CScore (Фибровый метод, СП 16, СП 20)"]
        CScore_Fire["CScore.Fire (Огнестойкость СП 468)"]
    end

    subgraph Base ["Базовые математические библиотеки"]
        CSmath["CSmath (Векторы, матрицы, сплайны)"]
        CSTriangulation["CSTriangulation (CDT Ruppert, Front)"]
    end

    OpenCS --> CScore
    OpenCS --> CSfea_Core
    OpenCS --> CSfea_CScore

    CSfea_CScore --> CScore
    CSfea_CScore --> CSfea_Core

    CScore_Fire --> CScore
    CScore --> CSmath
    CScore --> CSTriangulation

    CSfea_Core --> CSfea_Sparse
    CSfea_Thermal --> CSfea_Core
    CSfea_Torsion --> CSfea_Core
    CSfea_Sparse --> CSmath
    CSparse --> CSfea_Sparse

    CSTriangulation --> CSmath

Поток пользовательского расчёта

sequenceDiagram
    participant User as Инженер
    participant UI as WPF UI
    participant DB as DatabaseService / SQLite
    participant Task as TaskRunner
    participant Core as CScore / CSfea
    participant Report as Reporting

    User->>UI: Создаёт геометрию и задачу
    UI->>DB: Сохраняет модель и JSON-параметры
    UI->>Task: Запускает CalcTask
    Task->>Core: Вызывает обработчик и интегратор
    Core-->>Task: CalcResult
    Task-->>UI: Таблица/график/журнал
    UI->>Report: Экспорт результата

Описание подсистем

1. Базовые библиотеки

  • CSmath: фундамент проекта. Реализует векторную и матричную алгебру, сплайны Безье и B-сплайны, геометрические примитивы, пересечения и алгоритмы 2D/3D геометрии без внешних зависимостей.
  • CSTriangulation: библиотека построения триангуляционных сеток. Включает методы Advancing Front и конформную триангуляцию Делоне (CDT Рупперта) с контролем минимального угла и адаптивным измельчением.

2. Доменная модель сечений (CScore)

  • Фибровый метод (Fibre / Layered method): сечение дискретизируется на элементарные волокна (fibres), что позволяет точно вычислять физически нелинейные диаграммы деформирования, трещинообразование и пластичность.
  • СП 16.13330.2017: нормативные проверки прочности и устойчивости стальных элементов.
  • СП 20.13330: генератор сочетаний нагрузок и расчёт огибающих.
  • CScore.Fire: теплофизические модели СП 468.1325800.2019, температурная деградация модулей упругости \(E(T)\) и расчётных сопротивлений \(R(T)\).

3. МКЭ-комплекс (CSfea)

  • CSfea.Core: ядро статического анализа. Стержневые элементы Эйлера — Бернулли (пространственные 3D балки с 6 степенями свободы на узел), плоские и пространственные оболочки (MITC3/MITC4).
  • CSfea.Sparse: оптимизированные структуры хранения разреженных СЛАУ (CSR, CSC, Skyline) и прямые/итерационные решатели.
  • CSfea.Torsion: специализированный модуль кручения тонкостенных и сплошных стержней.

Интеграция OpenSees и отчётов

OpenCS.OpenSees содержит модели, генератор Tcl, запуск внешнего OpenSees.exe и чтение артефактов. OpenCS.Reporting регистрирует провайдеры вывода результата и используется командой экспорта отчёта.