1 内容介绍

风力发电机的空气动力学性能是决定风力机安全与效率的最重要因素之一.但由于影响风力机气动性能参数众多,更加高效精确地模拟风力机的气动特性一直是风力机研究的重要发展方向.本研究采用浸入边界法对风力机的不同翼型,单级风力机和两级风力机的气动力学进行了一系列的研究.

​2 仿真代码

%% WInDS Driver -> Wake Induced Dynamics Simulator% % Driver script to compute wind turbine performance via unsteady lifting% line method.%% Uses FAST input and output files to define wind turbine geometry and % operating conditions. WInDS then predicts wind turbine performance due % to wake evolution via free vortex wake method and lifting-line theory. %%% ****Function(s)****% constants          Load constants used by other functions% elliptical         Generate geometry and variables for elliptical wing% rotor              Generate geometry and variables for rotor% input_import       Import FAST-formatted input files% output_import      Import FAST-formatted output files% input_mod          Modify inputs, remove discontinuities% kinematics         Compute positions of blade stations% velocity           Compute velocity contributions due to kinematics% initials           Set initial conditions and preallocate memory% performance        Compute performance and load values% %% This work is licensed under the Open Source Initiative BSD 2-Clause % License. To view a copy of this license, visit % http://www.opensource.org/licenses/BSD-2-Clause% %% Written by Thomas Sebastian (tommy.sebastian@gmail.com)% Last edited December 16, 2011%%% Clear command window and workspaceclear allclose allclc%% !!!User-defined variables!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!user.t=[0 5 5]; %Initial t, final t, and frequency in Hzuser.filename='NRELrotor'; %Test case (elliptical, rotor type, or .fst file)user.tol=1e-8; %Tolerance value for convergence of numerical methodsuser.d='visc1'; %Core model for filaments (numerical values are the squared cutoff radius,                 %'viscX' applied viscous model of index X) user.co=1000; %Distance from wake nodes beyond which influence is negligibleuser.integ='pcc'; %Numerical integration schemeuser.ns=20; %Number of spanwise stationsuser.maxiter=30; %Maximum number of iterations for Kutta-Joukowski theoremuser.roll='true'; %If 'true', will apply induction to all wake nodesuser.anim='true'; %If 'true', will generate animation of wake evolutionuser.time=datestr(now ,'mm-dd-yyyy_HHMM'); %Date and time of code executionuser.kjtype='fixed'; %Use either fixed point or Brent's method for convergence (Brent is                     %still a bit coarse)user.relax=0.25; %Relaxation value for fixed-point iteration%%Variables for user.ellip.* used only if user.filename='elliptical'user.ellip.b=10; %Elliptical wingspanuser.ellip.AR=6; %Elliptical wing aspect ratio (AR=b^2/S)user.ellip.wind=[1 0 0]; %Wind velocity vectoruser.ellip.pitch=[5 5 0]; %Pitch angle of elliptical wing (in degrees)user.ellip.pitchrate=0; %Pitch rate of elliptical wing (in degrees)user.ellip.yaw=0; %Yaw angle of elliptical wing (in degrees)%%Variables for user.rotor.* used only if user.filename='rotor'user.rotor.wind=[11.4 0 0]; %Wind velocity vectoruser.rotor.tsr=7; %Tip speed ratiouser.rotor.casetype='static_rated';user.rotor.pitch=0; %Pitch angle of rotor blade (in degrees)user.rotor.yaw=0;user.rotor.modes=[];%{'Surge' 0.72520 0.00740 -1.16256 -0.44205 0.07750 2.60940 13.60156 10};addpath(genpath(fullfile(cd))); %Add directories to search path%% Load constants (physical and derived)[const]=constants;%% Load test case (elliptical wing, rotor, or FAST-generated)if strcmp(user.filename,'elliptical')    [blade,turbine,platform,fastout,airfoils,wind]=elliptical(user);elseif strcmp(user.filename,'NRELflat')    [blade,turbine,platform,fastout,airfoils,wind]=NRELflat(user);elseif strcmp(user.filename,'NRELrotor')    [blade,turbine,platform,fastout,airfoils,wind]=NRELrotor(user);elseif strcmp(user.filename,'FAST')    [airfoils,blade,turbine,platform,wind]=input_import(user.filename);    [fastout]=output_import(user.filename,user.t);end%% Compute positions of blade stations in inertial reference frame[pos]=kinematics(blade,turbine,platform,fastout);%% Compute velocities of blade stations due to external motions[vel,pos]=velocity(pos,blade,turbine,wind,fastout);%% Define initial values (wake strength, geometry, etc)[wake,vel,perf]=initials(pos,vel,blade,turbine,wind,airfoils,fastout,const,user);%% !!!PRIMARY LOOP OVER TIMESERIES!!!%Determine size of test vectors/arraysnt=length(fastout.Time); %Number of timestepsnb=turbine.NumBl; %Number of bladesns=length(blade.RNodes); %Number of shed nodes (stations)tm=zeros(nt,1); %Preallocate memory for timer (time for each timestep)for p=2:nt    tic; %Begin timing this timestep%Update shed and trailing filament strength    %Bound filament for previous timestep becomes new bound filament    wake.gamma.shed{p}(:,:,1,:)=wake.gamma.shed{p-1}(:,:,1,:);    %Compute spanwise change in bound filament to compute first set of trailing filaments    wake.gamma.trail{p}(:,:,1,:)=diff([zeros(1,1,1,nb) ; wake.gamma.shed{p}(:,:,1,:) ; ...        zeros(1,1,1,nb)],1);    %Previous set of trailing filaments becomes new set of trailing filaments    wake.gamma.trail{p}(:,:,2:end,:)=wake.gamma.trail{p-1};    %Shed filaments computed via spanwise summation of trailing filaments (ensure Kelvin's     %theorem is satisfied)    wake.gamma.shed{p}(:,:,2:end,:)=diff(cat(3,cumsum(wake.gamma.trail{p}(1:end-1,:,:,:),1), ...        zeros(ns,1,1,nb)),1,3);     %Modify vortex core size via Ramasamy-Leishman model and include effect of filament stretching%from previous timestep    wake=vcore(wake,const,fastout,user,p);    %Compute induced velocity at all points    %Velocity induced by shed filaments on all nodes in wake    if strcmp(user.roll,'true')        vel.uind_shed=BiotSavart(wake.domain{p}(1:end-1,:,:,:),wake.domain{p}(2:end,:,:,:), ...            wake.domain{p},wake.gamma.shed{p},wake.rc_eff.shed{p},user.d,user.co,'full');        %Velocity induced by trailing filaments on all nodes in wake        vel.uind_trail=BiotSavart(wake.domain{p}(:,:,2:end,:),wake.domain{p}(:,:,1:end-1,:), ...            wake.domain{p},wake.gamma.trail{p},wake.rc_eff.trail{p},user.d,user.co,'full');        %Sum the induced velocity contributions due to shed and trailing filaments        vel.uind{p}=vel.uind_shed+vel.uind_trail;    end    %Add the total induced velocity in the wake to the freestream velocity    vel.domain{p}=vel.domain{p}+vel.uind{p};        %Numerically convect wake nodes to time+1    if strcmp(user.integ,'fe') && p~=nt        wake=fe(wake,vel,user,p); %Foward euler    elseif strcmp(user.integ,'ab2') && p~=nt        wake=ab2(wake,vel,user,p); %2nd-order Adams-Bashforth    elseif strcmp(user.integ,'ab4') && p~=nt        wake=ab4(wake,vel,user,p); %2nd-order Adams-Bashforth    elseif strcmp(user.integ,'pcc') && p~=nt        wake=pcc(wake,vel,const,fastout,user,p); %Predictor-corrector, central-difference    end%Compute strength of new bound vortex via Kutta-Joukowski theorem    [wake,perf,vel,ctj]=KuttaJoukowski(pos,vel,blade,turbine,wake,airfoils,user,perf,p, ...        user.kjtype);    %Determine time spent on current timeloop and estimate time remaining    tm(p-1)=toc; %Time spent on current loop    if p>2        pt=polyfit([0 ; (2:p)'],cumsum([0 ; tm(1:p-1)]),2);        tr=polyval(pt,nt)-sum(tm(1:p-1)); %Extrapolate to determine time remaining        clc; disp([num2str(ctj) ': ' num2str(p/nt*100) ...            '% complete, estimated time remaining: ' num2str(tr/60) ' minutes'])    endend%% Compute performance metricsperform;%% Tidy up the workspaceclear yn j nb nt wb1 vs vt pg nst ns trsave(['savedsims\' user.time '_' user.filename '_' user.rotor.casetype '.mat'])%% Generate wake figureif strcmp(user.anim,'true')    j=length(fastout.Time);    wakeplot(pos,vel,turbine,blade,wake,fastout,j);end

3 运行结果

4 参考文献

1] T. Sebastian and M. Lackner. Development of a Free Vortex Wake Model Code for Offffshore Floating

Wind Turbines. Renewable Energy, Online:1–15, 2011.

[2] T. Sebastian and M. Lackner. Unsteady Aerodynamics of Offffshore Floating Wind Turbines.

Wind

Energy, Online:1–14, 2011. doi: 10.1002/we.545.

[3] Sheila E. Widnall. The Structure and Dynamics of Vortex Filaments. Annual Review of Fluid Mechanics,

7:141–165, 1975.

[4] Mahendra J. Bhagwat and J. Gordon Leishman. Stability, Consistency and Convergence of Time

Marching Free-Vortex Rotor Wake Algorithms. Journal of the American Helicopter Society, 46(1):59–71,

January 2001.

[5] J. Gordon Leishman. Principles of Helicopter Aerodynamics (Cambridge Aerospace Series). Cambridge

University Press, 2006. ISBN 0521858607.

[6] Jack B. Kuipers. Quaternions and Rotation Sequences. Princeton University Press, 1998.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

【物理应用】水下浮动风力涡轮机的尾流诱导动态模拟风场附matlab代码相关推荐

  1. 【物理应用】基于Zernike多项式的大气湍流相位屏的数值模拟附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  2. 【物理应用】基于傅里叶伽辽金谱法二维纳维-斯托克斯附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  3. 【图像增强】基于DEHAZENET和HWD的水下去散射图像增强附matlab代码

    1 内容介绍 去散射和边缘增强是解决水下图像的对比度严重衰减.颜色偏差和边缘模糊等问题的关键步骤.这篇论文提出了一种较好的水下图像增强的方法.首先使用经过端到端训练的卷积神经网络去测量输入图片,同时以 ...

  4. 【物理应用】大气辐射和透射率模型及太阳和月亮模型(Matlab代码实现)

  5. 【物理应用】基于粒子群优化算法实现瞬变电磁法视电阻率反演附matlab代码

    1 内容介绍 煤矿井下矿井瞬变电磁法(MTEM)探测中,电磁场呈全空间分布,全空间瞬变电磁反演是复杂的非线性问题,目前反演计算中全空间响应主要由半空间响应乘以全空间响应系数来得到,导致反演结果中顶板和 ...

  6. 【物理应用】基于Matlab模拟井筒多相流附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  7. 【物理应用】基于摩尔库仑准则实现应变软化岩体的围岩-支护相互作用附matlab代码

    1 内容介绍 我国是一个多山的国家,随着公路建设逐渐走进山区,山区公路隧道开始出现并逐渐向着更长.更大的方向发展,在隧道设计与施工过程中正确判断隧道围岩的稳定性极其关键.对于岩石介质尤其是软岩或高地应 ...

  8. 【物理应用】大气吸收损耗附matlab代码

    1 内容介绍 大气对太赫兹辐射传输存在一定的非协作性,即存在吸收衰减.为了实现太赫兹辐射的有效应用必 须细致地了解太赫兹辐射大气传输的窗口位置,宽度及大气透过率.选取了处理大气非均匀路径,吸收带重叠等 ...

  9. 风力涡轮机巨头维斯塔斯遭网络攻击

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 摘要 风力涡轮机制造商巨头维斯塔斯风力系统 (Vistas Wind Systems) 遭网络攻击,关闭其IT 系统. 维斯塔斯是北美地区领先的 ...

最新文章

  1. 干货|全面介绍微软开源可解释机器学习框架InterpretML
  2. 一卡通变“一脸通” 人脸识别更新校园考勤方式
  3. 【PHPStorm使用手册】如何设置字体大小?
  4. 论文笔记:KD-Net
  5. 【LeetCode】【数组归并】Merge k Sorted Lists
  6. 中班科学计算机,幼儿园中班科学课件:《照镜子》
  7. CodeSite日志使用
  8. ASP.NET关于WebPages的一点总结
  9. Python-Flask实现基金自选网站
  10. 在Eclipse中使用Maven创建多模块的层级项目
  11. methods和computed的区别
  12. 团队作业个人博客07
  13. 线阵相机调帧率_线阵相机调试文档
  14. CreateProcess并隐藏窗口
  15. 以虎嗅网4W+文章的文本挖掘为例,展现数据分析的一整套流程
  16. emv交易流程介绍_(精)EMV流程介绍.ppt
  17. [转]UserData使用总结 - lanyu
  18. CodeForces Round #554 Div.2
  19. 【Vulnhub】之JIS-CTF-VulnUpload-CTF01
  20. 服务器维护10月11魔兽,魔兽世界怀旧服10月11日免费转服第五期开启公告 免费转服详情...

热门文章

  1. IntelliJ IDEA 常用插件一览,让效率成为习惯
  2. 数字化网络安全定义及技术框架
  3. 李开复:给中国学生的一封信
  4. oracle 统计信息解锁,统计信息的解锁
  5. 计算机组成原理实验--PA实验PA3.1
  6. 三款zookeeper客户端介绍
  7. Android2.2获取联系人手机号
  8. 如何将Git仓库备份到本地?
  9. 实战:CSI卷管理-2022.3.2
  10. 七夕礼物:词云[保姆级教程]