首页/文章/ 详情

beam单元弯矩图的绘制方法

7天前浏览26
摘要:本文介绍了一种基于Origin的beam单元弯矩云图绘制方法,该方法可为Flac3d各类结构单元后处理提供参考。

1.问题来源

问题来源于某二手交易平台,这位卖家在Flac3d里面实现了以下效果,让人不得不膜拜大佬。

图1-1 问题来源

我对于如何仅使用Flac3D实现上述效果毫无头绪,因此我采用Flac3D结合Origin(版本号:2018C)的方式间接绘制beam单元弯矩云图,供大家参考。

2.案例介绍及代码

选取一跨简支梁作为案例,梁长l=10m,在全梁上受集度为q=10kN/m的均布荷载作用。计算图示如下:

图2-1 计算图示

根据材料力学知识,易知本案例中梁体弯矩呈抛物线分布,最大弯矩值Mmax=125kN·m计算代码参考内置案例"Simple Beam—Two Equal Concentrated Loads—Beam Elements"进行编写,详情如下








model newstruct beam create by-line ( 0, 0, 0) ( 10 0, 0) id=1 segments= 50struct beam property young=2e11 poisson=0.30 cross-sectional-area=6e-3 moi-polar=0.0 moi-y=200e-6 moi-z=200e-6struct node fix velocity-y rotation-x rotation-z                  struct node fix velocity-z range union position-x=0 position-x=10struct beam apply 0 -1e4 model solve ratio-local 1e-7

图2-2 弯矩计算结果

由图2-2可知,Flac3D计算出的最大弯矩值与理论值基本一致。计算完成后,将梁单元弯矩以“.txt”的格式输出,代码如下:


















fish def _dataExport   ;将第一个端点至倒数第二个端点处的弯矩值依次输出至table    count = 1    loop foreach sp struct.list        np = struct.node(sp,1)        table.x(1,count) = struct.node.pos.x(np)        table.y(1,count) = struct.beam.moment.y(sp,1)        count += 1    endloop    ;输出另一侧端点处的弯矩值至table    np = struct.node(sp,2)    table.x(1,count) = struct.node.pos.x(np)    table.y(1,count) = struct.beam.moment.y(sp,2)end@_dataExport;将table数据输出至txt文件table '1' export 'moment.txt'

图2-3 弯矩输出结果

3.数据处理与绘图

3.1 数据处理

数据处理步骤如下:

(1)新建一个excel文件并打开

(2)在excel内打开moment.txt文件

3.2 图形绘制

(1)绘制曲线图。将处理好的数据导入origin并绘制折线图。

(2)图形填充。点击图线,勾选填充曲线之下的区域,点击应用。

(3)面积映射。在上一步的界面下点击图案,按下图顺序将映射选择为ColB并点击确定。如果想要改变填充颜色,可点击右上角颜色映射>加载调色板>选择调色板进行选取。

对于开口向下的抛物线,到这一步已经完成填充。对于开口向上的抛物线,则需要双击坐标轴后按步骤添加网格附加线。左、右向开口的曲线亦按上述步骤操作。

填充后的图形如下所示:

(4)创建图例。点击左侧工具栏按钮添加颜色标尺,并右键选择属性,勾选隐藏头尾两级。

(5)根据个人审美,在Origin中调整图片大小、坐标轴显示格式、图例显示格式等。最终成果如下所示。

图3-1 弯矩图

4.其他

以上仅为个人见解。水平有限,难免有错,敬请谅解。读者若能在Flac3D中直接实现弯矩图绘制,恳请大方分享。


来源:FLAC3D小技巧
ADS理论FLAC3D材料Origin
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-12-14
最近编辑:7天前
FLAC3D小技巧
硕士 专注FLAC3D中的小技巧分享...
获赞 38粉丝 219文章 41课程 0
点赞
收藏
作者推荐

关于fish函数按指定步数执行的探讨

本文摘要(由AI生成):本文对fish函数按指定步数执行进行粗略探讨。首先介绍了在①群中提出的问题,然后对fish函数的执行方式进行了讨论。在讨论中,提到了whilestepping关键字,它可以使函数在每一步自动执行,而无需使用“@函数名”的方式执行函数。此外,还介绍了fishcallback命令,它可以在指定步数执行函数。最后,还讨论了fishhistory命令的使用,它可以通过指定间隔来控制函数执行的步距,且无需指定whilestepping。摘要:本文对fish函数按指定步数执行进行粗略探讨。1.问题来源在①群中,有小伙伴提出了如下问题:图1-1问题来源以上问题得到了如下回复:图1-2问题来源基于以上背景,我对fish函数的执行方式进行粗略讨论。2.正文及代码modelnewmodellargestrainoff[i=0]fishdeftesti=i+1io.out('Thefunctionhasbeenexecuted'+string(i)+'times.')end@testmodelcycle100上述代码是常规的fish执行方式。虽然运算了100步(cyclesorsteps),但fish函数仅执行一次,输出结果为"Thefunctionhasbeenexecuted1times"。modelnewmodellargestrainoff[i=0]fishdeftestwhilesteppingi=i+1io.out('Thefunctionhasbeenexecuted'+string(i)+'times.')endmodelcycle100如果在函数第一行加上whilestepping关键字,则函数将在每一步(everycycleorstep)自动执行,无需使用“@函数名”的方式执行函数,输出结果为"Thefunctionhasbeenexecuted100times"。如果在end后添加了“@函数名”,函数将在modelcycle前执行一次,输出结果为"Thefunctionhasbeenexecuted101times."。此外,help文件中还指出"ThisstatementcausestheFISHfunctiontobeexecutedatthecyclepoint-1.0(seelistcyclesequence)",见下图:图2-1whilestepping说明这就是说whilestepping与"fishcallbackadd@函数名-1.0"等价,测试代码如下:modelnewmodellargestrainoff[i=0]fishdeftesti=i+1io.out('Thefunctionhasbeenexecuted'+string(i)+'times.')endfishcallbackadd@test-1.0modelcycle100上述代码输出结果为"Thefunctionhasbeenexecuted100times"。如果仅想在某一段计算中采用whilestepping,则需要采用"fishcallbackremove"命令,详细介绍请查阅说明书。测试代码如下:modelnewmodellargestrainoff[i=0]fishdeftesti=i+1io.out('Thefunctionhasbeenexecuted'+string(i)+'times.')endfishcallbackadd@test-1.0modelcycle100fishcallbackremove@test-1.0modelcycle100执行上述代码后发现,函数仅在前100步执行,输出结果为"Thefunctionhasbeenexecuted100times"。现在回到最初的问题“如何每100步调用一次fish函数”,图1-2的代码是正确的,但是问题在于add关键字后面的数字如何选择?根据help文件的解释,add后面应该跟一个cyclepoint,见下图:图2-2cyclepoint如果对于以上cyclepoint不了解而随意指定的话,则会出现一些问题,比如:fishcallbackadd@xxx80interval100按照我的理解就是在流体计算中每100步调用一次函数。但如果我们不进行流体计算的话,上述命令就会和我们的初衷大相径庭。因此,我选用-1.0(即whilestepping的cyclepoint),防止出现一些错误。测试代码如下:modelnewmodellargestrainoff[i=0]fishdeftesti=i+1io.out('Thefunctionhasbeenexecuted'+string(i)+'times.')endfishcallbackadd@test1.0interval100modelcycle1000上述代码输出结果为"Thefunctionhasbeenexecuted10times",实现了每100步调用一次函数。按理说,本文到此就应该结束,但我在写文章的时候突然想到了fishhistory命令。我们在使用这个命令记录变量值时,是否需要添加whilestepping呢?fishhistory使用形式可以参考这篇文章:fishhistory用法呱太Gekota,公众号:FLAC3D小技巧FLAC3D6.0——history常见问题解答测试代码如下:modelnewmodellargestrainoff[i=0]fishdeftesti+=1io.out('Thefunctionhasbeenexecuted'+string(i)+'times.')endhistoryinterval1fishhistory@testfishhistory@imodelcycle100图2-3监测结果上述代码输出结果为"Thefunctionhasbeenexecuted100times"。modelnewmodellargestrainoff[i=0]fishdeftesti+=1io.out('Thefunctionhasbeenexecuted'+string(i)+'times.')endhistoryinterval100fishhistory@testfishhistory@imodelcycle1000上述代码输出结果为"Thefunctionhasbeenexecuted10times"。由此可知,还可以通过fishhistory来控制函数执行的步距,且无需指定whilestepping。来源:FLAC3D小技巧

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