1. 引言
在《FLAC3D与Python的集成 (3)---网格划分Building Blocks》一文中,介绍了Building Blocks划分网格的方法。在那个例子中使用了CylinderTSectionWithWall 模板划分网格,并且运行这个模型使之在自重应力下达到了平衡状态,同时也引入了部分it.zone模块函数的使用方法。在此基础上,本文首先模拟了开挖并且着重讨论了巷道开挖命令zone relax excavate背后的机理,然后给出了部分典型图形的输出,最后讨论zone.Zone类的使用方法。
CylinderTSectionWithWall 模板
2. Zone relax excavate命令
上一个例子中,模型在自重应力下达到平衡状态,我们使用命令model save "initial"保存了模型的初始状态,接着进行开挖模拟,使用下面的命令:
zone relax excavate range group "Space"
model solve
这里"Space"是Building Blocks模块定义的组名,不能修改。zone relax excavate是模拟开挖的命令。我们过去一直使用“zone cmodel null”命令或者使用"zone cmodel delete"命令进行开挖模拟,这是一种瞬时开挖单元的做法,假定开挖区域一次全部完成。为了模拟真实的施工过程,FLAC3D引入了隧道工程中“应力松弛法”的概念,模拟巷道开挖逐步完成。
由于FLAC3D的模拟过程是使用动力学的原理来达到静态收敛,因此对模型的突然更改可能会产生准惯性(quasi-inertial)效应,可能会人为地夸大该单元的破坏。缓解这种情况的一种方法是逐渐挖掘区域,以使单元移除的影响不那么突然。为此创建了“zone relax excavate”命令。FLAC3D使用了自动的单元开挖松弛方法,使得开挖周围单元影响的影响随着时间的推移逐渐减少,松弛系数设为1到0。虽然用户可以用许多方法控制松弛曲线的形状,但FLAC3D的默认值是使用当前的mechanical force ratio(it.zone.mech_ratio)来伺服控制的。此命令是基于单元的应用条件,可逐渐减小该范围内区域的应力,刚度和密度,直到它们对模型产生影响,当松弛系数达到0时,单元设置为空本构模型NULL, 然后去掉开挖单元。
3. 图形显示
当计算完成后,图形输出可以直接在FLAC3D的环境下进行,如果不是批处理执行文件命令的话,不需要在数据文件中加入绘图命令。FLAC3D所有的图形输出都可在这个图形面板内完成。
下面是这个例子部分图形的输出,这也是计算后经常需要观察的一些图。
(1)单元分组图,不同的组别显示不同的颜色
(2)塑性状态图,不同的破坏状态显示不同的颜色
(3)单元位移等值线图,不同的颜色显示不同的位移量
(4)最小主应力图,不同颜色显示单元的最小主应力值
4. it.zone.Zone类的方法
在《FLAC3D与Python的集成 (3)---网格划分Building Blocks》中,我们演示了it.zone函数的用法,it.zone是针对整个模型而言的。相对而言,it.zone.Zone是针对一个特定单元而言的。在昨天的例子中,我们演示了下面这些函数的用法。
it.zone.list()
it.zone.count()
it.zone.mech_convergence()
it.zone.mech_ratio()
it.zone.mech_ratio_avg()
it.zone.mech_ratio_local()
it.zone.mech_ratio_max()
it.zone.unbal()
it.zone.maxid()
it.zone.find ()
如果运行下面的代码:
zone_maxid = it.zone.find(it.zone.maxid())
print(type(zone_maxid))
可以发现, zone_maxid的类型是'itasca.zone.Zone',这是一个类,不是一个字典或列表,因此我们必须使用方法来返回或赋予该单元的值。下面是试验的一些例子:
print(zone_maxid.density())
print(zone_maxid.geom_test())
print(zone_maxid.id())
print(zone_maxid.vol_deformed())
print(zone_maxid.vol())
print(zone_maxid.type())
print(zone_maxid.props())
itasca.zone.Zone 类下的方法非常多, 下面仅列出固体材料的方法, 流体和热的方法以后单独描述。
adjacent_zones()
aspect()
condition()
copy_to(destination: itasca.zone.Zone)
create_interface_element(face_index: int, interface_name: str)
density()
extra(slot: int)
face_areas()
face_extra(face_index: int, extra_index: int)
face_find(gp0, gp1, gp2)
face_find_normal(normal: vec3)
face_group(face_index: int, slot='Default')
face_group_remove(face_index: int, group_name: str)
face_in_group(face_index: int, group_name: str, slot='Default')
face_normals()
faces()
geom_test()
gridpoints()
group([slot: str])
group_remove(group_name: str)
groups()
has_prop(property_name: str)
hysteretic_props()
id()
in_group(group_name: str[, slot: str])
live()
model()
model_init()
num_gp()
ortho()
overlays()
planarity()
plane_traction(vdir: vec3)
pos()
pos_x()
pos_y()
pos_z()
prop(property_name: str)
props()
rotation()
rotation_rate()
set_density(value: float)
set_extra(slot: int, value: any)
set_face_extra(face_index: int, extra_index: int, value: any)
set_face_group(face_index: int, group_name: str, slot='Default')
set_group(group_name: str[, slot: str])
set_model(value: string)
set_pp(value: float)
set_prop(property_name: str, value: any)
set_state(state: int)
set_stress(stress: stens3)
set_work_elastic_shear(value: float)
set_work_elastic_vol(value: float)
set_work_plastic_shear(value: float)
set_work_plastic_vol(value: float)
state(average: bool)
strain()
strain_rate()
strain_shear_inc()
strain_shear_rate()
strain_vol_inc()
strain_vol_rate()
stress()
stress_int()
stress_max()
stress_min()
stress_prin()
stress_prin_dir()
stress_prin_x()
stress_prin_y()
stress_prin_z()
test_quality()
tet_strain_rates()
tet_strains()
tet_stresses()
tet_volumes()
tets()
type()
valid()
vol()
vol_deformed()
work_elastic_shear()
work_elastic_total()
work_elastic_vol()
work_plastic_shear()
work_plastic_total()
work_plastic_vol()
5. 结束语
本文主要描述了开挖命令zone relax excavate的工作机理以及zone.Zone类具有的方法。it.zone模块是针对整个模型而言的,it.zone.Zone类是针对特定单元而言的。