Pull to refresh

Comments 9

Нет, не решает. Аргумент может быть только двумерный или трехмерный.
Несколько вопросов:
1) какие методы применяются для решения алгебраической задачи?
2) решаются ли нестационарные задачи? Нелинейные задачи?
3) какие могут быть граничные условия?
4) как аппроксимируется интеграл по элементу?
5) 3d элементы могут быть призматическими? С четырехугольными основаниями? Непараллельными основаниями?
Нет, не могут, реализованы только тетраэдры. Но в документации есть рекомендации, как внедриться в исходный код Freefem++ и добавить «свой» тип элемента — не простая задача.
Ответы:
1) Имеются методы: conjugate gradient (CG), Crout/LU, Cholesky и другие (прямые и итерационные). Мы использовали CG. Некоторые другие решатели «падали» даже на не очень больших объемах данных (наверное в реализации имеются ограничения на размеры матриц).
2) Специального механизма решения нестационарных задач нет. Однако можно дискретизировать время, заменить производные по времени разностями и в цикле последовательно решать стационарные задачи. Это типичный прием для Freefem++ и мы его использовали для решения уравнений Навье-Стокса.
3) Граничные условия могут быть любыми: Дирихле, Неймана, Робина — формулы могут быть любыми.
4) Не знаю. В документации ничего об этом не сказано.
по поводу 1) а можно «высокоуровневыми» средствами осуществить свой метод? Грубо горовя, «взять» в какой-то момент всю алгебраическую задачу?
3) что-нибудь вроде излучения, например, можно написать? (du/dn = k u^4)
4) вот вы сможете, например, используя эту библиотеку реализовать TVD схему для вашей задачи?
1) Во входном языке Freefem++ в вариационной формулировке можно только указать один из предопределенных идентификаторов для метода решения алгебраических уравнений. Средств «внедрения» в этом месте нет.
3) Можно. Но если условия Дирихле записываются в части on() в явном виде u=f(x,y,z), то условия Неймана или Робина (как вы здесь записали) записываются в интегральном виде — в документации есть описание. Я же воспользовался уже готовой вариационной формулировкой для нашей задачи.
4) Мне кажется средствами Freefem++ TVD не возможно реализовать.
Другие пакеты смотрели? Есть же из крупных и бесплатных, например, deal.ii, libMesh, FEniCS… У них проблем с большими задачами не наблюдается, их можно запускать на больших компьютерах с 16к CPU, вот например http://p4est.github.io/papers/BangerthBursteddeHeisterEtAl11.pdf

Лично мне больше нравится deal.ii за большое количество туториалов и за очень обстоятельный видеокурс по программе (50+ лекций). Ну и выбирая между DSL в FreeFEM++ и чистым C++ в deal.ii мне ближе второй вариант. Хотя людям, которые больше математики, чем программисты — FreeFem++ наверное больше подходит.
Sign up to leave a comment.

Articles

Change theme settings