找回密码
 注册
Simdroid-非首页
查看: 319|回复: 9

[命令/FISH] 在fish命令中如何遍历部分节点?

[复制链接]
发表于 2014-11-6 15:10:12 | 显示全部楼层 |阅读模式 来自 北京
遇到了这个问题,在循环中如何只遍历需要的那部分节点?
发表于 2016-3-14 03:13:36 | 显示全部楼层 来自 北京
Simdroid开发平台
可以用range限定啊,比如两平面夹逼限定范围内:
  1.     range name Lay2 plane nor 0 0 1 ori 0 0 47  below;根据自己模型选定夹逼上表面
  2.     range name Lay1 plane nor 0 0 1 ori 0 0 43.8 above;根据自己模型选定夹逼下表面
  3.     ran name tec_range Lay2 Lay1 ;上下表面之间夹逼要输出节点位置并命名夹逼空间
复制代码

若需要限定平面内某一列x从30到31范围内:
  1.     range name Lay2 plane nor 0 0 1 ori 0 0 47  below;根据自己模型选定夹逼上表面
  2.     range name Lay1 plane nor 0 0 1 ori 0 0 43.8 above;根据自己模型选定夹逼下表面
  3.     ran name tec_range Lay2 Lay1 x 30 31 ;上下表面之间夹逼要输出节点位置并命名夹逼空间
复制代码

回复 1 不支持 0

使用道具 举报

发表于 2014-12-17 14:58:15 | 显示全部楼层 来自 江苏南京
楼主知道了吗?我也想问啊
回复 不支持

使用道具 举报

发表于 2015-1-10 13:17:02 | 显示全部楼层 来自 湖南湘潭
楼主找到了么 我也想知道呀
回复 不支持

使用道具 举报

发表于 2016-1-3 23:17:27 | 显示全部楼层 来自 上海
rosilynn 发表于 2015-1-10 13:17
楼主找到了么 我也想知道呀

楼主找到了么 ?
回复 不支持

使用道具 举报

发表于 2016-9-11 15:53:04 | 显示全部楼层 来自 湖北武汉
龙biscuit 发表于 2016-3-14 03:13
可以用range限定啊,比如两平面夹逼限定范围内:

若需要限定平面内某一列x从30到31范围内:

如果只想遍历模型一个表面上的节点呢?比如地形面
回复 不支持

使用道具 举报

发表于 2017-10-3 21:05:59 | 显示全部楼层 来自 湖北武汉
龙biscuit 发表于 2016-3-14 03:13
可以用range限定啊,比如两平面夹逼限定范围内:

若需要限定平面内某一列x从30到31范围内:

:hug::hug::hug::hug::hug:
回复 不支持

使用道具 举报

发表于 2018-7-15 11:24:42 | 显示全部楼层 来自 中国
芜子 发表于 2016-9-11 15:53
如果只想遍历模型一个表面上的节点呢?比如地形面

可以通过在地形面加nstress(就是给起伏面加垂直于面的应力),这样就起伏面上有应力了,然后判定哪些节点力不为零就提取哪些节点的编号和坐标就可以了啊
5.2.2 搜索临空面
临空面是指岩土体滑动时自由空间的边界面,如斜坡的坡面,硐室的边墙、坝基下游河床面等。在FLAC3D建模中一般的水平或竖直的边界面很容易通过range限定,但对于起伏不规则的边界面比如山地、不规则斜坡的坡面就要通过FLAC3D内置FISH语言搜寻。寻找临空面的目的有三:
(1)、检查网格、判断模型的对错。
(2)、在临空面上施加载荷。
(3)、便于前后处理。
一般搜寻的方法也有三个:
(1)、寻找面在单元体遍历中出现的次数,边界面只能出现一次,超过一次即为岩体内部单元表面而非临空面。
(2)、利用interface接触面单元或shell、liner结构单元会自动捕捉临空面的特性搜寻临空面。
(3)、给模型施加静水压力的apply nstress命令也可以自动搜寻临空面,施加的静水压力除以单元体表面积的应力被平均分配到单元体节点上,通过只在所需的临空面施加静水压力,然后寻找应力不为零的节点即找到临空面所有节点编号,临空面也就找到了。
上面三种方法中,第一种适用于比较麻烦,需要比较清楚FLAC3D模型网格信息组成规律。第二种和第三种方法都比较适合于寻找底面和四周侧面全是平面而上表面为曲面的上临空面搜寻。第二种方法有时在边界处有些单元体节点因为命令不熟悉原因可能没有包括进来,建立好interface后仍需要fish函数提取相应的节点编号。
第三种方法具体代码如下,由于静水压力是被平均分配到节点上的,只要靠近边界处单元表面被施加了静水压力那么边界处单元节点就会被分配到应力,通过检测应力不为零的节点即可找到临空面所有节点编号。

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57.                 ;//////////////////////nstress_search_free_face.txt///////////////////////////////
  58. ;/目的:搜寻不规则上临空面                                                       /
  59. ;/方法:搜寻通过nstress施加到临空面并分配到应力的节点编号                        /
  60. ;/条件:一般适用于模型底面和四周侧面为平面而只有一面为不规则临空面的模型         /
  61. ;/////////////////////////////////////////////////////////////////////////////////
  62. new
  63. plot block gr
  64. gen zone brick size 15 15 10 p0 0,0,0 edge=100.0
  65. def mountain
  66.     gp = gp_head
  67.     loop while gp # null
  68.         zz = sqrt(gp_xpos(gp)^2 + gp_ypos(gp)^2)
  69.         dz = 0.06 * sin(0.2 * zz + 100.0) ; Sum Fourier terms for
  70.         dz = dz + 0.06 * sin(0.22 * zz - 20.3) ; quasi-random surface
  71.         dz = dz - 0.04 * sin(0.33 * zz + 33.3) ; topology.
  72.         gp_zpos(gp) = 0.5 * gp_zpos(gp) * (1.0 + dz)
  73.         gp = gp_next(gp)
  74.     end_loop
  75. end
  76. mountain
  77. save mountain.sav
  78. new
  79. rest mountain.sav
  80. plot block gr
  81. range name 四周 x -0.1 0.1 any x 99.9 100.1 any y -0.1 0.1 any y 99.9 100.1 any z -0.1 0.1 any
  82. model mohr
  83. prop dens 2550 bul 2.2e9 shea 1e9 cohesion 0.2e6 friction 20 tension 0
  84. step 1
  85. apply nstress 0.05e6 range 四周 not
  86. step 1
  87. plot block gr
  88. plot add fap
  89. plot add axes
  90. ;下面自定义函数提取上临空界面节点号
  91. def _ini
  92.     array buf1(1)
  93.         file1='1_freeface_gridpoint_idNum_output.dat'
  94. end
  95. _ini
  96. def _search_free_face
  97.   status=open(file1,1,1)
  98.     buf1(1)=' idNum'
  99.     status=write(buf1,1)
  100.     p_gp = gp_head
  101.     loop while p_gp # null
  102.     buf1(1) = ' '
  103.     if gp_zfapp(p_gp)#0
  104.     buf1(1) = buf1(1) + string(gp_id(p_gp)) +' '
  105.     status=write(buf1,1)
  106. endif
  107.     p_gp = gp_next(p_gp)
  108.     end_loop
  109.     status=close
  110. ii = out('Successfully Write point Data Into Suffer Format File: '+ file1 )
  111. end
  112. _search_free_face
复制代码
回复 不支持

使用道具 举报

发表于 2019-7-17 15:27:25 | 显示全部楼层 来自 辽宁沈阳
龙biscuit 发表于 2018-7-15 11:24
可以通过在地形面加nstress(就是给起伏面加垂直于面的应力),这样就起伏面上有应力了,然后判定哪些节 ...

大神,你好
回复 不支持

使用道具 举报

发表于 2022-3-24 20:20:18 | 显示全部楼层 来自 中国
牛人啊,那一刻楼的大哥
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-3-29 05:37 , Processed in 0.042612 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表