前言

依据水工抗震规范中关于渡槽动水压力的部分编一个用于ANSYS渡槽模型动水压力施加的命令流,是我研究生时一直想要做的一件事,原因嘛主要是想对比一下规范提供的方法和ANSYS声学流体单元模拟水体这两种方法的结果。但是由于时间关系,毕业以前并没有完成,所幸毕业工作之后还有点空闲时间,就把这个命令编了一下。不过我估计几乎不会有人用这个命令了以及规范的这种方法了,毕竟从理论上来说,用声学单元模拟得到的结果肯定是比规范的方法精确的,而且操作也很简单,不涉及编命令。但是不管怎么样,还是放上来充个数吧。

命令依据NB 35047-2015《水电工程水工建筑物抗震设计规范》中附录B 渡槽槽体内动水压力计算部分编写,分为两个,一个用于矩形渡槽,另一个用于U型渡槽。

矩形渡槽的动水荷载命令说明

命令运行前的准备工作

  • 保证模型的坐标系为:Y方向为重力方向,X方向为横槽向,Z方向为纵槽向;

  • 计算中需要用到ANSYS重启动技术,因为施加的部分动水荷载的数值需要由渡槽截面槽底中心处的水平或竖直加速度响应值计算得到,所以命令中加入了导入地震波的命令,需要提前准备好地震波文件accel_x.txt、accel_y.txt、accel_z.txt并记得修改步长DT与总步数NT;
  • 需先将槽底面和槽壁面编为组元:bottom_areas, left_areas,right_areas
  • 修改相关参数(红色)。

pi=3.1415926    !圆周率

H_water=2    !槽内水深

l_water=2    !半槽宽

rou_water=1000   !水体密度

M_water=H_water*l_water*rou_water*2    ! 1m长度的水体质量

node_control=158   !控制点------截面槽底中心处的节点号

coord_y_control=ny(node_control)  !得到控制点的y坐标

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

*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

*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/l_water*ARNODE(nnum)

type,99

nr=nr+1

r,nr,0,0,m_wv

real,nr

e,nnum

*enddo

!附加渡槽左壁面节点质量(横向地震作用冲击动水压力)

*if,(H_water/l_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/l_water*(coord_y/H_water+0.5*(coord_y/H_water)**2)

m_wh=m_wh*sqrt(3)*tanh(sqrt(3)*l_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/l_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/l_water*(coord_y/H_water+0.5*(coord_y/H_water)**2)

m_wh=m_wh*sqrt(3)*tanh(sqrt(3)*l_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=sqrt(5/2)*H_water/l_water

M1=2*rou_water*H_water*l_water*(sqrt(5/2)*l_water/H_water*tanh(temp)/3)

K1=M1*g_/l_water*sqrt(5/2)*tanh(temp)

h1=H_water*(1-(cosh(temp)-2)/temp/sinh(temp))

!寻找按高度施加弹簧的节点

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_control,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

type,99

nr=nr+1

r,nr,M1*0.5*(dist2+dist1),0,0

real,nr

e,node_max

d, node_max,uy

d, node_max,uz

!创建弹簧(模拟对流动水压力)

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)  !在前面选出的节点中寻找与nnum节点最接近的节点号,并赋值给nnum_near

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,NT

!从结果提取控制点加速度

/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,1,0

parres,new,aqueduct_parameter,sav !恢复参数

!依据渡槽宽高比施加槽底动水压力荷载(横向地震作用下槽底的冲击动水压力)

*if,(H_water/l_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/l_water*a_wh

p_bh=p_bh*0.5*sqrt(3)*sinh(sqrt(3)*coord_x_pbh/H_water)/cosh(sqrt(3)*l_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/l_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/l_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/l_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渡槽槽身动水压力的施加(1)——矩形渡槽的更多相关文章

  1. ANSYS渡槽槽身动水压力的施加(2)——U型渡槽

    U型渡槽动水压力荷载施加命令及说明 程序中需要用到ANSYS重启动,因为需提取前一步加速度结果以施加部分动水压力: 默认Y方向为重力方向,X方向为横槽向,Z方向为纵槽向: 需准备地震波文件: 需先将槽 ...

  2. HDU4328 Cut the cake(动规:最大子矩形问题/悬线法)

    题目链接:传送门 题目大意: 给出N*M的字符矩阵(由字符B/R组成),求符合下图条件的子矩阵的最大周长. 1 ≤ N,M ≤ 1000. 思路: 悬线法. #include <iostream ...

  3. 洛谷P4147 玉蟾宫(动规:最大子矩形问题/悬线法)

    题目链接:传送门 题目大意: 求由F构成的最大子矩阵的面积.输出面积的三倍. 1 ≤ N,M ≤ 1000. 思路: 悬线法模板题. #include <bits/stdc++.h> us ...

  4. ANSYS附加动水质量(westergarrd公式)

    在水工结构的抗震计算中,不可避免的需要考虑动水压力的作用,当前规范中一般是要求将动水压力以附加质量的形式考虑,如果对压力用质量形式考虑有疑惑时,可以这样理解:结构发生振动时,会带动周围的水体发生运动, ...

  5. 【转载】非线性分析中的ansys跟踪显示

    原文地址:http://muchong.com/html/201209/4936556.html 在ansys output windows 有 force convergenge valu 值 和 ...

  6. windows 邮槽mailslot 在服务程序内建立后客户端无权限访问(GetLastError() == 5)的问题

    邮槽创建在服务程序内,可以创建成功, 但外部客户端连接时 m_hMailslot = CreateFile("\\\\.\\mailslot\\zdpMailslot",GENER ...

  7. Linux就这个范儿 第9章 特种文件系统

    Linux就这个范儿 第9章 特种文件系统 http://book.douban.com/reading/32081222/ P326 有一种文件系统,根本不在磁盘上.这种文件系统就是大名顶顶的ram ...

  8. pygame写贪吃蛇

    python小白尝试写游戏.. 学了点pygame不知道那什么练手好,先拿贪吃蛇开刀吧. 一个游戏可以粗略的分为两个部分: 数据(变量) 处理数据(函数,方法) 设计变量 首先预想下,画面的那些部分需 ...

  9. PowerDesigner16 活动图

    活动是某件事情正在进行的状态.活动在状态机中表现为一个由一系列动作组成 的非原子的执行过程. 活动图是一种描述系统行为的图,它用于展现 参与行为的实体所进行的各种活动的顺序关系.活动图(Activit ...

随机推荐

  1. mysql中InnoDB表为什么要建议用自增列做主键

    InnoDB引擎表的特点 1.InnoDB引擎表是基于B+树的索引组织表(IOT) 关于B+树 (图片来源于网上) B+ 树的特点: (1)所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关 ...

  2. RHEL6.5安装multipath多路径软件

    一.划zone(以博科光纤交换机为例) ①查看光纤交换机端口状态 RAC_SW_01:admin> switchshow Index Port Address Media Speed State ...

  3. Windows用命令打开常用的设置页面和常用快捷键

    Win+R输入以下内容来快捷打开常用设置 compmgmt.msc # 计算机管理 diskmgmt.msc # 磁盘管理 devmgmt.msc # 设备管理 services.msc # 服务管理 ...

  4. DLL动态链接库导出函数方法 -- 动态导出(.def文件导出)

    简介 动态链接库最大的优势在于可以提供给其他应用程序共享的资源,最小化应用程序代码的复杂度,其中一个十分重要的功能就是dll可以导出封装函数的功能.导出函数有两种主要方式,分别是静态导入和动态导入,本 ...

  5. android开发之一如何升级SDK

    看了很多文章,都没有成功,下面这篇才是正解,学海无涯苦作舟. Fetching https://dl-ssl.google.com/android/repository/addons_list-2.x ...

  6. [luogu P4230]连环病原体

    [luogu P4230] 连环病原体 题意 给定一个长度为 \(n\) 的边序列, 当这个序列的一个子区间内的边都加入图中时产生了环则称其为"加强区间", 求序列中的每条边在多少 ...

  7. Spring Boot 集成 thymeleaf 模版引擎

    Spring Boot 建议使用 HTML 来完成动态页面.Spring Boot 提供了大量的模版引擎,包括 Thymeleaf.FreeMarker.Velocity等. Spring Boot ...

  8. 028、HTML 标签2超链接,框架标签

    内容:超链接,框架标签############################################################## <!-- 超链接 --> <a h ...

  9. python批量连接mysql

    注释:脚本(gomysql.py)需要进一步优化,初学者,努力中 首先配置需要执行的dbip.ini列表,格式如下 S1  192.168.0.5   3306  dbusername dbpassw ...

  10. PSR规范0-4整理

    PSR规范 psr规范 引言: PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准.这些规范的目的是 ...