WebCAE
← Назад к новостям
Новости18 августа 2026

Топологическая оптимизация: SIMP, критерий оптимальности и ползунок по итерациям

Задайте область проектирования, нагрузки и закрепления, попросите 40 % объёма — и смотрите, как материал сам находит путь передачи усилия. Тетраэдры и гексаэдры первого и второго порядка, второй оптимизатор для смешанных ограничений, а результат возвращается телом в дерево модели.

Поле плотностей оптимизированной консоли, складывающееся в ферму

Топологическая оптимизация отвечает на другой вопрос, чем обычный расчёт. Не «достаточно ли прочна эта деталь», а «где вообще нужен материал». Вы задаёте область проектирования, нагрузки, закрепления и целевой объём; она решает, каким элементам стоит существовать.

В десктопной сборке WebCAE такой цикл теперь есть.

Как это устроено

Каждый элемент получает плотность от нуля до единицы, а его жёсткость умножается на эту плотность в штрафной степени — подход SIMP. Степень стартует низкой и растёт до трёх по ходу счёта: так компоновка успевает сложиться прежде, чем промежуточные плотности будут выдавлены штрафом. Фильтр плотностей с заданным радиусом не даёт результату выродиться в шахматную доску и задаёт конструкции минимальную толщину стержней.

Для классической постановки — минимум податливости при заданной доле объёма — обновление идёт по критерию оптимальности, которому не нужен дополнительный расчёт, потому что чувствительность податливости самосопряжена. Если ограничений больше одного или цель не податливость, включается метод подвижных асимптот, а чувствительности берутся из сопряжённой задачи: один дополнительный линейный расчёт на ограничение, независимо от числа элементов.

Что можно попросить

Цели: минимум податливости, минимум массы, максимум собственной частоты. Ограничения: доля объёма, максимальное перемещение в выбранном узле или вершине по выбранному направлению, максимальное напряжение по Мизесу через p-норму с релаксацией и минимальная собственная частота. Оптимизатор выбирается автоматически по виду задачи или задаётся вручную.

Область проектирования принимает четырёх- и десятиузловые тетраэдры и восьми- и двадцатиузловые гексаэдры и считает в том порядке элементов, который уже используется в вашей модели, а не понижает вас молча до первого.

Прокрутка по итерациям

История плотностей сохраняется, поэтому в панели есть ползунок по всем итерациям с податливостью и объёмом выбранной — а не только финальные числа. Смотреть, как складывается компоновка, — самый быстрый способ отличить сходящийся счёт от колеблющегося, и влияние радиуса фильтра здесь становится очевидным так, как не покажет ни одна статичная картинка.

Когда результат устраивает, из поля плотностей извлекается изоповерхность методом марширующих тетраэдров, сглаживается сохраняющим объём фильтром Таубина и возвращается в дерево модели телом, которое можно рассмотреть, выгрузить в STL или взять отправной точкой для настоящей детали.

Почему цикл переезжает в C++

Пятьдесят итераций — это пятьдесят сборок матрицы жёсткости, а сборка и есть дорогая часть. Замер на тетраэдральной сетке в 100 000 элементов: сборка масштабированной матрицы на JavaScript занимает около 224 мс за итерацию на первом порядке и около 2,1 с на втором; в нативном C++ с OpenMP та же работа — 8–12 мс и 35–45 мс. За полный прогон это 11 с против полусекунды и 105 с против двух секунд, причём путь второго порядка в браузере ещё и выделяет больше гигабайта памяти на шаг. Перенос расчёта энергий элементов в нативное ядро заодно сокращает то, что пересекает границу процессов, с десятков мегабайт векторов перемещений до менее чем мегабайта энергий.

Как обстоят дела на самом деле

Это работающий исследовательский конвейер, а не законченная CAD-функция, и мы записали ровно то, что их пока разделяет: повторный анализ идёт на исходной сетке, а не на материализованной геометрии; возвращаемое тело — это граничная сетка в оболочке твердотельного объекта, а не настоящий B-Rep; а часть продвинутых критериев дальше от промышленной готовности, чем можно подумать по их присутствию в интерфейсе. Этому списку посвящена отдельная запись — мы предпочитаем опубликовать его сами, а не дать его обнаружить.

Мы используем обязательные cookie для работы сайта и, с вашего согласия, аналитические. Политика конфиденциальности