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

Гибридный путь: контур и точечная арматура

Реальное железобетонное сечение часто состоит из полигонального бетона и точечных стержней. Эти две части требуют разного обращения: сплошной бетон выгоднее интегрировать по контуру, а стержни заменить контурным интегралом нечем — они дискретны. OpenCS объединяет оба способа на уровне CrossSection.

Выбор пути для области

Решение принимается отдельно для каждой активной MaterialArea. В CrossSection.IntegralOf контурный путь выбирается при одновременном выполнении трёх условий:

  1. у области нет сеточных фибр — либо задан флаг preferContour;
  2. у области есть полигональный контур Hull;
  3. у области есть диаграмма для выбранного CalcType.

Если хотя бы одно условие не выполнено, используется суммирование по фибрам. Точечные фибры добавляются в результат в любом случае.

flowchart TD
    A[MaterialArea] --> B{Есть сеточные фибры?}
    B -- нет --> C{Есть Hull и Diagramm?}
    C -- да --> D[ContourIntegral]
    C -- нет --> E[Fiber summation]
    B -- да --> F{preferContour?}
    F -- да --> C
    F -- нет --> E
    D --> G[Добавить только point fibers]
    E --> H[Добавить mesh и point fibers]
    G --> I[Результат CrossSection]
    H --> I

Почему нельзя складывать контур и сетку

Что суммируется в контурном и фибровом пути

Контурный интеграл уже учитывает всю полигональную область — включая те места, где стоят сеточные фибры. Если после него просуммировать те же сеточные фибры, бетон войдёт в результат дважды.

Поэтому в контурной ветви код перебирает фибры и пропускает все, кроме точечных. Правило простое и одинаковое для усилий и для жёсткости:

Что Контурный путь Фибровый путь
Полигональная часть области интеграл по границе сумма сеточных фибр
Сеточные фибры пропускаются суммируются
Точечные стержни суммируются суммируются

Ручное сложение результатов

Складывать результат контурного интеграла с результатом фибрового расчёта той же области нельзя ни при каких настройках. Это не «уточнение», а удвоение бетона. Если нужно сравнить пути, сравнивайте их как альтернативы, а не как слагаемые.

Секущая жёсткость

CalculateSecantStiffness использует тот же принцип:

  • полигональная область без сетки → ContourSecantStiffness;
  • точечные фибры → FromContributions;
  • сеточная область → вклад каждой фибры.

Результат дополнительно помечается источником, и эта пометка — рабочий диагностический инструмент:

Источник Что означает
contour все области сечения посчитаны по контуру
fiber все области посчитаны суммированием фибр
mixed часть областей по контуру, часть по фибрам
none вклад в жёсткость не получен ни от одной области

Значение none — почти всегда признак ошибки постановки: у областей нет ни фибр, ни пригодного контура с диаграммой. Значение mixed само по себе нормально для сечения с несколькими областями, но если вы ожидали однородный путь, стоит проверить, у какой области не построена сетка или диаграмма.

Когда включать preferContour

Принудительный контурный путь нужен для базовых упругих характеристик, когда геометрический момент инерции не должен зависеть от последней плотности сетки. Особенно важно это для полосовой сетки: при конечном числе рядов она занижает ∫y²dA в отношении 1 − 1/n² (вывод и таблица — на странице фибрового метода).

Типичный сценарий: сечение уже разбито на фибры для визуализации, но вам нужно сверить EI с аналитикой. Без preferContour расчёт пойдёт по существующей сетке и даст занижение; с ним — точное значение по контуру, причём сетку удалять не придётся.

Арматура не исчезает

preferContour заменяет только полигональные сеточные фибры. Точечные стержни остаются в расчёте и добавляются после контурного интеграла.

Типичные ошибки

  • у области есть только фибры, но нет Hull — контурный путь невозможен;
  • у области есть Hull, но не построена Diagramm для выбранного CalcType;
  • арматура создана как отдельный бетонный полигон вместо точечных фибр;
  • пользователь вручную складывает результат контура и сетки;
  • отверстие добавлено отдельной областью с положительной диаграммой вместо Hole.

Первые два пункта — самая частая причина того, что preferContour «не сработал»: условие выбора пути не выполнено, и расчёт молча ушёл на фибры. Проверить это можно по источнику жёсткости: он останется fiber вместо ожидаемого contour.