2015-12-16 8 views
1

Я настраиваю и объединяю домен, используя набор инструментов PDE Matlab. Вдоль границы есть ли какая-нибудь длина каждого элемента сетки? И поток в нормальном направлении? (БК являются Дирихле)Matlab: панель инструментов PDE, получить длину каждого элемента на границе

Example mesh

Edit:

См пример кода

RMax = 20; 
RL = 1; 
RU = 0.5; 
HN = 5; 
HL = 2; 
HTT = 3; 
HU = 1.5; 
VL = -150; 
p = [RL,0;RL,HN;0,HN+HL;0,HN+HL+HTT;RU,HN+HL+HTT+HU;RMax,HN+HL+HTT+HU;RMax,0]; 

t = [1;1;0;1;1;0;0]; 
v = [VL;VL;0;0;0;0;0]; 

dx = 0.5; 
dy = 0.5; 

bc = cell(size(t)); 

for i = 1:length(t) 
    if t(i) == 0 
     bc{i} = {'u', v(i)}; 
    elseif t(i) == 1 
     bc{i} = {'g', v(i), 'q', 1}; 
    else 
     error('Unrecognized boundary condition type.') 
    end 
end 

model = createpde; 

gd = [2; size(p,1); p(:,1) ; p(:,2)]; 
ns = char('domain')'; 
sf = 'domain'; 

g = decsg(gd,sf,ns); 
geometryFromEdges(model,g); 

generateMesh(model, 'Hmax', min([dx,dy])/3, 'MesherVersion','R2013a'); 

for i = 1:size(bc,1) 
    applyBoundaryCondition(model, 'Edge', i, bc{i}{:}); 
end 

u = assempde(model , 'x' , 0 , 0); 

pdemesh(model) 

Edit: 2015-12-17 18:54 GMT

Там находятся 2 балла в e, указанном на 1 и 2 на рисунке ниже. Я хочу знать координату 3, поэтому я знаю, какое направление находится в домене.

Example with points

+0

Это поможет, если вы включили пример код, который вы использовали для сетки своего домена и участком результата – horchler

ответ

2

Вы можете ответить на ваш первый вопрос, используя meshToPet для преобразования в [P,E,T] form:

[p,e,t] = meshToPet(model.Mesh); 
x1 = p(1,e(1,:)); % x-coordinates of first point in each mesh edge 
x2 = p(1,e(2,:)); % x-coordinates of second point in each mesh edge 
y1 = p(2,e(1,:)); % y-coordinates of first point in each mesh edge 
y2 = p(2,e(2,:)); % y-coordinates of second point in each mesh edge 

% Plot first points of mesh edge 
plot(x1,y1,'b.-',x1(1),y1(1),'go',x1(end),y1(end),'ro'); 

% Euclidean distance between first and second point in each edge 
d = sqrt((x1-x2).^2+(y1-y2).^2); 

Я предполагаю, что вы просто хотите длины сетчатого края/границы. Вы можете использовать аналогичные методы для получения длин каждого треугольника с использованием матрицы t.

Что касается потока, то есть pdecgrad. Я думаю, что следующее может работать:

... 
c = 'x'; 
u = assempde(model, c, 0, 0); 
[p,e,t] = meshToPet(model.Mesh); 
[cgxu,cgyu] = pdecgrad(p,t,c,u); 
+0

Спасибо. Для потока я ищу нормальный поток u_n = u_x cos (theta) + u_y sin (theta). Однако мне нужно знать третью точку элементов на границе, чтобы получить правильное нормальное направление. Есть ли способ получить это? – user1543042

+0

Я не уверен, что вы подразумеваете под «третьей точкой элементов на границе»? – horchler

 Смежные вопросы

  • Нет связанных вопросов^_^