首页/文章/ 详情

ABAQUS C3D10单元质量矩阵计算(附MATLAB代码)

1月前浏览475

概述

      在动力时程分析、频率分析等分析中,质量矩阵的求解是必不可少的。本次帖子以二阶四面体单元的质量矩阵求解为例,讲解有限元法中质量矩阵求解的一些基础知识。采用Matlab编写程序,将计算的质量矩阵与ABAQUS的C3D10单元相比较,最终结算结果是吻合的。帖子末尾给出了求解二阶四面体单元协调质量矩阵的参考代码。

协调/集中质量矩阵

      在有限元分析中,质量矩阵的推导通常依赖于以下假设:物体的质量分布是连续的,并且通过离散化单元来逼近实际的质量分布。我们将使用大朗贝尔原理推导单元的质量矩阵。
      从运动的结构中取出一个微小部分,根据达朗贝尔原理,在他的单位体积上作用的惯性力为

 

式中,    为材料的密度。
      在对结构进行离散化以后,取出一个单元,并采用如下形式的位移函数

 

      将上面的式子代入到惯性力公式中为

 

      在利用荷载计算公式

 

      即牛顿第二定律

 

      可见,单元的质量矩阵为

 

      特别需要注意的是,在有限元分析中,质量矩阵的形式并不唯一,大致可分为:协调(一致)质量矩阵和集中质量矩阵
      其中,协调(一致)质量矩阵,因为质量的插值公式与位移的插值公式相同,所以被称之为“一致”质量矩阵,又因为该种质量矩阵是满阵,又被称为协调协调质量矩阵。上面的公式即为协调(一致)质量矩阵
      集中质量矩阵,顾名思义,该种质量矩阵只有主对角元素上有非零元素,矩阵的其余位置均为零元素。该种质量矩阵具有很好的数值计算性能,在涉及到矩阵分解的计算中,集中质量矩阵计算非常高效,通常在显式计算中有很广发的运用。
      集中质量矩阵的求解方法也是基于协调质量矩阵,比较通用的方法是将协调质量矩阵每一行的质量集中到主对角元素上,同一行的其余元素均人为置零,这只是获得集中质量矩阵的一个简单的方法。
 以上只是简单的介绍了一些质量矩阵,上面的公式并不是通用的,在壳等单元中,质量矩阵的求解往往不是一个简单的工作,下面将上述公式用于计算实体单元的质量矩阵。

C3D10单元质量矩阵

      这里以二阶四面体单元为例讲解质量矩阵的求解方法,二阶四面体单元即为ABAQUS中的C3D10单元,该单元的几何形状为
      二阶单元的形函数为

 
 
 
 
 
 
 
 
 
 

      形函数矩阵为

 

 其中

 

      将上述形函数代入到协调质量矩阵公式中

 

      上面是一个三重积分,获得解析解极为困难,按照有限元的经典流程,下面是采用数值计算方法计算上面的积分。常用的数值计算方法有高斯积分和Hammer积分等等,这里采用Hammer积分进行计算。
      在这里要特别注意的是积分点个数的选择,我一开始是按照四个和五个积分点计算,算来算去和abaqus计算的质量矩阵总是对不上,后来翻一下abaqus的官方文档,发现abaqus的C3D10单元质量矩阵采用的是15个积分点。下面是官方文档的原文   For stress/displacement applications the second-order tetrahedron uses 4 integration points for its stiffness matrix and15 integration points for its consistent mass matrix
 文末会给出15积分点的相关程序。采用Hammer积分的公式为

 

      其中,    为Hammer积分权重,    为Jacobian矩阵,Jacobian矩阵的求解可参考我之前发的贴子

算例

      老规矩,还是经典的悬臂梁受动荷载算例,悬臂梁尺寸为    ,密度为2000,泊松比为0.25,弹性模量为    ,模型一端为固定边界,另一端受简谐荷载,荷载表达式为    ,方向为垂直于梁轴线向下,即y轴负方向,计算总时长为10秒,增量步长为0.01秒,共计1000增量步,计算网格为       荷载和边界为       统计悬臂端,即加载面的位移,将abaqus和matlab计算的y方向位移进行对比如下图,结果是一模一样的,数据有震荡是因为没有考虑阻尼。       下面比较一下求解的质量矩阵具体的数值。首先需要修改inp文件,将abaqus计算的质量矩阵输出到外部文件,具体的输出方法参考我之前写的帖子,然后用matlab程序读取质量矩阵并于自编程序计算结果进行比较。
      这里的算例一共有696个节点,因此总体质量矩阵大小为2088×2088的方阵,首先我们直接比较质量矩阵对应元素的绝对误差,即    ,并以自由度个数(2088)为横轴绘制图像为       可以发现,绝对误差的数量级在    ,这个误差基本可以认为是不同计算语言或者软件的数据截断误差造成的。
      下面按照同样的方法比较对应元素的相对误差,并以自由度个数(2088)为横轴绘制图像为       可以发现,相对误差的数量级来到了    ,基本可以认为,自编的程序计算质量矩阵与abaqus相同。
      为了比较两个矩阵的相似程度,下面采用欧几里得范数来比较两个矩阵,matlab提供了norm(v)可以直接调用,我们比较两个矩阵欧几里得范数的相对误差,伪代码为

 

      最终计算的结果为3.061006180118862e-14,可以理解为两个矩阵的欧几里得距离相对误差为3.061006180118862e-14。

代码

      下面给出质量矩阵求解过程中用到的关键函数代码。首先是Hammer积分相关代码。再次提醒:ABAQUS计算C3D10单元采用的是Hammer积分的15个积分点

function[weights,locations] = hammer3D(npt)

if npt==1 % C3D4
   locations = [1/4, 1/4, 1/4];
   weights = 1/6.;
elseif npt == 4 % C3D10
   a=(5+3*sqrt(5))/20;
   b=(5-sqrt(5))/20;
   locations = [a, b, b;
       b, a, b;
       b, b, a;
       b, b, b];
   weights = [1/24, 1/24, 1/24, 1/24];
elseif npt == 5 % 5积分点
   a=0.5;
   b=1/6;
   locations = [0.25,0.25,0.25;
       a, b, b;
       b, a, b;
       b, b, a;
       b, b, b];
   weights = (1/6)*[-0.8, 9/20, 9/20, 9/20];
elseif npt == 15 % 15积分点
   
   locations =[0.25d0,0.25d0,0.25d0;...
       0.091971078052723d0,0.091971078052723d0,0.091971078052723d0;...
       0.724086765841831d0,0.091971078052723d0,0.091971078052723d0;...
       0.091971078052723d0,0.724086765841831d0,0.091971078052723d0;...
       0.091971078052723d0,0.091971078052723d0,0.724086765841831d0;...
       0.319793627829630d0,0.319793627829630d0,0.319793627829630d0;...
       0.040619116511110d0,0.319793627829630d0,0.319793627829630d0;...
       0.319793627829630d0,0.040619116511110d0,0.319793627829630d0;...
       0.319793627829630d0,0.319793627829630d0,0.040619116511110d0;...
       0.056350832689629d0,0.056350832689629d0,0.443649167310371d0;...
       0.443649167310371d0,0.056350832689629d0,0.056350832689629d0;...
       0.443649167310371d0,0.443649167310371d0,0.056350832689629d0;...
       0.056350832689629d0,0.443649167310371d0,0.443649167310371d0;...
       0.056350832689629d0,0.443649167310371d0,0.056350832689629d0;...
       0.443649167310371d0,0.056350832689629d0,0.443649167310371d0];
   weights =[0.019753086419753d0,0.011989513963170d0,0.011989513963170d0,...
       0.011989513963170d0,0.011989513963170d0,0.011511367871045d0,...
       0.011511367871045d0,0.011511367871045d0,0.011511367871045d0,...
       0.008818342151675d0,0.008818342151675d0,0.008818342151675d0,...
       0.008818342151675d0,0.008818342151675d0,0.008818342151675d0];
end
end

      下面是C3D10单元的形函数以及形函数对局部坐标的偏导数。

function [shape,naturalDerivatives] = shapeFunction3D(xi,eta,gamma,elenode)
switch elenode
   case 10
       shape = [
           (2*(1-xi-eta-gamma)-1)*(1-xi-eta-gamma);  % N1
           (2*xi-1)*xi;                              % N2
           (2*eta-1)*eta;                            % N3
           (2*gamma-1)*gamma;                        % N4
           4*(1-xi-eta-gamma)*xi;                    % N5
           4*xi*eta;                                 % N6
           4*(1-xi-eta-gamma)*eta;                   % N7
           4*(1-xi-eta-gamma)*gamma;                 % N8
           4*xi*gamma;                               % N9
           4*eta*gamma                               % N10
           ];
       
       naturalDerivatives = [
           -4*(1-xi-eta-gamma)+1, -4*(1-xi-eta-gamma)+1, -4*(1-xi-eta-gamma)+1;  % dN1/dxi, dN1/deta, dN1/dgamma
           4*xi-1, 0, 0;                                                        % dN2/dxi, dN2/deta, dN2/dgamma
           0, 4*eta-1, 0;                                                       % dN3/dxi, dN3/deta, dN3/dgamma
           0, 0, 4*gamma-1;                                                     % dN4/dxi, dN4/deta, dN4/dgamma
           4*(1-2*xi-eta-gamma), -4*xi, -4*xi;                                  % dN5/dxi, dN5/deta, dN5/dgamma
           4*eta, 4*xi, 0;                                                      % dN6/dxi, dN6/deta, dN6/dgamma
           -4*eta, 4*(1-xi-2*eta-gamma), -4*eta;                                % dN7/dxi, dN7/deta, dN7/dgamma
           -4*gamma, -4*gamma, 4*(1-xi-eta-2*gamma);                            % dN8/dxi, dN8/deta, dN8/dgamma
           4*gamma, 0, 4*xi;                                                    % dN9/dxi, dN9/deta, dN9/dgamma
           0, 4*gamma, 4*eta                                                    % dN10/dxi, dN10/deta, dN10/dgamma
           ];
end
end


来源:有限元先生
Abaqus通用MATLAB材料
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-12-13
最近编辑:1月前
外太空土豆儿
博士 我们穷极一生,究竟在追寻什么?
获赞 25粉丝 6文章 70课程 0
点赞
收藏
作者推荐

加权余量法简介

目录1.加权余量法基本概念2.配点法3.最小二乘法4.矩法5.伽辽金法加权余量法基本概念  加权余量法是一种偏微分方程近似求解方法,其核心思想是将试函数的误差在域内的加权积分为零。假设有如下方程  上面的是在域内和边界都是严格精确满足的,这时我们找出一个满足边界条件的近似解  上面的近似实际上是将精确解的无限维空间投影到了n维有限空间,关于这部分的知识,比较偏数学,我个人也是一知半解,在此就不多说了,有兴趣可查阅相关专著。  将上面的近似解引入到域内以后,会产生一个误差  加权余量法的思想就是引入一个加权积分参数,是的近似解在整个域内的加权积分为零,即  其中,为加权函数,取n个加权函数就能将n维空间近似解的所有系数求解出来。  依据上面的思想,加权余量法发展出很多种具体的求解方法,具体有:配点法、最小二乘法、矩法、伽辽金法,下面对这四种基于加权余量思想的偏微分方程近似求解方法进行简单的介绍。配点法  配点法是加权余量法中的一种方法,其核心思想是在求解区域内选择一些特定的点(称为配点),并在这些点上强制使得微分方程的余量为零。具体来说,配点法的步骤如下:选取近似解:首先假设一个包含未知系数的近似试探解,例如,其中为待定系数,为基函数。求余量:将近似解代入微分方程得到余量。如果试探解不是精确解,余量在求解的区域不可能为零。选择权函数:在配点法中,权函数通常选择为狄拉克函数,其中是求解区域内的配点。通过这种方式,可以在每个配点上强制余量为零。求解待定系数:通过在每个配点上设置余量为零的条件,可以得到一组代数方程,解这组方程可以得到待定系数。  配点法的优点是实现简单,计算量相对较小,适用于各种类型的微分方程。但是,配点法可能需要较多的配点以获得较好的近似解,且对于非线性问题,配点法可能不如其他方法(如最小二乘法或伽辽金法)稳定和精确。最小二乘法  加权余量法中的最小二乘法是一种求解微分方程近似解的方法,其核心思想是最小化微分方程余量在整个定义域上的平方积分。这种方法特别适用于当微分方程的精确解难以获得时,通过最小化误差的平方和来寻找一个最佳的近似解。以下是最小二乘法的基本原理和步骤:近似解的建立:首先,建立一个包含未知系数的近似解,通常这个近似解是由一组基函数线性组合而成的。例如,,其中是待定系数,是基函数。计算余量:将近似解代入微分方程,得到余量,即方程的残差。余量表示了近似解与微分方程之间的偏差。最小化误差:在最小二乘法中,权函数被选择为对余量所含的待求系数的导数,即。这种方法的目标是最小化余量在整个定义域上的平方积分,即最小化。建立方程组:通过对余量求导,并令导数等于零,可以得到一组代数方程,解这组方程可以得到待定系数。求解系数:解上述代数方程组,得到近似解中的未知系数,从而得到微分方程的近似解。  最小二乘法的优点在于它能够提供一个在某种意义上“最佳”的近似解,即使在近似解不能精确满足微分方程的所有点时。这种方法在处理复杂问题时特别有用,因为它不要求近似解在所有点上都精确满足微分方程,而只要求在整个定义域上最小化误差的平方和。这种方法在工程和科学计算中被广泛应用,特别是在有限元分析中。矩法  加权余量法中的矩法是一种通过最小化微分方程余量的矩来求解近似解的方法。其核心思想是选择特定的权函数,使得余量的各阶次矩等于零。以下是矩法的基本原理和步骤:近似解的建立:首先,建立一个包含未知系数的近似解,通常这个近似解是由一组基函数线性组合而成的。例如,,其中是待定系数,是基函数。计算余量:将近似解代入微分方程,得到余量,即方程的残差。余量表示了近似解与微分方程之间的偏差。选择权函数:在矩法中,权函数的选择与问题的维度有关。对于一维问题,权函数通常取;对于二维问题,则取。这些权函数用于构建余量的矩。最小化矩:通过设置余量的各阶次矩等于零来求解待定系数。具体来说,就是使得,其中是余量方程,是求解区域。求解系数:通过上述条件,可以得到一组代数方程,解这组方程可以得到待定系数,从而得到微分方程的近似解。  矩法的优点在于其概念清晰、处理方法灵活,适用于各种类型的微分方程。然而,它可能需要较多的计算量,尤其是在高维问题中。矩法在电磁学等领域得到了广泛的应用。矩法  伽辽金法(GalerkinMethod)是加权余量法中的一种重要方法,它在数值分析中被广泛用于求解微分方程问题。以下是伽辽金法的基本原理和特点:基本原理:伽辽金法通过将微分方程的精确解用一组基函数的线性组合来近似表示,即近似解可以表示为,其中是待定系数,是基函数。这些基函数通常满足问题的边界条件。弱形式:伽辽金法采用微分方程对应的弱形式,通过积分将微分方程转化为积分方程。这种方法允许在求解域内及边界上的加权积分(权函数为试函数本身)满足原方程,将求解微分方程近似解的问题转化为求解一组线性代数方程。加权积分:在伽辽金法中,要求结果在求解域内及边界上的加权积分(权函数为试函数本身)满足原方程。这意味着对于每一个基函数,在计算区域上的加权积分为零,即  其中是微分算子,是已知函数。自然边界条件:伽辽金法的一个显著特点是自然边界条件能够自动满足,这是因为基函数的选择使得边界条件在近似解中得到自然体现。对称性:如果算子是线性自伴随的,则采用伽辽金法得到的求解方程的系数矩阵是对称的。在高维问题中,这种对称性会大大减少计算量。近似解的精度:近似函数所取的试探函数的项数越多,近似解的精度越高。当项数趋于无穷时,近似解将收敛于精确解。  伽辽金法因其在处理复杂边界条件和非线性问题时的有效性而被广泛应用于有限元分析和计算结构力学等领域。来源:有限元先生

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈