查看完整版本: [-- 自己用C语言写的FLAC3D建模小软件-根据surfer差分数据-更新windows版 --]

-> FLAC/FLAC3D -> 自己用C语言写的FLAC3D建模小软件-根据surfer差分数据-更新windows版 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

龙biscuit 2016-04-04 09:35

自己用C语言写的FLAC3D建模小软件-根据surfer差分数据-更新windows版

[attachment=299141][attachment=299142][attachment=299143]

下面是根据岩层上下表面用surfer差分建模:
[attachment=299144][attachment=299147]
[attachment=299148]
[attachment=299828]

[sell=2,money][/sell]

其中 1-* 为直接生成的网格信息文档,打开flac3d直接读入 2-*会自动将 1-* impgrid 进来建模,速度很快。当然也可以call 3-*命令式建模,速度较慢。里面没有源代码!
***********************************************华丽分割线****************************************************************
***********************************************下面稍微说下原理****************************************************************
其实主要是右手坐标系中节点分布规律:
[attachment=299146]

[attachment=299145]

节点编号:
当是一个单元体时,网格节点编号完全按照右手准则和书上的p0-p7顺序生成,只不过从p1开始罢了。
当是两个单元体时,比如在x方向增加一个单元体,那么会在第一个单元体x方向某一位置增加第9个节点(此位置在x方向节点编号最小的延长线上),并以此节点(9号节点)为假象的坐标原点,再按照右手准则递增节点,只不过在递增的过程中若遇到已经存在的节点占据了位置,则不在此位置产生新的节点号,而是顺延到下一位置。
当有多个单元体时先在x方向单元体号递增,之后在y之后再在z方向递增。
;************************
再说说单元包含哪些节点的规律:
知道单元体编号id先在x方向单元体号递增,之后在y之后再在z方向递增就能够知道单元体包含哪些节点了。但规律没有找出来。求大神指点啊
;****************************
group部分很好理解,ZGROUP关键字后面跟组名,换行下面跟本组单元体编号就可以了
;************************
[attachment=299842]first组是起伏地表,放在模型上部,下面再单独建一个长方体模型(长方体模型中有一隧道),将两者合并,初始平衡并开挖,计算平衡后得出下图:

[attachment=299829]

[attachment=299830]

  

升级成windows程序:

[attachment=318703]

内含使用视频,直接上传的话附件太多,百度网盘分享吧:链接:https://pan.baidu.com/s/1jIMnmDK 密码:egwm
要想用作flac3d5.0,需要转换一下,软件见:http://bbs.yantuchina.com/read.php?tid=297280
软件使用没有注册码什么的,好用就顶一下吧!
**************************转载请注明出处!http://bbs.yantuchina.com/post.php?action=modify&fid=139&tid=298313&pid=tpc&article=0#breadCrumb************************









cjz06 2016-04-05 07:25
C语言过时了

龙biscuit 2016-04-05 08:48
我用MATLAB先写了一下,可是发现速度很慢,用C语言就可以很快的完成,而且像这种简单处理文本文档数据感觉用C语言足够了。过时的东西能解决问题就好(感觉c语言并没有过时啊)。

诠释时尚 2016-04-06 08:07
C#飘过

龙biscuit 2016-04-06 10:13
诠释时尚:C#飘过[表情] [表情]  (2016-04-06 08:07) 

哈哈,c sharp写东西应该比c语言简单多了,但大学的时候就用c语言,习惯了,感觉挺好使的。但c写这种操作文本的小程序还是挺简单的,写界面和网络之类的就麻烦了。有时间了学学Python也挺好的。感觉Python和c结合一下,一般的问题都能解决了。
当然qt也是不错的。

zhj1113 2016-04-11 14:19
路过..........

1115900334 2016-04-24 17:30
这个模型5.0能用么?

1115900334 2016-04-24 18:25
怎么打开运行一会儿就停止运行了?

1115900334 2016-04-24 22:04
我按照程序里的做了一遍怎么停止运行了呢,是不是对surfer文件有要求啊

1115900334 2016-04-25 10:43
[attachment=299760]运行就是这个结果了……

ythugh 2016-04-26 12:57
麻烦能解释下,surfer差分数据是怎么操作吗?
我以为surfer是个画图软件。

ythugh 2016-04-26 13:33
感谢分享。

龙biscuit 2016-04-26 22:35
当然可以啊,我还写过一个“怎么解决flac3d5.0版本建模到3.0版本中不分组的问题
详细说明了两个版本之间*.flac3d的差别,并用Python语言编写了他们的转换代码。所以这个建出的模型可以用5.0直接 impgrid进来,但那个自动生成的建模命令是3.0的,5.0不能读入。

内容来自[短消息]

龙biscuit 2016-04-27 23:15
1115900334:[图片]运行就是这个结果了……
 (2016-04-25 10:43) 

1、检查数据是不是有问题.
2、是不是win7 64位,估计32位也可以。因为写的就是win32,除了win7不知道高版本操作系统会怎样。
3、使用了大数组,我的电脑是16G内存,所以刷刷的没问题。您不妨试试大内存电脑。
4、有什么问题可以联系我,欢迎交流。

龙biscuit 2016-04-27 23:16
ythugh:麻烦能解释下,surfer差分数据是怎么操作吗?
我以为surfer是个画图软件。 (2016-04-26 12:57)

surfer 的学习可以参考这个论文:FLAC3D 模型应力的Surfer可视化后处理,学生在知网上下载很方便


ythugh 2016-04-28 11:30
想问下,我导入到FLAC里面的是曲面的网格,如何进行曲面层分组。
我的X Y坐标不是从0 0 开始,当我涉及到开挖、支护的时候怎么确定位置坐标?

龙biscuit 2016-04-28 16:16
1115900334:怎么打开运行一会儿就停止运行了? (2016-04-24 18:25) 

可能您的电脑内存小了些,当时没注意把数组设的挺大的

龙biscuit 2016-04-28 16:17
1115900334:我按照程序里的做了一遍怎么停止运行了呢,是不是对surfer文件有要求啊 (2016-04-24 22:04) 

用surfer插分数据点,不就得到一个*.grd吗,再另存为*.dat,用这个小软件读入这个*.dat就可以了啊

龙biscuit 2016-04-28 16:27
您好,这个只适用于flac3d啊,不是2d的。另外我还写了一个窗口程序,挺好使的,不过只想给师弟用。这个小黑框框程序就是操作不太方便,源代码都差不多的啊。
[attachment=299836]

ythugh 2016-04-28 16:40
想问下,我导入到FLAC里面的是曲面的网格,如何进行曲面层分组。
我的X Y坐标不是从0 0 开始,当我涉及到开挖、支护的时候怎么确定位置坐标?

博古小金 2016-07-24 13:23
楼主真好人,好人一生平安!

龙biscuit 2016-07-30 19:38
诠释时尚:C#飘过[表情] [表情]  (2016-04-06 08:07) 

我也开始学习c#啦,哈哈。这边实验室师兄都用c#,要接轨。

rj911007 2016-07-31 12:00

cjason0922 2016-08-03 14:14
^^~感谢分享。

龙biscuit 2016-09-24 19:04
ythugh:想问下,我导入到FLAC里面的是曲面的网格,如何进行曲面层分组。
我的X Y坐标不是从0 0 开始,当我涉及到开挖、支护的时候怎么确定位置坐标? (2016-04-28 16:40) 

一组一组的导入啊,然后用group命令给各个组命名就行了啊

uranusmoon 2016-09-28 13:34
牛。三维地形看着逼真。

lhyeven 2016-10-02 14:14
太棒了,谢谢共享。

yantucy123 2016-10-05 16:19
感谢楼主分享

lhyeven 2016-10-07 12:56
很有便捷的工具,谢谢分享。

smile爱交流 2016-10-10 22:59
不错的东西,很好

龙biscuit 2018-01-06 18:59
1115900334:这个模型5.0能用么? (2016-04-24 17:30) 

5.0和3.0不一样,稍微改动一下就行了,见下面的博文:
http://blog.sina.com.cn/s/blog_8dd135170102wuy5.html

龙biscuit 2018-01-06 19:05
1115900334:这个模型5.0能用么? (2016-04-24 17:30) 

2.3.4.4 flac3d5.0版本和3.0版本模型网格信息差异
要把FLAC3D5.0建立的模型带组导入3.0版本使用,首先需要知道两个版本网格信息文档*.flac3d之间格式的差别,将5.0版本的*.flac3d修改成3.0版本的*.flac3d格式即可供3.0版本使用,否则导入的模型将没有分组信息,给后续开挖等步骤带来不便。
分别在5.0和3.0版本FLAC3D中运行如下命令:
Flac3d Code
1
2
3
4
5
6        new
gen zon bri size 3 3 3
group roof range z 2 3
group floor range z 0 1
plot zone
expgrid flac3d300modelgroup.flac3d
与前面flac3d3.0版本建立同样模型并导出网格信息,内容简要如下:
* FLAC3D grid produced by FLAC3D 5.00 Release 093
* 周四 四月 23 13:51:42 2015
* GRIDPOINTS
G 1   0.00000000000000e+00   0.00000000000000e+00   0.00000000000000e+00
G 2   1.00000000000000e+00   0.00000000000000e+00   0.00000000000000e+00
G 3   0.00000000000000e+00   1.00000000000000e+00   0.00000000000000e+00
......
* ZONES
Z B8 1 1 2 3 4 5 6 7 8
Z B8 2 2 9 5 7 10 8 11 12
Z B8 3 9 13 10 11 14 12 15 16
......
* GROUPS
ZGROUP 'floor' SLOT 1
1 2 3 4 5 6 7 8 9
ZGROUP 'roof' SLOT 1
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
25 26 27

可以看出flac3d3.0版本和5.0版本只有第一行注释行内容以及各组组名后内容不同,其余信息完全一样。需要注意的是,flac3d5.00可以直接读入flac3d3.00版本用expgrid 输出的带组的模型信息,但3.0版本直接读5.0版本expgrid 输出的带组的模型信息会忽略已经分好的组。基于此做法就是把相应的题头改为相同即可。把组名的单引号和后面的SLOT 1去掉,比如 'floor' SLOT 1改为floor即可,余同。FLAC3D5.0版本生成的模型信息文档做此改动完成后即可供3.0版本带组读入。
2.3.4.5 flac3d5.0版本建模供3.0版本使用的Python语言处理
根据以上原理,只需要替换的函数将之替换为符合要求的形式即可,具体代码如下:
Python Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23        # -*- coding: cp936 -*-
"""
Created on Sun Dec 27 08:00:44 2015
@author: binglongzhu
"""
temp=input('flac3d5.0model.flac3d模型信息文档输出后改名为flac3d5.flac3d,然后把这个小软件和flac3d5.flac3d放在同目录文件夹下,双击这个小程序就可以得到结果,最后会在同目录下生成flac3d300.flac3d供flac3d3.0直接使用。下面输入1后回车开始转换:')
import os
os.chdir(os.getcwd())       # 跳到当前目录
if not os.path.exists('flac3d5.flac3d'): # 看一下这个文件是否存在
    print('没有找到flac3d5.flac3d')
    exit(-1)  
else:                       #不存在就退出
    os.rename('flac3d5.flac3d','flac3d5.txt')
    lines = open('flac3d5.txt').readlines()  #打开文件,读入每一行
    fp = open('flac3d3.txt','w')  #打开你要写得文件test2.txt
    for s in lines:
    # replace是替换,write是写入
        fp.write( s.replace("'",'').replace('SLOT 1',''))    
    fp.close()  # 关闭文件
    os.rename('flac3d3.txt','flac3d300.flac3d')
    os.rename('flac3d5.txt','flac3d5.flac3d')    
print '已经在同目录下生成了flac3d5.flac3d供flac3d3.0使用'
但这段代码仅适用于电脑上安装有Python2.7的用户,若没有安装则无法使用。若把这段代码转换为可执行程序就可以使用了,下面介绍这一过程。
写好Python代码调试成功后另存为myscript.py。之后下载py2exe软件软件链接:http://pan.baidu.com/s/1qWTeGwO 密码:kqhx(或在网上下载一个)并安装。
首先在D盘新建一个example的文件,里面存放着mysetup.py和自己的Python代码myscript.py文档。其中mysetup.py的内容为:
Python Code
1
2
3
4
5
        # mysetup.py
from distutils.core import setup
import py2exe

setup(console=["myscript.py"])
myscript.py文档内容即为上述不能直接执行的转换代码。
菜单-运行-输入cmd-进入控制台命令窗口:
依次输入:
d:                        回车(进入d盘)
cd "D:\example"            回车(进入d盘的example文件夹)
mysetup.py py2exe        回车(开始执行转换,最终在dist文件夹内生成myscript.exe)

图2.35 控制台输入命令执行py2exe
Fig.2.35 Input command in console to execute py2exe
执行成功结果:

图2.36 转换成功提示
Fig.2.36 Tips of successful conversion

软件作用:解决flac3d5.0版本模型节点信息供FLAC3D3.0版本建模时无法带组导入的问题。
使用方法:把flac3d500生成的模型节点信息export为flac3d5.flac3d后,将软件和flac3d5.flac3d放在“flac3d模型格式转换软件.exe”同目录下(即“flac3d5.0版本带组export供3.0版本import转换软件”文件夹里),运行“flac3d模型格式转换软件.exe”即可生成flac3d300.flac3d直接供flac3d3.0软件import生成模型。
注意:
1.如果想自己在flac3d 3.0版本里给已经命名的组重新命名的话请用:group new_name range group old_name[81]。
2.如果在flac3d3.0里发现有None组的情况,请运行:group my_name_none range group  即可,group后面不加老名称即默认把None重命名为my_name_none。
3.如果想观察到底哪些部分是None组,在进行第2步之后,可以输入: model null range group my_name_none  然后再输入:  plot  sur yellow null on即可。
4.需要注意的是,flac3d500可以直接读入flac3d300版本用expgrid 输出的带组的模型信息

龙biscuit 2018-01-06 19:06
1115900334:[图片]运行就是这个结果了……
 (2016-04-25 10:43) 

更新了一个windows版本的,你试试

87642189 2018-04-28 14:44
厉害了,赞一个!

转瞬间的回眸 2019-04-21 13:25
很实用,非常感谢

Eyas1225744188 2020-04-05 21:47

wazoch 2020-07-29 17:04
怎么运行就停止了呢


查看完整版本: [-- 自己用C语言写的FLAC3D建模小软件-根据surfer差分数据-更新windows版 --] [-- top --]



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