Pull to refresh

Comments 18

несколько вопросов:
1) существуют ли встроенные генераторы сеток, если да, то для областей каких размерностей? И, опять же, если да, то как вы субъективно оцениваете качество получаемых сеток?

2) На каком конечномерном базисе производится аппроксимация градиентов и можно ли этим базисом управлять?

3) какие численные методы применяются для систем нелинейных уравнений?
1. Есть генератор сетки по описанию (типа «такой-то параллелепипед разбить на NxMxK ячеек, причем по третьей координате каждую следующую ячейку делать на L% уже», или аналогично можно не только с параллелепипедами, но и с шестигранниками с изогнутыми ребрами и т.п.) — одномерные, двумерные, трехмерные, качество обсуждать бессмысленнно. Есть некий генератор snappyHexMesh, я с ним не работал. Я так понимаю, он тоже должен генерить одно-, двух- и трехмерные сетки.

2. Не очень понятен вопрос. Расчеты идут методом конечных объемов, там про базис говорить бессмысленно (в отличие от конечных элементов). (В тексте в одном месте у меня таки проскочили конечные элементы; сейчас поправлю.) Правда, есть еще разные схемы для градиента, не совсем следующие методу конечных объемов (например, вычисление градиента методом наименьших квадратов, минимизируя отклонение «значение в данной точке, линейно экстраполированное по градиенту на соседние точки» от реальных значений в соседних точках), можете подробнее посмотреть на странице 36 в Programmer's manual.

3. Каких-либо методов общего назначения для нелинейных систем в OpenFOAM нет; все функции fvm:: позволяют создать только линейные члены, и, соответственно, функции solve() решают только линейные системы. Для конкретных нелинейных систем (в первую очередь для уравнений гидродинамики) есть ряд специализированных методов типа SIMPLE, PIMPLE, PISO, решающих уравнения итеративно путем многократного решения специальным образом сконструированных линейных уравнений — эти методы реализованы в отдельных стандартных солверах.
В приведенной вами ссылке на метод конечного объема жидкости указана лишь некая функция, аналогичная концентрации, и уравнение выражающее аналог закона сохранения массы для нее. Как осуществляется численное решение: МКЭ, МКО, РС ..etc… там ничего нет. :) Я не придираюсь. Конечные объемы, так конечные объемы. Аппроксимацию частных производных и численное интегрирование при этом все равно ведь можно осуществлять по-разному.
Хотя, честно говоря, с МКО сталкивался единственный раз года 3 назад, и могу что-то путать, но, насколько я помню, там необходмо вычислять нормальные составляющие потоков через участки границ конечного объема.
Ну я вроде пока еще не приводил ссылок на метод конечных объемов в общем случае. Но в английской википедии он вроде разумно описан. Основной смысл — что уравнения в частных производных мы заменим на интегральные уравнения, проинтегрировав по объему ячейки. В результате производные по времени превратятся в производные от суммарной величины во всей ячейке; а пространственные производные, по крайней мере простые — типа градиента и дивергенции — превратятся в интегралы по поверхности. Соответственно, для вычисления градиента от поля, заданного на поверхностях ячеек, мы просто суммируем его значения, помноженные на векторы нормали и на площадь (формула 2.25 по ссылке на Programmer's manual), а для поля, заданного в объеме — сначала так или иначе интерполируем его на поверхности и потом суммируем.
Да, я вспомнил. Я применял расщепление по физическим процессам и методом конечных объемов решал уравнение переноса. Остальное — нявной схемой МКЭ. Поэтому, видимо, в голове МКО оказался неразрывно связан с МКЭ :)
1) Да, еще, конечно, я забыл отметить, что есть конверторы сеток из других форматов (хотя я ими не пользовался и потому не знаю)
Код OpenFOAM очень широко использует шаблоны. При этом очень активно используется следующая интересная структура

Это так называемый Curiously recurring template pattern (Дивно рекурсивный шаблон).
Насколько я понимаю, это не совсем то. CRTP — это про возможность из базового класса получать доступ к функциям и полям наследника. В частности, там базовый класс должен знать, что от него будут наследоваться, — а здесь несколько другое.
Я бы еще добавил про отечественное комьюнити, например, Институт системного программирования проводит учебные курсы: http://www.ispras.ru/ru/unicluster/

В свое время не нашел бинарников под винду на официальном сайте. Брал
здесь. Это порт от разработчиков shareware обертки Symscape для CFD части OpenFOAM. Использовал ее в триал версии, работает, из ограничений — отсутствие многофазки. Под Linux есть также интегрированный свободный пакет Salome, делающий все по цепочке сетка->солвер->графики. В винде же кроме Symscape использовал две альтернативы:
1) Сетка: Gmsh или Netgen (с ними были основные проблемы из-за некорректной для OpenFOAM сетки)->OpenFOAM->ParaView
2) Офигенная авторская разработка на Ruby: http://www.discretizer.org/. Имеет свой 3D редактор, не сразу понятный, но рабочий. Фактически препроцессор с решателем. Вьюшка по прежнему ParaView.

По поводу нелинейных уравнений сейчас тренд это автоматическое дифференцирование. Было бы здорово по прежнему записывать уравнения на уровне невязок, которые потом с помощью AD линеаризуются в СЛАУ. Соображения по реализации этого в OpenFOAM находил в презентации.

Судя по количеству и динамике постов на cfd-online это основной конкурент Ansys'у: ровно 2 года назад соотношение было 133 тысяч /69 тысяч~1.9, сегодня уже 184 тысячи / 113 тысяч ~1.6.

Мне кажется бизнес сюда тоже придет, пока же вузы и отрасль тянут на себе. Видится что компетентные люди смогут создать некое SaaS решение наподобие коллег по цеху из Fidesys
Я видел презентации пары фирм, предлагающих облачные OpenFoam-сервисы. Также есть несколько коммерческих предложений библиотек по использованию GPU
ИСПРАНовцы проводят конференции по OpenFOAM (например на проведенной ими конференции Облачные вычисления. Образование. Исследования. Разработка — десяток докладов по OpenFOAM, и да, по ссылке качественно сделанное видео всех докладов). На прошлой неделе был двухдневных обучающий тренинг, скоро будет видео и с него.
— Многие особенности кода (своя система сборки, своя реализация контейнеров и ввода-вывода, и т.д.) связаны с тем, что OpenFOAM начал разрабатываться в самом начале девяностых, когда С++ библиотеки и практики программирования были ещё не настолько развиты.
— Programmer's guide когда-то был на сайте, но он давно не обновлялся и сильно устарел, и они его убрали. Кроме того, авторы зарабатывают на поддержке, и распространять бесплатно слишком подробную документацию не очень заинтересованы.
— OpenFOAM-extend это форк, содержащий полезные улучшения от сообщества, в настоящий момент основанный на версии 1.6, и поэтому довольно сильно несовместимый с официальной версией (текущая версия 2.2). Такая ситуация возникла потому, что официальные авторы не очень охотно принимают патчи от сообщества в официальную версию, а у сообщества нет ресурсов портировать все изменения на новую версию (хотя работа идёт потихоньку). Очень жалко наблюдать такое распыление ресурсов.
— Вы забыли рассказать про очень важное свойство — параллелизацию.
Да, со всем согласен (кроме разве что programmer's guide — вроде основы всё те же, а кроме основ в guide мало что есть). Про параллелизацию хотел, но забыл.
Извините. Мне одному картинки напомнили облачка из Lucs Arts'овых квестов 90-х?)
Подскажите нефизику. А можно ли с помощью OpenFOAM смоделировать адгезию жидкости к твёрдому телу в движении?
Предположим, есть кусок металлической поверхности. Мы на него выливаем вязкую жидкость с порошковыми примесями, встряхиваем и раскручиваем в центрифуге. На поверхности остаётся какое то количество материала. Нужно вычислить, как надо раскрутить-встряхнуть поверхность, чтобы на ней осталось определённое количество этого жидкого материала.
Я уже давно не работаю с OpenFOAM, но в целом основная проблема, которую я вижу — это модель взаимодействия жидкости с поверхностью.

Так-то гидродинамику (течение жидкости, влияние раскручивания и т.д.) OpenFOAM вам посчитает. Но если у вас на поверхности происходят нетривиальные процессы, то надо иметь модель этих процессов.
Спасибо за ответ. Точно ведь, этот процесс смачиванием называется!
Модель смачивания ведь можно как то в OpenFOAM рассчитать? Вообще, для таких целей OpenFOAM подходит или это далеко от гидродинамики и искать нужно другой инструмент?
Я не знаю, какие есть модели смачивания и как они устроены, поэтому подробно ответить не смогу.

Если это просто граничное условие к уравнениям движения жидкости, то, думаю, должно быть возможно. Что-то мне вспоминается, что я видел, например, учет поверхностного натяжения и угла смачивания в OpenFOAM.

Если там нужно какое-то более сложное моделирование, какие-нибудь свои дифуры, то надо смотреть. Но в целом я не вижу принципиальных проблем, главное иметь хотя бы уравнения, описывающие процессы (а лучше — понимание того, какими численными методами их лучше решать).
Only those users with full accounts are able to leave comments. Log in, please.

Information

Founded
Location
США
Website
www.intel.ru
Employees
5,001–10,000 employees
Registered
Representative
Виктор Гурылев

Habr blog