随笔分类 -  有限元物理模拟笔记

摘要:当选择static solve的时候,求解的流程如下:1.获得内力2.qresidual = 外力-内力,qdelta = qresidual, qdelta的非约束元素赋给bufferConstrained3.用tangentStiffnessMatrix给systemMatrix A赋值4.求解A * buffer = bufferConstrained5.把buffer指定为qdelta不受... 阅读全文
posted @ 2015-01-23 12:08 dydx 阅读(296) 评论(0) 推荐(0)
摘要:11月17日c++调用fortran用intel fortran 编译器编译fortran 代码,设置以下地方fortran->compatibility->enable f77 runtime compatibility truefortran->compatibility->use f77 integer constants truefortran->... 阅读全文
posted @ 2015-01-20 14:09 dydx 阅读(245) 评论(0) 推荐(0)
摘要:11月22日当前任务stiffness matrix 究竟怎么算?什么是tangent stiffnesmatrix?在Exact Corotational Linear FEM Stiffness Matrix之中linear stiffness matrix Krest 是指小变形的情形下,节点的力f = Krest * 节点位移xtangent stiffness matri... 阅读全文
posted @ 2015-01-20 14:08 dydx 阅读(280) 评论(0) 推荐(0)
摘要:11月20日ImplicitBackwardEulerSparse::DoTimestep的总步骤:1通过当前的位移,计算出内力和刚度矩阵2 用刚度矩阵和质量矩阵构造阻尼矩阵3 用求解器解出qdelta,就是下一步的速度增量(为什么?求解器的矩阵在哪里更新?) 求解器实际上求解tangentStiffnessMatrix * qdelta =bufferConstrained 于... 阅读全文
posted @ 2015-01-20 14:08 dydx 阅读(257) 评论(0) 推荐(0)
摘要:11月21日了解tangent stiffness matrix相关论文了解动力学方程相关论文来自为知笔记(Wiz) 阅读全文
posted @ 2015-01-20 14:08 dydx 阅读(104) 评论(0) 推荐(0)
摘要:11月19日成功运行了Vega测试代码发现Maya 的obj支持体网格结构obj的面格式可以只指定顶点索引,不知道发现和贴图坐标,例如f 1 2 3VolumetricMesh规定每个元素(element)的顶点数是一样的,例如四面体网格点数必须是4,不允许同时存在点数不一样的元素想知道质量矩阵的计算方法发现质量矩阵的大小与元素的数目不相等,而与顶点数目有关质量矩阵是一个方阵,行数=列数=点数*3... 阅读全文
posted @ 2015-01-20 14:08 dydx 阅读(174) 评论(0) 推荐(0)
摘要:11月26日utilities里面几个程序displayObj 显示obj文件generateInterpolantgenerateInterpolationMatrixgenerateSurfaceMesh veg体网格转obj面网格,内部点保留objMergeFilesgenerateMassMatrix 计算质量矩阵largeModalDeformationFactory 可以计算模态系数i... 阅读全文
posted @ 2015-01-20 14:06 dydx 阅读(183) 评论(0) 推荐(0)
摘要:11月25日发现几种术语tangent linear vibration modelinear modal analysis(LMA) modelinear modal analysis(LMA)估计是同线性弹力模型结合的,此时力是位移的线性函数,以此得到刚度矩阵tangent linear vibration mode估计是根据某点的力对位置导数得到tangent stiffness matri... 阅读全文
posted @ 2015-01-20 14:06 dydx 阅读(146) 评论(0) 推荐(0)
摘要:11月24日彻底明白一致质量矩阵、刚度矩阵的计算方法明白了中心差商求解器的计算流程下一步是要了解降维积分的做法来自为知笔记(Wiz) 阅读全文
posted @ 2015-01-20 14:05 dydx 阅读(157) 评论(0) 推荐(0)
摘要:当前任务读入面网格,完成体网格化读入面网格以及控制它的参数,能够构造一个体网格黑盒tetgen支持的文件格式tetgen命令行参数-p Tetrahedralizes a piecewise linear complex (PLC). 体网格化,网格没有洞-Y Preserves the input surface mesh (does not modify it).-r Reconstructs... 阅读全文
posted @ 2015-01-20 14:04 dydx 阅读(291) 评论(0) 推荐(0)
摘要:11月27日任务:研究reducedDynamicSolver-rt,了解降维后的积分方法代码结构:函数initScene()准备必要的资源,按顺序为:调用了ReadMatrixFromDisk_()从磁盘读取低维基向量,放入ModalMatrix 对象renderingModalMatrix之中,这个类可以由高维力算出低维力。同时分配低维坐标q 低维力 fq fqBase。其中fqBase表示在... 阅读全文
posted @ 2015-01-20 13:55 dydx 阅读(191) 评论(0) 推荐(0)
摘要:12月8日开始准备数值实现tangentStiffnessMatrix在ForceModel类中得到,同时还可以得到力的值首先构造TetMesh对象,再构造CorotationalLinearFEM对象,最后构造ForceModel对象。即可从任意变形得到力和tangentStiffnessMatrix发现一点,ForceModel计算出来的力是每个节点受到的内力的反向来自为知笔记(Wiz) 阅读全文
posted @ 2015-01-20 13:54 dydx 阅读(150) 评论(0) 推荐(0)
摘要:12月9日构造各个矩阵内力f1 = f0 + K * dxK为tangent stiffnes matrixdx为当前变形下的一个微小位移对coratational模型调用testTangentStiffnessMatrix函数,发现原来的wrapped stiffness matrix并不准确。只有使用准确的tangent stiffness matrix ,误差才为位移的高阶无穷小。(与步长长... 阅读全文
posted @ 2015-01-20 13:52 dydx 阅读(169) 评论(0) 推荐(0)
摘要:之前发现,牛顿法在迭代的过程中容易收敛到局部。现在想通过减少变量的个数(不求解内部点的位置)来避免此种情况。主要参考Efficient Simulation of Secondary Motion in Rig-Space这篇论文的方法。方法的基本思路是,在解算的过程中,不考虑内部点的加速度,认为内... 阅读全文
posted @ 2015-01-19 11:58 dydx 阅读(279) 评论(0) 推荐(0)
摘要:看牛顿法的改进今天继续看Numerical Optimization这本书,在看第六章,实用牛顿法。6.1 提到“不准确”的牛顿法。意思是每次确定迭代方向都要解方程,很慢,实际上也不一定要解出非常精确的迭代方向。于是尝试用一些迭代解法(例如,共轭梯度法)去解 H*x + G = 0这个方程。6.2 ... 阅读全文
posted @ 2015-01-16 12:04 dydx 阅读(1073) 评论(0) 推荐(0)
摘要:今天把测试Hessian的代码加进去了,但是发现Hessian并无大的问题。测试例子:一根圆柱向指定方向弯曲。下面对比,在有弯曲方向参数,与无方向参数(该参数被被乘以0)的情况下,各帧迭代的函数值。无方向参数:帧号12345第1次迭代073777.396480615269.3317631566548... 阅读全文
posted @ 2015-01-14 12:28 dydx 阅读(450) 评论(0) 推荐(0)
摘要:今天发现之前迭代过程的终止条件写错了,应该是梯度值小于某值时终止,而不是梯度值+Hessian*增量小于某值终止。因为增量本身就是求解 梯度值 + Hessian * x = 0 得来的啊。。。改掉了之后迭代次数明显增多,模拟速度变慢。应该允许用户设定迭代终止阈值,控制模拟精确度。但是,最重要的问题... 阅读全文
posted @ 2015-01-13 21:43 dydx 阅读(303) 评论(0) 推荐(0)
摘要:昨天突然想到一点,就是当发现某个参数不影响形状时,可以把其从牛顿迭代中排除出去,而直接根据这个参数前一帧的变化速度推算下一帧的值。下一步要尝试这一点。并观察其是否能解决Hessian半正定时候的问题。 阅读全文
posted @ 2015-01-07 10:11 dydx 阅读(145) 评论(0) 推荐(0)
摘要:今天改正了一个小问题当能量函数对某个参数的梯度为0时,直接把这个参数的增量设为0。因为说明这个参数无论怎么变化都不可能影响能量函数。当解出参数增量不为有限值时,也把增量设为0。把增量设为0也就是保持参数与上一帧一样。当前发现的一个严重问题是,当Hessian不为正定时,模拟常常会出错。具体的表现是,... 阅读全文
posted @ 2015-01-01 23:39 dydx 阅读(160) 评论(0) 推荐(0)
摘要:今晚经过测时,发现模拟慢的主要原因有两点:1. 计算Hessian2. 一维搜索的过程中,需要反复获取内力。而corotational 模型的内力计算需要极分解。其中在一般情况下,一维搜索可以快速退出,因此Hessian是主要问题而在某些情况下(例如,参数很多的时候,第一帧从静止开始),一维搜索需要... 阅读全文
posted @ 2014-12-31 22:47 dydx 阅读(241) 评论(0) 推荐(0)