applyBoundaryCondition

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

Описание

пример

applyBoundaryCondition(model,'dirichlet',RegionType,RegionID,Name,Value) добавляет граничное условие Дирихле к model. Граничное условие применяется к граничным областям типа RegionType с идентификационными номерами в RegionID, и с аргументами rHU, 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

Figure contains an axes object. The axes object 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);

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

Figure contains an axes object. The axes object 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 object. The axes object contains 3 objects of type quiver, patch, line.

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

Figure contains an axes object. The axes object 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' для 2D геометрии.

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

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

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

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

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

Аргументы name-value

Пример: 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', предположение, что ваш указатель на функцию вычисляет векторизованным способом. Смотрите Векторизацию. Для получения дополнительной информации этой оценки, смотрите Непостоянные Граничные условия.

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

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

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

свернуть все

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

Советы

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

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

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

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