Skip to content

grenkin/joker-fdm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Joker FDM

Объектно-ориентированный конструктор разностных схем

Цель -- упростить разработку программ для широкого класса разностных схем посредством поэтапного конструирования разностной схемы из имеющихся блоков.

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

Итак, идея солвера -- поэтапное конструирование алгоритмов на последовательности уровней абстракции.

В ходе разработки планируется охватить широкий класс уравнений (линейных и нелинейных, стационарных и нестационарных, в одномерных и многомерных областях и на разных сетках), придерживаясь следующих принципов:

  • усложнение программы по мере необходимости;

  • реализация следующих уровней абстракции не должна усложнять предшествующие уровни.

Рассуждая философски, когда ты пишешь "код" на Markdown, ты одновременно пишешь и текст. Данная идея хорошо подходит и для вычислительных программ. В этой предметной области тестирование провести сложно, следовательно, важным аспектом аргументации корректности программы является максимальная ясность кода.

Подробная информация в wiki

Здесь вы можете задать вопросы по программе.


Версия 0.1

Решение (одномерных) краевых задач для систем ОДУ 2-го порядка следующего вида:

$-a_{ij} u_i''(x) + \sum\limits_{k=1}^N f_{ijk}(u_k(x)) = g_{ij}(x)$ в $(x_{j-1}, x_j)$, $i=\overline{1,N}, j=\overline{1,M}$,

$-a_{i1}u_i'(x_0) + b_{i0}u_i(x_0) = w_{i0}$, $i=\overline{1,N}$,

$a_{iM}u_i'(x_M) + b_{iM}u_i(x_M) = w_{iM}$, $i=\overline{1,N}$

с условиями сопряжения

$a_{ij} u_i'(x_j - 0) = a_{i,j+1} u_i'(x_j + 0) = G_{ij}(u_i(x_j + 0) - u_i(x_j - 0))$, $i=\overline{1,N}, j=\overline{1,M-1}$,

либо

$u_i(x_j - 0) = u_i(x_j + 0)$, $a_{ij}u_i'(x_j - 0) = a_{i,j+1}u_i'(x_j + 0)$.

Здесь:

  • $N$ -- число уравнений;
  • $M$ -- число подобластей;
  • $(x_{j-1}, x_j)$ -- $j$-я подобласть, $x_j = x_{j-1} + L_j$, $x_M = L = \sum\limits_{j=1}^M L_j$.

Относительно коэффициентов предполагается:

  • $a_{ij} > 0$,
  • $b_{i0}, b_{iM} \geq 0$ или $\infty$,
  • $G_{ij} \geq 0$ или $\infty$.

Версия 0.3

Прямоугольная область разбита на прямоугольные подобласти при разбиении x- и y-промежутков:

$x \in [x_{j_x - 1}, x_{j_x}], ; j_x = \overline{1, M_x}$,

$y \in [y_{j_y - 1}, y_{j_y}], ; j_y = \overline{1, M_y}$,

$x_{j_x} = x_{j_x - 1} + L_{x, j_x}$, $y_{j_y} = y_{j_y - 1} + L_{y, j_y}$.

Уравнения:

$-a_{ij}\Delta u_i(x,y) + \sum\limits_{k=1}^n f_{ijk}(u_k(x,y)) = g_{ij}(x,y)$,

$(x,y) \in (x_{j_x - 1}, x_{j_x}) \times (y_{j_y - 1}, y_{j_y}), ; j = (j_x, j_y)$.

Граничные условия Дирихле, Неймана или Робина. Условия сопряжения типа идеального контакта либо неидеального контакта.

Необходимо подключить библиотеку MTL4.