ANSYS渡槽槽身动水压力的施加(2)——U型渡槽
U型渡槽动水压力荷载施加命令及说明
- 程序中需要用到ANSYS重启动,因为需提取前一步加速度结果以施加部分动水压力;
- 默认Y方向为重力方向,X方向为横槽向,Z方向为纵槽向;
- 需准备地震波文件;
- 需先将槽底面和槽壁面编为组元:bottom_areas,left_areas,right_areas,U型渡槽下部曲线在水平向既是槽壁,在竖向又是槽底;
pi=3.1415926
H_water=3.6 !槽内水深
R_water=2.3 !半槽宽
rou_water=1000 !水体密度
M_water=rou_water*(2*R_water*(H_water-R_water)+0.5*pi*R_water**2)
!控制点------截面槽底中心处节点
node_control=8450
coord_y_control=ny(node_control)
coord_x_control=nx(node_control)
coord_z_control=nz(node_control)
coord_y_water=coord_y_control+H_water
/prep7
!定义mass21单元
et,99,mass21
!定义弹簧单元
et,98,combin14
!初始实常数
nr=100
!读入地震波
*SET,NT,200 !地震加速度步数
*SET,DT,0.01 !地震加速度步长
*DIM,accel_x,,NT
*DIM,accel_y,,NT
*DIM,accel_z,,NT
*VREAD,accel_x,'accel_x','txt'
(F12.9)
*VREAD,accel_y,'accel_y','txt'
(F12.9)
*VREAD,accel_z,'accel_z','txt'
(F12.9)
!***********************************附加质量(开始)**********************************
!将附加质量的渡槽底面的所有节点编为一个数组
allsel
CMSEL,S,bottom_areas,AREA
NSLA,S,1
*get,n_bottom,node,,count
*dim,node_bottom,array,n_bottom
*get,nmin,node,,num,min
node_bottom(1)=nmin
*do,i,2,n_bottom
*get,nnum,node,nmin,nxth
nmin=nnum
node_bottom(i)=nmin
*enddo
allsel
!将附加质量的渡槽左壁面的所有节点编为一个数组
CMSEL,S,left_areas,AREA
NSLA,S,1
nsel,U,loc,x,coord_x_control-0.001,coord_x_control+0.001
*get,n_left,node,,count
*dim,node_left,array,n_left
*get,nmin,node,,num,min
node_left(1)=nmin
*do,i,2,n_left
*get,nnum,node,nmin,nxth
nmin=nnum
node_left(i)=nmin
*enddo
allsel
!将附加质量的渡槽右壁面的所有节点编为一个数组
CMSEL,S,right_areas,AREA
NSLA,S,1
nsel,U,loc,x,coord_x_control-0.001,coord_x_control+0.001
*get,n_right,node,,count
*dim,node_right,array,n_right
*get,nmin,node,,num,min
node_right(1)=nmin
*do,i,2,n_right
*get,nnum,node,nmin,nxth
nmin=nnum
node_right(i)=nmin
*enddo
allsel
!附加渡槽底面节点质量(竖向地震作用冲击动水压力)
*do,i,1,n_bottom
nnum=node_bottom(i)
m_wv=0.4*M_water/R_water*ARNODE(nnum)
type,99
nr=nr+1
r,nr,0,0,m_wv
real,nr
e,nnum
*enddo
!附加渡槽左壁面节点质量(横向地震作用冲击动水压力)
*if,(H_water/R_water),le,1.5,then
*do,i,1,n_left
nnum=node_left(i)
coord_y=ny(nnum)-coord_y_control
m_wh=0.5*M_water/R_water*(coord_y/H_water+0.5*(coord_y/H_water)**2)
m_wh=m_wh*sqrt(3)*tanh(sqrt(3)*R_water/H_water)*ARNODE(nnum)
!确保附加的节点位于水面以下
*if,coord_y,le,H_water,then
type,99
nr=nr+1
r,nr,m_wh,0,0
real,nr
e,nnum
*endif
*enddo
*else
*do,i,1,n_left
nnum=node_left(i)
m_wh=0.5*M_water/H_water*ARNODE(nnum)
coord_y=ny(nnum)-coord_y_control
!确保附加的节点位于水面以下
*if,coord_y,le,H_water,then
type,99
nr=nr+1
r,nr,m_wh,0,0
real,nr
e,nnum
*endif
*enddo
*endif
!附加渡槽右壁面节点质量(横向地震作用冲击动水压力)
*if,(H_water/R_water),lt,1.5,then
*do,i,1,n_right
nnum=node_right(i)
coord_y=ny(nnum)-coord_y_control
m_wh=0.5*M_water/R_water*(coord_y/H_water+0.5*(coord_y/H_water)**2)
m_wh=m_wh*sqrt(3)*tanh(sqrt(3)*R_water/H_water)*ARNODE(nnum)
!确保附加的节点位于水面以下
*if,coord_y,le,H_water,then
type,99
nr=nr+1
r,nr,m_wh,0,0
real,nr
e,nnum
*endif
*enddo
*else
*do,i,1,n_right
nnum=node_right(i)
m_wh=0.5*M_water/H_water*ARNODE(nnum)
coord_y=ny(nnum)-coord_y_control
!确保附加的节点位于水面以下
*if,coord_y,le,H_water,then
type,99
nr=nr+1
r,nr,m_wh,0,0
real,nr
e,nnum
*endif
*enddo
*endif
!***********************************附加质量(结束)**********************************
!***********************************施加弹簧(开始)**********************************
g_=9.81
temp=(H_water-R_water)/R_water
M1=M_water*(0.571-1.276/((1+temp)**0.627)*(tanh(0.331*temp))**0.932)
w1_quadratic=1.323+0.228*(tanh(1.505*temp))**0.768-0.105*(tanh(1.105*temp))**4.659
w1_quadratic=w1_quadratic*g_/R_water
K1=M1*w1_quadratic
h1=H_water*(1-(temp**0.664)*(0.394+0.097*sinh(1.534*temp))/cosh(1.534*temp))
!计算槽壁施加弹簧点的x坐标
*if,h1,ge,R_water,then
coord_x_spring_0=R_water
*else
coord_x_spring_0=sqrt(R_water**2+(R_water-h1)**2)
*endif
!寻找按高度施加弹簧的节点
coord_y_spring_0=coord_y_control+h1
allsel
CMSEL,S,left_areas,AREA
CMSEL,A,right_areas,AREA
NSLA,S,1
node_find=node(coord_x_spring_0,coord_y_spring_0,coord_z_control)
coord_y_spring_1=ny(node_find)
NSEL,R,loc,Y,coord_y_spring_1-0.001,coord_y_spring_1+0.001
*get,n_spring,node,,count
*dim,node_spring,array,n_spring
*do,i,1,n_spring
nmin=node(0,0,100000)!选择距离(0,0,100000)最近的点
node_spring(i)=nmin
NSEL,U,node,,nmin!去掉刚选出的节点,重新选择
*enddo
allsel
*get,node_max,node,,num,max
dist1=0
*do,i,1,n_spring,2
nnum1=node_spring(i)
node1_x=nx(nnum1)
node1_y=ny(nnum1)
node1_z=nz(nnum1)
nnum2=node_spring(i+1)
node2_x=nx(nnum2)
*if,i,eq,n_spring-1,then
dist2=0
*else
nnum3=node_spring(i+2)
node3_z=nz(nnum3)
dist2=node1_z-node3_z
*endif
!创建中间节点
node_max=node_max+1
n,node_max,(node1_x+node2_x)*0.5,node1_y,node1_z
d,node_max,uy
d,node_max,uz
type,99
nr=nr+1
r,nr,M1*0.5*(dist2+dist1),0,0
real,nr
e,node_max
!创建弹簧(模拟对流动水压力)
type,98
nr=nr+1
r,nr,K1*0.5*(dist2+dist1)
real,nr
e,nnum1,node_max
e,node_max,nnum2
dist1=dist2
*enddo
!***********************************施加弹簧(结束)**********************************
!**********************施加地震加速度和面荷载形式的动水压力(开始)******************************
!查找槽底槽壁节点对应的渡槽截面中间点
allsel
nsel,s,loc,x,coord_x_control-0.001,coord_x_control+0.001
nsel,r,loc,y,coord_y_control-0.001,coord_y_control+0.001
*dim,node_bottom_near,array,n_bottom,2
*do,i,1,n_bottom
nnum=node_bottom(i)
nnum_near=nnear(nnum)
node_bottom_near(i,1)=nnum_near
*enddo
*dim,node_left_near,array,n_left,2
*do,i,1,n_left
nnum=node_left(i)
nnum_near=nnear(nnum)
node_left_near(i,1)=nnum_near
*enddo
*dim,node_right_near,array,n_right,2
*do,i,1,n_right
nnum=node_right(i)
nnum_near=nnear(nnum)
node_right_near(i,1)=nnum_near
*enddo
/solu
ANTYPE,TRANS
TRNOPT,FULL
OUTRES,ALL,ALL
allsel
!第一步计算
t=1
time,DT*t
acel,accel_x(t),accel_y(t),accel_z(t)
kbc,0
nsubst,1
rescontrol,DEFINE,last,last !最后时间步重启
parsav,all,aqueduct_parameter,sav !参数保存
solve
!rescontrol,file_summary
finish
*do,t,2,5
!从结果提取控制点加速度
/POST1
SET,t-1,1
*do,i,1,n_bottom
*get,node_bottom_near(i,2),node,node_bottom_near(i,1),a,x
*enddo
*do,i,1,n_left
*get,node_left_near(i,2),node,node_left_near(i,1),a,y
*enddo
*do,i,1,n_right
*get,node_right_near(i,2),node,node_right_near(i,1),a,y
*enddo
parsav,all,aqueduct_parameter,sav !参数保存
!再次进入求解模块
/solu
ANTYPE,,REST,t-1,last,0
parres,new,aqueduct_parameter,sav !恢复参数
!依据渡槽宽高比施加槽底动水压力荷载(横向地震作用下槽底的冲击动水压力)
*if,(H_water/R_water),lt,1.5,then
*do,i,1,n_bottom
a_wh=node_bottom_near(i,2)
nnum=node_bottom(i)
coord_x_pbh=coord_x_control-nx(nnum)
p_bh=0.5*M_water/R_water*a_wh
p_bh=p_bh*0.5*sqrt(3)*sinh(sqrt(3)*coord_x_pbh/H_water)/cosh(sqrt(3)*R_water/H_water)
F,nnum,FY,p_bh*ARNODE(nnum)
*enddo
*else
*do,i,1,n_bottom
nnum=node_bottom(i)
coord_x_pbh=coord_x_control-nx(nnum)
p_bh=0.5*M_water/H_water/R_water*coord_x_pbh
F,nnum,FY,p_bh*ARNODE(nnum)
*enddo
*endif
!左槽壁(竖向地震槽壁动水压力)
sign_left=(nx(node_left(1))-coord_x_control)/abs(nx(node_left(1))-coord_x_control)
*do,i,1,n_left
a_wv=node_left_near(i,2)
nnum=node_left(i)
coord_y=ny(nnum)-coord_y_control
*if,coord_y,le,H_water,then
p_wv=0.4*M_water/R_water*a_wv*cos(pi*0.5*coord_y/H_water)
F,nnum,FX,p_wv*ARNODE(nnum)*sign_left
*endif
*enddo
!右槽壁(竖向地震槽壁动水压力)
sign_right=(nx(node_right(1))-coord_x_control)/abs(nx(node_right(1))-coord_x_control)
*do,i,1,n_right
a_wv=node_right_near(i,2)
nnum=node_right(i)
coord_y=ny(nnum)-coord_y_control
*if,coord_y,le,H_water,then
p_wv=0.4*M_water/R_water*a_wv*cos(pi*0.5*coord_y/H_water)
F,nnum,FX,p_wv*ARNODE(nnum)*sign_right
*endif
*enddo
time,DT*t
acel,accel_x(t),accel_y(t),accel_z(t)
nsubst,1
allsel
solve
finish
*enddo
!**********************施加地震加速度和面荷载形式的动水压力(结束)******************************
ANSYS渡槽槽身动水压力的施加(2)——U型渡槽的更多相关文章
- ANSYS渡槽槽身动水压力的施加(1)——矩形渡槽
前言 依据水工抗震规范中关于渡槽动水压力的部分编一个用于ANSYS渡槽模型动水压力施加的命令流,是我研究生时一直想要做的一件事,原因嘛主要是想对比一下规范提供的方法和ANSYS声学流体单元模拟水体这两 ...
- ANSYS附加动水质量(westergarrd公式)
在水工结构的抗震计算中,不可避免的需要考虑动水压力的作用,当前规范中一般是要求将动水压力以附加质量的形式考虑,如果对压力用质量形式考虑有疑惑时,可以这样理解:结构发生振动时,会带动周围的水体发生运动, ...
- 【转载】非线性分析中的ansys跟踪显示
原文地址:http://muchong.com/html/201209/4936556.html 在ansys output windows 有 force convergenge valu 值 和 ...
- windows 邮槽mailslot 在服务程序内建立后客户端无权限访问(GetLastError() == 5)的问题
邮槽创建在服务程序内,可以创建成功, 但外部客户端连接时 m_hMailslot = CreateFile("\\\\.\\mailslot\\zdpMailslot",GENER ...
- Linux就这个范儿 第9章 特种文件系统
Linux就这个范儿 第9章 特种文件系统 http://book.douban.com/reading/32081222/ P326 有一种文件系统,根本不在磁盘上.这种文件系统就是大名顶顶的ram ...
- pygame写贪吃蛇
python小白尝试写游戏.. 学了点pygame不知道那什么练手好,先拿贪吃蛇开刀吧. 一个游戏可以粗略的分为两个部分: 数据(变量) 处理数据(函数,方法) 设计变量 首先预想下,画面的那些部分需 ...
- PowerDesigner16 活动图
活动是某件事情正在进行的状态.活动在状态机中表现为一个由一系列动作组成 的非原子的执行过程. 活动图是一种描述系统行为的图,它用于展现 参与行为的实体所进行的各种活动的顺序关系.活动图(Activit ...
- Unity基础功能:粒子特效(Shuriken)
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Image Processing and Analysis_15_Image Registration:Image matching as a diffusion process: An analogy with Maxwell's demons——1998
此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...
随机推荐
- MySQL出现Waiting for table metadata lock的场景浅析
MySQL版本为5.6.12. 在进行alter table操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的 ...
- 转:35个让人惊讶的 CSS3 动画效果演示
本文收集了35个惊人的 CSS3 动画演示,它们将证明 CSS3 Transform 和 Transition 属性的强大能力.CSS 是网页设计非常重要的一部分,随着越来越多的浏览器对 CSS3 支 ...
- 俄罗斯方块(JS+CSS)
这是一个用 js + css 写的网页版俄罗斯方块. 具体代码与示例可访问我的另一个博客查看,源码与示例.
- yum安装某个包出现冲突的情况
yum安装是非常方便的,可以自动解决依赖问题,但是有时候我们安装包会出现冲突,这个时候我们就要查找是哪些包与哪些包出现冲突,然后再针对性的解决问题. 一般来说起冲突的包会报出来,主要为两点 1.包与包 ...
- kubeadm快速部署Kubernetes单节点
1. 安装要求 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬 ...
- Win10更新后真正可用VC++6版本
1.首先,我并不支持继续用VC6,毕竟太老太老了...除了VS,如果只是学C,那你完全可以用其它一些工具...当然除非你也是像我一样被逼无奈. 2.本次找了N多个版本,问题就是Win10周年更新包后, ...
- Mac svn使用学习-3-客户端调用服务端简单例子
既然在前一篇内容中我们已经讲svn服务器搭建好了,那么接下来我们试着试着简单使用一个该服务器 1.从本地导入代码到服务器上 userdeMBP:~ user$ svn import /Users/us ...
- mac apache的使用
因为apache的安装目录/private/etc是默认隐藏的,所以我们需要通过文件夹前往/命令行的方法去找. 或命令行中输入: userdeMBP:~ user$ open /etc 然后都会打开相 ...
- c++ 智能指针、函数指针和指针函数
智能指针: 1.内存泄漏memory leak :是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出. 2.内存溢出 out of me ...
- WorldWind源码剖析系列:星球球体的加载与渲染
WorldWind源码剖析系列:星球球体的加载与渲染 WorldWind中主函数Main()的分析 在文件WorldWind.cs中主函数Main()阐明了WorldWind的初始化运行机制(如图1所 ...