Перейдем к построению расчетной сетки. Простейшим вариантом является команда square создающая квадратную сетку с единичной длиной сторон. Первые два параметра определяют количество сегментов для триангуляции в направлении x и y, соответственно. Для визуализации расчетной сетки используется команда plot. Индексы границ (параметр label) имеют значения от 1 до 4 начиная с нижней границы с нумерацией против часовой стрелки.
mesh Th1 = square(4,6); plot(Th1);
Для построения прямоугольной сетки задаются третьим и четвертым параметром функции от x и y с координатами соответствующими узлам. Для равномерной прямоугольной сетки размерностью n×m занимающей область [x0, x1]×[y0, y1] можно воспользоваться кодом:
real x0 = 1.2; real x1 = 2.2; real y0 = 0; real y1 = 0.5; int n = 20; real m = 10; mesh Th2 = square(n, m, [x0 + (x1 - x0) * x, y0 + (y1 - y0) * y]); plot(Th2);
В задачах, где на различных участках сетки изучаемые переменные меняются в различной степени, точность расчета повышается за счет увеличения размерность сетки. Однако это ведет к увеличению вычислительных ресурсов. Более эффективный способ построения сетки заключается в использовании неравномерных сеток (в области сильного изменения используемой переменной сетка задается более мелкой, а где переменная меняется слабо - более крупной). Для построения неравномерной сетки можно задать нелинейные функции для x и y (диапазон изменения x=0..1 и y=0..1). В следующем примере задается изменение шага для узлов сетки по x и y управляемый параметрами a и b (положительные параметры для уменьшении шага, отрицательные - для увеличения, нулевые - для равномерного шага):
real x0 = 1.2; real x1 = 2.2; real y0 = 0; real y1 = 0.5; int n = 20; real m = 10; real a = 0.3; real b = 0.2; mesh Th3 = square(n, m, [x0 + (x1 - x0) * x + a * x * (1. - x), y0 + (y1 - y0) * y + b * y * (1. - y)]); plot(Th3);
Способ триангуляции задается параметром flags следующим образом:
Пример использования:
mesh Th4 = square(5, 5, flags = 0);
Наглядно примеры триангуляции для различных значений параметра flags видны на рисунке.
Значения индексов границ по умолчанию можно заменить с помощью целочисленного вектора label = lbs. Также можно указать индекс для всей области region (индекс для части объекта, когда логика задачи подразумевает объект из нескольких частей).
int[int] lbs = [0, 0, 1, 1]; mesh Th5 = square(5, 5, flags = 1, label = lbs, region = 2); plot(Th5);