applyBoundaryCondition

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

Описание

пример

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) добавляет индивидуума граничное условие для каждого уравнения в системе PDE. Граничное условие применяется к краевым областям типа RegionType с идентификационными номерами в RegionID, и со значениями, заданными в Name,Value пар. Для смешанных граничных условий можно использовать Name,Value пары из обоих граничных условий Дирихле и Неймана по мере необходимости.

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

Примеры

свернуть все

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

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

Figure contains an axes. The axes contains 5 objects of type line, text.

Примените нулевое условие Дирихле к ребру 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);

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

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

Figure contains an axes. The axes contains 5 objects of type line, text.

Примените следующие граничные условия Неймана к ребру 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)

Figure contains an axes. The axes contains 3 objects of type quiver, patch, line.

Установите нулевые условия Дирихле на узких гранях, которые помечены с 1 по 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)

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

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

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

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

Figure contains an axes. The axes contains 3 objects of type quiver, patch, line.

Установите нулевые условия Дирихле на гранях 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' для 2-D геометрии.

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

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

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

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

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

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

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

Условие Дирихле h*u = r, заданный как вектор с N элементами или указателем на функцию. N - количество PDE в системе. Синтаксис формы указателя на функцию r, см. «Неконстантные граничные условия».

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

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

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

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

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

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

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

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

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

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

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

Условия Дирихле, заданные как вектор до N элементов или как указатель на функцию. Если u имеет менее N элементов, тогда вы также должны использовать EquationIndex. The 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', принимая, что указатель на функцию вычисляется векторизированным образом. См. Векторизация. Для получения дополнительной информации об этой оценке см. «Неконстантные граничные условия».

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

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

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

свернуть все

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

Совет

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

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

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

Введенный в R2015a