开源程序calculix采用fortran语言编写,该程序自带前处理界面,从abaqus导出的inp文件可以直接被calculix读取计算,我在之前的帖子中讲过如何用calculix导入喷气发动机模型,下面是一个图片,有兴趣可以点击链接看看。 本次帖子学习开源fem程序calculix中的积分点子程序,子程序的名字为gauss.f,里面包含calculix所有单元的积分点数据,包括gauss积分和hammer积分,详细给出了低阶和高阶积分的积分点坐标和权重数据,下面详细讲解这个子程序。
这个子程序在开始给出了一系列的注释,主要是说明这个子程序包含了所有单元的gauss和hammer数值积分点坐标以及对应的积分权重。如下所示
!
!contains Gauss point information
!
!gauss1d1: lin, 1-point integration (1 integration point)
!gauss1d2: lin, 2-point integration (2 integration points)
!gauss1d3: lin, 3-point integration (3 integration points)
!gauss2d1: quad, 1-point integration (1 integration point)
!gauss2d2: quad, 2-point integration (4 integration points)
!gauss2d3: quad, 3-point integration (9 integration points)
!gauss2d4: tri, 1 integration point
!gauss2d5: tri, 3 integration points
!gauss2d6: tri, 7 integration points
!gauss3d1: hex, 1-point integration (1 integration point)
!gauss3d2: hex, 2-point integration (8 integration points)
!gauss3d3: hex, 3-point integration (27 integration points)
!gauss3d4: tet, 1 integration point
!gauss3d5: tet, 4 integration points
!gauss3d6: tet, 15 integration points
!gauss3d7: wedge, 2 integration points
!gauss3d8: wedge, 9 integration points
!gauss3d9: wedge, 18 integration points
!gauss3d10: wedge, 6 integration points
!gauss3d11: wedge, 1 integration points
!gauss3d12: hex, 14 integration points (for c3d27)
!gauss3d13: hex, 2x5x5=50 integration points (for beams)
!gauss3d14: wedge, 1 integration point
!
!weight2d1,... contains the weights
!
!
可见calculix中的单元大致可分为三类:线单元(line)、二维单元(2d)和三维单元(3d)。积分点的数据表示为:gaussxdy,其中,表达式里面的x代表单元的维度,当x=1时,单元是一维的,即线单元,以此类推;y代表积分点的个数;当y=1时,只采用一个积分点,以此类推,假如y=14,则说明单元采用了14个积分点。 下面我会在每一类单元中给出若干个单元的图示,包括单元的形状和积分点位置图示。
根据等参元理论,在一维线单元中,刚度矩阵或者质量矩阵,总可以写成如下形式
上述公式是连续的积分,如果无法导出解析解,那就无法直接用计算机求解,虽然一些简单的单元,如线单元和三角形单元可以将刚度矩阵解析求解,但为了通用性,我们还是经常采用数值求解,常常采用的数值积分有gauss积分和hammer积分,对于线单元的gauss积分有如下表达式
其中 为积分点个数, 为积分点坐标对应的权重。下面就依次讲解calculix线单元的三种gauss积分方式。
线单元的1个积分点坐标对应的代码为
gauss1d1=reshape(( /0.d0/),(/1,1/))
对应的权重代码为
weight1d1=(/2.d0/)
采用1个积分点计算线单元,则图示为 上面1个标有颜色的点,就是积分点的位置,根据等参元及数值积分的理论,当 时,有
线单元的2个积分点坐标对应的代码为
gauss1d2=reshape(( /
& -0.577350269189626d0,0.577350269189626d0/),(/1,2/))
对应的权重代码为
weight1d2=(/1.d0,1.d0/)
采用2个积分点计算线单元,则图示为
上面两个标有颜色的点,就是积分点的位置,根据等参元及数值积分的理论,当 时,有
对于质量 矩阵的求解,有类似的表达式,在此不过多赘述。
线单元的2个积分点坐标对应的代码为
gauss1d3=reshape(( /
& -0.774596669241483d0,0.d0,0.774596669241483d0/),(/1,3/))
对应的权重代码为
weight1d3=(/0.555555555555555d0,0.888888888888888d0,
& 0.555555555555555d0/)
采用3个积分点计算线单元,则图示为 上面3个标有颜色的点,就是积分点的位置,根据等参元及数值积分的理论,当 时,有
对于质量 矩阵的求解,有类似的表达式,在此不过多赘述。