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

摘要:今天发现有限元插件不稳定的原因在于用有限差商计算导数的数值误差。之前的步长都是1e-4,现在步长变为1e-2(0.01)就工作正常了。下一步要找一种健壮的、同时计算量不太大的导数计算方法。 阅读全文
posted @ 2014-12-30 17:49 dydx 阅读(322) 评论(0) 推荐(0)
摘要:这几天把物理模拟框架移植到maya之中了。maya编程有一点比较关键,就是要让自己的程序逻辑适应maya的节点求值机制。在物理模拟中,往往需要进行时间积分,对此我的解决办法是,写一个节点rigSimulator,存放模拟的状态数据(例如: 位置、速度、加速度、过去模拟的结果),再写一个mel命令ri... 阅读全文
posted @ 2014-12-29 14:23 dydx 阅读(808) 评论(0) 推荐(0)
摘要:准备实现FEM节点。发现一种让自定义的Locator以及它的变换节点自动命名的方法。代码如下:void FEMSimulationNode::postConstructor(){ MFnDependencyNode nodeFn(thisMObject()); nodeFn.setName( "fe... 阅读全文
posted @ 2014-12-25 15:37 dydx 阅读(264) 评论(0) 推荐(0)
摘要:今天改进了Hessian各块的计算代码,减少了一些内存操作。下一步准备把模拟平台与Maya结合,这样就可以利用Maya丰富的变形算法了。这一步需要考虑以下问题:1.把场景设置为某一帧。这一点可以用Mel脚本实现,命令是 currentTime 帧号2.把表面网格转成体网格。这一点比较难做,因为表面网... 阅读全文
posted @ 2014-12-25 00:36 dydx 阅读(225) 评论(0) 推荐(0)
摘要:这两天实现了一维搜索算法,以及BFGS方法。在Nocedal 的 Numerical Optimization一书中,一维搜索的大概方法是逐步增大步长,发现步长太大时(例如,函数开始上升、wolfe充分下降条件不再满足),或者找到满足wolfe充分下降和曲率条件的步长时,停止增大步长,转为尝试用一个... 阅读全文
posted @ 2014-12-23 15:25 dydx 阅读(1225) 评论(0) 推荐(0)
摘要:今天看了 Nocedal 写的Numerical Optimization 中关于BFGS方法的介绍。BFGS方法有个近亲,叫做DFP方法。下面先介绍DFP方法。这个方法的意图是找一种方法对Hessian进行近似,具体是,在迭代的每一步xk+1,让这一步的近似Hessian B能够表示出上一步xk的... 阅读全文
posted @ 2014-12-21 00:34 dydx 阅读(1100) 评论(0) 推荐(0)
摘要:今天看了Corotational模型的代码。在Vega中,获得模型内力的方法是先构造一个ForceModel对象,再调用其对应方法。对于Corotational模型,构造的流程为:构造CorotationalLinearFEM -> 构造CorotationalLinearFEMForceModel... 阅读全文
posted @ 2014-12-18 10:36 dydx 阅读(383) 评论(0) 推荐(1)
摘要:今天看了牛顿法的一维搜索方法,大概意思是在计算出的方向上,找出符合wolfe条件的较好的点。一维搜索需要给出函数值来确定是否符合wolfe条件,在我要实现的这篇论文中,函数值的一项弹性能量值,所以下一步需要研究各个本构模型的计算过程,自行计算其弹性能量值。借此机会了解下各个弹性模型内力的具体计算方法... 阅读全文
posted @ 2014-12-17 18:55 dydx 阅读(757) 评论(0) 推荐(0)
摘要:这几天实现了最简单的牛顿法,还没有实现一维搜索和BFGS方法。做了个小球弹跳的动画。方法是把模拟的结果导入maya,利用参数控制小球的平移和缩放值(平移是预先设置了动画的,缩放值是模拟出来的)。模拟的截图如下:最终的动画如下: 阅读全文
posted @ 2014-12-15 14:18 dydx 阅读(456) 评论(0) 推荐(0)
摘要:毕业设计打算做有限元的模拟,准备实现论文Rig-Space Physics。在计算机图形学中,有限元模拟主要用于模拟变形物体的行为,例如果冻的摔在地上的变形、胖子走路身上肥肉的运动等等。一般这类模拟最终的结果便是每个顶点的动画。但在图形学领域,对模拟的准确程度要求并不高,一般来说“看起来真实”就可以... 阅读全文
posted @ 2014-12-15 11:19 dydx 阅读(559) 评论(0) 推荐(0)