数字旗手

电气化、自动化、数字化、智能化、智慧化

0%

引子 自适应网格是一项很重要的减小计算量、提高计算效率的方法。 流程 求解步 在求解步时,传入时间步数来判断是否自适应: 1 adaptiveRefine(currentIncrement); 如果时间步数满足要自适应的间隔,那么就开始自适应: 1 2 3 if ((currentIncrement>0) && (currentIncrement%skipRemeshingSteps==0)){ this->refineMesh(currentIncrement); } 这个refineMesh函数会调用init函数参数是非0的情形: 1 init(_currentI
Read more »

引子 本例将使用PRISMS-PF模拟凝固过程中的枝晶生长。因为原先的PRISMS-PF架构中在构建右端项时只有接收一步解,而枝晶的浓度场控制方程与相场参量的变化率相关,即需要用到相场的前后两步解,所以需要扩展PRISMS-PF的原先架构,本例也主要是说明怎样对原程序进行扩展。 获得源码 源码在这里 扩展过程 定义要使用解的个数 在parameter.h中新增宏定义numSolution,其决定方程中用到几步解,比如在枝晶生长的模拟中用到两步解,其就等于2,之前的所有模拟中都等于1。 1 #define numSolution 2 这里涉及头文件的包含顺序,放在后面定义的话,会不
Read more »

引子 PRISMS-PF的1.0版本相对于最开始的0.8版本,进行了较大的重构,更加模块化,更加容易扩展。同时引入了更加多的功能,比如施加各种边界条件,引入自适应网格等。但带来的一个问题是:文件数量增多,且互相调用,刚开始很容易在文件跳转之间绕晕,所以需要理清整个文件结构和程序运行脉络。 文件结构 基础头文件 首先是deal.II的各种头文件: 1 include/dealIIheaders.h PDE的无矩阵解法的模板类: 1 include/matrixFreePDE.h 包含各种属性的物理场的模板类: 1 include/fields.h 模型中用到的变量
Read more »

概述 PRISMS是“PRedictive Integrated Structural Materials Science”的缩写,是美国能源部旗下的一个软件创新中心,致力于开发用于多尺度结构材料模拟的开源计算工具。该中心目前已释放出多个开源软件,基于包括相场模型、晶体塑性模型等。这里是对PhaseField的学习。源码在这里。 几点说明: * 最好是从最早的v0.8学起,v0.8是最早公开的代码,程序结构简单,耦合程度低,便于学习。 * PRISMS-PF的版本与其所基于的deal.II版本需要对应,v0.8基于deal.II的v8.2.1,v1.0基于v8.4.1。这是因为deal
Read more »

引子 本例提供了一个框架来应用MatrixFree类,既包括求解非线性偏微分方程过程,同时演示MatrixFree类怎样处理“constraints”以及如何在分布式节点上并行。这个算例显示基于单元的运算在六面体单元的二阶或更高阶插值上要比稀疏矩阵-向量乘法快得多,能达到后者10倍的浮点运算速率。 使用MatrixFree类,可以不用组装一个大型的稀疏矩阵,其运算都是基于单元。这里的并行也充分利用了现代超算机器的架构,分为三个层级: * 不同节点之间使用MPI并行 * 单个节点内使用“动态任务规划”进行线程并行 * 单个核心内使用处理器的向量单元进行显式向量化并行 很多通用有限元包,
Read more »

引子 本文是对曾攀老师的《有限元分析及应用》和王勖成老师的《有限单元法》关于单元刚度矩阵和整体刚度矩阵部分的学习笔记。 刚度矩阵在有限元方法中占有最重要的位置,分析和了解其性质对于我们更深层次地掌握有限元法具有重要的作用。不同的方程对应不同的刚度矩阵,所以,具体刚度矩阵的性质需要针对具体的方程才能下定论。这里只对结构力学的刚度矩阵进行初探,以期对其他方程也能有更深的理解。 单元刚度矩阵的性质 性质1:矩阵元素具有明确物理意义 以一维2节点杆单元为例,其刚度方程为: 分两种情况进行具体讨论: (1)考虑单元左端,即节点1,发生单位位移,而右端,即节点2,固定: 此时: 这说明,$k_{
Read more »

2016-11-16 Update p4est与deal.II的链接注意事项: * p4est安装时需要开启mpi,即configure时加上—enable-mpi选项。 * 链接时增添:1 -DP4EST_DIR=/path/to/installation -DDEAL_II_WITH_P4EST=ON -DDEAL_II_WITH_MPI=ON 简介 在学习deal.II的Step17和18时,需要用到PETSc。 PETSc,全称Portable-Extensible-Toolkit-for-Scientific-Computatio
Read more »

本文来自亓欣波的博客qixinbo.info。 转载请保留上面信息,谢谢! 引子 本例亮点: * 精确寻找某个节点并通过要求提供该节点上的自由度指标来取出该点上的值。 * 使用线程并行,否则只能串行等待上一步完成。线程是计算的最小单元。 在本例中,将不太关心描述使用deal.II的新方法,而是着眼于书写模块化及可扩展的有限元程序的方法。 这主要是为了考虑先进研究软件的大小和灵活性:使用了先进误差估计概念和自适应解的应用通常相当庞大。而大家的共识是这样的:庞大的程序,如果没有分成更小更独立的组件,将会很快消亡,因为甚至作者也会很快忘记程序内部各个部分之间的依赖关系。数据封装,比如面向对
Read more »

引子 本例主要讲解MeshWorker框架和间断Galerkin方法,即DG。 * 用间断Galerkin法离散线性对流方程 * 使用MeshWorker::loop()来组装系统矩阵 本例主要关心的就是间断Galerkin法的循环,这相当复杂,因为必须分辨边界、常规内部边和有悬点的内部边。MeshWorker框架能够对所有的单元和边进行标准循环,它将分辨过程隐藏在了内部。 使用MeshWorker需要手动做两件事:一是针对特定问题写内部积分器,二是从该命名空间中选择类,然后将它们组合起来来解决问题。 要求解的问题是线性对流方程: 边界条件是: 这是入流边界,定义是: 这个方程
Read more »

引子 这个小例子主要演示更高阶的映射。映射的意思是参考单元和真实单元之间的变换,之前的例子中默认使用线性或双线性映射。这里的线性映射不是形函数用线性近似,同时也不是Cn单元的概念,Cn单元代表解的最高阶导数的概念。如果边界是弯曲的话,用线性近似就可能不充分。如果使用分段二次抛物线来近似的话,就说这是二次或Q2近似。如果使用分段三次多项式近似的话,就称为Q3近似。依次类推。 这里是用逼近圆周率来说明映射问题。用两种方法:一种是对半径为1的圆进行三角剖分,然后积分,如果完全是圆,那么它的面积精确为圆周率,但因为是多项式近似,所以肯定不精确,这里展示不同映射下随着网格细化的收敛性。第二种不是计算面积
Read more »