Reading *.msh files (3D) in Matlab.

275 ビュー (過去 30 日間)
Sanwar Ahmad
Sanwar Ahmad 2019 年 10 月 1 日
コメント済み: 廷臣 沈 2023 年 10 月 22 日
I have created this 3D geometry and the mesh in Gmsh, now I need to get the number of nodes, elements, faces from the mesh in Matlab. How can I do that?
I can send you the *.geo and the *.msh files.
Thanks in advance.
Sanwar

採用された回答

ADSW121365
ADSW121365 2020 年 3 月 6 日
If you're using gmsh, you can use its inbuilt exporter to export a .m file to read into MATLAB.
This loads in a structure array called msh.
Assuming a 3D linear tetrahedral mesh:
%Uses pre-created mesh from gmsh
%Run mesh file name without .m:
Single_coil
nodes = msh.POS';
elements = msh.TETS;
groupsID = elements(:,5);
%If you have multiple domains, this will contain domain IDs
% (assuming you haven't checked 'export all elements', else it will be a column of zeros.
elements = elements(:,1:4);
elements =elements';
geom2 = geometryFromMesh(model,nodes,elements,groupsID); %Import to PDE Toolbox
%If you have subdomains, this will identify their geometries even for a coherent mesh:
%In my example, my actual mesh is just a solid 3D box, however by giving the group IDs
% it is able to identify internal cells, faces etc
%% Plotting:
figure(1); pdeplot3D(model,'FaceAlpha',0.5) %Mesh Plot
figure(2); pdegplot(model,'CellLabels','on','FaceAlpha',0.5) %Geometry
figure(3); pdegplot(model,'FaceLabels','on','FaceAlpha',0.5) %Geometry
%% Finding specific elements/nodes:
%Given this setup, the labels in figures 2 and 3 will allow you to identify faces,
%cells or areas using the usual functions mentioned above.
C_e = findElements(model.Mesh,'region','cell',1); %Coil
C_n = findNodes(model.Mesh,'region','cell',1);
  12 件のコメント
Fei Fan
Fei Fan 2023 年 2 月 19 日
Hi, my msh array has only POS element , no TETS elements. But there is an extra msh.TRIANGLES. Am I using gmsh by mistake?
廷臣 沈
廷臣 沈 2023 年 10 月 22 日
Try ticking this option here. It will appear after you choose to save.

サインインしてコメントする。

その他の回答 (1 件)

Sahithi Kanumarlapudi
Sahithi Kanumarlapudi 2019 年 11 月 5 日
findElements and findNodes can be used to calculate the number of elements and nodes in a mesh respectievely.
You can find the documentation for both the functions in the following links
  3 件のコメント
Harshit Ks
Harshit Ks 2020 年 9 月 23 日
@Sanwar Ahmad
Hi, I am stuck on the same problem as in your original question.
Can you share the codes to read .msh files?
Thanks.
Sanwar Ahmad
Sanwar Ahmad 2020 年 9 月 24 日
@Harshit Ks, follow the link and download gmsh_size_read.m and any related .m files. You may have to change it based on the Gmsh version you are using, that's what I did.
Have fun.

サインインしてコメントする。

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by