OpenFoam | 全面解析sprayFoam | 一、对象parcels属于哪个类
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)
{...
}
从这里可以得到以下信息
- 类SprayCloud是继承于模板类的,即ReactingCloud;以此类推,ReactingCloud继承于ThermoCloud,ThermoCloud继承于KinematicCloud……其中,ReactingCloud、ThermoCloud、KinematicCloud的.C和.H写在了src\lagrangian\intermediate\clouds\Templates中,Cloud的.C和.H写在了src\lagrangian\basic\Cloud中。
- "sprayCloud"传给了形参cloudName。
- 在上面构造函数的数据成员初始化表(即冒号":"后对应的初始化表)中,又调用了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属于哪个类相关推荐
- 【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )
文章目录 一.创建 Capstone 反汇编解析器实例对象 二.设置 Cs 汇编解析器显示细节 一.创建 Capstone 反汇编解析器实例对象 使用 Capstone 反汇编框架 , 首先创建 Ca ...
- Python3将xml文件解析为Python对象
一.说明 从最开始写javascript开始,我就很烦感使用getElementById()等函数来获取节点的方法,获取了一个节点要访问其子孙节点要么child半天要么就再来一个getElementB ...
- 前端解析返回的对象时json显示$ref问题的解决
在mapper中写的语句,结果集中association,采用的一个对象,整个list列表中每个元素有一个对象元素,如果第二个元素中有一个与第一个元素中对象同名的,就会去引用上一个元素的地址,在jso ...
- JavaScript重难点解析5(对象高级、浏览器内核与事件循环模型(js异步机制))
JavaScript重难点解析5(对象高级.浏览器内核与事件循环模型(js异步机制) 对象高级 对象创建模式 Object构造函数模式 对象字面量模式 工厂模式 自定义构造函数模式 构造函数+原型的组 ...
- JavaScript学习(六十一)—json字符串的解析和JS 对象的序列化
JavaScript学习(六十一)-json字符串的解析和JS 对象的序列化 一.json字符串的解析:parse方法 将json字符串转换为js对象,我们把这个过程称为json字符串的解析 格式:J ...
- XML解析为Document对象
XML解析为Document对象 我们在上一篇Spring源码分析中有提到,Spring是将xml文件的InputStream转换为DOM树,然后在将DOM树解析转换为BeanDefinition从而 ...
- Java(24):GSON - JsonParser将 JSON 字符串解析为 Java 对象的树结构
GSONJsonParser类可以将 JSON 字符串或流解析为 Java 对象的树结构. 解析过程中会用到:JsonParse,JsonElement,还有 JsonObject 和 JsonArr ...
- Unity中的UGUI源码解析之图形对象(Graphic)(2)-ICanvasElement
Unity中的UGUI源码解析之图形对象(Graphic)(2)-ICanvasElement 在上一篇文章中, 我们对整个Graphic部分做了概述, 这篇文章我们介绍ICanvasElement和 ...
- 前端学习记录27-JavaScript-(作用域、预解析、自定义对象)
前端学习记录27-JavaScript-作用域.预解析.自定义对象 作用域 全局作用域 局部作用域(函数作用域) 变量作用域 全局变量 局部变量 作用域链 预解析 变量预解析 函数预解析 预解析经典面 ...
最新文章
- 亲历dataguard的一些经验问答题
- JAVA基础整理-100.Java 多线编程
- spring mvc DispatcherServlet详解之拾忆工具类utils
- 深度解析:会用Excel,还有必要学Python吗?
- P5253-丢番图【数论】
- 《剑指Offer》24:反转链表
- logistic模型原理与推导过程分析(3)
- 图像基础知识 —— Opencv图像处理
- 与计算机密度密切相关的是,全国计算机二级MS考前冲刺试题及答案2016
- 把body中的html隐藏,JAVA通过正则匹配html里面body标签的内容,去掉body标签
- 贺利坚老师汇编课程42笔记:DIV除法指令
- GTK 3.0弹出窗口及设置背景图片的代码
- mysql表不存在但实际存在_历史上有哪些实际上并不存在的人物但很多人相信他存在的?...
- 遥感大辞典_常用遥感名词词典
- bzoj-2286 消耗战【虚树+倍增lca+单调栈】
- eclipse 里边的 字体颜色代表了什么意思?
- 四大行业晋身今秋求贤大户 游戏人才缺口奇大
- Quartz是什么?
- 360全景拍摄中相机的白平衡设置
- 虚拟现实,增强现实的安全问题