sprayFoam作为一个耦合了欧拉、拉格朗日方法的求解,粒子部分的实现在主程序中写的很简单,只有短短两行,即:

// Store the particle positions
parcels.storeGlobalPositions();......parcels.evolve();

那么要如何追溯粒子模型呢?

可见,主程序中不管调用了什么函数,都只用到了parcels这一个对象,所以关键在于弄懂parcels是属于什么类型的,这样才有可能知道调用了哪个类的storeGlobalPositions()和evolve()函数。

parcels的定义在createClouds.H中,代码如下:

Info<< "\nConstructing reacting cloud" << endl;
basicSprayCloud parcels
("sprayCloud",rho,U,g,slgThermo
);

可见parcels是basicSprayCloud类的数据成员,并把"sprayCloud"传给了basicSprayCloud构造函数的第一个形参。

而basicSprayCloud类在lagrangian\spray\clouds\derived\basicSprayCloud\basicSprayCloud.H中有所说明,代码如下:

namespace Foam
{typedef SprayCloud<ReactingCloud<ThermoCloud<KinematicCloud<Cloud<basicSprayParcel>>>>> basicSprayCloud;
}

由上可知,basicSprayCloud等价于SprayCloud<......>,故在声明parcels这个对象的时候,便首先调用了SprayCloud的构造函数。该类的构造函数的声明和定义的代码如下:

// src\lagrangian\spray\clouds\Templates\SprayCloud\SprayCloud.Htemplate<class CloudType>
class SprayCloud
:public CloudType,public sprayCloud
{...//- Construct given carrier gas fieldsSprayCloud(const word& cloudName,const volScalarField& rho,const volVectorField& U,const dimensionedVector& g,const SLGThermo& thermo,bool readFields = true);...
}// src\lagrangian\spray\clouds\Templates\SprayCloud\SprayCloud.Ctemplate<class CloudType>
Foam::SprayCloud<CloudType>::SprayCloud
(const word& cloudName,const volScalarField& rho,const volVectorField& U,const dimensionedVector& g,const SLGThermo& thermo,bool readFields
)
:CloudType(cloudName, rho, U, g, thermo, false),sprayCloud(),cloudCopyPtr_(nullptr),averageParcelMass_(0.0),atomizationModel_(nullptr),breakupModel_(nullptr)
{...
}

从这里可以得到以下信息

  1. 类SprayCloud是继承于模板类的,即ReactingCloud;以此类推,ReactingCloud继承于ThermoCloud,ThermoCloud继承于KinematicCloud……其中,ReactingCloud、ThermoCloud、KinematicCloud的.C和.H写在了src\lagrangian\intermediate\clouds\Templates中,Cloud的.C和.H写在了src\lagrangian\basic\Cloud中。
  2. "sprayCloud"传给了形参cloudName。
  3. 在上面构造函数的数据成员初始化表(即冒号":"后对应的初始化表)中,又调用了CloudType即ReactingCloud的构造函数。以此类推,依次调用了SprayCloud、ReactingCloud、ThermoCloud、KinematicCloud、Cloud、basicSprayParcel的构造函数,但cloudName一直是sprayCloud。

那么这里的basicSprayParcel又指什么呢?

在src\lagrangian\spray\parcels\derived\basicSprayParcel\basicSprayParcel.H中可找到答案,定义如下:

namespace Foam
{typedef SprayParcel<ReactingParcel<ThermoParcel<KinematicParcel<particle>>>> basicSprayParcel;template<>inline bool contiguous<basicSprayParcel>(){return false;}
}

综上,我们可以这样理解,parcels这个对象其实是下面这个类的成员

SprayCloud<ReactingCloud<ThermoCloud<KinematicCloud<Cloud<SprayParcel<ReactingParcel<ThermoParcel<KinematicParcel<particle>>>>>>>>>
parcels

记在后面:

深究OpenFOAM代码的学习资料真的是少之又少,希望本系列博客会予人帮助。

这次先写到这里了,我也是边学边写,这个系列一定会继续写下去的,只是下一记什么时候写出来还说不好,希望早一点吧!

最后,如果大佬发现哪里我写的有问题请及时联系我,我会加以修改!希望不要误导新人(虽然我也是个新人哈哈)

OpenFoam | 全面解析sprayFoam | 一、对象parcels属于哪个类相关推荐

  1. 【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )

    文章目录 一.创建 Capstone 反汇编解析器实例对象 二.设置 Cs 汇编解析器显示细节 一.创建 Capstone 反汇编解析器实例对象 使用 Capstone 反汇编框架 , 首先创建 Ca ...

  2. Python3将xml文件解析为Python对象

    一.说明 从最开始写javascript开始,我就很烦感使用getElementById()等函数来获取节点的方法,获取了一个节点要访问其子孙节点要么child半天要么就再来一个getElementB ...

  3. 前端解析返回的对象时json显示$ref问题的解决

    在mapper中写的语句,结果集中association,采用的一个对象,整个list列表中每个元素有一个对象元素,如果第二个元素中有一个与第一个元素中对象同名的,就会去引用上一个元素的地址,在jso ...

  4. JavaScript重难点解析5(对象高级、浏览器内核与事件循环模型(js异步机制))

    JavaScript重难点解析5(对象高级.浏览器内核与事件循环模型(js异步机制) 对象高级 对象创建模式 Object构造函数模式 对象字面量模式 工厂模式 自定义构造函数模式 构造函数+原型的组 ...

  5. JavaScript学习(六十一)—json字符串的解析和JS 对象的序列化

    JavaScript学习(六十一)-json字符串的解析和JS 对象的序列化 一.json字符串的解析:parse方法 将json字符串转换为js对象,我们把这个过程称为json字符串的解析 格式:J ...

  6. XML解析为Document对象

    XML解析为Document对象 我们在上一篇Spring源码分析中有提到,Spring是将xml文件的InputStream转换为DOM树,然后在将DOM树解析转换为BeanDefinition从而 ...

  7. Java(24):GSON - JsonParser将 JSON 字符串解析为 Java 对象的树结构

    GSONJsonParser类可以将 JSON 字符串或流解析为 Java 对象的树结构. 解析过程中会用到:JsonParse,JsonElement,还有 JsonObject 和 JsonArr ...

  8. Unity中的UGUI源码解析之图形对象(Graphic)(2)-ICanvasElement

    Unity中的UGUI源码解析之图形对象(Graphic)(2)-ICanvasElement 在上一篇文章中, 我们对整个Graphic部分做了概述, 这篇文章我们介绍ICanvasElement和 ...

  9. 前端学习记录27-JavaScript-(作用域、预解析、自定义对象)

    前端学习记录27-JavaScript-作用域.预解析.自定义对象 作用域 全局作用域 局部作用域(函数作用域) 变量作用域 全局变量 局部变量 作用域链 预解析 变量预解析 函数预解析 预解析经典面 ...

最新文章

  1. 亲历dataguard的一些经验问答题
  2. JAVA基础整理-100.Java 多线编程
  3. spring mvc DispatcherServlet详解之拾忆工具类utils
  4. 深度解析:会用Excel,还有必要学Python吗?
  5. P5253-丢番图【数论】
  6. 《剑指Offer》24:反转链表
  7. logistic模型原理与推导过程分析(3)
  8. 图像基础知识 —— Opencv图像处理
  9. 与计算机密度密切相关的是,全国计算机二级MS考前冲刺试题及答案2016
  10. 把body中的html隐藏,JAVA通过正则匹配html里面body标签的内容,去掉body标签
  11. 贺利坚老师汇编课程42笔记:DIV除法指令
  12. GTK 3.0弹出窗口及设置背景图片的代码
  13. mysql表不存在但实际存在_历史上有哪些实际上并不存在的人物但很多人相信他存在的?...
  14. 遥感大辞典_常用遥感名词词典
  15. bzoj-2286 消耗战【虚树+倍增lca+单调栈】
  16. eclipse 里边的 字体颜色代表了什么意思?
  17. 四大行业晋身今秋求贤大户 游戏人才缺口奇大
  18. Quartz是什么?
  19. 360全景拍摄中相机的白平衡设置
  20. 虚拟现实,增强现实的安全问题

热门文章

  1. 蓄电池内阻测试仪分析软件,福禄克 Fluke BT500系列蓄电池内阻测试仪
  2. 在Windows 10中截取截图的6种方式 简介
  3. 五猴分桃python_五猴分桃问题
  4. java基于easypoi实现对导出的excel文档加密
  5. 物理挖洞之分块 !Cocos Creator !
  6. 沉淀近900万+营销资产,天攻智投户外营销助力网易有道实现“品效双赢”
  7. DIY手机万能红外遥控器
  8. 基于RNA-seq的基因表达分析
  9. python 日期运算_Python中关于日期的计算总结
  10. Unity任意方向拉伸物体