文档库 最新最全的文档下载
当前位置:文档库 › 显式算法与隐式算法的区别

显式算法与隐式算法的区别

显式算法与隐式算法的区别

所谓显式和隐式,是指求解方法的不同,即数学上的出发点不一样。并不是说显式只能求动力学问题,隐式只能求静力学问题,只是求解策略不通。

显式求解是对时间进行差分,不存在迭代和收敛问题,最小时间步取决于最小单元的尺寸。过多和过小的时间步往往导致求解时间非常漫长,但总能给出一个计算结果。解题费用非常昂贵。因此在建模划分网格时要非常注意。

隐式求解和时间无关,采用的是牛顿迭代法(线性问题就直接求解线性代数方程组),因此存在一个迭代收敛问题,不收敛就的不到结果。

两者求解问题所耗时间的长短理论上无法比较。实际应用中一般感觉来说显式耗时多些。由于两者解题的出发点,所以一般来说显式用于求解和时间相关的动力学问题。隐式用来求解和时间无关的静力学问题。但也不是绝对的。比如,用隐式求解时,为了克服迭代不收敛,改用显式算,但是要多给点时间,这样虽然克服了不收敛的问题,但是求解的时间费用也是相当客观的。另外,隐式也可以求解动力学问题。

这是ansys里面的两种求解方法。

大多数非线性动力学问题一般多是采用显式求解方法,特别是在求解大型结构的瞬时高度非线性问题时,显示求解方法有明显的优越性。下面先简要对比一下隐式求解法和显示求解法。动态问题涉及到时间域的数值积分方法问题。在80年代中期以前,人们基本上采用纽曼法进行时间域的积分。根据纽曼法,位移、速度和加速度有着如下关系:

u(i+1)=u(i)+△t*v(i)[(1—2p)a(i)+2p*a(i+1)] (1)

v(i+1)=V(i)+△t[(1-2q)a(i)+2qa(i+1)] (2)

上面式子中 u(i+1),u(i)分别为当前时刻和前一时刻的位移,v(i+1)和V(i)为当前时刻和前一时刻的速度,a(i+1)和a(i)为当前时刻和前一时刻的加速度,p和q为两个待定参数,△t为当前时刻与前一时刻的时问差,符号* 为乘号。由式(1)和式(2)可知,在纽曼法中任一时刻的位移、速度、加速度都相互关联,这就使得运动方程的求解变成一系列相互关联的非线性方程的求解,这个求解过程必须通过迭代和求解联立方程组才能实现。这就是通常所说的隐式求解法。隐式求解法可能遇到两个问题。一是迭代过程不一定收敛,二是联立方程组可能出现病态而无确定的解。隐式求解法最大的优点是它具有无条件稳定性,即时间步长可以任意大。

如果采用中心差分法来进行动态问题的时域积分,则有如下位移、速度和加速度关系式:

u(i+1)=2u(i)-u(i-1)+a(i)(△t)^2 (3)

v(i+1)=[u(i+1)-u(i-1)]/2(△t) (4)

式中u(i-1),为i-1时刻的位移。由式(3)可以看出,当前时刻的位移只与前一时刻的加速度和位移有关,这就意味着当前时刻的位移求解无需迭代过程。另外,只要将运动过程中的质量矩阵和阻尼矩阵对角化,前一时刻的加速度求解无需解联立方程组,从而使问题大大简化,这就是所谓的显式求解法。显式求解法的优点是它既没有收敛性问题,也不需要求解联立方程组,其缺点是时间步长受到数值积分稳定性的限制,不能超过系统的临界时间步长。

隐式求解法不考虑惯性效应[C]和[M]。对于线性问题,无条件稳定,可以用大的时间步。对于非线性问题,通过一系列线性逼近(Newton-Raphson)来求解;要求转置非线性刚度矩阵[K],收敛时候需要

小的时间步,对于高度非线性问题无法保证收敛。因此,隐式求解一般用于线性分析和非线性结构静动力分析,包括结构固有频率和振型计算。 ansys使用的Newmark时间积分法即为隐式求解法。

显示求解法是ansys/ls-dyna中主要的求解方法,用于分析大变形、瞬态问题、非线性动力学问题等。对于非线性分析,显示求解法有一些基本的特点,如:块质量矩阵需要简单的转置;方程非耦合,可以直接求解;无须转置刚度矩阵,所有的非线性问题(包括接触)都包含在内力矢量中;内力计算是主要的计算部分;无效收敛检查;保存稳定状态需要小的时间步。(此处我也不是很理解,仅供你参考)。

弄清楚了隐式和显示求解法后,简单说一下单点积分和全积分。ansys作为一种有限单元法,它是一种离散化的数值解法。

有限单元法中,每一单元的特性用单元刚度矩阵来表示,每一结构构件的力与位移之间的关系不是精确推导出来的,而是利用每一单元中近似的位移函数得到节点位移,然后计算积分点应变和应力,输出时才根据用户请求将积分点结果复制或线性外推至单元的节点上。因此,有限单元法是一种近似的数值方法。先看一下积分点的概念:

计算刚度矩阵需要进行数值积分,Ansys采用高斯积分法,即采用各积分点处函数值与积分系数乘积之和,因此积分点也称高斯积分点。积分点位置的确定比较复杂,它是勒让德多项式Ln(x)的n个不同的实根,即需要求解勒让德多项式。对于面、体单元,在积分点处计算单元结果也比较精确。由此可知,积分点与节点完全不同,不同单元积分点位置也不一样,个别梁单元也没有积分点。

Gauss 积分阶数低于被积函数所有项次精确积分所需阶数的积分称为缩减积分,简单地说就是数值积分采用比精确积分要求少的积分点数。实际计算表明,采用缩减积分往往可以取得较完全精确积分更好的精度。

因此,所谓单点积分和全积分实际上指的是高斯积分时所采用的积分点的个数。这样说来,单点积分和全积分与显示求解法和隐式求解法没有本质的联系。

只不过,在显示动力分析中最消耗CPU的一项就是单元的处理。由于积分点的个数与CPU时间成正比,采用简化积分的单元便可以极大的节省数据存储量和运算次数,进而提高运算效率。除节省CPU外,单点积分单元在大变形分析中同样有效,ansys/ls-dyna单元能承受比标准ansys隐式单元更大的变形。因此,每种显示动力单元确省为单点积分。但单点积分有两个缺点:1.出现零能模型(沙漏模态);2.应力结果精确度与积分点相关。为了控制沙漏,可以采用全积分单元。

总结一下,显示求解法、隐式求解法与单点积分、全积分不是一个层次上的概念。

我们在求解问题的时候应先根据我们的问题类型来决定是采用显示求解法还是隐式求解法。如果是采用显示求解法,默认是单点积分,如果产生了沙漏,改用全积分。

1、显式算法基于动力学方程,因此无需迭代;而静态隐式算法基于虚功原理,一般需要迭代计算

2、显式算法

最大优点是有较好的稳定性。

动态显式算法采用动力学方程的一些差分格式(如广泛使用的中心差分法、线性加速度法、Newmark法和wilson法等),不用直接求解切线刚度,不需要进行平衡迭代,计算速度快,时间步长只要取的足够小,一般不存在收敛性问题。因此需要的内存也比隐式算法要少。并且数值计算过程可以很容易地进行并行计算,程序编制也相对简单。但显式算法要求质量矩阵为对角矩阵,而且只有在单元级计算尽可能少时速度优势才能发挥, 因而往往采用减缩积分方法,容易激发沙漏模式,影响应力和应变的计算精度。

静态显式法基于率形式的平衡方程组与Euler向前差分法,不需要迭代求解。由于平衡方程式仅在率形式上得到满足,所以得出的结果会慢慢偏离正确值。为了减少相关误差,必须每步使用很小的增量。

3、隐式算法

隐式算法中,在每一增量步内都需要对静态平衡方程进行迭代求解,并且每次迭代都需要求解大型的线性方程组,这以过程需要占用相当数量的计算资源、磁盘空间和内存。该算法中的增量步可以比较大,至少可以比显式算法大得多,但是实际运算中上要受到迭代次数及非线性程度的限制,需要取一个合理值。

4、求解时间

使用显式方法,计算成本消耗与单元数量成正比,并且大致与最小单元的尺寸成反比应用隐式方法,经验表明对于许多问题的计算成本大致与自由度数目的平方成正比

因此如果网格是相对均匀的,随着模型尺寸的增长,显式方法表明比隐式方法更加节省计算成本

显式算法,采用中心差分显式时间积分,由于方程是非耦合形式,可以直接求解,不像隐式方程那样求解刚度矩阵,之所以采用这样的算法思路主要是为解决瞬态动力学服务的,它最本质的算法是中心差分,因此它的求解效率高,但精度不高,而且必须设定非常小的时间步求解以保证稳定状态。

而隐式算法,采用的是newmark等隐式时间积分,引入了微量代替,需要转换刚度矩阵,对于非线性,需要采用多种数值计算方法,比如用于线性逼近的牛顿-拉夫逊迭代公式等,这种算法多用于静力问题,结构分析,低频率动力学问题等等。因为这类问题时间历程较长,可以采用较大的时间步,也能保证一定的精度要求。

隐式算法是指对于每一增量步,时间积分必须满足平衡方程,反复迭代求解,结果准确,但是求解时间长,而且有时会发散。显式算法求解时不需要迭代,避免了不收敛问题,但是时间步长的选择必须非常小心,根据算法的稳定准则。

显式算法,采用中心差分显式时间积分,由于方程是非耦合形式,可以直接求解,不像隐式方程那样求解刚度矩阵,之所以采用这样的算法思路主要是为解决瞬态动力学服务的,它最本质的算法是中心差分,因此它的求解效率高,但精度不高,而且必须设定非常小的时间步求解以保证稳定状态。

而隐式算法,采用的是newmark等隐式时间积分,引入了微量代替,需要转换刚度矩阵,对于非线性,需要采用多种数值计算方法,比如用于线性逼近的牛顿-拉夫逊迭代公式等,这种算法多用于静力问题,结构分析,低频率动力学问题等等。因为这类问题时间历程较长,可以采用较大的时间步,也能保证一定的精度要求。

隐式算法是指对于每一增量步,时间积分必须满足平衡方程,反复迭代求解,结果准确,但是求解时间长,而且有时会发散。显式算法求解时不需要迭代,避免了不收敛问题,但是时间步长的选择必须非常小心,根据算法的稳定准则。

相关文档
相关文档 最新文档