- 积分
- 19
- 注册时间
- 2010-6-13
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 2012-9-21 14:39:53
|
显示全部楼层
来自 江苏南京
zhanglei830412 发表于 2012-9-21 14:10
不知道大神能否具体点说明···还有对不均匀沉降发生对结构影响的研究,尤其是隧道结构,有什么模拟想法 ...
对不起,前面的发言有误。好像是不能用预定义场的方法定义位移场,但是可以用定义BC的方法在初始分析步定义位移。预定义场也是定义在初始分析步的。如果用定义初始分析步的BC的方法做的话,可以用Python程序读取模型的所有节点,根据节点的坐标,创建相应的BC,这样要创建大量的BC。下面是以前自己编的一些Python的片段。
self.myMdb=Mdb() #创建Mdb,因为自己定义了类、方法、函数,在一个类的不同方法函数中使用同一个变量,使用了self
self.myMdl=self.myMdb.Model('Model-1') #创建Model-1
myMdl=self.myMdl
myAss=myMdl.rootAssembly
# Create Assembly; BC nodes
myCsys=msPart.DatumCsysByThreePoints(coordSysType=CARTESIAN,name='Datum csys-1',
origin=(0, 0, 0), point1=(1, 0, 0), point2=(0, 1, 0)) #创建用户坐标
CsId=myCsys.id #获取用户坐标的ID
self.myDatum=msPart.datums[CsId] #获取用户坐标
myAss=myMdl.rootAssembly
myIns=myAss.Instance(dependent=ON, name='SWH', part=msPart) #创建转配实体
nds=myIns.nodes #获取装配实体有限元模型的所有节点!!!!
ndx=[] # x=0, Left surface
ndr=[] # x=20, Right surface
ndyz=[] # Nodes for BC-YZ #预定义三个列表,用于存放节点编号
for i in nds: # get Node Label
cd=i.coordinates
if cd[0]==-90: #获取X坐标为-90的节点的编号
ndx.append(i.label)
if cd[0]==90: #获取X坐标为90的节点的编号
ndr.append(i.label)
if round(cd[0],3)==-90 and round(cd[1],3)==0 and round(cd[2],3)==0: #获取X=-90、Y=0、Z=0的节点编号
ndyz.append(i.label)
ndsx=nds.sequenceFromLabels(tuple(ndx)) # get Nodes #获取节点
ndsr=nds.sequenceFromLabels(tuple(ndr)) #获取节点
ndsyz=nds.sequenceFromLabels(tuple(ndyz)) #获取节点
setNdx=myAss.Set(name='Set-BCX', nodes=ndsx) # Node Set #使用上面的节点编号创建set
setNdr=myAss.Set(name='Set-NdCp', nodes=ndsr)
setNdyz=myAss.Set(name='Set-BCYZ', nodes=ndsyz)
myMdl.DisplacementBC(amplitude=UNSET, createStepName='Initial', name='BC-YZ', #使用节点Set创建BC
region=myAss.sets['Set-BCYZ'], u1=UNSET, u2=SET, u3=SET, ur1=UNSET, ur2=UNSET, ur3=UNSET)
myMdl.DisplacementBC(amplitude=UNSET, createStepName='Initial', name='BC-X',
region=myAss.sets['Set-BCX'], u1=SET, u2=UNSET, u3=UNSET, ur1=UNSET, ur2=UNSET, ur3=UNSET)
myMdl.DisplacementBC(createStepName='Step-1', name='BC-RP', region=myAss.sets['Set-RP'],
u1=-1, u2=0, u3=0, ur1=0, ur2=0, ur3=0)
|
|