查看完整版本: [-- [共享]郑文棠老师Flac3D2Tecplot_new.dat代码的自我理解,哈哈 --]

-> FLAC/FLAC3D -> [共享]郑文棠老师Flac3D2Tecplot_new.dat代码的自我理解,哈哈 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

龙biscuit 2015-04-02 16:43

[共享]郑文棠老师Flac3D2Tecplot_new.dat代码的自我理解,哈哈


在看郑海棠老师Flac3D2Tecplot_new.dat时看到info_flag时看不懂了,请问info_flag在flac3d 3.0版本fish语言中是什么意思啊?



;; Write gp-related data,such as Coordinates and Displacements,写与节点相关的数据,例如坐标和位移
def write_gp_info
    p_gp = gp_head
    loop while p_gp # null
        buf(1) = ''
        loop i(1,N_RECORD); 数据每5个存放一行
            if p_gp # null then
                caseof info_flag;什么意思?
                    case 0
                        buf(1) = buf(1) + string(gp_xpos(p_gp)) + '  ';某节点x坐标
                    case 1
                        buf(1) = buf(1) + string(gp_ypos(p_gp)) + '  '
                    case 2
                        buf(1) = buf(1) + string(gp_zpos(p_gp)) + '  '
                    case 4
                    get_gp_disp;计算某节点位移大小
                        buf(1) = buf(1) + string(gp_disp*1000) + '  '

                    case 8
                        buf(1) = buf(1) + string(gp_xdisp(p_gp)*1000) + '  ';某节点x方向位移
                    case 16
                        buf(1) = buf(1) + string(gp_ydisp(p_gp)*1000) + '  '
                    case 32
                        buf(1) = buf(1) + string(gp_zdisp(p_gp)*1000) + '  '                        
                endcase
                p_gp = gp_next(p_gp)
            endif
        endloop
        status = write(buf,1)
    endloop
end





北伊 2015-04-03 08:45
名字而已,换个别的名字,也可以吧?

龙biscuit 2015-04-03 10:35
恩,我昨天研究了一下午,看到后面才明白是什么意思。info_flag只是一个变量,给他不同的值只是为了调用case下不同的代码,info_flag=2、4、8、16等可能因为是2的指数程序在二进制的电脑上运行的更快。
另外,我在这里介绍一下这个程序的主要结构吧。
首先是初始化函数ini_mesh2tec,在这里规定了读写的方式(0或1),
“N_RECORD = 5 ;;;;;;;;;;;;;;;; 数据每5个存放一行
ZONE_NGP = z_numgp(zone_head)”这两句话是没用的,删掉也行,可能是郑老师日理万机忘了删掉了。
接着array buf(1)定义了一个一维数组,这个数组名字可以自己定啦,buf1、buf2都可以啦,嘿嘿。
接着tec_file = 'tec10.dat'定义了结果输出文档名称并赋值给tec_file 。
接着是“  
command
        ;group haitang range group 6 any group 7 any
        ;model null range group haitang not
        ran name tec_range    
    endcommand”,这是要把不想显示的组通过flac3d命令去除。做法就是在“ran name tec_range  ”的tec_range后面加上组名,例如“
command
        group haitang range group 6 any group 7 any
        ;model null range group haitang not
        ran name tec_range group haitang
    endcommand”,另外限定范围的方法不止一种啦,可以通过两平面之间限定,总之可以通过坐标、平面和组三种中的任意一种、两种、三种方法来限定范围,具体我就不细讲怎样限定了。需要注意的是flac3d的命令写在fish语言的def里面时一定在命令上下分别加上“command 、endcommand”。
接着“end”结束了初始化函数ini_mesh2tec的定义。
接着“ini_mesh2tec”运行ini_mesh2tec函数。
接下来我大概讲一下郑老师程序的结构吧,等有时间了再细讲。
郑老师的程序主要有:
首先主函数Wait,
接着初始化函数ini_mesh2tec
接着是 是否显示组即是否为空判断函数plotit,
接着是模型共计及非空部分模型分别共计多少单元体计算函数get_nzone
接着是输出文档开头部分书写函数write_head(写tecplot可以识别的文档的开头部分函数write_head),tecplot提供了两种数据读入格式,一个是变量紧跟坐标的,另一种是先输入坐标完成,再分别输入各变量的。郑老师用的第二种,因为buf变量不可能缓存太多东西,有了东西就要写入文档(硬盘中),而buf是一维数组,不可能在文档中写完第一列在去写第二列,所以理所当然的用了第二种数据格式。
接着是计算节点总位移的get_gp_disp函数
接着是写节点信息函数write_gp_info,包括节点的坐标,位移。注意status = write(buf,1)是写入文档了,循环一次写入一次,另外会发现这个函数在这里并没有即刻执行,而是在主函数Wait中执行的。
接着是写单元体信息有关的函数write_zone_info,包括单元体中存储的各种力。注意本函数也不是立即执行的,而是被Wait函数调用执行的;被调用时不同的单元体调用本函数(write_zone_info)的不同部分是通过case语句实现的。
接着是单元体结构写出函数write_zone,z_code(p_z)返回的是网格码,z_code(p_z)=0、1、2、4分别是brick、wedge、pyramid和tetra。其中z_gp(p_z, 1)是p_z所指单元体1号节点的地址。

哈哈,最后就是主函数Wait:
除了先前执行的几个函数,比如ini_mesh2tec、get_nzone,剩下的函数包括write_head和三大计算子函数write_gp_info、write_zone_info和write_zone都是在Wait函数中被调用执行的,当然三大子函数也调用了别的比如plot_test和get_nzone函数。三大子函数执行完成后会输出信息,用语句ii = out(),最后,通过最后的Wait来执行这个主函数,也就是说除了ini_mesh2tec、get_nzone先行执行外,接下来就是所用的声明语句,直到遇到最后的Wait时flac3d才去找 def Wait,之后往下执行,遇到某个函数(肯定是三大计算子函数顺序执行了)就去上面调用某个子函数,最后运行到ii = out()。哈哈,这样就完成了模型数据的提取,且是tecplot可以读取的格式。

龙biscuit 2015-04-16 18:46
恩,是的。已经搞明白了

937666139 2015-05-08 21:09
你有完整的flac3d2tecplot.dat文件吗 ,给我发一份呗 ,937666139@qq.com谢谢 了

龙biscuit 2015-05-10 08:49
937666139:你有完整的flac3d2tecplot.dat文件吗 ,给我发一份呗 ,937666139@qq.com谢谢 了  (2015-05-08 21:09) 

已发,请接收

a724263751 2015-08-21 10:15
龙biscuit:已发,请接收 (2015-05-10 08:49) 

麻烦您给我发一份完整的接口程序,能用在flac3d5.0,谢谢您 724263751@qq.com

a570705800 2015-08-26 18:09
yonghezp@163.com,给我也来一份,三克油。

龙biscuit 2015-08-26 22:45
http://blog.sina.com.cn/s/blog_8dd135170102vohm.html

内容来自[短消息]

龙biscuit 2015-08-26 22:46
http://blog.sina.com.cn/s/blog_8dd135170102vohm.html

龙biscuit 2015-08-26 22:48
一份完整的接口程序,能用在flac3d5.0  http://blog.sina.com.cn/s/blog_8dd135170102vohm.html
一份完整的接口程序,能用在flac3d3.0 http://blog.sina.com.cn/s/blog_8dd135170102voho.html

salanghee 2015-09-24 19:40
楼主分享的链接真给力,加十分!!

psf0504 2016-03-07 20:03
分析的太好了,最近在想怎么把郑老师的程序改造下,把偏应力场导出来,楼主的分析太给力了,很想请教下

psf0504 2016-03-08 09:35
期盼楼主能分享一个更加详细的解释,非常期待

龙biscuit 2016-03-10 23:13
psf0504:分析的太好了,最近在想怎么把郑老师的程序改造下,把偏应力场导出来,楼主的分析太给力了,很想请教下 (2016-03-07 20:03) 

其实我没有试过,最近考博要复试了,等过了这一段时间吧。另外偏应力是哪些?我对tecplot的数据结构也是一知半解,看过资料也没有明白。只能试着模仿大牛的代码,不知道能不能搞定。复试过了再试试吧

lllpw123 2016-03-13 20:00
感谢分享

caozheng612 2017-01-25 14:47
楼主分享的链接很有用

695351897 2018-11-06 10:54
龙biscuit:一份完整的接口程序,能用在flac3d5.0  http://blog.sina.com.cn/s/blog_8dd135170102vohm.html
一份完整的接口程序,能用在flac3d3.0 http://blog.sina.com.cn/s/blog_8dd135170102voho.html
 (2015-08-26 22:48) 

我用的版本是5.0,根据姐提供的连接,复制下来后用在flac中老是出错,姐能另外提供一份好用的吗695351897@qq.com

small sea 2019-01-05 19:33
龙biscuit:已发,请接收 (2015-05-10 08:49) 

能给我发一份flac3d2tecplot.dat吗 我QQ号2603729643@qq.com

yiheng187 2019-06-18 17:39
请问转换后的tecplot文件在哪里,我找不到


查看完整版本: [-- [共享]郑文棠老师Flac3D2Tecplot_new.dat代码的自我理解,哈哈 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Time 0.016826 second(s),query:5 Gzip enabled