Я написал программу моделирования жидкости на основе частиц. Трудно сказать, получаю ли я правильный результат. Визуализированный результат кажется разумным, но некоторая его часть выглядит странно. Я не знаю, это особенность жидкости. Есть ли какой-нибудь точный метод проверки правильности моей программы?
Исправление некоторых деталей:
Моя программа представляет собой программу моделирования на основе двумерных частиц. Жидкость сжимаема. Реализация практически основана на классической статье:
Мюллер, Матиас, Давид Чарипар и Маркус Гросс. «Моделирование жидкости на основе частиц для интерактивных приложений». Слушания ACM SIGGRAPH 2003 года
Я решил уравнение Навье-Стокса итерационным методом. Учитывались только давление, сила тяжести, вязкость и поверхностное натяжение.
Ответы:
Сравните это с чужим программным обеспечением. Запустите стандартизированный тест и выясните, получите ли вы примерно тот же ответ, что и другие. Если вы получите тот же ответ, то вероятность правильного кода достаточно высока.
Некоторые тесты:
Поток мимо цилиндра. В 2d возьмите прямоугольную область, цилиндр посередине, приток слева, отток по бою и рассчитайте силу на цилиндре. Вот эталонный тест, сравнивающий несколько кодов.
Плавучесть потока. Закрытая коробка, горячая плита снизу, холодная плита сверху, горячая жидкость начинает подниматься из-за силы плавучести. Вот эталон .
Восходящий пузырь, ориентир .
Но, к сожалению, это может быть довольно сложно сравнить ваш код с научными кодами в этих тестах. Я предполагаю, что вы реализовали что-то вроде SPH или стабильных жидкостей, которые созданы не для точности, а для стабильности.
Возьмите, например, поток мимо цилиндра. Я бы начал тестирование с очень небольшого числа Рейнольдса и затем измерял бы силу на цилиндре, когда вы увеличиваете точность моделирования (уменьшаете временной шаг, увеличиваете деление или увеличиваете количество частиц). Сходится ли сила к некоторому числу? Если нет, то у вас есть проблема, если да, то посмотрите на контрольный тест и сравните свой результат с другими.
Этот метод очень похож на технику, которую я использую для тестирования моего raytracer. Я просто визуализирую тестовую сцену с чьим-либо рендером и сравниваю ее с моим результатом. Они сходятся к одному и тому же результату? Если да, то я правильно понял, если нет, то неправильно.
источник