首页/文章/ 详情

批量生成测量圆检测试样

1年前浏览4891

    测量圆往往是我们进行后处理的工具,可以输出试样中的孔隙率、应力、应变率、配位数。

    测量圆的布置是我们首先要做的事情,这里编写了一个可以在指定区域生成指定数目大小的测量圆,代码如下:

    我们需要输入,测量圆生成区域的范围(x_min、x_max、y_min、y_max),还需要横向和竖向的数目(n_x、n_y),也需要半径(rad)。就可以自动生成测量圆了,这部分代码放于measure_tools文件中,之后在主程序中调用。

    def create_measure(x_min,x_max,y_min,y_max,n_x,n_y,rad)    if n_x=1 then        split_x=0    else        split_x=(x_max-x_min-2*rad)/float(n_x-1)    endif    if n_y=1 then        split_y=0    else        split_y=(y_max-y_min-2*rad)/float(n_y-1)    endif    loop local n(1,n_x)        x_pos=x_min rad split_x*(n-1)        loop local m(1,n_y)            y_pos=y_min rad split_y*(m-1)            command                measure create position [x_pos] [y_pos] radius [rad]            endcommand        endloop    endloopend

        这里用个demo测试一下,以昨天的成样结果为对象,生成20行1列的测量圆。

      restore sample_brickcall measure_tools@create_measure([-width*0.1],[width*0.1],[-height*0.5],[height*0.5],1,20,[height*0.1])

      结果为:

      这里的参数可以自动调整,比如10行2列的测量圆:

        restore sample_brickcall measure_tools@create_measure([-width*0.15],[width*0.15],[-height*0.5],[height*0.5],2,10,[height*0.1])

            在measure_tools文件中编写了输出孔隙率表格的函数,可以将一行或者一列测量圆的孔隙率输出,这个功能后续还可以继续开发。

          def get_poro_x    tb_poro=table.create("poro")    loop foreach mp measure.list        table(tb_poro,measure.pos.x(mp))=measure.porosity(mp)    endloopenddef get_poro_y    tb_poro=table.create("poro")    loop foreach mp measure.list        table(tb_poro,measure.pos.y(mp))=measure.porosity(mp)    endloopenddef get_poro_xy    tb_poro=table.create("poro")    tb_x_pos=table.create("x_pos")    tb_y_pos=table.create("y_pos")    loop foreach mp measure.list        table(tb_poro,measure.id(mp))=measure.porosity(mp)    endloop    loop foreach mp measure.list        table(tb_x_pos,measure.id(mp))=measure.pos.x(mp)    endloop    loop foreach mp measure.list        table(tb_y_pos,measure.id(mp))=measure.pos.y(mp)    endloopend

          主程序为:

            restore sample_brickcall measure_tools@create_measure([-width*0.1],[width*0.1],[-height*0.5],[height*0.5],1,20,[height*0.1])@get_poro_y

            结果显示table:

            这里的绿色线就是孔隙率随着y坐标的变化。

            将table输出csv,把昨天的成样结果绘制一张图,结果为,可以看出来不光是视觉效果,孔隙率分布上分层压缩法都是比较好的。


            将测量圆满布于试样中最后输出坐标和孔隙率:

              restore sample_generate_1_4call measure_tools@create_measure([-width*0.5],[width*0.5],[-height*0.5],[height*0.5],20,20,[height*0.1])@get_poro_xy

              如图:

              输出在origin中绘制三维图:

              当然云图也直观一点:

                  这个是分层压缩法的孔隙率分布情况,感觉这个规律还是比较复杂的,所以某些学者提出的某些准则是否适用还需要打个问号。

              来源:超级大的lobby
              科普代码&命令PFC
              著作权归作者所有,欢迎分享,未经许可,不得转载
              首次发布时间:2022-09-28
              最近编辑:1年前
              lobby
              硕士 |擅长颗粒流PFC
              获赞 834粉丝 4494文章 84课程 21
              点赞
              收藏
              未登录
              2条评论
              仿真秀0723134322
              签名征集中
              1月前
              测量圆测量的数据会随着单轴加载的变化而变化吗
              回复
              m
              签名征集中
              9月前
              x_pos=x_min rad split_x*(n-1)
              y_pos=y_min rad split_y*(m-1)
              为什么这两个代码一直在报错啊?
              回复 2条回复
              课程
              培训
              服务
              行家
              VIP会员 学习 福利任务 兑换礼品
              下载APP
              联系我们
              帮助与反馈