externalFlowAroundObstacle.cpp

这个算例里,particle是不影响流体的,文中注释表明该算例的particles仅仅是可视化的作用,用于绘制流线图。

主要内容为:
使用的是DenseParticleField3D。

 typedef DenseParticleField3D<T,DESCRIPTOR> ParticleFieldT;

定义参数。

    int particleTimeFactor;             // If the particle time factor is 2, then the integration time step//   for the particles is twice that of the fluid.T particleProbabilityPerCell;       // Probability of injection of a particle at an injection cell at each time step.T cutOffSpeedSqr;                   // Criterion to eliminate particles with very small velocity.int maxNumParticlesToWrite;         // Maximum number of particles in the output VTK files.

定义MultiParticleField3D,particleArg,particleFluidArg,particleArg与cutOffSpeedSqr一起集成到AdvanceParticlesEveryWhereFunctional3D中,用于更新particles位置,数据处理器level为0,particleFluidArg与particleTimeFactor一起集成到FluidToParticleCoupling3D,用于更新particles速度,数据处理器level为1。
定义injectionDomain,用于后续输出particles时使用。
定义PointParticle3D至模板particleTemplate,从src源码来看,第一个是tag,第二个是坐标,第三个是速度,该particleTemplate用于后续输出particles时使用。
定义particleInjectionArg,与particleTemplate,particleProbabilityPerCell,injectionDomain一起被集成到InjectRandomParticlesFunctional3D里,数据处理器level为0。

定义出口Box3D absorbtionDomain(param.outlet);,这里直接用了流场的出口位置,集成到数据处理器AbsorbParticlesFunctional3D上,level为0。

执行数据处理器particles->executeInternalProcessors();

 MultiParticleField3D<ParticleFieldT>* particles = 0;particles = new MultiParticleField3D<ParticleFieldT> (lattice->getMultiBlockManagement(),defaultMultiBlockPolicy3D().getCombinedStatistics() );std::vector<MultiBlock3D*> particleArg;particleArg.push_back(particles);std::vector<MultiBlock3D*> particleFluidArg;particleFluidArg.push_back(particles);particleFluidArg.push_back(lattice);// Functional that advances the particles to their new position at each predefined time step.integrateProcessingFunctional (new AdvanceParticlesEveryWhereFunctional3D<T,DESCRIPTOR>(param.cutOffSpeedSqr),lattice->getBoundingBox(), particleArg, 0);// Functional that assigns the particle velocity according to the particle's position in the fluid.integrateProcessingFunctional (new FluidToParticleCoupling3D<T,DESCRIPTOR>((T) param.particleTimeFactor),lattice->getBoundingBox(), particleFluidArg, 1 );// Definition of a domain from which particles will be injected in the flow field.Box3D injectionDomain(0, 0, centerLB[1]-0.25*param.ny, centerLB[1]+0.25*param.ny,centerLB[2]-0.25*param.nz, centerLB[2]+0.25*param.nz);// Definition of simple mass-less particles.Particle3D<T,DESCRIPTOR>* particleTemplate=0;particleTemplate = new PointParticle3D<T,DESCRIPTOR>(0, Array<T,3>(0.,0.,0.), Array<T,3>(0.,0.,0.));// Functional which injects particles with predefined probability from the specified injection domain.std::vector<MultiBlock3D*> particleInjectionArg;particleInjectionArg.push_back(particles);integrateProcessingFunctional (new InjectRandomParticlesFunctional3D<T,DESCRIPTOR>(particleTemplate, param.particleProbabilityPerCell),injectionDomain, particleInjectionArg, 0 );// Definition of an absorbtion domain for the particles.Box3D absorbtionDomain(param.outlet);// Functional which absorbs the particles which reach the specified absorbtion domain.integrateProcessingFunctional (new AbsorbParticlesFunctional3D<T,DESCRIPTOR>, absorbtionDomain, particleArg, 0 );particles->executeInternalProcessors();

循环时,用于输出vtk文件。

if (i % param.vtkIter == 0) {pcout << "Writing VTK at time t = " << i*param.dt << endl;writeVTK(*boundaryCondition, i);if (param.useParticles) {writeParticleVtk<T,DESCRIPTOR> (*particles, createFileName(outputDir+"particles_", i, PADDING) + ".vtk",param.dx, param.maxNumParticlesToWrite );}}

在lattice进行碰撞迁移循环的时候,对particles也进行数据处理器的执行。

     lattice->executeInternalProcessors();lattice->incrementTime();if (param.useParticles && i % param.particleTimeFactor == 0) {particles->executeInternalProcessors();}

小总结

如果想在流场中定义一个仅用于绘制流线图的particles,首先需要定义必须的参数,接着定义particleArg用于更新位置,particleFluidArg用于更新速度,particleInjectionArg用于生产particles,其次还需要particleTemplate来决定生产何种种类的particles,injectionDomain和absorbtionDomain用于决定生成和消除particles的区域位置。集成完毕后在lattice碰撞迁移后面增加particles->executeInternalProcessors();即可。

Palabos程序代码解读 | particle应用externalFlowAroundObstacle.cpp | 如何绘制流线图相关推荐

  1. 【GNSS】GREAT多频多系统GREAT-UPD开源代码-第4.1章 代码解读之gnss.h/gnss.cpp

    GREAT多频多系统GREAT-UPD开源代码-第4.1章 代码解读之gnss.h/gnss.cpp 第4.1章 代码解读之gnss.h/gnss.cpp 1. GNSS系统设定 ///< GN ...

  2. LOAM论文和程序代码的解读

    目的 LOAM是KITTI测试中排名第一的状态估计和激光建图方法,知名度很高,在它的基础上衍生出了很多改进版本,例如LEGO-LOAM.LLOAM.ALOAM.Inertial-LOAM等等. 本文对 ...

  3. VINS-Mono代码解读——状态估计器流程 estimator 写在初始化和非线性优化前

    前言 本文主要介绍VINS的状态估计器模块(estimator),主要在代码中/vins_estimator节点的相关部分实现. 这个模块可以说是VINS的最核心模块,从论文的内容上来说,里面的内容包 ...

  4. 200行代码解读TDEngine背后的定时器

    作者 | beyondma来源 | CSDN博客 导读:最近几周,本文作者几篇有关陶建辉老师最新的创业项目-TdEngine代码解读文章出人意料地引起了巨大的反响,原以为C语言已经是昨日黄花,不过从读 ...

  5. matlab绘制频散曲线,Matlab绘制频散曲线程序代码.docx

    Matlab绘制频散曲线程序代码.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. ...

  6. vins 解读_代码解读 | VINS 视觉前端

    AI 人工智能 代码解读 | VINS 视觉前端 本文作者是计算机视觉life公众号成员蔡量力,由于格式问题部分内容显示可能有问题,更好的阅读体验,请查看原文链接:代码解读 | VINS 视觉前端 v ...

  7. jsoup获得css,Jsoup代码解读之五-实现一个CSS Selector

    Jsoup代码解读之七-实现一个CSS Selector 当当当!终于来到了Jsoup的特色:CSS Selector部分.selector也是我写的爬虫框架webmagic开发的一个重点.附上一张s ...

  8. 栈区,堆区,全局区,文字常量区,程序代码区详解(程序中不同类型数据所在区)

    一.预备知识-程序的内存分配     一个由C/C++编译的程序占用的内存分为以下几个部分     1.栈区(stack)-   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等.其   ...

  9. softmax理论及代码解读——UFLDL

    前言 看了各种softmax以后迷迷糊糊的,还是研究一下UFLDL的教程稳点.当然还是得参考挺多教程的:UFLDL-softmax .Softmax的理解与应用 .Logistic 分类器与 soft ...

最新文章

  1. [OpenGL]未来视觉1-Android摄像头采集基础
  2. PyQt5 技术篇-设置输入框的placeholder方法,Qt Designer设置Line Edit、Text Edit编辑框的placeholder
  3. 成功解决Python中导出图片出现错误SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position
  4. 【杂谈】面向新手的深度学习开源框架指导手册与GitHub项目,欢迎加入我们的开源团队...
  5. SAP专家培训之Netweaver ABAP内存管理和内存调优实践
  6. 《疯狂前端开发讲义jQuery+Angular+Bootstrap前端开发实践》学习笔记
  7. np实现sigmoid_【强基固本】基础算法:使用numpy实现逻辑回归随机梯度下降(附代码)...
  8. java exec 关闭,Java学习之使用Runtime.exec()启动、关闭Tomcat
  9. 【特征提取】基于matlab熵函数语音端点检测【含Matlab源码 1764期】
  10. C语言程序设计谭浩强第五版课后答案
  11. VMware ESXi 6.7注入第三方RAID驱动
  12. 「HNOI 2009」图的同构记数
  13. 计算机考研复试面试题专业知识整理
  14. 北京 php 外包,=== | php外包与php技术服务商
  15. 三极管Vbeo、Vceo的介绍
  16. 推荐几个免费的在线文本转语音网站(支持中英文多种语音)
  17. python人民币美元汇率双向兑换计算
  18. 装完docker电脑黑屏无法启动_教你电脑启动后黑屏该怎么办
  19. 算力网络中基于算力标识的算力服务需求匹配
  20. IP地址是什么,IP的作用是什么?

热门文章

  1. SF习题答案(2)(LF-Induction)
  2. linux开源硬件平台设计,开源硬件_最流行的几个开源硬件平台_Ardurino开源硬件平台...
  3. 写作之路,以梦为马,不负韶华
  4. Android 图表-折线图
  5. Source Insight 4.0 快捷键设置多行注释与反注释
  6. 【基础知识】~ 数据位宽转换器
  7. JAVA SE之面向对象9:正则表达式以及一些常用类
  8. 服务器windows文件夹50多g,原来C盘可以删除这5个文件,电脑减负50%,一下子多出10个G!...
  9. dedecms(织梦)给栏目添加图标全攻略
  10. win10雷电3接口驱动_StarTech推雷电3转换器:单口轻松接双4K显示器