OptFEM3DP1 Toolbox  V1.0
Matlab/Octave Optimized P1-Lagrange Finite Element Method in 3D
 All Files Functions Variables Pages
BuildEdges.m
Go to the documentation of this file.
1 function [e2q,e2t,e2n,e2do,e2be]=BuildEdges(Th)
2 % e2q (nedx2) Edges to Nodes
3 % e2q(l,il) : indice dans le tableau Th.q du sommet il de l'arete l
4 % e2t (nedx2) Edges to Triangles
5 % e2t(l,1) : indice dans le tableau Th.me du 1er triangle adjacent
6 % a l'arete l
7 % e2t(l,2) : indice dans le tableau Th.me du 2eme triangle adjacent
8 % a l'arete l si arete interne sinon 0
9 % e2n (nedx2) : Edges to local number
10 % e2n(l,1) : numero local de l'arete dans le 1er triangle (voir e2t)
11 % e2n(l,2) : numero local de l'arete dans le 2eme triangle (voir e2t)
12 % s'il existe. 0 sinon.
13 % e2do (nedx1)
14 % e2do(l) : +1 si l'arete est dans le sens direct pour le 1er triangle (voir e2t)
15 % -1 sinon
16 % e2be (nbex4) : nbe number of boundary edges
17 % e2be(l,1) : numero de l'arete du bord
18 % e2be(l,2) : +1 si l'arete est dans le "bon" sens (sens de Th.be)
19 % -1 sinon
20 % e2be(l,3) : label du bord
21 % e2be(l,4) : permet de reconstruire le tableau Th.be
22 % I=find(e2be(:,2)~=1);
23 % K=e2be(:,4);
24 % be=e2q(e2be(:,1),:);
25 % be(I,:)=fliplr(be(I,:));
26 % be(K,:)=be;
27 % be'- Th.be;
28 % be' <=> Correspond a Th.be
29 % Copyright:
30 % See \ref license
31 NumLocEdges=[ 1 2 ;2 3; 3 1]; % Numerotation locale des aretes
32  %
33 %NumLocEdges=[ 2 3 ;3 1; 1 2];
34 
35 GlobalListEdges=[reshape(Th.me(NumLocEdges(:,1),:),3*Th.nme,1),reshape(Th.me(NumLocEdges(:,2),:),3*Th.nme,1)];
36 
37 Edges2Elements=ones(3,1)*[1:Th.nme];
38 Edges2Elements=Edges2Elements(:);
39 
40 Edges2LocalNum=[1; 2 ;3]*ones(1,Th.nme);
41 Edges2LocalNum=Edges2LocalNum(:);
42 
43 [GlobalListEdgesSort,IS]=sort(GlobalListEdges,2);
44 PermutEdges=IS(:,2)-IS(:,1); % Contient 1 si arete dans le sens direct pour le triangle considéré
45  % Contient -1 sinon
46 
47 [e2q,IG,IE]=unique(GlobalListEdgesSort,'rows','first');
48 e2t=Edges2Elements(IG,:);
49 e2n=Edges2LocalNum(IG,:);
50 e2do=PermutEdges(IG); %
51 
52 [e2ql,IGl,IEf]=unique(GlobalListEdgesSort,'rows','last');
53 e2tl=Edges2Elements(IGl,:);
54 e2nl=Edges2LocalNum(IGl,:);
55 Id=find(IG==IGl);
56 e2tl(Id);
57 e2nl(Id);
58 e2t=[e2t e2tl];
59 e2n=[e2n e2nl];
60 
61 if nargout==5
62  I=find(e2t(:,2)==0);
63  %e2q(I,:); % Aretes du bord
64  % Ne marche pas !
65  %BE=Th.be;
66  %[BE1,J]=sort(BE,1); %
67  %[BE2,K]=sort(BE1,2);
68  BE=Th.be';
69  [BE1,J1]=sort(BE,2); % BE(l,J1(l,:)) == BE1(l,:)
70  [BE2,J2]=sortrows(BE1,[1 2]); % BE2 == BE1(J2,:)
71  JJ=J1(J2,2)-J1(J2,1);
72 
73  e2be=[I JJ Th.bel(J2)' J2];
74  %[BE(K,:), e2q(I,:) Th.bel(K)']
75 end