exponenta event banner

adaptmesh

Создание адаптивной 2-D сетки и решение PDE

    На этой странице описывается существующий рабочий процесс. Новые возможности могут быть несовместимы с устаревшим рабочим процессом. В рекомендуемом рабочем процессе см. раздел generateMesh для создания сетки и solvepde для решения PDE.

    Описание

    пример

    [u,p,e,t] = adaptmesh(g,b,c,a,f) генерирует адаптивный [p,e,t] сетка и возвращает решение u для овальной 2-й проблемы PDE

    −∇⋅ (c∇u) + au = f

    для (x, y ) ∊ Λ или проблемы PDE эллиптической системы

    −∇⋅ (c⊗∇u) + au = f

    с геометрией задачи и граничными условиями, заданными g и b. Сетка описывается 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) выполняет адаптивное сетчатое поколение и решение PDE для овальных 2-х проблем PDE, используя один или несколько Name,Value аргументы пары.

    Примеры

    свернуть все

    Решите уравнение Лапласа над сектором окружности с граничными условиями Дирихле u = cos (2/3atan2 (y, x)) вдоль дуги и u = 0 вдоль прямых и сравните полученное решение с точным решением. Установите параметры так, чтобыadaptmesh корректирует треугольники с использованием критерия наихудшей ошибки до тех пор, пока не получит сетку по меньшей мере с 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
    

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

    pdemesh(p,e,t)

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

    Проверьте необходимое количество уточнений с помощью однородной треугольной сетки.

    [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
    

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

    pdemesh(p,e,t)

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

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

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

    свернуть все

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

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

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

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

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

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

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

    −∇⋅ (c∇u) + au = f

    или в системе ПДЭ

    −∇⋅ (c⊗∇u) + au = f

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

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

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

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

    −∇⋅ (c∇u) + au = f

    или в системе ПДЭ

    −∇⋅ (c⊗∇u) + au = f

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

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

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

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

    −∇⋅ (c∇u) + au = f

    или в системе ПДЭ

    −∇⋅ (c⊗∇u) + 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' и сетку, заданную [p,e,t] тройки. По умолчанию функция использует сетку, созданную initmesh функция.

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

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

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

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

    • cc, aa, и ff - текущие коэффициенты для задачи PDE, расширенные до средних точек треугольника.

    • u является текущим решением.

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

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

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

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

    • pdeadgsc выбирает треугольники с использованием критерия относительного допуска.

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

    Параметр функции для метода выбора треугольника, определяемый как разделенная запятыми пара, состоящая из 'Par' и число от 0 до 1. pdeadworst метод выбора треугольника использует его в качестве wlevel аргумент. 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. p норма вектора v является sum(abs(v)^p)^(1/p). Функция передает этот аргумент pdenonlin, которая использует его в качестве первоначального предположения в своем 'Norm' аргумент.

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

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

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

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

    свернуть все

    PDE-решение, возвращенное в виде вектора.

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

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

    Точки сетки, возвращаемые как 2-по-Np матрица. Np - количество точек (узлов) в сетке. Колонка k из p состоит из x-координаты точки k в p(1,k) и координата точки по оси Y k в p(2,k). Дополнительные сведения см. в разделе Данные сетки как [p, e, t] Тройки.

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

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

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

    Алгоритмы

    свернуть все

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

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

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

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

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

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

    Функция индикатора ошибки, используемая в программном обеспечении, представляет собой элементарную оценку вклада, основанную на [1] и [2]. Для уравнения Пуассона -Δu = f на, следующая оценка ошибки для КЭМ-решения uh сохраняется в L2-norm ‖:

    (u uh) ≤α‖hf‖+βDh (uh)

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

    Dh (v) = (∑τ∈E1hτ2[∂v∂nτ]2) 1/2

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

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

    - ∇ · (c∇u) + au = f(1)

    является

    E (K) = α h (f−au) ‖K (12 ∑τ ∈∂ Khτ2 (nτ\· c∇uh) 2) 1/2

    где nstart- единичная нормаль кромки,, а раскосый член - скачок потока через кромку элемента. Норму L2 вычисляют по элементу K. pdejmps функция вычисляет этот индикатор ошибки.

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

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

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

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

    Критерии окончания уточнения сетки

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

    Ссылки

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

    [2] Джонсон, К. и К. Эрикссон. Адаптивные методы конечных элементов для параболических задач I: задача линейной модели. SIAM J. Numer. Анал, 28, (1991), стр. 43-77.

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

    Представлен до R2006a