首页/文章/ 详情

【后处理探讨】FLAC实现计算结果对称**

27天前浏览1317
摘要:本文对FLAC3D实现计算结果对称复 制进行了探讨。

1.问题来源

在③群中,有小伙伴提出了如下问题:

图1-1 问题来源

基于以上背景,本文对FLAC3D计算结果的对称复 制进行了讨论,其中计算案例来自《厚壁圆筒问题径向、切向应力求解及Extra云图显示》。

案例背景

厚壁圆筒问题径向、切向应力求解及Extra云图显示

 2.正文及代码

2.1 初始计算

《厚壁圆筒问题径向、切向应力求解及Extra云图显示》一文中,我采取建立完整圆筒模型进行计算。在本文中,我仅建立1/4圆环进行计算,并将结算结果对称复 制为整个圆环。

图2-1 计算模型

计算模型位移、径向应力、切向应力代码如下:

    import itasca as itit.command("python-reset-state false")# 模型参数r1 = 50  # 内半径/mmr2 = 100  # 外半径/mmth = 5  # 轴向厚度/mms_r = 30  # 径向网格数量s_th = 1  # 轴向网格数量s_t = 30  # 环向网格数量E = 2e5  # 弹性模量/MPav = 0.3  # 泊松比p = -10  # 内孔压力/MPa# 建模计算it.command("""          model new          model largestrain off          zone create cylindrical-shell point 0(0,0,0) point 1({0},0,0) point 2(0,{1},0) point 3(0,0,{0}) ...                                       point 4({0},{1},0) point 5(0,{1},{0}) point 8({2},0,0) ...                                       point 9(0,0,{2}) point 10({2},{1},0) point 11(0,{1},{2}) size {3} {4} {5}          zone group 'zone1'          zone cmodel assign elastic          zone property young {6} poisson {7}          zone face skin         zone face apply velocity-normal 0 range group 'west2' or 'bottom'          zone face apply stress-normal {8} range group 'west1'          model solve          """.format(r2, th, r1, s_r, s_th, s_t, E, v, p))# 圆心坐标xc = 0.0zc = 0.0# 遍历求解各单元径向、切向应力for z in it.zone.list():    xz = z.pos_x()    zz = z.pos_z()    r = math.sqrt((xz-xc)**2+(zz-zc)**2)    sin = zz/r    cos = xz/r    sxx = z.stress()[0][0]    szz = z.stress()[2][2]    sxz = z.stress()[2][0]    sig_r = sxx*cos**2+szz*sin**2+2*sxz*cos*sin    sig_t = sxx*sin**2+szz*cos**2-2*sxz*cos*sin    z.set_extra(1, sig_r)    z.set_extra(2, sig_t)    z.set_extra(3, z.stress()[0][0])

    模型位移、径向应力、切向应力计算结果如下所示。与上文计算结果对比可知:采用1/4模型进行计算,其结果与采用完整模型计算几乎无差别。

    图2-2 位移云图(1/4模型)

    图2-3 径向应力云图(1/4模型)

    图2-4 切向应力云图(1/4模型)

    2.2 单元(zone)计算结果的对称复 制

    对于单元(zone),在计算完成后对模型进行对称复 制,其部分结算结果会随着单元的复 制而自动复 制,如应变增量(strain-increment)。但结果与建立全模型时的结果不一致,见下图

    1/4模型-对称复 制单元

    全模型

    图2-5 XX应变云图结果对比

    但有一部分计算结果压根就不会被复 制,如下图的stress-xx云图:

    1/4模型-对称复 制单元

    全模型
    图2-6 XX应力云图

    在我查看Extra云图时,发现定义的Extra云图均随着模型的对称复 制而自动复 制,数值仅有细微偏差(个人猜测是由于对称前后的单元插值环境不同以及边界条件不同导致的)

    图2-7 径向应力云图(1/4模型-对称复 制单元

    图2-8 切向应力云图(1/4模型-对称复 制单元

    于是,我有了如下猜测:只需要把想要复 制的单元计算结果转移到Extra云图,即可实现单元计算结果的对称复 制。以图2-6~图2-7为例,在计算完成后,将XX应变与XX应力写入到Extra云图后再对模型进行对称复 制,代码如下:

      # 遍历求解各单元xx单元应变、应力for z in it.zone.list():    z.set_extra(3,z.strain()[0][0])    z.set_extra(4, z.stress()[0][0])

      运行上述代码并对称复 制模型后,得到的xx单元应变、应力云图如下所示:

      图2-9 XX应变云图(1/4模型-对称复 制单元-Extra云图)

      图2-9 XX应变云图(1/4模型-对称复 制单元-Extra云图)

      由图2-8~图2-9可以看出,采用将单元计算结果导入Extra云图的方式可以实现单元计算结果的对称复 制。

      说明1:为了方便,本文代码以Python编写,但也可以采用fish进行实现,相关函数框架可查询往期发布,包括但不限于:

      遍历及其框架教学

      FLAC3D 6.0新手向——遍历详解

      指针获取教学

      FLAC3D6.0各类指针获取详解

      说明2:云图标题可通过Legend中的Title进行修改,如下所示:

      图2-10 修改Extra云图标题

      2.3 网格点(gridpoint)计算结果的对称复 制

      对于网格点(gridpoint),在计算完成后对模型进行对称复 制,其结算结果和Extra均不会随着单元的复 制而自动复 制,以位移为例,结果见下图。

      1/4模型-Extra云图

      1/4模型-合位移云图

      图2-11 合位移云图

      因此,为了实现网格点计算结果的对称复 制,就需要人为赋值。要实现这个功能,就需要我们回忆一下一点点高中知识:如何求解一个点关于一个面的对称点坐标。

      对于绝大多数情况而言,对称平面都是YOZ/XOY/XOZ面或与其平行的平面。如左右对称复 制模型时,对称平面为YOZ平面,此时假设原模型中的一点P(x1,y1,z1),显然其关于YOZ平面(X=x0)的对称点P'为(x1-2*x0,y1,z1)。

      图2-12 对称点坐标关系示意图

      因此,我们只需要计算出对称点坐标,并将原模型各个网格点的计算结果赋给对称点即可。效果如下所示。两种计算方式下位移值有所不同,初步考虑是全模型、1/4模型的边界条件不同导致的。

      1/4模型-对称复 制单元-Extra云图

      全模型

      图2-13 合位移云图

      为了使上述代码更具普适性,考虑模型关于YOZ/XOY/XOZ平面对称的情况(比如本例建立1/8模型进行计算)。此时,同样仅需要采用Python求取原网格点关于对称平面的对称点坐标然后赋值即可。

      来源:FLAC3D小技巧

      附件

      免费链接.txt
      pythonFLAC3D
      著作权归作者所有,欢迎分享,未经许可,不得转载
      首次发布时间:2024-04-21
      最近编辑:27天前
      FLAC3D小技巧
      硕士 专注FLAC3D中的小技巧分享...
      获赞 24粉丝 118文章 40课程 0
      点赞
      收藏

      作者推荐

      未登录
      还没有评论

      课程
      培训
      服务
      行家

      VIP会员 学习 福利任务 兑换礼品
      下载APP
      联系我们
      帮助与反馈