import itasca as it
it.command("python-reset-state false")
'''
需要给定的数值
'''
#y方向有多少个zone,即y方向有多上个单元格
ydir_zone_num = 80
#断层带的划分层数
dcd_levels = 5
#目标层(竖向)层数
dcd_target_levels = 5
it.command("""
model restore 'model_test.f3sav'
""")
#储存目标组的所有zone信息,即断层带的所有zone
all_zone_infos_list = []
#获取模型的全部的zone
zone_list = it.zone.list()
'''
筛选zone,获得想要的zone,获取组名为dcd的所有zone
'''
for z in zone_list:
group_name = z.groups("Any")
if group_name["Construction"] == "dcd":
zone_id = z.id()
position_x = round(z.pos_x(),1)
position_y = round(z.pos_y(),1)
position_z = round(z.pos_z(),1)
all_zone_infos_list.append([zone_id,position_x,position_y,position_z])
#对获得的zone进行排序,顺序为第1行数据为最底层的zone,最下面的一行是断层带的最上层的zone
def paixu(arr):
n = len(arr)
for i in range(n):
for j in range(0,n-i-1):
if arr[j][3] > arr[j+1][3]:
arr[j],arr[j+1] = arr[j+1],arr[j]
for p in range(n):
for q in range(0,n-p-1):
if arr[q][2] > arr[q+1][2] and arr[q][3] == arr[q+1][3]:
arr[q],arr[q+1] = arr[q+1],arr[q]
for u in range(n):
for m in range(0,n-u-1):
if arr[m][1] > arr[m+1][1] and arr[m][2] == arr[m+1][2] and arr[m][3] == arr[m+1][3]:
arr[m],arr[m+1] = arr[m+1],arr[m]
return arr
new_arr = paixu(all_zone_infos_list)
#获取断层带的模型层数
num = len(new_arr) / (ydir_zone_num * dcd_levels )
print(num)
#需要的那一层zone,用target_dcd_zone_list储存
target_dcd_zone_list= []
#获得断层目标层的zone
#间隔
n = ydir_zone_num * dcd_levels
#获取每一层的zone
for i in range(0,num):
#每一层的开始与结束
s = i * n
e = s + n
#每一层断层带的zone
list_of_z = new_arr[s:e]
#获取目标层(竖向)的zone
e1 = dcd_target_levels * ydir_zone_num
s1 = e1 - ydir_zone_num
list_z_of_r = list_of_z[s1:e1]
target_dcd_zone_list.append(list_z_of_r)
print(target_dcd_zone_list)
target_zone_ids = []
for j in target_dcd_zone_list:
level_zone_id = []
for n in j:
level_zone_id.append(n[0])
target_zone_ids.append(level_zone_id)
with open("dcdAllIds.txt", "w") as f:
f.write(str(target_zone_ids))
Flac3D-断层带-获取目标层(竖向)的zone-id并写入文件
于 2023-10-16 19:30:16 首次发布