adaptmesh

Создайте адаптивный 2 -D mesh и решите УЧП

    Эта страница описывает устаревший рабочий процесс. Новые возможности могут быть несовместимы с устаревшим рабочим процессом. В рекомендуемом рабочем процессе см. generateMesh для генерации сетки и solvepde для решения УЧП.

    Описание

    пример

    [u,p,e,t] = adaptmesh(g,b,c,a,f) генерирует адаптивный [p,e,t] mesh и возвращает решение u для эллиптической 2-D УЧП задачи

    (cu)+au=f

    для (x, y ) ∊

    (cu)+au=f

    с заданной геометрией и граничными условиями, заданными g и b. Mesh описывается как p, e, и t матрицы.

    После завершения функция выдает одно из следующих сообщений:

    • Adaption completed. (Это означает, что Tripick функция вернула нулевые треугольники для уточнения.)

    • Maximum number of triangles obtained.

    • Maximum number of refinement passes obtained.

    пример

    [u,p,e,t] = adaptmesh(g,b,c,a,f,Name,Value) выполняет адаптивную генерацию сетки и решение УЧП для задач эллиптического 2-D УЧП с помощью одной или нескольких Name,Value аргументы в виде пар.

    Примеры

    свернуть все

    Решить уравнение Лапласа по сектору круга с граничными условиями Дирихле u = cos (2/3atan2 (y, x)) вдоль дуги и u = 0 вдоль прямых линий и сравнить полученное решение с точным решением. Установите опции так, чтобы adaptmesh уточняет треугольники с использованием критерия наихудшей ошибки, пока не получит mesh с по крайней мере 500 треугольниками.

    c45 = cos(pi/4);
    L1 = [2 -c45 0  c45 0 1 0 0 0 0]';
    L2 = [2 -c45 0 -c45 0 1 0 0 0 0]';
    C1 = [1 -c45  c45 -c45 -c45 1 0 0 0 1]';
    C2 = [1  c45  c45 -c45  c45 1 0 0 0 1]';
    C3 = [1  c45 -c45  c45  c45 1 0 0 0 1]';
    g = [L1 L2 C1 C2 C3];
    
    [u,p,e,t] = adaptmesh(g,'cirsb',1,0,0,'Maxt',500,...
                         'Tripick','pdeadworst','Ngen',Inf);
    Number of triangles: 204
    Number of triangles: 208
    Number of triangles: 217
    Number of triangles: 230
    Number of triangles: 265
    Number of triangles: 274
    Number of triangles: 332
    Number of triangles: 347
    Number of triangles: 460
    Number of triangles: 477
    Number of triangles: 699
    
    Maximum number of triangles obtained.
    

    Найдите максимальную абсолютную ошибку.

    x = p(1,:); y = p(2,:);
    exact = ((x.^2 + y.^2).^(1/3).*cos(2/3*atan2(y,x)))'; 
    max(abs(u - exact))
    ans = 0.0028
    

    Найдите количество треугольников.

    size(t,2)
    ans = 699
    

    Постройте график mesh.

    pdemesh(p,e,t)

    Figure contains an axes. The axes contains 2 objects of type line.

    Проверьте, сколько уточнений вам нужно с помощью равномерного треугольного mesh.

    [p,e,t] = initmesh(g); 
    [p,e,t] = refinemesh(g,p,e,t); 
    u = assempde('cirsb',p,e,t,1,0,0); 
    x = p(1,:);
    y = p(2,:); 
    exact = ((x.^2 + y.^2).^(1/3).*cos(2/3*atan2(y,x)))'; 
    max(abs(u - exact))
    ans = 0.0116
    

    Найдите количество треугольников в этом случае.

    size(t,2)
    ans = 816
    

    Уточните сетку еще раз. Максимальная абсолютная ошибка для равномерного создания сетки все еще больше, чем для адаптивного создания сетки.

    [p,e,t] = refinemesh(g,p,e,t); 
    u = assempde('cirsb',p,e,t,1,0,0); 
    x = p(1,:);
    y = p(2,:); 
    exact = ((x.^2 + y.^2).^(1/3).*cos(2/3*atan2(y,x)))'; 
    max(abs(u - exact))
    ans = 0.0075
    

    Найдите количество треугольников в этом случае.

    size(t,2)
    ans = 3264
    

    Постройте график mesh.

    pdemesh(p,e,t)

    Figure contains an axes. The axes contains 2 objects of type line.

    Равномерное уточнение с большим количеством треугольников приводит к большей ошибке. Как правило, задача с регулярным решением имеет O(h2) ошибка. Однако это решение сингулярно, поскольку ur1/3 в источник.

    Входные параметры

    свернуть все

    Описание геометрии, заданное как разложенная геометрическая матрица, геометрическая функция или указатель на геометрическую функцию. Для получения дополнительной информации о разложенной геометрической матрице см. decsg. Для получения дополнительной информации о функции геометрии смотрите Параметризованная функция для создания 2-D геометрии.

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

    Типы данных: double | char | string | function_handle

    Граничные условия, заданные как краевая матрица или файл контура. Передайте файл границы как указатель на функцию или как имя файла. Как правило, вы экспортируете краевую матрицу из приложения PDE Modeler.

    Пример: b = 'circleb1', b = "circleb1", или b = @circleb1

    Типы данных: double | char | string | function_handle

    Коэффициент УЧП, заданный как скаляр, матрица, вектор символов, символьный массив, строковый скаляр, строковый вектор или функция коэффициента. c представляет коэффициент c в скалярном УЧП

    (cu)+au=f

    или в системе PDE

    (cu)+au=f

    Коэффициенты c, a, и f может зависеть от решения u если вы используете нелинейный решатель путем установки значения 'Nonlin' на 'on'. Коэффициенты не могут быть функциями времени t.

    Пример: 'cosh(x+y.^2)'

    Типы данных: double | char | string | function_handle

    Коэффициент УЧП, заданный как скаляр, матрица, вектор символов, символьный массив, строковый скаляр, строковый вектор или функция коэффициента. a представляет коэффициент a в скалярном УЧП

    (cu)+au=f

    или в системе PDE

    (cu)+au=f

    Коэффициенты c, a, и f может зависеть от решения u если вы используете нелинейный решатель путем установки значения 'Nonlin' на 'on'. Коэффициенты не могут быть функциями времени t.

    Пример: 2*eye(3)

    Типы данных: double | char | string | function_handle

    Коэффициент УЧП, заданный как скаляр, матрица, вектор символов, символьный массив, строковый скаляр, строковый вектор или функция коэффициента. f представляет коэффициент f в скалярном УЧП

    (cu)+au=f

    или в системе PDE

    (cu)+au=f

    Коэффициенты c, a, и f может зависеть от решения u если вы используете нелинейный решатель путем установки значения 'Nonlin' на 'on'. Коэффициенты не могут быть функцией времени t.

    Пример: char('sin(x)';'cos(y)';'tan(z)')

    Типы данных: double | char | string | function_handle

    Аргументы в виде пар имя-значение

    Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

    Пример: [u,p,e,t] = adaptmesh(g,'cirsb',1,0,0,'Maxt',500,'Tripick','pdeadworst','Ngen',Inf)

    Максимальное количество новых треугольников, заданное как разделенная разделенными запятой парами, состоящая из 'Maxt' и положительное целое число.

    Типы данных: double

    Максимальное количество поколений треугольников, заданное как разделенная разделенными запятой парами, состоящая из 'Ngen' и положительное целое число.

    Типы данных: double

    Начальный mesh, заданная как разделенная разделенными запятой парами, состоящая из 'Mesh' и сетку mesh, заданную как [p,e,t] тройки. По умолчанию функция использует mesh, сгенерированную initmesh функция.

    Типы данных: double

    Метод выбора треугольника, заданный как разделенная разделенными запятой парами, состоящая из 'Tripick' и функцию MATLAB. По умолчанию функция использует индексы треугольников, возвращаемых pdeadworst функция.

    Учитывая оценку ошибки, вычисленную функцией pdejmpsметод выбора треугольника определяет треугольники, которые будут уточняться при следующем генерации треугольника. Функция вызывается с помощью аргументов p, t, cc, aa, ff, u, errf, и Par.

    • p и t представляют текущее поколение треугольников.

    • cc, aa, и ff являются текущими коэффициентами для задачи УЧП, развернутыми до средних точек треугольника.

    • u - текущее решение.

    • errf - вычисленная оценка ошибки.

    • Par является необязательным аргументом adaptmesh.

    Матрицы cc, aa, ff, и errf все имеют N t столбцов, где N t - текущее количество треугольников. Количество строк в cc, aa, и ff точно такие же, как входные параметры c, a, и f. errf имеет по одной строке для каждого уравнения в системе. Два стандартных метода выбора треугольника pdeadworst и pdeadgsc.

    • pdeadworst определяет треугольники, где errf превышает часть наихудшего значения. Значение дроби по умолчанию является 0,5. Вы можете изменить его, задав Par значение аргумента при вызове adaptmesh.

    • pdeadgsc выбирает треугольники с помощью критерия относительной погрешности.

    Типы данных: double

    Параметр функции для метода выбора треугольника, заданный как разделенная разделенными запятой парами, состоящая из 'Par' и число от 0 до 1. The pdeadworst метод выбора треугольника использует его как wlevel аргумент. The pdeadgsc метод выбора треугольника использует его как tol аргумент.

    Типы данных: double

    Метод уточнения треугольника, заданный как разделенная разделенными запятой парами, состоящая из 'Rmethod' и любой из них 'longest' или 'regular'. Для получения дополнительной информации о методе уточнения см. refinemesh.

    Типы данных: char | string

    Переключитесь, чтобы использовать нелинейный решатель, заданный как разделенная разделенными запятой парами, состоящая из 'Nonlin' и 'on' или 'off'.

    Типы данных: char | string

    Нелинейный допуск, заданный как разделенная разделенными запятой парами, состоящая из 'Toln' и положительное число. Функция передает этот аргумент в pdenonlin, который итератируется до тех пор, пока величина невязки не станет меньше Toln.

    Типы данных: double

    Нелинейное начальное значение, заданное как разделенная разделенными запятой парами, состоящая из 'Init' и скаляр, вектор символов или вектор чисел. Функция передает этот аргумент в pdenonlin, который использует его как начальное предположение в своей 'U0' аргумент.

    Типы данных: double

    Нелинейные Вычисления Якобиана, заданные как разделенная запятой пара, состоящие из 'Jac' и любой из них 'fixed', 'lumped', или 'full'. Функция передает этот аргумент в pdenonlin, который использует его как начальное предположение в своей 'Jacobian' аргумент.

    Типы данных: char | string

    Нелинейная норма невязки решателя, заданная как разделенная разделенными запятой парами, состоящая из 'Norm' и p значение для Lp норма. p может быть любым положительным вещественным значением, Inf, или -Inf. The p норма векторного v является sum(abs(v)^p)^(1/p). Функция передает этот аргумент в pdenonlin, который использует его как начальное предположение в своей 'Norm' аргумент.

    Типы данных: double | char | string

    Алгоритм генерации начального mesh, заданный как разделенная разделенными запятой парами, состоящая из 'MesherVersion' и любой из них 'R2013a' или 'preR2013a'. The 'R2013a' алгоритм запускается быстрее, и может триангулировать больше геометрий, чем 'preR2013a' алгоритм. Оба алгоритма используют триангуляцию Делоне.

    Типы данных: char | string

    Выходные аргументы

    свернуть все

    Решение, возвращенный как вектор.

    • Если УЧП скаляром, что означает, что он имеет только одно уравнение, то u является вектором-столбцом, представляющей u решения в каждом узле mesh.

    • Если УЧП является системой N > 1 уравнений, то u - вектор-столбец с N*Np элементы, где Np - число узлов в mesh. Первый Np элементы u представляют решение уравнения 1, следующего Np элементы представляют решение уравнения 2 и так далее.

    Mesh очков, возвращенные как 2-by- Np матрица. Np - число точек (узлов) в mesh. Столбец k от p состоит из x -координата точки k в p(1,k) и y - координата точки k в p(2,k). Для получения дополнительной информации смотрите Данные как [p, e, t] Triples.

    Mesh ребер, возвращается как 7-бай- Ne матрица. Ne - количество ребер в mesh. Ребро является парой точек в p содержащая контур между поддоменами или содержащая внешний контур. Для получения дополнительной информации смотрите Данные как [p, e, t] Triples.

    Элементы сетки, возвращенные как 4-бай- Nt матрица. Nt - количество треугольников в mesh.

    The t(i,k), с i в диапазоне от 1 до end-1, содержат индексы к угловым точкам элемента k. Для получения дополнительной информации смотрите Данные как [p, e, t] Triples. Последняя строка, t(end,k), содержит номера поддоменов элементов.

    Алгоритмы

    свернуть все

    Уточнение сетки для повышения точности решения

    Partial Differential Equation Toolbox™ обеспечивает refinemesh функция для глобального, равномерного уточнения сетки для 2-D геометрий. Он разделяет каждый треугольник на четыре одинаковых треугольника, создавая новые углы на средних сторонах, настраивая для изогнутых контуров. Можно оценить точность численного решения путем сравнения результатов из последовательности последовательно уточненных сеток. Если решение достаточно гладкое, более точные результаты могут быть получены экстраполяцией.

    Решения уравнений часто имеют геометрические функции, такие как локализованные сильные градиенты. Примером инженерной важности в эластичности является концентрация напряжения, происходящая в повторяющихся углах, таких как L-образная мембрана MATLAB. В таких случаях более эффективным является избирательное уточнение mesh. Выбор, который основан на оценках ошибок в вычисленных решениях, называется адаптивным уточнением сетки.

    Адаптивное уточнение генерирует последовательность решений на последовательно более мелких сетках, на каждом этапе выбирая и уточняя те элементы, которые, как считается, вносят наибольший вклад в ошибку. Остановки процесса 34, когда максимальное количество элементов превышено, когда каждый треугольник вносит меньше, чем заданный допуск, или когда достигается предел итерации. Можно предоставить начальный mesh разрешить adaptmesh звонить initmesh автоматически. Вы также выбираете параметры критериев выбора и прекращения. Три компонента алгоритма являются функцией индикации ошибки (вычисляет оценку вклада ошибки элемента), mesh refiner (выбирает и подразделяет элементы) и критериями завершения.

    Оценка ошибки для решения КЭМ

    Адаптация является процессом обратной связи. Он легко применяется к большей области значений задач, чем те, для которых был адаптирован его проект. Оценки, критерии выбора и так далее должны быть оптимальными для предоставления наиболее точного решения при фиксированных затратах или самых низких вычислительных усилиях для заданной точности. Такие результаты были доказаны только для задач модели, но в целом эвристика равнораспределения была найдена почти оптимальной. Размеры элемента должны быть выбраны так, чтобы каждый элемент вносил одинаковый вклад в ошибку. Теория адаптивных схем использует априорные границы для решений в терминах f исходной функции. Для неэллиптических задач такие ограничения могут не существовать, в то время как схема уточнения все еще четко задана и работает.

    Функция индикатора ошибки, используемая в программном обеспечении, является элементарной оценкой вклада, основанной на [1] и [2]. Для уравнения-Δ <reservedrangesplaceholder3> Пуассона   = f на Ω, следующая оценка ошибки для FEM-решения uh держится в L 2-норме:

    (uuh)αhf+βDh(uh)

    где h = h (x) - локальный размер сетки, и

    Dh(v)=(τE1hτ2[vnτ]2)1/2

    Окруженное количество - переход в нормальной производной v через ребро τ, <reservedrangesplaceholder8> <reservedrangesplaceholder7> длина ребра τ, и сумма переезжает Ei, набор всех внутренних ребер триангуляции. Коэффициенты α и β не зависят от триангуляции. Эта граница превращается в элементарную функцию индикатора ошибки E (K) для K элемента путем суммирования вкладов с его ребер.

    Общая форма функции индикатора ошибки для эллиптического уравнения

    – ∇ · (c  <reservedrangesplaceholder2>) + au = f(1)

    является

    E(K)=αh(fau)K+β(12τKhτ2(nτ·cuh)2)1/2

    где nτ - модуль нормаль ребра τ и термин с скобками является переходом потока через ребро элемента. Норма L 2 вычисляется по K элемента. pdejmps функция вычисляет этот индикатор ошибки.

    Функции уточнения сетки

    Уточнение mesh Partial Differential Equation Toolbox ориентировано на эллиптические задачи. Для обеспечения точности и плохих условий такие проблемы требуют, чтобы элементы не слишком сильно отклонялись от равновесия. Таким образом, даже при по существу одномерных функциях решения, таких как граничные слои, метод уточнения должен гарантировать треугольники разумной формы.

    Когда элемент доработан, новые узлы появляются на его средних сторонах, и если соседний треугольник не уточнен подобным образом, это, как говорят, имеет висячие узлы. Окончательная триангуляция должна не иметь висящих узлов, и они удаляются путем разделения соседних треугольников. Чтобы избежать дальнейшего ухудшения качества треугольника в последующих поколениях, схема «самого длинного ребра бисекции» используется в [3], в котором самая длинная сторона треугольника всегда разделена, всякий раз, когда любая из сторон имеет висячие узлы. Это гарантирует, что ни один угол никогда не будет меньше половины наименьшего угла исходной триангуляции.

    Существует два критерия выбора. Один, pdeadworst, уточняет все элементы со значением индикатора ошибки, больше половины худшего из любого элемента. Другой, pdeadgsc, уточняет все элементы со значением индикатора, превышающим заданный безразмерный допуск. Сравнение с допуском правильно масштабируется относительно области, размера решения и так далее.

    Критерий завершения уточнения сетки

    Для гладких решений равнораспределение ошибок может быть достигнуто pdeadgsc выбор, если максимальное количество элементов достаточно велико. pdeadworst адаптация прекращается только тогда, когда превышено максимальное количество элементов или достигнут предел итерации. Этот режим является естественным, когда решение показывает особенности. Индикатор ошибки элементов рядом с особенностью может никогда не исчезнуть, независимо от размера элемента, делая равнораспределение невозможным.

    Ссылки

    [1] Джонсон, С. Численное решение дифференциальных уравнений с частными производными методом конечного элемента. Лунд, Швеция: Studentlitteratur, 1987.

    [2] Johnson, C. and K. Eriksson. Адаптивные методы конечных элементов для параболических задач I: задача линейной модели. SIAM J. Numer. Anal, 28, (1991), pp. 43-77.

    [3] Розенберг, И. Г., и Ф. Штенгер. Нижняя граница углов треугольников, построенных путем срезания самой длинной стороны. Математика расчетов. Том 29, Номер 10, 1975, стр. 390-395.

    Представлено до R2006a
    Для просмотра документации необходимо авторизоваться на сайте