分类目录归档:程序与计算

新的一年开启新的架构

© Written by J.Y. WANG

作为一个建筑业的结构工程师,建网站,编程序有点偏吧。但人总要有点爱好的吧,网站搭建写写自己的东西也算是某种舒缓心中憋闷的方式之一。是金子总要发光的,嗯嗯,所以做好自己该做的,一切都是上天最好的安排。既然放下了,心打开了,无所谓名利前途,那么做做自己喜欢的,看看书,充实一下自己其实是最好的。本来呢工作上的学识技能不太愿意分享,想指着其升官发财呢,现在来看多可笑。地球离开谁都照样转,何况也没人觉得你多有才能。所以呢,既然如此不如拿来放到自己网站,自己的天地里,供有缘人分享。初步打算写两部分内容:一是大道至简系列,关于结构设计的一些基本理念;二是欧洲规范学习系列,关于EUROCODE的应用。既然把计划写在这里了,那么就督促自己坚持把这两个系列完成。

好了言归正传,为了能让自己的那点思想在这个健壮的小站上愉快的流淌,基业长青。新的一年换用大型站点的架构,俗话说做事看世界要有格局,当然我自己的小站也要有格局,就是架构要有优良的鲁棒性,所谓麻雀虽小五脏俱全。

架构的目的:
1、方便系统升级自己折腾,方便备份,安全性高。
2、实现动静分离。
oss_in_website

阿里云的配置如下:
ECS配置
CPU:1核;内存:2 GB;操作系统:CentOS 7.4 64位;带宽:2Mbps;
系统盘 40GB;数据盘 40GB;

RDS配置
CPU:1核;内存:1 GB; 容量:40GB;

使用OSS;使用CDN;

将整个系统至于云盾的保护之下。
使用数据盘单独挂载/var/www目录,将OS系统与网站数据分离。
使用RDS,将数据库从数据盘分离。
使用OSS,将图库和附件库从数据盘分离。
使用CDN,分发加快OSS静态数据加载速度。

经过此番处理后:由于网站数据对应数据盘,升级或变更操作系统将不影响网站数据;将数据库搬至云端RDS后,数据库单独管理,有效防止网站攻击,可时时自动备份,安全可靠;将较大文件如图片、附件等静态文件搬至OSS并实现CDN分发,提高加载速度,实现动静分离。通过以上架构,即使系统盘,数据盘完全擦除也可轻松重新建站,因为数据库和大型文件均搬至云端。并且哪怕是极端情况,磁盘损毁,网站遭到恶意攻击,均可轻松应对。

最后附上一个技术细节,所谓细节据定成败。(以下部分20180101更新)
附录:关于ossfs的使用。另外关于LAMP系统搭建请看阿里云服务器搭建LAMP环境

1、首先用ps aux | grep apache 看下httpd运行于那个用户下,默认是apache用户。
2、然后下载安装对应版本的ossfs最新安装包。
wget http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/32196/cn_zh/1507811577850/ossfs_1.80.3_centos7.0_x86_64.rpm
yum localinstall ossfs_1.80.3_centos7.0_x86_64.rpm
3、写入OSS的AKID与AKS至密码文件,然后修改文件执行权限和用户组。
echo 你的第一个bucket:你的AKID:你的AKS> /etc/passwd-ossfs
echo 你的第二个bucket:你的AKID:你的AKS>> /etc/passwd-ossfs
chmod 640 /etc/passwd-ossfs
chown root:apache /etc/passwd-ossfs
4、然后以apache用户建立目录。
sudo -u apache mkdir /var/www/html/wp-content/你的图库名
sudo -u apache mkdir /var/www/html/wp-content/附件库名
5、加载OSS的bucket
ossfs 你的第一个bucket 你的图库路径 -o url=http://oss-cn-qingdao-internal.aliyuncs.com -o uid=用户号,gid=用户组号,umask=007,allow_other
ossfs 你的第二个bucket 附件库路径 -o url=http://oss-cn-qingdao-internal.aliyuncs.com -o uid=用户号,gid=用户组号,umask=007,allow_other
6、需要注意的问题:
– 对应好自己系统的安装包;
– 记得修改密码文件的权限和用户组;
– url填写内网地址,并从oss-cn开始填写;
– 如果使用allow_other,会变成777权限,不安全。如果不使用allow_other,把用户ID改为apacheID,就会变成700权限,就会导致无法访问的问题。解决方法:使用uid,gid,umask参数控制用户和用户组及其权限。
– 设置自动挂载ossfs方法:
在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息,其中同样可以使用uid,gid,umask参数。
建立的ossfs脚本赋予可执行权限 chmod a+x /etc/init.d/ossfs
把ossfs启动脚本作为其他服务,开机自动启动 chkconfig ossfs on

ANSYS接触分析中的一些注意事项和技巧

© Written by J.Y. WANG

关于耦合或约束方程的适用情况
1、如果接触模型没有摩擦, 接触区域始终粘在一起, 并且分析是小挠度、小转动问题, 那么可以用耦合或约束方程代替接触。使用耦合或约束方程的优点是分析还是线性的。

关于接触刚度
2、罚刚度越大, 接触表面的侵入量越小。然而, 若此值太大,则会由于病态条件而引起收敛困难。可以通过一些实验来确定一个合适的接触刚度, 使求解收敛,而且侵入量可以接受。
3、接触刚度是接触面的相对刚度的函数。对于块状实体, 通常赫兹接触刚度适用于罚刚度, 可以这样估算:k = fE。式中f 是介于0.1~10之间的系数, E是较软的接触材料的弹性模量。设f=1 通常是一个较好的起始值。

关于目标/接触面的选择
4、指定接触和目标表面的目的是将接触检查点增加到最大数。对于刚体对柔体接触, 目标面总是刚体表面。对于柔体对柔体接触, 目标面和接触面的选择会引起不同量的侵入, 从而影响求解精度:
•如果凸面与平面或凹面接触, 那么平面或凹面应该是目标面;
•如果一个表面网格粗糙, 而另一个表面网格较细, 那么网格粗糙的表面应该是目标面;
•如果一个表面比另一个表面的刚度大, 那么刚度大的表面应该是目标面;
•如果一个表面划分为高次单元, 而另一个表面划分为低次单元, 那么划分为低次单元的表面应该是目标面;
•如果一个表面比另一个表面大, 那么更大的表面应该是目标面。

5、接触对由实常数号来确定,目标单元和接触单元必须共用相同的实常数号。
在实常数中应该设置罚刚度比例系数(FKN)和拉格朗日乘子侵入比例系数(FTOLN)。FKN 通常介于0.01~10之间。 对于体积变形问题, 用值1.0(默认), 对于以弯曲变形为主的问题, 用值0.1。FTOLN 默认为0.1。 可以改变此值, 但若容差太小, 会使迭代数过多或不收敛。

关于求解选项
6、不用自适应下降。对于面对面接触问题, 自适应下降对于收敛不能提供任何帮助;
7、使用一个合理的平衡迭代数目, 通常是25;
8、因为对于大时间增量, 迭代计算会变得不稳定, 用线性搜索来稳定计算;
9、将预测器打开, 大转动或动态分析除外。
10、对于小应变、小位移和小滑动问题,要关上大变形效应开关,这样设置将加快接触搜索速度。

关于刚体位移
11、在静态分析中, 开始不连接在一起的两个(或多个)物体, 在建立接触前, 会产生刚体运动。如果在求解中的任一时刻, 两个物体没有联系, 刚度矩阵就会奇异。 ANSYS将会发出一个负主元警告信息。由于物体初始时没有联系, 要克服刚体位移有几个选项:

•在“恰好碰上”的位置建立几何模型
要求知道“恰好碰上”的位置在哪里。如果表面是曲面或者不规则, 则难以确定。但由于有限元网格的数值修整, 物体之间会存在小间隙或侵入,可能引起不收敛或接触物体的分离。

•动力学
在动力分析中, 惯性作用可以阻止刚体运动. 克服刚体运动的一种选择是动态地求解问题。将需要加上质量和阻尼, 使求解从静态转换到动态。但在一个“静态”模型中, 要缓冲掉不想要的动态影响并不总是那么容易。

•位移控制
该技术用强加的位移使两物体进入接触状态。然后, 可以通过一个空载荷步, 使该问题从位移控制求解转换到力控制求解。但对于复杂加载, 施加哪个位移并不总是那么明显。具体步骤一般为:
载荷步1 用一个强加的小位移使物体进入初始接触状态。
载荷步2 从位移控制转换到力控制。删除强加的位移, 加上反作用力, 并用一个子步求解(由于此系统没有变化, 该载荷步应该经过一次或两次迭代就收敛)。
载荷步3 继续进行载荷历史加载。

•软弹簧
该技术使用接地软弹簧来阻止刚体运动。与系统刚度相比, 弹簧刚度应该可以忽略。弹簧与基座相连, 可以将地上节点的反作用力与总的反作用力相比, 以确保弹簧对求解没有影响。初始载荷必须足够小, 从而引起弹簧的小变形, 这样接触单元才能认识侵入。需要做些实验, 使目标单元不“穿过”接触表面。

•用不分离接触
模拟对象的实际物理过程需要是属于不分离的情况。

•调整初始接触条件
以用实常数ICONT或PMIN和PMAX去调整初始接触条件,以阻止刚体位移。ICONT将接触面上在调整带内的节点移到目标面上。PMIN和PMAX 实际地将刚性面移进目标。

转-Ansys施加弯矩扭矩的几种方法

Ansys施加弯矩扭矩的几种方法<转帖>

a)方法简介:
1.将矩转换成一对的力偶,直接施加在对应的节点上面。
2.在构件中心部位建立一个节点,定义为mass21单元,然后跟其他受力节点耦合,形成刚性区域,就是用cerig命令。然后直接加转矩到主节点,即中心节点上面。
3.使用mpc184单元。是在构件中心部位建立一个节点,跟其他受力节点分别形成多根刚性梁,从而形成刚性面。最后也是直接加载荷到中心节点上面,通过刚性梁来传递载荷。
4.通过rbe3命令。该方法与方法2很接近。
5.基于表面边界法:主要通过定义一个接触表面和一个目标节点接触来实现,弯矩荷载可以通过在目标节点上用“F”命令施加。

b)方法说明:
方法1,通过转换为集中力或均布力,比如施加扭矩,把端面节点改成柱坐标,然后等效为施加环向的节点力;而施加弯矩,可以将力矩转化为端面的剪切均布力;但这种方法比较容易出现应力集中现象;
方法2,定义局部刚性区域。该方法有个不足,它在端面额外的增加了一定的刚度,只能适用于小变形分析。
方法3,相对方法2来说,采用刚性梁单元,适用范围更广一些,对于大应变分析也能很好的适用。但在小应变分析下,方法2和方法3没有什么区别。
方法4,定义一个主节点,施加了分布力面,应该说跟实际比较接近一点,但端面的结果好像不是很理想,结果有点偏大,在远离端面处的位置跟实际很符合。
方法5,它具体的受力形式有如下两种:
刚性表面边界(Rigid surface constraint)-认为接触面是刚性的,没有变形,和通过节点耦合命令CERIG比较相似;
分布力边界(Force-distributed constraint)-允许接触面的变形,和边界定义命令RBE3相似。
使用这种方法,需要用KEYOPT(2) = 2打开接触单元的MPC(多点接触边界)算法。

c)命令流示例:
下面用不同的方法来实现的命令流。

方法1:不介绍了

方法2:定义局部刚性区域
/PREP7
ET,1,95
ET,2,21
KEYOPT,2,3,0
R,1,1E-6
MP,EX,1,2.01e5
MP,PRXY,1,0.3
CYLIND,15,10,0,200,0,360,
wpro,,90,
vsbw,all
wpro,,,90
vsbw,all
WPCSYS,-1,0
K,17 , , ,210
lsel,s,,,13,16,1
lesize,all, , ,8, , , , ,1
lsel,s,,,22
lesize,all, , ,4, , , , ,1
lsel,s, , ,17,20,1
lsel,a, , ,26,27,1
lsel,a, , ,30,31,1
lesize,all, , ,20,0.4, , , ,1
alls
vmesh,all
!下面一段开始各个方法有所不同,由于前面的建模一样,后面的例子就不再给出
ksel,s,,,17
type,2
real,1
kmesh,all
allsel
nsel,s,loc,z,200,210
npolt
CERIG,node(0,0,210),ALL,ALL, , , ,
!CERIG命令定义局部刚性区域
allsel
/SOLU
f,node(0,0,210),mz,10e5
FINISH
!以下一段边界条件的施加各种方法一样,后面例子也不再赘述
/SOL
nsel,s,loc,z,0
d,all,all
allsel
solve

方法3:使用MPC184单元定义刚性梁
……
et,2,184
keyopt,2,1,1
nsel,s,loc,z,200
n,15000 ,0,0,210
type,2
*get,nnum,node,0,count
*get,ND,node,0,num,min
*do,i,2,nnum
!节点个数是nnum,只需要生成nnum个mpc单元
E, 15000,ND
ND=NDNEXT(ND)
*enddo
allsel
/SOLU
f,node(0,0,210),mz,10e5
FINISH
……

方法4:rbe3命令
……
ET,2,21
KEYOPT,2,3,0
R,1,1E-6
K,17 , , ,210
ksel,s,,,17
type,2
real,1
kmesh,all
allsel
nsel,s,loc,z,200
*get,nnum,node,0,count
*get,ND,node,0,num,min
*dim,sla,array,nnum
*dim,sla2,array,nnum
*do,i,1,nnum
sla(i)=ND
sla2(i)=ND
ND=NDNEXT(ND)
*enddo
allsel
rbe3,node(0,0,210),all, sla,sla2
/SOLU
f,node(0,0,210),mz,10e5
FINISH
……

ANSYS求解器的基本原理与选择

© Written by J.Y. WANG

ANSYS求解器的基本原理与选择

对于线性方程组的数值求解方法大致分为两类:直接求解法和迭代法。ANSYS中的直接法都是基于高斯消元法的原理,而迭代法是采用逐步逼近的方法。由于迭代法不需要存储系数矩阵的零元素,因而迭代法主要用于求解大型稀疏矩阵方程组,并且计算程序比较简单,原始系数矩阵在计算中始终保持不变所以迭代法被广泛使用,但是迭代法存在收敛性和收敛速度问题。ANSYS中的迭代求解器都是基于共轭梯度原理计算的,所不同的是各迭代法的预处理矩阵不同。

另外需要说明的是:由于迭代法的特点是不需要矩阵分解,只需要一系列具有稀疏矩阵分布的矩阵相乘和预处理矩阵,所以迭代法所需的内存空间和计算空间都小于稀疏矩阵法,但是迭代法并非适用于所有问题,而且对于一些复杂问题来说,需要的迭代次数会很大,这种情况下稀疏矩阵法的计算时间可能会小于迭代法。

稀疏矩阵求解器与其他求解器相比具有较强的稳健性。对于非线性结构分析建议按如下原则选取sparse或PCG求解器:

如果是梁/壳或梁/壳与实体结构,选择稀疏矩阵直接求解器
如果是具有大量自由度(>20万个)的3D实体结构选
PCG求解器
如果是由畸形单元触发的病态问题,或在不同区域具有不同材料的模型,或没有有效边界条件的问题选择选择
稀疏矩阵直接求解器

ANSYS求解器简介

求解方法 求解器 特点和应用场合 自由度数(万个) 内存需求 硬盘需求
直接法(基于高斯消元法) 稀疏矩阵求解法(Sparse)作为默认求解器 适用于对称和非对称矩阵的求解,特别是非确定矩阵的非线性分析。
可在静态、谐态、瞬态、子结构和PSD谱分析中使用。
1~50
波前法(Frontal) 不组集总刚,在处理单刚时直接组集和求解非线性分析或内存受限时 ≤5
迭代法(基于共轭梯度法) 雅克比共轭梯度法(JCG) 适用于对称矩阵、非对称矩阵、复矩阵、确定与非确定矩阵的求解。
可在静态、谐态、瞬态分析中使用。
建议在3D结构和多物理场的谐分析中使用;对于传热、电磁学、压电材料和声场问题也比较高效。
≥5~100
不完全乔氏共轭梯度法(ICCG) 适用于对称矩阵、非对称矩阵、复矩阵、确定与非确定矩阵的求解。
可在静态、谐态、瞬态分析中使用。
与JCG相比需更多内存,但对于病态矩阵的鲁棒性更好
≥5~100
预处理共轭梯度法(PCG) 适用于对称、确定或不确定矩阵求解。
可在静态、瞬态、模态(仅PCG Lanczos 法)分析中使用。
与Sparse法相比需要更少的磁盘空间,对于大模型速度更快
≥5~100

阿里云服务器搭建LAMP环境

© Written by J.Y. WANG

#以下内容20180101进行了更新。

#查看数据盘是否分区格式化
lsblk

#对数据盘分区
fdisk /dev/vdb
n
p
1
wq

#对数据盘格式化
mkfs.ext4 /dev/vdb1

#查看挂载情况
df -ahT

#建立挂载目录
mkdir /var/www

#添加启动挂载
echo ‘/dev/xvdb1 /var/www ext4 defaults 0 0’>>/etc/fstab

#挂载分区
mount -a

#更新
yum -y update

#安装LAMP
#(如果使用RDS可以不装mysql mysql-server)
yum install httpd php php-mysql php-gd php-mbstring php-mcrypt mysql mysql-server

# 安装的模块简介
# httpd(提供Apache主程序)
# php(PHP主程序含给Apache使用的模块)
# php-mysql(提供给PHP程序读取MySQL资料库的模块)
# php-gd (php处理图形扩展库)
# php-mbstring(PHP的多字节字符处理模块)
# php-mcrypt(php的加密支持扩展库)
# php-devel (建构PHP扩展所需的文件)
# mysql(MySQL客户端程序,若使用RDS可不装)
# mysql-server(MySQL服务器程序,若使用RDS可不装)

#配置Apache
/etc/httpd/conf/httpd.conf
#配置方法请参见鸟哥的Linux私房菜

#启动服务(适用于Centos 7)
systemctl start httpd.service
systemctl enable httpd.service

#若使用RDS则无需启动和初始化mysql
systemctl start mysqld.service
systemctl enable mysqld.service
#mysql初始化
/usr/bin/mysql_secure_installation

#查看httpd的80端口和mysql的3306端口是否成功启动
netstat -nat

#首先设定网站目录和文件的所有者和所有组。
chown -R root:apache /var/www
cd /var/www

#设置网站目录权限为750,只有root用户对目录拥有读写执行的权限,用户组有读执行权限,其它用户没有任何权限。
find -type d -exec chmod 750 {} \;

#设置网站文件权限为640,只有root用户对网站文件有更改的权限,http服务器只有读取文件的权限,其它用户无任何权限。
find -not -type d -exec chmod 640 {} \;

#针对wordpress目录设置所有者和所有组权限。
chown -R apache:apache /var/www/html

CFD稳态数值模拟的建议

© Written by J.Y. WANG

近年来,建筑计算风工程的研究和应用得到了很大的进步,但其数值计算的精度非常重要。数值模拟是一种近似解,误差的大小决定了求解的精度,误差主要产生于三个方面[26]:模型误差、离散误差和迭代误差。下面主要根据数值模拟方面的实践和体会,并参考一些资料[27~34],从数值模拟计算域的尺寸、计算网格、对流项插值阶数、湍流模型、数值模拟结果的判断等几个方面提出一些建议。同时还选取一个立方体实测模型的结果进行比较验证。

(a) 计算域设置

在对建筑物表面风压进行数值模拟时,是将一个无限大的空间用一个有限的计算域来代替,即在距离建筑较远的地方人为设置几个避免,使求解于封闭,并保证这些壁面设置不会对建筑表面风压数值计算结果产生影响,即求解域的大小不宜太小,但也不宜太大以免增加计算量。从影响建筑物壁面风压考虑,对低矮建筑物(包括大跨度建筑),设h为建筑物的高度,建议入口距建筑物迎风面保证4h~5h的距离,建筑物侧面和顶面距各自流域边界的距离应大于4h。此时最大阻塞率小于3%。但是,高层建筑与低矮建筑物有所区别,因为低矮建筑以顶面绕流为主,而高层建筑则以侧面绕流为主。高层建筑计算域的高度H可小于3h,而计算域的水平宽度B应大于8倍建筑物宽度,此时阻塞率小于5%。背风壁面距出口的距离应使湍流充分发展,所以出口应距建筑物远一些,一般要求9h~10h。若距离太小,出口处有回流,则计算会出现发散。在大尺度建筑物平均风压模拟时,有时也可适当减少背风壁面距离,因为一般远场的网格较粗,湍流耗散较快,并且输运方程中都以对流项为主,较远下游的流动对上游影响较小,所以大多取7h~8h就可基本消除人为设置出口边界的影响。

(b) 计算域网格设置

进行CFD数值模拟计算时,首先要将计算区域离散化,即网格划分,数值计算是在离散网格点上满足流体动力学基本方程,因此网格划分将对数值模拟结果有直接影响。网格划分对计算精度的影响包括网格类型和网格尺度两方面。网格类型分为结构化网格和非结构化网格,一般建筑物体型较为复杂,生成结构化网格比较困难,在实际应用时往往采用非结构化网格,但对于简单形体,应该采用结构化网格,因为当流体流动和网格成一条直线时数值耗散最小。网格尺度的影响主要体现在近壁面网格的密度上,近壁面网格距壁面的距离可以用无量纲距离 表征。

式中uz为摩擦速度,y为第一排网格节点距壁面的法向距离,ρ和μ分别为流体的密度和动力粘性系数。

由于非平衡壁面函数基于Launder和Spalding提出的平均速度对数率强烈的依赖于压力梯度理论,而壁面速度的对数率仅在y+>30~60范围的边界层中适用,因此,在运用壁面函数来模拟近壁面流动时,网格布置的关键是确定第一排网格的位置,一般原则是第一排网格应布置在y+=30左右而不宜太密。数值风洞的模拟结果很大程度上取决于计算域网格划分的优劣。因此网格应当精细到足够捕捉到剪切层、旋涡等物理现象的特征变化,网格的质量也必须足够的高。在流动变化梯度大的区域,网格的拉伸或压缩率应当小,使得截面误差小,两个相邻单元的扩展系数应当小于1.3。在大型建筑中,流动参数沿壁面法线方向变化剧烈,因此在壁面法向,网格需要加密,以精确求解壁面边界层内的压力。就计算网格形状而言,六面体优于四面体,前者可以引入较小的截断误差,并显出良好的收敛性。然而,在风工程中几何体总是非常复杂的,通常使用四面体网格。但在壁面处网格线必须与壁面正交,因此棱柱体网格和四面体网格应一起使用。如果想预测壁面的压力,至少应布置5层棱柱体网格在壁面处。

用有限体积发进行数值计算时,对流项的插值格式非常重要。一阶迎风格式通常包含较大的数值耗散。目前推荐采用二阶迎风插值格式,其数值耗散明显低于一阶迎风格式,具有较高的精度。对于强烈变化的流场,二阶迎风常常会产生数值振荡,此时可采用接近二阶的混合格式。

(c) 湍流物理模型的选取

在建筑计算风工程中,采用比较多的湍流物理模型有RNG κ-ε、SST κ-ω、SSG-RSM、BSL-RSM四种,它们分别是标准κ-ε、κ-ω模型、雷诺应力模型的改进模型,在分离流、旋涡等复杂流场模拟中有较强功能。通过对多个大跨度屋盖的数值模拟与风洞试验对比,建议在模拟建筑物表面平均风压时,一般采用SST κ-ω模型或BSL-RSM雷诺应力模型。当建筑物体型比较复杂或计算机配置较低时,优先采用SST κ-ω模型,当建筑物体型比较规则或计算机配置较高时,可采用BSL-RSM雷诺应力模型。

(d) 稳态数值模拟的边界条件

1)入口

在数值风洞入口处,通常指定等效的大气层边界。平均风速通过对数率或指数率的剖面得到,对来流风方向地面的粗糙长度z0,指数率的平均风剖面为

其中,ub是z=zb处的参考速度,α是对应于不同地面粗糙度类别的指数。

入口处湍流强度边界条件可以通过湍流黏性或湍动能与湍流耗散率来描述。对两方程湍流物理模型来说,湍动能和湍流耗散率可以通过等效边界层假设给出:

式中,Cu=0.09,I(z)是入口处的湍流强度剖面,可以参考日本或澳大利亚规范[35~39]等国规范选取,uz是平均流速,l是入口处的湍流特征尺度,可以选择为建筑物的高度。

2)计算域顶壁和侧壁面的边界

这些边界位置设置为自由滑移壁面。

3)出口

由于出流接近完全发展,采用完全发展出流边界条件,即流场任意物理量沿出口法向的梯度为零。

4)建筑物壁面和地面

采用无滑移壁面。为保证壁面附近边界层的对数运算不出错,壁面附近的网格离开壁面最近的计算节点应当置于离壁面距离大于壁面粗糙高度。

(e) 收敛性及结果初步判定

迭代计算以相邻两步之间的残差为收敛标准。残差的量级一般在第一次迭代后即可得到,最终的残差应当趋于零。一般情况下,残差下降4个量级即可认为结果收敛。同时可以监测感兴趣的位置,记录当地的流动变量。如果这些变量趋于常数,这个区域的解可以认为已经收敛。在数值风洞稳态模拟中,计算结果一般要满足以下几个要求:

(1)来流远场风剖面的保持性:平均风速剖面需保持不变,湍流强度也达到近似保持的要求。

(2)最后结果必须采用高精度的离散格式计算。

(3)无滑移壁面上得到的风速必须为零或接近零,使物理边界条件应用准确。

(4)最终解是网格无关解,可通过网格加密或网格优化得到网格无关解。

(f) CFD模拟的不确定性因素

数值模拟的结果不仅与湍流模型紧密相关,还很大程度上依赖于网格设计和数值格式。而后者在使用相同的程序的情况下,不可避免掺杂了人为因素。Crown[27]等. (1997)总结了由欧盟多家研究机构参与的有关建筑绕流和扩散合作项目的部分结果,并通过“EUP项目”,分析比较了不同机构的网格划分、差分格式及湍流模型引起的差别,得出结论认为,计算结果很显著的依赖于网格设计参数、空间离散格式以及湍流模型。也就说明了,在实践中,数值模拟所面临的不确定因素,在某些情况下,都不会比由于“用户因素”所造成的差异更大。计算风工程中什么样的误差是可以接受的?这个问题没有一个明确的标准。理想状况是获得和场地实测数据完全一致的结果,但目前还难做到。数值模拟希望尽可能减小误差,使得CFD计算结果与场地实测数据尽量接近。但不同的研究者给出的可接受的误差范围也不同,并且可接受的误差范围还和应用的对象有关。目前,在计算流体动力学所依赖的理论本身和数值计算技术没有重大突破之前,期望CFD的结果与实测结果吻合非常好,既不现实也容易引起误导。处于大气边界层的钝体建筑结构,周围的流场高度湍流化,在时间和空间上呈现随机脉动的特征,因此,一般使用统计意义上的量来描述流动特征。对于这样复杂的现象进行数值模拟,不可避免的存在误差。