【Matlab函数】提取inp文件中的节点、单元数据并保留集合信息
功能
- 提取hypermesh2020(其他版本也可以)中的节点、单元信息,并保留elem set信息。
- 返回的是一个结构体
输入输出参数
输入:
- inp文件路径,如:'example.inp'、"inp\ex.inp"
输出:
- 一个结构体,包含节点信息、单元信息、单元集合信息、部件名字。
Struct
-- Name
-- Nodes
-- ElemSets
matlab代码
% --------------------------------------------------------------- %
% Loads the inp(generated by HM2020) data to a parts struct array %
% --------------------------------------------------------------- %
function part = loadinp_GeByHm2020(inp)
% inp='SmallLXJ_TETmesh_size2mm-20230704.inp';
% Get and process text from the file
text = fileread(inp); % read all the text
text = strtrim(text); % remove leading and trailing whitespaces
text = strrep(text, ' ', ''); % remove any in-between whitespaces
text = lower(text); % lower the case
text = inpremcom(text); % remove comment lines from inp text data
% get nodes infomation
data =strsplit(text, '*element')';% split char vector at '*element'——>n X 1 的cell array;
% create struct :part
name=strsplit(inp,'.');
part.Name=name{1};
% Extract nodes data
nodes=data{1};
part.Nodes=getnodes(nodes);
% Extract set data
% create a cell array ,contain each elemset struct
ElementSets=cell(size(data,1)-1,1);
numOftet=0;
for i=1:1:size(ElementSets,1)
% a char vector including element define info: setname,elemtype,elem label,connectivity
elemsetInfo=data{i+1};
ElementSets{i}=getelementOFset(elemsetInfo);
numOftet=numOftet+size(ElementSets{i}.Elements,1);
end
part.ElemSets=ElementSets;
%show number of tet elements
disp(['**number of tet =',num2str(numOftet)])
end
function output = inpremcom(text)
% ---------------------------------------- %
% Removes comment lines from inp text data %
% ---------------------------------------- %
text = splitlines(text);% split string at the actual \n ,rather than char \n。
output = {};
j = 1;
for i = 1:1:size(text, 1)
if ~startsWith(text{i}, '**')
output{j, 1} = text{i};
j = j + 1;
end
end
% 文本\n 会转换为实际的换行符
output = strjoin(output, '\n');%将元胞数组中的字符向量联接为一个字符向量。指定\n作为分隔符。
end
function Nodes = getnodes(nodes)
% --------------------------------------------------------------------------- %
% Gets the nodes from the *node data,return a containers.Map var called Nodes %
% --------------------------------------------------------------------------- %
%create a empty Map var
Nodes=containers.Map('KeyType','double','ValueType','any');
% loop *node data
lines = splitlines(nodes);
for i = 1:1:size(lines, 1)
line = lines{i};
if contains(line, '*node')
for j = (i + 1):1:size(lines, 1)
line = lines{j};
if contains(line, '*') || isempty(line)
return
else
data = str2num(line);
% key: node label
% value: 1X1 cell array ,contain coordinates value
Nodes(data(1)) = {data(2:end)};
end
end
end
end
end
function ElemSet = getelementOFset(elemdata)
% --------------------------------------------------------- %
% Gets the elements from the *element data ,return a struct %
% ----------------------------------------------------------%
ElemSet=struct;
%create a empty Map var
Els=containers.Map('KeyType','double','ValueType','any');
lines = splitlines(elemdata);
% read elemsert's name and elemtype
if contains(lines{1},'elset')
line_1=strsplit(lines{1},',');
for i=2:1:size(line_1,2)
tempcell=strsplit(line_1{i},'=');
if strcmp( tempcell{1},'type')
ElemSet.ElemType=tempcell{2};
elseif strcmp(tempcell{1},'elset')
ElemSet.SetName=tempcell{2};
end
end
end
% read element's label and connectivity
for i = 2:1:size(lines, 1)
line = lines{i};
if contains(line, '*') || isempty(line)
break;
else
data = str2num(line);
% key: elem label
% value: 1X1 cell array ,contain elem connectivity
Els(data(1)) = {data(2:end)};
end
end
ElemSet.Elements=Els;
end
【Matlab函数】提取inp文件中的节点、单元数据并保留集合信息的更多相关文章
- C#程序中:如何修改xml文件中的节点(数据)
要想在web等程序中实现动态的数据内容给新(如网页中的Flash),不会更新xml文件中的节点(数据)是远远不够的,今天在这里说一个简单的xml文件的更新,方法比较基础,很适合初学者看的,保证一看就懂 ...
- C#程序中:如何向xml文件中插入节点(数据)
向xml文件中动态的添加节点(数据)是一件很爽的事,可以给你的程序带来很多的方便,比如在web中,如果你的Flash用到了xml文件,这个方法可以让你在后台就轻轻松松的更新你的Flash内容哦!一起研 ...
- MATLAB 在同一个m文件中写多个独立的功能函数
MATLAB 在同一个m文件中写多个独立的功能函数,从而实现在外部可以直接调用这个文件中的某一个函数. 鉴于MATLAB的函数文件的函数名与文件名要一样,就需要有一个统一的接口来涵盖这些功能函数. 例 ...
- C#程序中:如何删除xml文件中的节点、元素。
C#中动态的清理xml文件中的垃圾信息是程序员必会的哦.这就像数据库一样,不会清理数据怎么可以呢?其实xml文件就可以用作一个小的数据库,存储一些简单的信息.所以,用C#程序实现xml文件的增.删.改 ...
- 提取PPT文件中的Vba ProjectStg Compressed Atom。Extract PPT VBA Compress Stream
http://msdn.microsoft.com/en-us/library/cc313106(v=office.12).aspx 微软文档 PartI ********************* ...
- C#如何提取.txt文件中的每个字符串
C#如何提取.txt文件中的每个字符串,并将其存放到一个类中. 将其中的编号 菜名 价格 分别存入不同的数组中. 注:在用ReadLine读取一行信息时为什么读取的中文字符变成了乱码. 20 满意答案 ...
- 另类爬虫:从PDF文件中爬取表格数据
简介 本文将展示一个稍微不一样点的爬虫. 以往我们的爬虫都是从网络上爬取数据,因为网页一般用HTML,CSS,JavaScript代码写成,因此,有大量成熟的技术来爬取网页中的各种数据.这次, ...
- 【译】 AWK教程指南 3计算并打印文件中指定的字段数据
awk 处理数据时,它会自动从数据文件中一次读取一条记录,并会将该记录切分成一个个的字段:程序中可使用 $1, $2,... 直接取得各个字段的内容.这个特色让使用者易于用 awk 编写 reform ...
- matlab之导入txt文件并取其中一列数据
1.我想导入下面这个文件的内容,并且获取这个文件中的两列数据. 2.首先确保Matlab当前所在文件夹为txt文件所在文件夹,然后命令行执行: X = load('2019_03_21_08_59_0 ...
- 从PCD文件中读取点云数据
博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=84 在本小节我们学习如何从PCD文件中读取点云数据. 代码 章例1文件夹中, ...
随机推荐
- 解决编译redis报错zmalloc.h:50:10: fatal error: jemalloc/jemalloc.h: No such file or directory
编译redis时报错:zmalloc.h:50:10: fatal error: jemalloc/jemalloc.h: No such file or directory,执行: # sudo m ...
- Uninstall or delete MariaDB completely for re-installation
I am new to this forum so pse forgive me if I am asking a question which already has been answered. ...
- hibernate错误org.hibernate.AnnotationException: No identifier specified for entity:
实体类继承BaseEntity时报错.解决方法:在属性或者get方法上加@Id@Id@GeneratedValue(strategy=GenerationType.AUTO)@Column(uniqu ...
- Qt/C++音视频开发50-不同ffmpeg版本之间的差异处理
一.前言 ffmpeg的版本众多,从2010年开始计算的项目的话,基本上还在使用的有ffmpeg2/3/4/5/6,最近几年版本彪的比较厉害,直接4/5/6,大版本之间接口有一些变化,特别是一些废弃接 ...
- Qt编写地图综合应用59-经纬度坐标纠偏
一.前言 地图应用中都涉及到一个问题就是坐标纠偏的问题,这个问题的是因为根据地方规则保密性要求不允许地图厂商使用标准的GPS坐标,而是要用国家定义的偏移标准,或者在此基础上再做算法运算,所以这就出现了 ...
- C#中Newtonsoft.Json(Json.NET)的使用
C#中Newtonsoft.Json(Json.NET)的使用. 添加引用: using Newtonsoft.Json; 调用代码: //获取图书列表 List<BookInfo> bo ...
- JVM实战—5.G1垃圾回收器的原理和调优
大纲 1.G1垃圾回收器的工作原理 2.G1分代回收原理-性能为何比传统GC好 3.使用G1垃圾回收器时应如何设置参数 4.如何基于G1垃圾回收器优化性能 5.问题汇总 1.G1垃圾回收器的工作原理 ...
- ConcurrentHashMap源码分析-JDK18
前言 ConcurrentHashMap是一个线程安全的HashMap,主要用于解决HashMap中并发问题. 在ConcurrentHashMap之前,也有线程安全的HashMap,比如HashTa ...
- SpringBoot进阶教程(八十四)spring-retry
在日常的一些场景中, 很多需要进行重试的操作.而spring-retry是spring提供的一个基于spring的重试框架,某些场景需要对一些异常情况下的方法进行重试就会用到spring-retry. ...
- ASP 代码示例,可以生成一个8位随机字符串由字母和数字组成
ChatGP回答的: 下面是一个 ASP 代码示例,可以生成一个8位随机字符串由字母和数字组成: ```Function generateRandomString(length) dim chars, ...