Monday, October 3, 2022

ParaView数据文件(pvd)的格式与读写

ParaView是一款功能丰富且开源的三维数据可视化工具。用户可以快速构建可视化信息来分析数据,支持 3D 交互、和批处理等功能。同时支持各种类型电脑与集群的数据可视化分析。在科学计算领域尤其是后处理方面,有大量实际的应用。

ParaView支持了大量不同格式的输入文件,有我们常见的CGNS,UNV,NetCDF,VTK,TecPlot等格式,也有分子动力学软件LAMMPS结果等格式。对于有限元、有限体积这类工程仿真计算结果数据,笔者认为通用性和效率最好的是其自家的ParaView Data (pvd)格式,所以也在最近的WelSim版本中支持了pvd格式的结果数据导出。pvd文件本质是多个数据子文件的入口文件,在工程仿真领域常用的附属子文件是pvtu和vtu文件。

vtu文件是存储网格与结果数据的主要文件,支持ASCII和二进制的方式。这里的u表示是unstructured的非结构网格。WelSim几年前就已经支持了vtu格式的结果导出功能。在vtu文件格式基础上,VTK提供了基于并行机制pvtu格式,对于并行状态下的文件读写,利用多核机制提高文件处理效率。这个功能对于大型仿真项目是非常有意义的。所以,笔者认为目前通用性与效率最好的结果文件解决方案是pvd+pvtu+vtu的方式。WelSim也在最新的版本中支持了pvd结果数据的导出,对于复杂的瞬态分析结果,用户可以方便快捷地将结果导出到ParaView进行后续的分析与报告生成。数据格式pvd, pvtu, vtu三者之间的关系如图所示:

ParaView数据文件格式

ParaView数据文件(pvd)是建立在VTK体系之上的一个xml文件。其中,最主要是定义了每个子文件的时间,可用于在后处理中正确显示一个结果的时间。这点对于瞬态分析结果是非常有必要的。

每个属性的定义如下:

Type: 类型为Collection, 表示此文件还含有一组数据文件。

Version:版本,目前默认0.1。

Byte_order: 对于二进制存储形式,需要设置“BigEndian”或“LittleEndian”。具体取决于写入此文件的平台的字节顺序。大多数商品笔记本电脑和台式机使用小端字节序;旧的集群和超级计算机可能使用大端。

Compressor: 可选项。设置压缩方式,如“vtkZLibDataCompressor”。

Timestep: 浮点值。用于瞬态数据集的时间点。

Group: 可选。列出了创建此数据集的源、阅读器或过滤器的唯一分配标识符。

Part: 当前数据集这部分的标识号。是一个大于或等于 0 的整数值。

File: 此数据集中的子文件名。相对路径。

如图所示,下图是由WELSIM生成的pvd文件。包含了一个瞬态分析结果中的9个时间步。

pvtu文件是基于vtu文件的一个并行读写的拓展。当只有一个节点进行文件读写时,pvtu只会含有一个vtu文件。当有多个节点进行写入文件时,会有多个vtu文件生成,每个vtu文件中的节点与单元信息都不相同。将所有vtu文件的网格信息整合起来就是完整的分析场域。pvtu会定义一些头文件信息,比如节点,单元,结果信息。而详细的数据还是会存储在vtu中。

如图所示,下图是由WELSIM生成的pvtu文件。

vtu是数据存储的核心文件,包含节点,单元,结果数值的全部信息。可以是以二进制存储,以节省读写资源。也可以是ASCII存储,便于使用者阅读数据内容。下图是由WELSIM生成的二进制vtu文件。

WELSIM导出结果文件

在WELSIM导出pvd文件是很容易的。只需要在计算完成后。选择 Answer节点,点击右键,会显示“导出全部结果选项“。

选择Export All Results后,会提示输入文件名,同时可以选择导出格式为ASCII还是二进制格式。

之后就能看到所生成的结果文件了。

总结

ParaView数据格式pvd是一个通用性很好的网格与结果文件格式。在VTK和ParaView开源社区的支持下,也逐渐地被科学计算与工程仿真人员接受并大量使用。WelSim会保持对pvd结果文件导出功能的维护与增强。

WelSim不隶属于ParaView,VTK。和ParaView,VTK的开发者没有直接关系。这里引用ParaView,VTK仅用作技术博客文章与软件使用的参考。

Thursday, September 8, 2022

使用WelSim生成FrontISTR网格与输入文件

 FrontISTR是一款知名的免费且开源的有限元分析计算软件。从2005年日本文部省资助此项目开始,至今已经有17年的开发维护历史。

FrontISTR有着丰富的结构与热分析求解功能,如常见的结构接触问题,壳梁等结构单元,非线性材料本构如超弹,塑性,粘弹等都已经很好的支持。对于热分析也支持非线性的求解。相比较其他以结构计算为主的开源有限元软件,FrontISTR最大的优点对大型计算机集群计算支持。开发者在提供了源代码的同时,也提供了编译好的Linux和Windows版本,方便用户使用。软件遵循MIT开源协议,对于商业二次开发也是非常的友好。

笔者多年前在朋友的推荐下就开始关注FrontISTR,发现其功能强劲且计算结果可靠。对于工程计算人员友好,不需要软件开发工作。虽然近几年的开发相对缓慢,但是程序的维护工作一直没有停止,是值得使用和学习的一套结构有限元程序。

尽管FrontISTR有着很好的实用性,但对于复杂几何模型,和其他许多开源求解器一样,需要前处理器来生成网格和输入文件。由于FrontISTR特有的网格与命令格式,复杂模型的输入文件则需要用专门的软件来实现。FrontISTR官方提供了自带的免费前处理工具REVOCAP PrePost,知名的开源CAD软件FreeCAD也提供了对FrontISTR的插件支持。此外,WELSIM对FrontISTR也有很好的支持,利用WELSIM高效的前处理GUI,使用者可以很快地生成计算所需要的复杂输入文件,并直接用于FrontISTR的计算。

在WELSIM的实际使用中,只需要在网格划分完毕,施加材料,边界条件后。从工具栏选择导出FrontISTR输入文件命令,即可得到需要的网格与输入文件。

此时,在指定的文件夹内,会生成三个输入文件。这和FrontISTR的常规输入格式一致,可以直接用于FrontISTR程序的求解计算。同时,使用者也可以在这套文件基础上做修改,进行其他的分析计算。

其中hecmw_ctrl.dat文件给出的控制文件和输入输出文件定义。

用户也可以只使用生成的网格文件,配合自定义控制文件,进行自定义程度更高的仿真计算。网格文件中不仅有节点和单元信息,同时定义了单元组,方便用户赋予几何体不同的材料属性。支持节点组和表面组功能,方便用户施加边界条件和接触对。

由于WELSIM的易用性,生成用于FrontISTR计算的复杂模型变得简单快捷。

WELSIM不隶属于FrontISTR, REVOCAP, FreeCAD。和FrontISTR, REVOCAP, FreeCAD 的开发者没有直接关系。这里引用FrontISTR, REVOCAP, FreeCAD 仅用作技术博客文章与软件使用的参考。

Sunday, August 21, 2022

使用WELSIM生成MFEM初始网格文件

 最近几年比较活跃的开源有限元求解器要数MFEM (mfem.org)了。此开源包虽然定位于轻量级可扩展的C++程序求解库,但提供了高阶有限元空间,支持混合单元、非连续伽辽金单元、等几何分析方法等等。尤其在高性能计算上有巨大优势,不仅支持消息传递机制并行(MPI)和共享内存并行(OpenMP),同时对GPU并行计算也有很好的支持。自带的后处理显示GLVis程序可以方便读取显示结果文件。BSD协议对于开发者也是极为友好。最近MFEM支持了Python编程,对各种类型的科研人员显得更加友好。

笔者10多年前就开始关注MFEM这个开源包,当时只能进行一些简单的电磁场计算。随着时间的发展,功能越来越稳定,支持的线性求解器也越来越丰富。如hypre和PETSc,特征值求解器SLEPc,各种并行的迭代求解器Ginkgo都已很好支持。支持众多不同类型的单元和网格自适应功能。程序也提供了大量的实例,可以帮助使用者快速理解并运用此程序。

和很多偏微分方程求解器一样,MFEM需要用户提供网格文件,初始网格文件是不可或缺的输入文件。MFEM的方便之处在于,用户可以选择使用简单粗糙的初始网格,通过求解中的网格再划分功能,可以在计算中生成更加优化的网格。MFEM的网格格式清晰易懂,包含了dimension, elements, nodes, boundary 等信息块。其官网提供了详细的网格格式注解。

尽管MFEM有着众多优异的特性,并且网格文件格式清晰易懂。但对于复杂几何模型,很难通过手动编写完成。目前社区也没有一个款好用的初始网格生成工具,这也一定程度上限制了其在复杂几何模型上的应用。WELSIM不仅具有简单好用的前端界面,同时支持几何到网格的生成,并导出各种格式的网格文件。用户可以快速获得复杂模型的网格,并直接用于MFEM的计算求解。只需要在WELSIM中选择输出网格文件为MFEM格式即可。

在很多科学计算或求解偏微分过程中,网格文件只含有节点和单元信息是不够的。我们还需要提供边界条件所选择的边界网格信息。WELSIM也提供了很好的解决方案,用户只需要在GUI中将分析类型设置为电磁场(Electromagnetics),添加一些边界条件如电压等,同时选择好对应的几何模型边界。选择导出输入文件(Export Input Scripts)。

此时就会生成多个求解器相关的文件,其中网格文件中不仅含有节点和单元信息,还有边界条件中所需要的边界单元信息。

通过这种方式,用户可以快速生成用于MFEM求解器的复杂网格文件,从而进行更为复杂的仿真研究,或者更贴近实际工程应用的计算。

目前WelSim支持自动化生成Tet4/10和Tri3/6网格。

注:WELSIM不隶属于MFEM,与MFEM开发团队没有直接关联。这里引用“MFEM”仅用作技术博客文章与软件使用的参考。

Thursday, August 11, 2022

曲线拟合的核心计算方法与CurveFitter的更新

 随着大数据技术与计算科学的发展,数据挖掘与分析工具发挥着越来越重要的工作。对于常见的二维曲线和三维曲面数据,通过给定的曲线/曲面方程和参数,可以将复杂的数据用精简抽象的函数表达出来,迅速且正确得出相关重要信息。目前曲线拟合已经大量应用于工程与科学研究,涉及社会学,医学,工学,生物学等各个领域。

WELSIM早在2年前就发布了免费的CurveFitter工具软件,获得了很多好评与热度。最早的CurveFitter版本是为了计算结构力学中超弹材料的测试数据-曲线拟合,以及磁性材料中损耗的数据-曲线拟合而开发。之后按用户的要求添加了许多常用曲线,如多项式,幂函数,指数函数等等。这些曲线的大多都是非线性的,只有通过计算机才能快速的准确的得到相应参数。

最小二乘法(Least Squares)

在计算机求解曲线拟合时,最常用的方法是最小二乘法。这种计算方法广泛应用于曲线拟合以及优化计算中。算法的核心是在给定的数据区间内找到泛函的全局最小值。通过构建雅克比矩阵,以及每个步长下的线性化,获得以参数为自变量的线性方程组,求解收敛后得到我们需要的参数值。

对于求解非线性问题的通用方法是用线性化方法将其转化为一系列假设并求解。在每次迭代中,假设被求解来决定正确的步长。为了更快更准确地收敛,步长的控制尤为重要。非线性优化算法(又称最小化方法)主要可以分为两类。1. 信任区域法(Trust Region)。2. 线性搜索法(Line Search)。这两种方法有很多地方相似。信任区域法先选择一个步长,再决定步长方向。而线性搜索法相反,先选择一个方向,再决定步长。通常对于计算量不大的曲线拟合问题,信任区域法是一个更好的选择。

Levenberg-Marquardt算法

Levenberg-Marquardt算法(以下简称LM法)是求解非线性最小二乘法的最常用的方法。LM算法是在 1960 年代初开发的,属于信任区域法,用于解决非线性最小二乘问题。LM算法结合了两种数值最小化算法:梯度下降法(Gradient Descent)和高斯-牛顿法(Gauss-Newton)。在梯度下降法中,通过更新最速下降方向的参数来减小平方误差之和。在高斯-牛顿法中,通过假设最小误差函数在参数中是局部二次的来减小平方误差的总和,并且找到这个二次方的最小值。LM方法当参数远离其最佳值时,像是梯度下降法,当参数接近其最优值时,更像高斯-牛顿法。

除了LM法,狗腿法(Dogleg)也是一种常用计算信任区域优化问题的方法。和LM不同的是,狗腿法计算两个关于步长的向量。狗腿法的优点是不需要从头计算,且信任区域半径小。狗腿法一般只能用直接法(分解因式法)求解线性方程组Ax=b。

CurveFitter最近更新

最近,WELSIM开发的免费软件CurveFitter进行了很多升级。其中包含:

1. 支持多核并行计算。对于大量测试数据,可以迅速得到曲线参数。

2. 支持用户输入求解器参数,如最大迭代次数,函数收敛公差值等。目前,前端支持的求解控制参数有:

最大迭代次数:求解器最大的迭代次数,超过此数值,判定不收敛。默认为100。

函数阈值:用于判断目标函数值变化的临界值。小于此值时判定收敛。默认为1e-9。

梯度阈值:用于判断最大范数的临界值。默认为1e-10。

参数阈值:用于判断步长参数的临界值。默认为1e-8。

3. 新增 1–6阶的Schulz-Flory函数。

Schulz-Flory函数已经广泛应用于描述各种复杂材料的聚合与结晶过程。的控制方程如下:

可以看出此方程具有高度非线性的特征,对于曲线拟合算法有着很高的要求。

4. 大量的软件优化与增强。

目前CurveFitter已经支持多种非线性曲线拟合,随着使用者的需求,将来会添加更多曲线仿真。目前可以从WELSIM的官网下载并免费使用。

Friday, July 29, 2022

WelSim开源了官方网站代码

当今所有软件产品都已经离不开开源软件与社区,很多大型软件与科技公司也都是开源软件的积极贡献者。WelSim一直是开源社区的支持者,尤其对于那些友好的开源协议,如MIT,BSD,LGPL等等,WelSim使用了一些开源代码来打造产品。可以说WelSim产品的开发和各种开源项目紧密相关,为了回馈开源社区,最近开源了全部的官方网站代码(welsim.com),本次公开的是WelSim第一个完整的开源代码项目。相信有很多个人和组织也会从本次的开源项目中受益。

WelSim网站从2017年上线至今有5年多时间,网站运行稳定,设计符合产品的景愿与形象,展示了产品同时,也在网站上发表了很多工程仿真与科学计算的技术文章。最近,网站系统被重新构架,将动态网站转为纯静态网站,并做了大量优化与迁移,同时开源了更新后的网站代码。

虽然动态网站在交互性和功能性上有巨大优势,但是对于中小企业或者展示型网站,静态网站完全可以满足需求,而且静态网站还有很多优点。目前WelSim的网站系统有如下优点:

1. 纯静态网站,易于部署,同时运维成本极低。适合中小企业和个人。

2. SEO友好,网站内容可以被各大搜索引擎快速发现,无需配置额外的缓存硬件或服务。

3. 页面设计精美大气,层次分明,布局合理。适合展示各种类型的产品与项目。

4. 手机访问友好(这点非常重要)。

5. 支持博客和新闻系统,且易于维护。

WelSim网站源码会随着仿真产品的发展,不断更新迭代。欢迎对网站开发和仿真技术感兴趣的朋友关注本开源库。也欢迎您发现本开源库中的问题,提交修复和增强代码。

目前welsim.com的开源库发布在github上。(https://github.com/WelSimLLC/welsim.github.io)

随着生态与产品的发展,WelSim今后可能还会继续开源一些高质量项目,为仿真和开源社区做贡献。