本文摘要(由AI生成):
本文介绍了风力机仿真模拟中的关键参数设置和风场可视化方法。在模拟中,需要设置网格高度和宽度以覆盖风轮可能移动的范围,同时选择合适的湍流模型、湍流强度和风剪切类型等参数。风场可视化则通过读取生成的风速四维数据,使用MATLAB程序绘制风场三维图和动态风速分布图,以直观地展示风场情况。这些参数设置和可视化方法对于准确模拟和评估风力机性能具有重要意义。
原本十分严重的拖延症最近已经有点好转的迹象了,正激 情澎湃的擦去年6月留下的屁 股
眼看这两天就要完成了,但是突然发现代码里面有个速度修正的正负号搞没了。
完全裂开,算了,重新算吧!又是七八天的青春!一个暑假能有几个七八天啊?
趁这个空隙,更新一下这落满灰尘的吧!为了表示我长时间断更的歉意,再分享一个画风场的小代码吧!
自然环境中,风速具有时域非定常和空间非均匀的特点,特别是对于大尺寸风力机,叶尖掠过最高处的风速与最低处的风速相差甚大。目前世界上已公开的最大风力机应该是西门子-歌美飒的SG 14-222 DD风力机,风轮直径达到222 m。GE的Haliade-X系列也有220 m。如此大的空间跨度,垂直方向和水平方向的风剪切效应十分显著。
常见的风力机一体化仿真软件(如Bladed、OpenFAST),均采用离散的风速数据表示风力机运行环境,俗称风场。风场数据一般应包括四维数据:时间、垂向坐标、横向坐标和风速。为了表示风速的时域变化,一般通过湍流风谱表征风速频域特性。所以,也称为湍流风场(Turbulent Wind Field)。
美国可再生能源实验室(NREL)专门开发了一个软件来生成OpenFAST仿真所需的湍流风场,这就是我们今天要讲到的——TurbSim,即Turbulence和Simulation。
最新版的TurbSim可以在GitHub上下载。可执行程序:https://github.com/old-NWTC/TurbSim/releases/tag/v2.00.08a-bjj;源代码及算例:https://codeload.github.com/old-NWTC/TurbSim/zip/refs/tags/v2.00.08a-bjj。
与众多NREL出品的软件一样,TurbSim也是采用Fortran语言编写的无 界面软件,其运行方式与OpenFAST相同,在命令行窗口运行,可以查看运行状态。丑是丑了点,但是不影响使用。(咦,怎么好像在说我的文章排版呢~)
下载解压缩后,主要包括以下文件:
CertTest文件夹中包括不同模型的算例文件。每个算例文件的格式均相同,主要包括六大部分。一般情况下,我们仅会用到前三部分,后面的三块就保持缺省状态即可。
TurbSim比较特别的地方之一是生成风场文件需要定义两个随机数。其中第二个随机数可以定义为整数或者“RanLux”或“RNSNLW”。如果选择“RNSNLW”,则会采用桑迪亚实验室的内置程序生成风速时间序列,如果选择“RanLux”,则会采用Lüscher提出的伪随机数算法用于生成风速随机相位。具体算法可查看TurbSim用户手册。
随机数的大小决定风速时域曲线大致变化规律,所以这两个参数较为重要,一般在风力机载荷分析和结构设计中,需要采用多组随机数生成的风场,以表征实际自然环境的随机性。
除了随机数之外,还有几个输出开关需要经常修改。
WrFHHTP:设为True则会输出轮毂位置处包括时变风速等湍流参数的**.dat文件。
WrADHH:设为True则会输出uniform格式的风场文件(**.hh)。uniform格式的文件为ASCII文件,可通过记事本等程序打开编辑,其垂向和横向风速变化规律均通过简易的剪切参数表示。文件大小简介,一定程度体现风场的湍动特征。最大的好处是这一格式文件可以用于编辑Gust风况,修改不同时间对应的风速大小和方向即可。
WrADFF:设为True则输出全域风场二进制文件(**.bts)。如果使用OpenFAST仿真,推荐使用bts格式文件。不能通过常见的文本编辑软件打开,只能通过程序以规定的格式读取。(不用担心,后面有程序代码)
WrBLFF:设为True则输出全域风场二进制文件(**.wnd)和对应的概要文件(**.sum)。这一功能主要是为了匹配Bladed。wnd文件与bts文件内部数据结构完全相同。
其他变量保持缺省即可,不打紧。
这一部分十分重要,也是经常需要修改的地方。
NumGrid_Z、NumGrid_Y:垂向和横向网格数量。TurbSim内置算法是设定一个足够大的平面,该平面以轮毂为中心,覆盖风轮可能运动的范围。将这一平面离散为有限个节点。通过计算每一个节点的风速时间序列,从而生成对应的湍流风场。未被节点直接命中的叶片截面,则在载荷计算时,通过OpenFAST内置的插值程序,基于其周围节点的风速数据进行相应的插值。
网格数量没有大小限制,但是数值越大,对电脑内存要求更高。我个人使用经验是网格节点间距控制在15 m以内,垂向和横向均定义为奇数,这样在轮毂点处风速就不是插值的结果了。对于NREL 5MW风力机,我的取值一般是17~21.
TimeStep:采样时间步长,建议取值范围0.05 s~0.1 s。这样既能保证一定的时间连续性,也不至于文件太大。
AnalysisTime、UsableTime:分析时间和可用时间。前者表示风速平均值、频谱特性等满足设置要求的时长,后者则是输出的数据时长。所以,如果我们打算仿真1000s,则设置UsableTime为1000,AnalysisTime略大于1000即可,比如1024。
HubHt:轮毂高度,根据实际模型设置即可。
GridHeight、GridWidth:网格高度和宽度。由于网格平面以轮毂为中心,所以网格高度需要大于风轮直径,并小于2* HubHt(不然就有一部分网格点变成土行孙了,显然不符合实际情况)。但又不能小太多,否则塔架上的又没有风速节点了。所以,我一般设为2倍轮毂高度小一丢丢。至于丢多少,就要看网格数量以及OpenFAST中塔架元素的高度了,最底下的塔架元素中心需要在网格节点上方。对于5MW风力机,我一般设为175m。
由于网格平面需要覆盖风轮可能移动的所有范围,所以网格宽度必须大于风轮直径。对于漂浮式风力机的话,还需要考虑由于sway和roll导致的风轮横向偏移量。所以保险起见,一般设为一个较大的值。比如NREL 5 MW风力机风轮直径为126m,我一般设为200m。
VFlowAng、HFlowAng:垂直倾角和水平倾角。这两个变量定义风的入流方向。一般情况下都是设为0.
这部分稍微关键一点的变量主要有:
TurbModel:湍流模型。设置为给定的模型名称即可,最好放在双引号内。一般可以选择IEC的标准模型Kaimal或Von Karman模型。NREL自己则根据在山地地形测量的低空数据,总结了GP_LLJ和NWTCUP模型。这些模型大同小异,具体的频谱功率公式可以看用户手册:
https://github.com/old-NWTC/TurbSim/blob/jrinker_mods/TurbSim.pdf。
IECturbc:湍流强度;设定值或者等级,A类高,C类低,图7里面可以根据IEC标准的类别查找对应的湍流强度。或者直接给定确切的数值,比如:15.
IEC_WindType:湍流类型;一般可以设为正常湍流模型NTM或者xx年一遇的极端情况,比如xEWM50就表示50年一遇的x类风力机极端工况。
WindProfileType:风剪切类型;一般采用指数型,“PL”。
RefHt、Uref:参考高度和参考风速。一般我们设置参考高度为轮毂高度。
PLExp:风剪切指数;根据实际情况定义,或者选择缺省“default”,则计算根据用户手册表8中的模型-指数对应关系进行选取。
风场可视化最重要的一步,就是读取生成的风速四维数据。推荐使用读取**.bts文件内的数据,wnd文件内的数据需要额外提供.sum文件,稍微复杂一丢丢。
第一步:运行TurbSim,生成bts文件。
第二步:下载NREL自带的bts文件读取程序readfile_BTS.m。程序连接:
https://github.com/OpenFAST/matlab-toolbox/blob/main/Utilities/readfile_BTS.m
第三步:采用surf和slice函数画出风场三维图。可以下载鄙人写的画图程序作为参考:plotWind.m。
https://github.com/yang7857854/F2A/blob/main/WindPlot/plotWind.m
第四步:定义plotWind.m中的风场文件路径和文件名,然后运行。就会自动生成下面种类型的图。懒得调整参数了,按需修改图片格式吧。
这些都是静态的,我之前还搞过一个动态的,不过是通过PS生成的gif动图,我觉得很秀气。具体的方法就是根据得到的风速数据,生成几百张同等大小不同时刻的风轮平面风速分布图,然后导入到PS中生成对应的gif动图。结合AI绘制的风力机模型示意图,就形成了下面的这种效果。
限于篇幅问题,这里就不展开了。过程其实很简单,因为都是师弟干的。。。