;; 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号节点的地址。