assembleFEMatrices

Соберите матрицы конечного элемента

Описание

пример

FEM = assembleFEMatrices(model) возвращает структурный массив, содержащий матрицы конечного элемента. Атрибуты моделей, такие как коэффициенты, свойства материала, граничные условия, и так далее, не должны зависеть вовремя или решение.

пример

FEM = assembleFEMatrices(model,bcmethod) собирает матрицы конечного элемента и налагает граничные условия с помощью метода, заданного bcmethod.

Примеры

свернуть все

Создайте модель PDE для уравнения Пуассона на L-образной мембране с нулем граничные условия Дирихле.

model = createpde(1);
geometryFromEdges(model,@lshapeg);
specifyCoefficients(model,'m',0,'d',0,'c',1,'a',0,'f',1);
applyBoundaryCondition(model,'edge',1:model.Geometry.NumEdges,'u',0);

Сгенерируйте mesh и получите матрицы конечного элемента по умолчанию для проблемы и mesh.

generateMesh(model,'Hmax',0.2);
FEM = assembleFEMatrices(model)
FEM = struct with fields:
    K: [401x401 double]
    A: [401x401 double]
    F: [401x1 double]
    Q: [401x401 double]
    G: [401x1 double]
    H: [80x401 double]
    R: [80x1 double]
    M: [401x401 double]
    T: [401x401 double]

Создайте модель PDE для уравнения Пуассона на L-образной мембране с нулем граничные условия Дирихле.

model = createpde(1);
geometryFromEdges(model,@lshapeg);
specifyCoefficients(model,'m',0,'d',0,'c',1,'a',0,'f',1);
applyBoundaryCondition(model,'edge',1:model.Geometry.NumEdges,'u',0);

Сгенерируйте mesh и получите nullspace матрицы конечного элемента для проблемы и mesh.

generateMesh(model,'Hmax',0.2);
FEM = assembleFEMatrices(model,'nullspace')
FEM = struct with fields:
    Kc: [321x321 double]
    Fc: [321x1 double]
     B: [401x321 double]
    ud: [401x1 double]
     M: [321x321 double]

Получите решение УЧП.

u = FEM.B*(FEM.Kc\FEM.Fc) + FEM.ud;

Сравните этот результат с решением, данным solvepde. Эти два решения идентичны.

u1 = solvepde(model);
norm(u - u1.NodalSolution)
ans = 0

Соберите промежуточные матрицы конечного элемента для тепловой проблемы.

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

thermalmodel = createpde('thermal','transient');
geometryFromEdges(thermalmodel,@squareg);

Постройте геометрию с метками ребра.

pdegplot(thermalmodel,'EdgeLabels','on')
xlim([-1.1 1.1])
ylim([-1.1 1.1])

Задайте теплопроводность, массовую плотность и удельную теплоемкость материала.

thermalProperties(thermalmodel,'ThermalConductivity',0.2, ...
                               'MassDensity',2.7*10^(-6), ...
                               'SpecificHeat',920); 

Установите граничные и начальные условия.

thermalBC(thermalmodel,'Edge',1:4,'Temperature',100);
thermalIC(thermalmodel,0,'Face',1);

Сгенерируйте mesh и получите матрицы конечного элемента по умолчанию.

generateMesh(thermalmodel);
FEM = assembleFEMatrices(thermalmodel)
FEM = struct with fields:
    K: [1541x1541 double]
    A: [1541x1541 double]
    F: [1541x1 double]
    Q: [1541x1541 double]
    G: [1541x1 double]
    H: [144x1541 double]
    R: [144x1 double]
    M: [1541x1541 double]
    T: [1541x1541 double]

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

свернуть все

Объект модели в виде PDEModel объект, ThermalModel объект или StructuralModel объект.

Пример: model = createpde(1)

Пример: thermalmodel = createpde('thermal','steadystate')

Пример: structuralmodel = createpde('structural','static-solid')

Метод для включения граничных условий в виде 'none', 'nullspace', или 'stiff-spring'. Для получения дополнительной информации см. Алгоритмы.

Пример: FEM = assembleFEMatrices(model,'nullspace')

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

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

свернуть все

Матрицы конечного элемента, возвращенные как структурный массив. Поля в структурном массиве зависят от bcmethod можно следующим образом:

  • Если значением является 'none', затем полями является KAFQGHR, и M.

  • Если значением является 'nullspace', затем полями является KcФК B, ud, и M.

  • Если значением является 'stiff-spring', затем полями является Ks, Fs, и M.

Для получения дополнительной информации см. Алгоритмы.

Советы

  • Большая матрица M является ненулевым, когда модель является зависящей от времени. При помощи этой матрицы можно решить модель с Рейли, ослабляющим. Для примера смотрите Динамику Ослабленного Консольного Луча.

  • Для тепловой модели, m и a коэффициенты являются нулями. Теплопроводность сопоставляет с c коэффициент. Продукт массовой плотности и удельной теплоемкости сопоставляет с d коэффициент. Внутренний источник тепла сопоставляет с f коэффициент.

  • Для структурной модели, a коэффициент является нулем. Модуль Молодежи и отношение Пуассона сопоставляют с c коэффициент. Массовая плотность сопоставляет с m коэффициент. Загрузки тела сопоставляют с f коэффициент. Когда вы задаете модель затухания при помощи Рейли, ослабляющего параметры Alpha и Beta, дискретизированный ослабляющий матричный C вычисляется при помощи большой матрицы M и матрица жесткости K как C = Alpha*M+Beta*K.

Алгоритмы

Полные матрицы конечного элемента и векторы следующие:

  • K матрица жесткости, интеграл c коэффициент против основных функций.

  • M большая матрица, интеграл m или d коэффициент против основных функций.

  • A интеграл a коэффициент против основных функций.

  • F интеграл f коэффициент против основных функций.

  • Q интеграл q граничное условие против основных функций.

  • G интеграл g граничное условие против основных функций.

  • H и R матрицы прибывают непосредственно из условий Дирихле и mesh.

Учитывая эти матрицы, 'nullspace' метод генерирует объединенные матрицы конечного элемента [KcФК B, ud] можно следующим образом. Объединенной матрицей жесткости является для уменьшаемой линейной системы Kc = K + M + Q. Соответствующим объединенным вектором загрузки является Fc = F + G. B матрица охватывает пустой пробел столбцов H (матрица условия Дирихле представление hu = r). R вектор представляет условия Дирихле в Hu = R. ud вектор представляет решения для граничного условия для условий Дирихле.

От 'nullspace' матрицы, можно вычислить решение u как

u = B*(Kc\Fc) + ud.

Примечание

Внутренне, для независимых от времени проблем, solvepde использует 'nullspace' метод, и вычисляет решения с помощью u = B*(Kc\Fc) + ud.

'stiff-spring' метод возвращает матричный Ks и векторный Fs это вместе представляет другой тип объединенных матриц конечного элемента. Приближенное решение u u = Ks\Fs.

По сравнению с 'nullspace' метод, 'stiff-spring' метод генерирует матрицы более быстро, но обычно дает менее точные решения.

Введенный в R2016a