前言

此文是采用POD以及DMD方法实现圆柱绕流流动分解(POD篇)的姊妹篇,本打算合成一篇来写,感觉篇幅太长,因此将本文单独拆出,以飨读者。
上文讲了POD方法降阶处理圆柱绕流问题,POD方法的实质是将随时间变化的原始信号(流场)投影到一组随时间变化的,相互正交的空间信号(流场)的叠加。分解后的模态正交性是其最大的特点。为了保证空间模态的正交性,所对应的时间系数序列有时会包含多个频率成分,分解后的各阶模态有时候很难去解释,这也是它较大的局限所在;此外,分解后的模态尝尝按照能量大小进行排序,未考虑各模态的动态特性的影响。
而DMD方法则可以得到的每阶模态对应单一频率,进而可分析单一流动行为的具体特征和变化规律。DMD 的基本思路是将流动演化视为线性动力学过程,通过分析流动过程中的流场快照得到各阶模态。该方法基于一个最佳拟合流场动态特性的线性算子,将流场分解成若干具有单一特征频率和增长/衰减率的模态, 进而得到流场在时间和空间的主要特征。 当然DMD方法也存在很多问题,比如说特征值排序问题,有兴趣的同学可以看下Brunton大神的相关参考文献。

DMD方法

关于圆柱绕流案例的详细参数,在采用POD以及DMD方法实现圆柱绕流流动分解(POD篇)中已经详细介绍,这里就不再赘述。经典DMD算法的代码详见下面的代码块。DMD相关基础知识的学习可以参见大佬hyhhyh21相关博文内容,讲解的非常清楚,看完后代码就可以自己写出来,向大佬致敬!

function [Dd,b,Phi,Time_DMD,Energy]=DMD_CLASS_M(X,Y)
%by mingbule 2022.2.22
%DMD经典算法
%输入变量X,Y分别为时空矩阵Uxt的1~N-1列以及2~N列
%输出变量Db为经过DMD分解后排序过的特征值
%输出变量b为模态对应的初始结果,与模态相乘后可得初始结果Ux1
%输出变量time_DMD为分解后的时间序列(已排序)
%输出变量Phi为DMD分解后的模态结果(已排序)
%输出变量Energy为DMD分解后的模态能力值(已排序)
N=size(X,2);
%Step1:对X进行svd分解
[U,S,V]=svd(X,'econ');
Sd=diag(S);%将N-1*N-1对角矩阵转换为N-1列矩阵
r=sum(Sd>1e-6);%筛选出奇异值大于1e-6的数量,逻辑变量求和,避免存在接近0值使得计算出现问题
U=U(:,1:r);
S=S(1:r,1:r);
V=V(:,1:r);
%Step2:获得转换矩阵A
A=U'*Y*V/S;
%Step3:求矩阵A的特征向量及特征值
[Om,La]=eig(A);
Dd=diag(La);
%Step4:计算DMD模态
Phi=Y*V/S*Om;
%Step5:计算模态对应的初始值b
b=Phi\X(:,1);
%Step6:模态排序(按照能量大小排序)
Q=Dd.^(0:N-1);%建立范德蒙矩阵来储存特征值变化
Time_DMD=b.*Q;%获取模态对应的时间系数
Energy=zeros(size(Phi,2),1);
for k=1:size(Phi,2)Uxt_DMD_k=real(Phi(:,k)*Time_DMD(k,:));Energy(k)=sum(sum(Uxt_DMD_k.^2));
end
[Energy,index]=sort(Energy,'descend');
Dd=Dd(index);
b=b(index);
Phi=Phi(:,index);
Time_DMD=Time_DMD(index,:);
end

后处理结果

模态分解结果

DMD1阶模态,与POD分解中的平均流场一致
DMD2阶模态(对应POD1阶)
DMD4阶模态(对应POD3阶)

DMD6阶模态(对应POD5阶)
DMD8阶模态(对应POD7阶)

DMD10阶模态(对应POD9阶)
可以看出,上述圆柱绕流流动经过DMD分解得到的模态结果与POD方法得到的模态基本一致,这也与文献【2】中的结论一致(虽然大多数情况下,两者的分解结果不同)。

前6阶模态流场恢复

特征根分布

频率-衰减率分析

频率-能量图

衰减率-能量图


后处理的方法与POD方法基本类似,因此代码就不再贴出,大家掌握了POD的处理方法,可以自己尝试着写出这些后处理的代码。

需要指出的是,DMD方法存在一个特征值排序的问题,目前没有非常通用的方法排序方法,比如某个模态初始的能量很高,但它衰减比较快,可能一定时间后就不太显著,但本文中后处理多个分析图可知,具有较大能量的前几阶模态衰减率为零,稳稳的分布在单位圆上,而许多低能量的高阶模态则分布在圆内,表示随着时间变化而衰减。感兴趣的同学可以尝试着对各阶模态的能量进行排序。由频率图可知,DMD方法可以对每个模态对应单一频率,能够更方便地识别流动结构,分析流动机理。

通过这两篇文章的案例以及文献【3,4】中的典型信号处理案例,相信大家可以比较清晰的掌握POD以及DMD这两种模型降阶方法,在此基础之上,有特殊需求的同学可以就相关知识进行更加深入的学习。在这里权当抛砖引玉,期待与大家交流~

参考文献1234


  1. J.N. Kutz, S.L. Brunton, B.W. Brunton, J.L. Proctor, Dynamic mode decomposition: data-driven modeling of complex systems, SIAM2016. ↩︎

  2. K. Taira, M.S. Hemati, S.L. Brunton, Y. Sun, K. Duraisamy, S. Bagheri, S.T. Dawson, C.-A. Yeh, Modal analysis of fluid flows: Applications and outlook, AIAA journal, 58 (2020) 998-1022. ↩︎

  3. 利用matlab实现POD分解(在一维信号或二维流场矢量中的应用) ↩︎

  4. 利用matlab实现DMD动态模态分解(在一维信号或二维流场矢量中的应用) ↩︎

采用POD以及DMD方法实现圆柱绕流流动分解(DMD篇)相关推荐

  1. 采用POD以及DMD方法实现圆柱绕流流动分解(POD篇)

    背景 笔者通过对POD及DMD两种模型降阶方法进行学习后,尝试对Brunton大佬书中Re=100圆柱绕流case进行复现,现将学习及复现过程的代码及结果进行分享,希望多提宝贵建议. 本文圆柱绕流案例 ...

  2. 采用 MRT-LBM 模拟旋转圆柱绕流---MATLAB代码--王富海2017--基于 MRT-LBM 的流场与声场仿真计算

    %这个例子采用 MRT-LBM 模拟旋转圆柱绕流 %基于 MRT-LBM 的流场与声场仿真计算 --王富海2017 %左边速度边界-泊肃叶流,右边压力边界,上下无滑移壁面(全部用非平衡外推格式) %还 ...

  3. catia圆柱转化为圆台_浅析actran气动噪声仿真技术,以圆柱绕流气动噪声仿真为例...

    一.写在前面Actran是fft(Free Field Technologies)公司的旗舰产品,"号称"市场上最先进最完善的声学模拟软件(引用官方语言),覆盖振动声学和流动声学的 ...

  4. fluent瞬态计算终止条件在哪里设置_Fluent案例7【圆柱绕流】

    一个瞬态的圆柱绕流案例 知识点: 瞬态圆柱绕流的模拟 一个后处理的方法:将瞬态模型中一个点的速度变化绘成图表并将数值导出excel文件 模型如下图所示,左边界为速度边界进口速度0.5m/s,试模拟出计 ...

  5. Fluent UDF 实现用Newmark-β方法计算圆柱绕流流固耦合时的位移振动响应

    Fluent UDF 实现用Newmark-β方法计算圆柱绕流流固耦合时的位移振动响应 问题描述 代码 尚未解决的问题 问题描述 拟用Fluent模拟圆柱振子在不同流速的风作用下的横向振动.采用二维模 ...

  6. 浅析actran气动噪声仿真技术,以圆柱绕流气动噪声仿真为例

    附赠仿真学习包,包含结构.流体.电磁.热仿真等多学科视频教程,点击领取: ​​​​​​仿真秀粉丝专属礼包 作者:小禹治水,仿真秀科普作者 一.写在前面 Actran是fft(Free Field Te ...

  7. Kubernetes 固定 Pod IP 地址方法

    第七章 Kubernetes 固定 Pod IP 地址方法 文章目录 第七章 Kubernetes 固定 Pod IP 地址方法 一.自定义 IP 地址池 1.下载 calico 管理工具 calic ...

  8. python做圆柱绕流_基于snappyHexMesh生成网格的圆柱绕流算例

    基于snappyHexMesh生成网格的圆柱绕流算例 1.创建几何体STL文件 在了解了原理之后,要生成网格第一步就是要创建一个几何体的STL文件,可以使用3Dbulider,3DCAD等软件生成几何 ...

  9. OpenFOAM的圆柱绕流算例记录

    圆柱绕流是流体力学里最经典的算例之一,受到众多学者的"喜爱".初学CFD的人除了空腔.管道流之外,最先接触的莫过于圆柱绕流了.圆柱绕流能反映流体流过障碍物时的各种情况:层流向湍流的 ...

  10. Python-LBM(格子玻尔兹曼)程序源码实例分析—圆柱绕流篇

    初次学习LBM计算方法,找到一个比较优秀的用python语言编写的圆柱绕流的实例,对每段代码详细添加了注释,帮助自己总结,也为初学的朋友们提供一点帮助(全部代码在文章最后). 先放一张结果图像: 1. ...

最新文章

  1. Nature封面:每天工作21.5小时的AI化学家,8天内完成688个实验,已自主发现一种全新催化剂...
  2. 【手写系列】写出我的第一个框架:迷你版Spring MVC
  3. 广东省计算机大赛设计什么时候,2017年广东省大学生计算机设计大赛
  4. linux中/bin和/sbin和/usr/bin和/usr/sbin
  5. JVM虚拟机选项:Xms Xmx PermSize MaxPermSize区别
  6. parallelstream启动的线程数_高并发与多线程网络学习笔记(三)线程组和线程池
  7. 什么标签用于在表单中构建复选框_基础表单标签及属性
  8. Django auth认证
  9. 什么是黑盒测试,和白盒测试的区别有哪些?
  10. GUID转换字符串的几种形式
  11. 谷歌浏览器flash插件离线下载,最新版
  12. Windows11如何使用安卓子系统的Amazon Appstore
  13. JavaScript ES6新特性
  14. WMB Commands
  15. linux设置双屏拼接_Linux下双屏显示设置
  16. echarts加载世界地图并展示个人数据
  17. java实现wife链接硬件_【技术分享】在Android 910上面实现WIFI功能
  18. 自称菜鸟的二本大龄程序员居然拿到百度offer,还有嘉实offer(百度三面面经)
  19. 测试吃鸡游戏帧数软件,高频内存吃鸡、CSGO帧数提高多少?这一测试告诉你
  20. 为什么有的测试员路越走越窄?原因在这里

热门文章

  1. 《概率论与数理统计》(浙大第四版)第三章总结笔记(纯手写)
  2. jflash添加芯片_【原创】巧用J-Link+J-Flash给Kinesis烧写序列号
  3. 80端口被占用的两种解决方案 - 超详细(已解决)
  4. BSText - YY大神的富文本框架 YYText 的 Swift 版本
  5. 视觉SLAM十四讲 安装OpenCV
  6. web前端三大主流框架
  7. 使用Tesseract对图片文字OCR识别
  8. 线性代数学习之行列式
  9. 小米php架构图,小米商城基本框架部分
  10. /usr/bin/ld: cannot find Scrt1.o: No such file or directory