exponenta event banner

assembleFEMatrices

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

Синтаксис

FEM = assembleFEMatrices(model)
FEM = assembleFEMatrices(model,bcmethod)

Описание

пример

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]

Создайте модель 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]

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

свернуть все

Объект модели, заданный как объект 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', то полями является K, A, F, Q, G, H, R и M.

  • Если значением является 'nullspace', то полями является Kc, Fc, 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, Fc, 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