rust的学习笔记

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

0%

引子 本例提供了一个框架来应用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 »

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

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

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

引子 这个例子的亮点:介绍了最简单的Laplace方程的组装矩阵和右端项的一键生成函数。 这个例子来求解仅考虑Neumann边界条件的Laplace问题: 如果有解的话,解必须满足协调条件: 这里考虑计算域是以原点为圆心,半径为1的圆,$f=-2,g=1$是满足协调条件的。 虽然协调条件允许有解,但解仍然是不定的:在方程中仅仅解的导数固定,解可以是任意常数。所以需要施加另外一个条件来固定这个常数。可以有以下可能的方法: * 固定离散后的某个节点值为0或其他固定值。这意味着一个额外的条件$u_h(x_0)=0$。尽管这是通常的做法,但不是一个好方法,因为我们知道Laplace方程的解是在
Read more »

引子 本例将要完成以下目标: * 求解对流方程$\beta \cdot \nabla u = f$ * 使用多线程求解 * 设计一个简单的细化准则 方程离散 对流方程中$\beta$是一个描述对流方向和速度的矢量场,可能与空间位置相关,$f$是源项,$u$是解。这个方程求解的物理过程可以是浓度u在给定流场下的传输,没有扩散过程,但有源。 明显地,在入流侧,上述方程需要在边界上获得补充: 其中,$\Omega_-$代表边界的入流部分,其定义为: 其中,${\mathbf n}({\mathbf x})$是点$x$上的外法线。这种定义方式是非常直观的:因为如果外法线是朝外的,那么在入
Read more »

引子 真实生活中,大多数的偏微分方程都是一组方程,相应地,解也通常是矢量场。跟之前单方程的求解以及解是标量场相比,这种问题只是在组装矩阵和右端项时有些复杂,其他都一样。 本例中求解的是弹性问题: 其中,$c_{ijkl}$是刚度系数,通常与空间坐标相关。 弹性方程是Laplace方程的一种扩散形式,其解$u_l$是矢量场,表示一个刚体在力的作用下的位移。力$f_i$也是矢量场。 $c_{ijkl}$是一个四阶张量,共有$3^4=81$个分量,但其实只有21个分量是独立的,这是因为: 首先因为$\sigma_{ij}$和$\epsilon_{ij}$都是对称张量,导致$c_{ijkl}=c_{
Read more »

引子 在本例中,将会着眼于以下两方面: 1. 验证程序的正确性,生成收敛性统计表格; 2. 对于Helmholtz方程施加非齐次Neumann边界条件。 另外还有一些小的优化点。 验证程序正确性 也许从来不会有任何一个有限元程序一开始就是正确的,所以找到方法来验证计算的解是否正确就很有必要。通常选择已知精确解析解,并且比较精确解析解和计算离散解两者之间差别来求证。如果随着误差次数提高,两者之间差别逐渐趋于0,就说明程序的正确性。deal.II中就提供了这样一个函数:VectorTools::integrate_difference(),它提供了很多种范数的计算: 这些公式也适用于矢
Read more »