exponenta event banner

applyBoundaryCondition

Добавьте граничное условие в контейнер PDEModel

Синтаксис

applyBoundaryCondition(model,'dirichlet',RegionType,RegionID,Name,Value)
applyBoundaryCondition(model,'neumann',RegionType,RegionID,Name,Value)
applyBoundaryCondition(model,'mixed',RegionType,RegionID,Name,Value)
bc = applyBoundaryCondition(___)

Описание

пример

applyBoundaryCondition(model,'dirichlet',RegionType,RegionID,Name,Value) добавляет граничное условие Дирихле к model. Граничное условие применяется к граничным областям типа RegionType с идентификационными номерами в RegionID, и с аргументами r, h, u, EquationIndex, заданным в парах Name,Value. Для граничных условий Дирихле задайте или оба аргумента r и h или аргумент u. При определении u можно также использовать EquationIndex.

пример

applyBoundaryCondition(model,'neumann',RegionType,RegionID,Name,Value) добавляет Нейманово граничное условие к model. Граничное условие применяется к граничным областям типа RegionType с идентификационными номерами в RegionID, и со значениями g и q, заданный в парах Name,Value.

пример

applyBoundaryCondition(model,'mixed',RegionType,RegionID,Name,Value) добавляет отдельное граничное условие для каждого уравнения в системе УЧП. Граничное условие применяется к граничным областям типа RegionType с идентификационными номерами в RegionID, и со значениями, заданными в парах Name,Value. Для смешанных граничных условий можно использовать пары Name,Value и от Дирихле и от Неймановых граничных условий по мере необходимости.

bc = applyBoundaryCondition(___) возвращает объект граничного условия.

Примеры

свернуть все

Создайте модель PDE и геометрию.

model = createpde(1);
R1 = [3,4,-1,1,1,-1,-.4,-.4,.4,.4]';
g = decsg(R1);
geometryFromEdges(model,g);

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

pdegplot(model,'EdgeLabels','on')
xlim([-1.2,1.2])
axis equal

Примените нуль условие Дирихле на ребро 1.

applyBoundaryCondition(model,'dirichlet','Edge',1,'u',0);

На других ребрах примените условие Дирихле h*u = r, где h = 1 и r = 1.

applyBoundaryCondition(model,'dirichlet','Edge',2:4,'r',1,'h',1);

Создайте модель PDE и геометрию.

model = createpde(2);
R1 = [3,4,-1,1,1,-1,-.4,-.4,.4,.4]';
g = decsg(R1);
geometryFromEdges(model,g);

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

pdegplot(model,'EdgeLabels','on')
xlim([-1.2,1.2])
axis equal

Примените следующие Неймановы граничные условия на ребро 4.

applyBoundaryCondition(model,'neumann','Edge',4,'g',[0;.123],'q',[0;0;0;0]);

Примените оба типа граничных условий к скалярной проблеме. Во-первых, создайте модель PDE и импортируйте простую геометрию блока.

model = createpde;
importGeometry(model,'Block.stl');

Просмотрите метки поверхности.

pdegplot(model,'FaceLabels','on','FaceAlpha',0.5)

Установите нуль условия Дирихле на узких поверхностях, которые маркированы 1 through 4.

applyBoundaryCondition(model,'dirichlet','Face',1:4,'u',0);

Установленные Неймановы граничные условия с противоположным входят в систему, стоит 5 и 6.

applyBoundaryCondition(model,'neumann','Face',5,'g',1);
applyBoundaryCondition(model,'neumann','Face',6,'g',-1);

Решите эллиптический УЧП с этими граничными условиями и постройте результат.

specifyCoefficients(model,'m',0,'d',0,'c',1,'a',0,'f',0);
generateMesh(model);
results = solvepde(model);
u = results.NodalSolution;
pdeplot3D(model,'ColorMapData',u)

Создайте модель PDE и импортируйте простую геометрию блока.

model = createpde(3);
importGeometry(model,'Block.stl');

Просмотрите метки поверхности.

pdegplot(model,'FaceLabels','on','FaceAlpha',0.5)

Установите нуль условия Дирихле на поверхностях 1 и 2.

applyBoundaryCondition(model,'dirichlet','Face',1:2,'u',[0,0,0]);

Установленные Неймановы граничные условия с противоположным входят в систему, стоит 4, 5, и 6.

applyBoundaryCondition(model,'neumann','Face',4:5,'g',[1;1;1]);
applyBoundaryCondition(model,'neumann','Face',6,'g',[-1;-1;-1]);

Для поверхности 3, примените обобщенное Нейманово граничное условие для первого уравнения и граничные условия Дирихле для вторых и третьих уравнений.

h = [0 0 0;0 1 0;0 0 1];
r = [0;3;3];
q = [1 0 0;0 0 0;0 0 0];
g = [10;0;0];
applyBoundaryCondition(model,'mixed','Face',3,'h',h,'r',r,'g',g,'q',q);

Решите эллиптический УЧП с этими граничными условиями и постройте результат.

specifyCoefficients(model,'m',0,'d',0,'c',1,'a',0,'f',[0;0;0]);
generateMesh(model);
results = solvepde(model);
u = results.NodalSolution;
pdeplot3D(model,'ColorMapData',u(:,1))

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

свернуть все

Модель PDE, заданная как объект PDEModel.

Пример: model = createpde

Геометрический тип области, заданный как 'Face' для 3-D геометрии или 'Edge' для 2D геометрии.

Пример: applyBoundaryCondition(model,'dirichlet','Face',3,'u',0)

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

Геометрический ID области, заданный как вектор положительных целых чисел. Найдите идентификаторы области с помощью pdegplot с (3-D) 'FaceLabels' или 'EdgeLabels' (2D) набор значений к 'on'.

Пример: applyBoundaryCondition(model,'dirichlet','Face',3:6,'u',0)

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

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

Пример: applyBoundaryCondition(model,'dirichlet','Face',1:4,'u',0)

Условие Дирихле h*u = r, заданный как вектор с элементами N или указателем на функцию. N является количеством УЧП в системе. Для синтаксиса формы указателя на функцию r смотрите Непостоянные Граничные условия.

Пример: 'r',[0;4;-1]

Типы данных: double | function_handle
Поддержка комплексного числа: Да

Условие Дирихле h*u = r, заданный как N-by-N матрица, вектор с N ^2 элементы или указатель на функцию. N является количеством УЧП в системе. Для синтаксиса формы указателя на функцию h смотрите Непостоянные Граничные условия.

Пример: 'h',[2,1;1,2]

Типы данных: double | function_handle
Поддержка комплексного числа: Да

Обобщенное Нейманово условие n·(c×u) + qu = g, заданный как вектор с элементами N или указателем на функцию. N является количеством УЧП в системе. Для скалярных УЧП обобщенным Неймановым условием является n·(cu) + qu = g. Для синтаксиса формы указателя на функцию g смотрите Непостоянные Граничные условия.

Пример: 'g',[3;2;-1]

Типы данных: double | function_handle
Поддержка комплексного числа: Да

Обобщенное Нейманово условие n·(c×u) + qu = g, заданный как N-by-N матрица, вектор с N элементы ^2 или указатель на функцию. N является количеством УЧП в системе. Для синтаксиса формы указателя на функцию q смотрите Непостоянные Граничные условия.

Пример: 'q',eye(3)

Типы данных: double | function_handle
Поддержка комплексного числа: Да

Дирихле обусловливает, заданный как вектор до элементов N или как указатель на функцию. Если u имеет меньше, чем элементы N, то необходимо также использовать EquationIndex. Аргументы u и EquationIndex должны иметь ту же длину. Если u имеет элементы N, то определение EquationIndex является дополнительным.

Для синтаксиса формы указателя на функцию u смотрите Непостоянные Граничные условия.

Пример: applyBoundaryCondition(model,'dirichlet','Face',[2,4,11],'u',0)

Типы данных: double
Поддержка комплексного числа: Да

Индекс известных компонентов u, заданных как вектор целых чисел с записями от 1 до N. EquationIndex и u должны иметь ту же длину.

При использовании EquationIndex, чтобы задать граничные условия Дирихле для подмножества компонентов, используйте аргумент mixed вместо dirichlet. Остающиеся компоненты удовлетворяют Нейманово граничное условие по умолчанию нулевыми значениями для 'g' и 'q'.

Пример: applyBoundaryCondition(model,'mixed','Face',[2,4,11],'u',[3,-1],'EquationIndex',[2,3])

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

Векторизованная функциональная оценка, заданная как 'on' или 'off'. Эта оценка применяется, когда вы передаете указатель на функцию в качестве аргумента. Чтобы сэкономить время в оценке указателя на функцию, задайте 'on', приняв, что ваш указатель на функцию вычисляет векторизованным способом. Смотрите Векторизацию (MATLAB). Для получения дополнительной информации этой оценки, смотрите Непостоянные Граничные условия.

Пример: applyBoundaryCondition(model,'dirichlet','Face',[2,4,11],'u',@ucalculator,'Vectorized','on')

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

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

свернуть все

Граничное условие, возвращенное как объект BoundaryCondition Properties. Объект model содержит вектор объектов BoundaryCondition. bc является последним элементом этого вектора.

Советы

  • Когда существует несколько присвоений граничного условия на ту же геометрическую область, тулбокс использует последнюю прикладную установку.

  • Чтобы постараться не присваивать граничные условия неправильной области, гарантируйте, что вы используете правильные геометрические идентификаторы области путем графического вывода и визуально осмотра геометрии.

  • Если вы не задаете граничное условие для ребра или поверхности, значением по умолчанию является Нейманово граничное условие с нулевыми значениями для 'g' и 'q'.

Представленный в R2015a