Опыт в области CAD/CAE/CAM
В области CAx я работаю с 2010 по 2024 года. Моя работа была связана с научными исследованиями и разработкой перспективных методов построения трехмерных расчетных сеток для численного моделирования различных физических процессов. Результаты работ вы можете посмотреть здесь. Можно выделить следующие направления работ, которыми я занимался:
- построение многоблочной структурированной сетки (с 2010 по 2018 года);
- выделение пограничного слоя в расчетной области (с 2018 по 2022 года).
Многоблочные структурированные сетки
Обычная структурированная сетка состоит из удобных для расчета шестигранных ячеек и компактно располагается в памяти. Но она покрывает только простые расчетные области. Многоблочная сетка расширяет преимущества структурированной сетки на сложные по форме области. Расчетная область разбивается на связанные шестигранные блоки. Для каждого блока строят структурированную сетку, которые затем объединяют в одну неструктурированную. Основная сложность состоит в формировании блоков. Этот процесс требует от пользователя специальных знаний и интенсивного ручного труда. В результате идея с многоблочными структурированными сетками была признана неперспективной. Однако работа не прошла даром.
Мною были реализованы эффективные структуры данных для представления многоблочной сетки в оперативной памяти. Они были обобщены на поверхностные неструктурированные сетки и опубликованы в статье.
Попытка обобщить многоблочные структурированные сетки до гибридных привела меня к пониманию, что получившийся результат имеет много общего с современными геометрическими ядрами (C3D, Parasolid, ACIS, OpenCASCADE) и задачами вычислительной геометрии. Но в отличие от конструирования 3D-моделей и описания границы, мой случай был связан с описанием внутреннего объема. Это натолкнуло меня на актуальную тему исследований про CAE-геометрии (или виртуальной топологии).
Построение многоблочных сеток требовало интенсивного взаимодействия с пользователем и оперированием трехмерными объектами. Чтобы ускорить процесс, я предложил следующие улучшения:
Объем исходного кода проекта составлял 150 тысяч строк кода и около 500 файлов. Всего было около 2000 модульных тестов, которые проходили за 30 минут. Тесты помогали контролировать регрессию, но в то же время приходилось тратить время на сопровождение. Я развил идею динамического инстанцирования параметрических тестов. Параметрический тест – это тест, который можно многократно использовать на различных входных данных, передаваемых отдельно. Такой подход идеально подходит в области геометрического моделирования, где многие сложные функции работают вокруг стандартизированных данных. Инстанцирование означает связывание параметрического теста с определенными входными данными. Обычно инстанцирование происходит статически – в тестовом проекте прописывают нужные данные. Я же сделал так, что инстанцирование происходит через конфигурационные файлы. Это позволило тестовому проекту быть более переносимым и дало возможность запускать весь набор параметрических тестов на конфиденциальных данных заказчика.
Выделение пограничного слоя
Следующая исследовательская и практическая работа, в которой я участвовал, – это выделение пограничного слоя смещением треугольной сетки. Выделенный слой использовался для построения расчетных сеток в задачах аэро-, гидро- и газодинамики. Особенность работы была в том, что она уже была реализована и использовалась в производственной практике. Перед мною стояла задача разобрать исходный код, ускорить программу и улучшить результат.
С первого взгляда, смещение сетки кажется простой задачей. Сложность была в том, чтобы выдавать одинаково качественный результат на сотнях непохожих моделей. Изменения программы, улучшавшие результат на одних данных, резко ухудшали их на других. Это состояние известно как регрессия программы, которое было сложно обнаружить из-за большой базы тестовых проектов, длительности прохождения тестов и ручного анализа результатов. Мною была предложена методика регрессионного тестирования на основе методологии A/B-тестирования. В методику входили описание набора контролируемых метрик, инструменты для анализа метрик и последовательность действий для анализа. Это позволило нам уменьшить время регрессионного тестирования от недели до одного часа.
Вторая сложность в выделении пограничного слоя была связана с особенностями геометрических моделей. Они состояли из поверхностей, неудобные для построения расчетных сеток. После аппроксимации гладких поверхностей треугольной сеткой, появлялись вырожденные и разноразмерные треугольники. Я провел обзор проблемных данных и способы их обхода на разных этапах подготовки расчетной сетки.