OptFEM2DP1 Toolbox  V1.2b3
Matlab/Octave Optimized P1-Lagrange Finite Element Method in 2D
 All Files Functions Pages
GetMeshOpt.m
Go to the documentation of this file.
1 function Mesh=GetMeshOpt(cFileName)
2 % function Mesh=GetMesh(cFileName)
3 % Initialization of the Mesh structure from a FreeFEM++ mesh file -
4 % Optimized version
5 %
6 %
7 % Parameters:
8 % cFileName: FreeFEM++ mesh file name (string)
9 %
10 % Return values:
11 % Mesh: mesh structure
12 %
13 % Generated fields of Mesh:
14 % q: Array of vertices coordinates, `2\times\nq` array. <br/>
15 % `{\q}(\il,j)` is the
16 % `\il`-th coordinate of the `j`-th vertex, `\il\in\{1,2\}` and
17 % `j\in\ENS{1}{\nq}`
18 % me: Connectivity array, `3\times\nme` array. <br/>
19 % `\me(\jl,k)` is the storage index of the
20 % `\jl`-th vertex of the `k`-th triangle in the array `\q` of vertices coordinates, `\jl\in\{1,2,3\}` and
21 % `k\in{\ENS{1}{\nme}}`.
22 % ql: Array of vertices labels, `1\times\nq` array.
23 % mel: Array of elements labels, `1\times\nme` array.
24 % be: Connectivity array for boundary edges, `2\times\nbe` array.<br/>
25 % `\be(\il,l)` is the storage index of the
26 % `\il`-th vertex of the `l`-th edge in the array `\q` of vertices coordinates, `\il\in\{1,2\}` and
27 % `l\in{\ENS{1}{\nbe}}`.
28 % bel: Array of boundary edges labels, `1\times\nbe` array.
29 % nq: total number of vertices, also denoted by `\nq`
30 % nme: total number of elements, also denoted by `\nme`
31 % nbe: total number of boundary edges, also denoted by `\nbe`
32 % areas: Array of areas, `1\times\nme` array. areas(k) is the area of the `k`-th triangle.
33 % lbe: Array of edges lengths, `1\times\nbe` array. `\lbe(j)` is the length of the `j`-th edge.
34 %
35 % See also
36 % #ComputeAreaOpt, #EdgeLength
37 % Example:
38 % @verbatim
39 % Th=GetMeshOpt('disk.msh')
40 % @endverbatim
41 % Copyright:
42 % See \ref license
43 
44 % Example:
45 % @verbatim
46 % Th=GetMeshOpt('carre.msh')
47 % @endverbatim
48 % @author François Cuvelier
49 %
50 
51  [fid,message]=fopen(cFileName,'r');
52  if ( fid == -1 )
53  error([message,' : ',cFileName]);
54  end
55  if isOctave()
56  [n]=fscanf(fid,'%d %d %d',3);
57 
58  R=fscanf(fid,'%f %f %d',[3,n(1)]);
59  q=R([1 2],:);
60  ql=R(3,:);
61  R=fscanf(fid,'%d %d %d %d',[4,n(2)]);
62 
63  me=R([1:3],:);
64  mel=R(4,:);
65  R=fscanf(fid,'%d %d %d',[3,n(3)]);
66 
67  be=R([1 2],:);
68  bel=R(3,:);
69  else % Matlab
70  n=textscan(fid,'%d %d %d',1); % n(1) -> number of vertices
71  % n(2) -> number of triangles
72  % n(3) -> number of boundary edges
73 
74  R=textscan(fid,'%f %f %d',n{1});
75  q=[R{1},R{2}]';
76  ql=R{3}';
77  R=textscan(fid,'%d %d %d %d',n{2});
78  me=[R{1},R{2},R{3}]';
79  mel=R{4}';
80 
81  R=textscan(fid,'%d %d %d',n{3});
82  be=[R{1},R{2}]';
83  bel=R{3}';
84  end
85  fclose(fid);
86 
87  Mesh=struct('q',q,'me',double(me),'ql',ql,'mel',double(mel), ...
88  'be',double(be),'bel',double(bel), ...
89  'nq',size(q,2), ...
90  'nme',size(me,2), ...
91  'nbe',size(be,2), ...
92  'areas',ComputeAreaOpt(q,me),...
93  'lbe',EdgeLength(be,q));
94