这是接触问题的计算方法。
接触问题的关键在于接触体间的相互关系(废话
),此关系又可分为在接触前后的法向关系与切向关系。
法向关系:
在法向,必须实现两点:1)接触力的传递。2)两接触面间没有穿透。 ANSYS 通过两种算法来实现此法向接触关系:罚函数法和拉格朗日乘子法。
1.罚函数法
是通过接触刚度在接触力与接触面间的穿透值(接触位移)间建立力与位移的线性关系:
接触刚度*接触位移=法向接触力
对面面接触单元17*,接触刚度由实常数FKN 来定义。 穿透值在程序中通过分离的接触体上节点间的距离来计算。接触刚度越大,则穿透就越小,理论上在接触刚度为无穷大时,可以实现完全的接触状态,使穿透值等于零。但是显而易见,在程序计算中,接触刚度不可能为无穷大(否则病态),穿透也就不可能真实达到零,而只能是个接近于零的有限值。
以上力与位移的接触关系可以很容易地合并入整个结构的平衡方程组K*X=F中去。并不改变总刚K 的大小。这种罚函数法有以下几个问题必须解决:
1)接触刚度FKN 应该取多大?
2)接触刚度FKN 取大些可以减少虚假穿透,但是会使刚度矩阵成为
病态。
3)既然与实际情况不符合的虚假穿透既然是不可避免的,那么可以允许有多大为合适?
因此,在ANSYS 程序里,通常输入FKN 实常数不是直接定义接触刚度的数值,而是接触体下单元刚度的一个因子,这使得用户可以方便地定义接触刚度了,一般FKN 取0.1到1中间的值。当然,在需要时,也可以把接触刚度直接定义,FKN 输入为负数,则程序将其值理解为直接输入的接触刚度值。
对于接近病态的刚度阵,不要使用迭代求解器,例如PCG 等。它们会需要更多的迭代次数,并有可能不收敛。可以使用直接法求解器,例如稀疏求解器等。这些求解器可以有效求解病态问题。
穿透的大小影响结果的精度。用户可以用PLESOL,CONT ,PENE 来在后处理中查看穿透的数值大小。如果使用的是罚函数法求解接触问题,用户一般需要试用多个FKN 值进行计算,可以先用一个较小的FKN 值开始计算,例如0.1。因为较小的FKN 有助于收敛,然后再逐步增加FKN 值进行一系列计算,最后得到一个满意的穿透值。 FKN 的收敛性要求和穿透太大产生的计算误差总会是一对矛盾。解决此矛盾的办法是在接触算法中采用扩展拉格朗日乘子法。此方法在接触问题的求解控制中可以有更多更灵活的控制。可以更快的实现一个需要的穿透极限。
2.拉格朗日乘子法与扩展拉格朗日乘子法
拉格朗日乘子法与罚函数法不同,不是采用力与位移的关系来求接触
力,而是把接触力作为一个独立自由度。因此这里不需要进行迭代,而是在方程里直接求出接触力(接触压力)来。
Kx=F+Fcontact
从而,拉格朗日乘子法不需要定义人为的接触刚度去满足接触面间不可穿透的条件,可以直接实现穿透为零的真实接触条件,这是罚函数法所不可能实现的。使用拉格朗日乘子法有下列注意事项:
1)刚度矩阵中将有零对角元,使有些求解器不克使用。只能使用直接法求解器,例如波前法或系数求解器。而PCG 之类迭代求解器是不能用于有零主元问题的。
2)由于增加了额外的自由度,刚度阵变大了。
3)一个可能发生的严重问题,就是在接触状态发生变化时,例如从接触到分离,从分离到接触,此时接触力有个突变,产生chattering (接触状态的振动式交替改变)。如何控制这种chattering ,是纯粹拉格朗日法所难以解决的。
因此,为控制chattering ,ANSYS 采用的是罚函数法与拉格朗日法混合的扩展拉格朗日乘子法。在扩展拉格朗日法中,可以采用实常数TOLN 来控制最大允许穿透值。还有最大允许拉力FTOL 。这两个参数只对扩展拉格朗日乘子法有效。
在扩展拉格朗日乘子法里,程序按照罚函数法开始,与纯粹拉格朗日法类似,用TOLN 来控制最大允许穿透值。如果迭代中发现穿透大于允许的TOLN 值,(对178单元是TOLN ,而对面面接触单元171-174则是FTOLN )则将各个接触单元的接触刚度加上接触力乘以拉格朗
日乘子的数值。因此,这种扩展拉格朗日法是不停更新接触刚度的罚函数法,这种更新不断重复,直到计算的穿透值小于允许值为止。 尽管与拉格朗日法相比,扩展拉格朗日法的穿透并不是零,与罚函数法相比,可能迭带次数会更多。扩展拉格朗日法有下列优点:
1)较少病态,个接触单元的接触刚度取值可能更合理。
2)与罚函数法相比较少病态,与单纯的拉格朗日法相比,没有刚度阵零对角元。因此在选择求解器上没有限制,PCG 等迭代求解器都可以应用。
3)用户可以自由控制允许的穿透值TOLN 。(如果输入了TOLN ,而使用罚函数法,则程序忽略它)
依我的个人理解:解的结果会随着接触刚度,穿透容忍度的不同而有所不同。但对于穿透容忍度足够小的情况下,解的结果将随接触刚度影响不会很大。不过,在穿透容忍度小特别小的时候当然不容易收敛。因此在穿透容忍度一定的情况下,当然是接触刚度大穿透小的解更加准确。
大家看看这个吧!我想对大家的理解可能有帮助
摘自 ansys 中文网站 用户专区。(我记得我曾经贴出过)
在有限元分析中,接触单元通常用来描述两物体相互接触或滑动的界面。近年来,ANSYS 开发了一系列的接触单元。刚开始有节点对节点单元CONTAC12和CONTAC52,接着有节点对地单元CONTAC26,然后有节点对面单元CONTAC48和CONTAC49。最近几年,我们引入一类面对面接触单元CONTA169和CONTA174,同时还有一种新的节点对节点单元CONTA178。
虽然接触单元的参数具有多样性,但我们在使用他们时可谨记重要的一点,他们具有一个共同的特点,即除了CONTA178的KEYOPT (2)=0或1外,所有的接触单元都有接触刚度。在现实中实际上相邻结构之间只是一种空隙,但在有限元分析中,这种空隙是一带有刚度的接触单元,这是因为通过刚度矩阵来实现接触算法的。一些接触单元要求使用者输入刚度值,同时另外的接触单元若没有输入则使用缺省值。分析工程师所面对的问题就是针对给定的条件确定一个合理的刚度值。如果过高,问题将会不收敛,如果过低,可能得到错误的结果。那么我们所面对的问题是怎样才能找到一个正确的刚度值?
我认为唯一的方法就是我们必须试用不同的值直到找到正确的值。也
就是刚开始我们应该使用一个较小的值,然后稳步的增加直到分析的结果不再有什么变化。那么对于我们这一特定分析的问题,这一点就是我们所想要的合适值。
我们可举例说明,如图1所示,平行放置两个悬臂梁,并有少许的交迭,下面的左边固支,上面的右边固支,当在上面梁的自由端施加一个向下位移时,梁变形弯曲并接触下面的梁,然后一起向下运动。用SOLID45单元划分梁,用TARGE170和CONTA174面面接触单元来描述相互作用。在此基础上,把CONTA174单元的刚度从非常低变到非常高,从而来观察它对结果的影响和收敛的迭代次数。图2说明了下梁自由端的偏移随接触单元刚度的变化情况,当刚度增加时,偏移量接近一个常数值(我们可以假定它是一个" 正确" 的结果。)图3说明求解所需的迭代次数,当接触单元刚度增加时,求解所需的迭代次数也是增加的,并服从指数关系。如果刚度过高,问题很有可能根本就不收敛。图4说明在上梁自由端接触单元的渗透量,当刚度增加时,渗透量降低。
从这些图可知,当接触单元的刚度为10e6时,可获得合理精确的结果。任何大于该值的刚度对下梁的偏移量没有什么影响,而求解所需的迭代数却显著的增加。对于这个题目,10e6的刚度是很适合的。但是,如果改变边界条件、网格密度、两梁之间的相对位置、材料特性或梁的几何形状,能获得满意结果的接触刚度值将是不同的。比如,如果网格密度增加,则接触单元数将增加,每一个单元上的载荷将降
低。如果接触单元数增加两倍,一个合适的接触单元刚度值应为原来的一半。
由于每个题目都是不一样的,所以在求解之前并没有通用的方法来确定接触单元刚度的最佳值。我们不得不试算一个我们认为合适的值然后查看计算结果。一个有经验的分析工程师可能只查看一个计算结果来判定所取值的合适度,但对于大多数情况而言,最好用一个合理而不过度精确的刚度值进行第一次求解,然后用10倍于该值的刚度进行第二次求解,如果两者结果相差很小,而迭代数增加很多,那么我们则正好取得了曲线上的突变点,从而获得相当好的结果。
接触单元刚度问题仅仅是一个例子,即对于分析工程师来说,总是置疑于分析结果的正确与否是非常重要的,并要意识到数值仿真的局限性和潜在的假设及他们怎样影响所分析问题的结果。
图1
这是接触问题的计算方法。
接触问题的关键在于接触体间的相互关系(废话
),此关系又可分为在接触前后的法向关系与切向关系。
法向关系:
在法向,必须实现两点:1)接触力的传递。2)两接触面间没有穿透。 ANSYS 通过两种算法来实现此法向接触关系:罚函数法和拉格朗日乘子法。
1.罚函数法
是通过接触刚度在接触力与接触面间的穿透值(接触位移)间建立力与位移的线性关系:
接触刚度*接触位移=法向接触力
对面面接触单元17*,接触刚度由实常数FKN 来定义。 穿透值在程序中通过分离的接触体上节点间的距离来计算。接触刚度越大,则穿透就越小,理论上在接触刚度为无穷大时,可以实现完全的接触状态,使穿透值等于零。但是显而易见,在程序计算中,接触刚度不可能为无穷大(否则病态),穿透也就不可能真实达到零,而只能是个接近于零的有限值。
以上力与位移的接触关系可以很容易地合并入整个结构的平衡方程组K*X=F中去。并不改变总刚K 的大小。这种罚函数法有以下几个问题必须解决:
1)接触刚度FKN 应该取多大?
2)接触刚度FKN 取大些可以减少虚假穿透,但是会使刚度矩阵成为
病态。
3)既然与实际情况不符合的虚假穿透既然是不可避免的,那么可以允许有多大为合适?
因此,在ANSYS 程序里,通常输入FKN 实常数不是直接定义接触刚度的数值,而是接触体下单元刚度的一个因子,这使得用户可以方便地定义接触刚度了,一般FKN 取0.1到1中间的值。当然,在需要时,也可以把接触刚度直接定义,FKN 输入为负数,则程序将其值理解为直接输入的接触刚度值。
对于接近病态的刚度阵,不要使用迭代求解器,例如PCG 等。它们会需要更多的迭代次数,并有可能不收敛。可以使用直接法求解器,例如稀疏求解器等。这些求解器可以有效求解病态问题。
穿透的大小影响结果的精度。用户可以用PLESOL,CONT ,PENE 来在后处理中查看穿透的数值大小。如果使用的是罚函数法求解接触问题,用户一般需要试用多个FKN 值进行计算,可以先用一个较小的FKN 值开始计算,例如0.1。因为较小的FKN 有助于收敛,然后再逐步增加FKN 值进行一系列计算,最后得到一个满意的穿透值。 FKN 的收敛性要求和穿透太大产生的计算误差总会是一对矛盾。解决此矛盾的办法是在接触算法中采用扩展拉格朗日乘子法。此方法在接触问题的求解控制中可以有更多更灵活的控制。可以更快的实现一个需要的穿透极限。
2.拉格朗日乘子法与扩展拉格朗日乘子法
拉格朗日乘子法与罚函数法不同,不是采用力与位移的关系来求接触
力,而是把接触力作为一个独立自由度。因此这里不需要进行迭代,而是在方程里直接求出接触力(接触压力)来。
Kx=F+Fcontact
从而,拉格朗日乘子法不需要定义人为的接触刚度去满足接触面间不可穿透的条件,可以直接实现穿透为零的真实接触条件,这是罚函数法所不可能实现的。使用拉格朗日乘子法有下列注意事项:
1)刚度矩阵中将有零对角元,使有些求解器不克使用。只能使用直接法求解器,例如波前法或系数求解器。而PCG 之类迭代求解器是不能用于有零主元问题的。
2)由于增加了额外的自由度,刚度阵变大了。
3)一个可能发生的严重问题,就是在接触状态发生变化时,例如从接触到分离,从分离到接触,此时接触力有个突变,产生chattering (接触状态的振动式交替改变)。如何控制这种chattering ,是纯粹拉格朗日法所难以解决的。
因此,为控制chattering ,ANSYS 采用的是罚函数法与拉格朗日法混合的扩展拉格朗日乘子法。在扩展拉格朗日法中,可以采用实常数TOLN 来控制最大允许穿透值。还有最大允许拉力FTOL 。这两个参数只对扩展拉格朗日乘子法有效。
在扩展拉格朗日乘子法里,程序按照罚函数法开始,与纯粹拉格朗日法类似,用TOLN 来控制最大允许穿透值。如果迭代中发现穿透大于允许的TOLN 值,(对178单元是TOLN ,而对面面接触单元171-174则是FTOLN )则将各个接触单元的接触刚度加上接触力乘以拉格朗
日乘子的数值。因此,这种扩展拉格朗日法是不停更新接触刚度的罚函数法,这种更新不断重复,直到计算的穿透值小于允许值为止。 尽管与拉格朗日法相比,扩展拉格朗日法的穿透并不是零,与罚函数法相比,可能迭带次数会更多。扩展拉格朗日法有下列优点:
1)较少病态,个接触单元的接触刚度取值可能更合理。
2)与罚函数法相比较少病态,与单纯的拉格朗日法相比,没有刚度阵零对角元。因此在选择求解器上没有限制,PCG 等迭代求解器都可以应用。
3)用户可以自由控制允许的穿透值TOLN 。(如果输入了TOLN ,而使用罚函数法,则程序忽略它)
依我的个人理解:解的结果会随着接触刚度,穿透容忍度的不同而有所不同。但对于穿透容忍度足够小的情况下,解的结果将随接触刚度影响不会很大。不过,在穿透容忍度小特别小的时候当然不容易收敛。因此在穿透容忍度一定的情况下,当然是接触刚度大穿透小的解更加准确。
大家看看这个吧!我想对大家的理解可能有帮助
摘自 ansys 中文网站 用户专区。(我记得我曾经贴出过)
在有限元分析中,接触单元通常用来描述两物体相互接触或滑动的界面。近年来,ANSYS 开发了一系列的接触单元。刚开始有节点对节点单元CONTAC12和CONTAC52,接着有节点对地单元CONTAC26,然后有节点对面单元CONTAC48和CONTAC49。最近几年,我们引入一类面对面接触单元CONTA169和CONTA174,同时还有一种新的节点对节点单元CONTA178。
虽然接触单元的参数具有多样性,但我们在使用他们时可谨记重要的一点,他们具有一个共同的特点,即除了CONTA178的KEYOPT (2)=0或1外,所有的接触单元都有接触刚度。在现实中实际上相邻结构之间只是一种空隙,但在有限元分析中,这种空隙是一带有刚度的接触单元,这是因为通过刚度矩阵来实现接触算法的。一些接触单元要求使用者输入刚度值,同时另外的接触单元若没有输入则使用缺省值。分析工程师所面对的问题就是针对给定的条件确定一个合理的刚度值。如果过高,问题将会不收敛,如果过低,可能得到错误的结果。那么我们所面对的问题是怎样才能找到一个正确的刚度值?
我认为唯一的方法就是我们必须试用不同的值直到找到正确的值。也
就是刚开始我们应该使用一个较小的值,然后稳步的增加直到分析的结果不再有什么变化。那么对于我们这一特定分析的问题,这一点就是我们所想要的合适值。
我们可举例说明,如图1所示,平行放置两个悬臂梁,并有少许的交迭,下面的左边固支,上面的右边固支,当在上面梁的自由端施加一个向下位移时,梁变形弯曲并接触下面的梁,然后一起向下运动。用SOLID45单元划分梁,用TARGE170和CONTA174面面接触单元来描述相互作用。在此基础上,把CONTA174单元的刚度从非常低变到非常高,从而来观察它对结果的影响和收敛的迭代次数。图2说明了下梁自由端的偏移随接触单元刚度的变化情况,当刚度增加时,偏移量接近一个常数值(我们可以假定它是一个" 正确" 的结果。)图3说明求解所需的迭代次数,当接触单元刚度增加时,求解所需的迭代次数也是增加的,并服从指数关系。如果刚度过高,问题很有可能根本就不收敛。图4说明在上梁自由端接触单元的渗透量,当刚度增加时,渗透量降低。
从这些图可知,当接触单元的刚度为10e6时,可获得合理精确的结果。任何大于该值的刚度对下梁的偏移量没有什么影响,而求解所需的迭代数却显著的增加。对于这个题目,10e6的刚度是很适合的。但是,如果改变边界条件、网格密度、两梁之间的相对位置、材料特性或梁的几何形状,能获得满意结果的接触刚度值将是不同的。比如,如果网格密度增加,则接触单元数将增加,每一个单元上的载荷将降
低。如果接触单元数增加两倍,一个合适的接触单元刚度值应为原来的一半。
由于每个题目都是不一样的,所以在求解之前并没有通用的方法来确定接触单元刚度的最佳值。我们不得不试算一个我们认为合适的值然后查看计算结果。一个有经验的分析工程师可能只查看一个计算结果来判定所取值的合适度,但对于大多数情况而言,最好用一个合理而不过度精确的刚度值进行第一次求解,然后用10倍于该值的刚度进行第二次求解,如果两者结果相差很小,而迭代数增加很多,那么我们则正好取得了曲线上的突变点,从而获得相当好的结果。
接触单元刚度问题仅仅是一个例子,即对于分析工程师来说,总是置疑于分析结果的正确与否是非常重要的,并要意识到数值仿真的局限性和潜在的假设及他们怎样影响所分析问题的结果。
图1