openFOAM
文章平均质量分 89
ycwang125
这个作者很懒,什么都没留下…
展开
-
OpenFOAM中的Chemistry类
化学反应相关的类,以热学相关的类为基础,它位于路径src/chemistryModel/。它的类间关系如下:接下来我们逐个介绍这些类的内容basicChemistryModel最基础的类,头文件内容如下:class basicChemistryModel: public IOdictionary{protected: //- Reference to the mesh database const fvMesh& mesh_;原创 2020-08-06 21:35:58 · 1951 阅读 · 1 评论 -
openFOAM中文件流的获取——lookup函数
openFOAM中的几乎所有类都提供了文件流操作的重定义,即>> <<即可实现文件流操作。例如对于标量来说,读取标量时:scalar readScalar(Istream& is){ scalar rs; is >> rs; return rs;}我们只需要提供文件流is,就可以通过调用函数返回一个标量值。那么这样的文件流如何获取呢?这里讨论这部分内容这里介绍的是lookup函数,他位于路径src/OpenFOAM/db/d原创 2020-08-05 17:29:02 · 2091 阅读 · 0 评论 -
openFOAM的基础数据结构汇总
openFOAM将数组链表等数据结构也进行了封装,这里进行一个汇总。可能陆续也会更新标量scalar其实就是浮点数,不过浮点数有多重类型精度,比如float double longdouble,这里将类型统一为scalar这个类型使用,具体见如下链接:https://blog.csdn.net/qq_40583925/article/details/107735351向量vector...原创 2020-08-05 15:02:24 · 2502 阅读 · 1 评论 -
openFOAM中的label
其实就是指i,j,k这类浮标使用的类型。我们通常就使用int就可以,但是这里也进行了封装。其头文件的源码如下:#include "int.H"#define INT_ADD_SIZE(x,s,y) x ## s ## y#define INT_ADD_DEF_SIZE(x,s,y) INT_ADD_SIZE(x,s,y)#define INT_SIZE(x,y) INT_ADD_DEF_SIZE(x,WM_LABEL_SIZE,y)#if WM_LABEL_SIZE != 32 &&原创 2020-08-05 15:01:56 · 1611 阅读 · 0 评论 -
openFOAM中的Field
就是域的创建,速度域等等量直接在这里存储他分别位于若干个位置,所以下面会单独罗列,其类间关系如下这里对其中的Fields DimensionedFields GeometricFields进行解读Field其路径为src/OpenFOAM/fields/Fields/Field他包含若干个头文件:FieldFunctions.HFieldFunctionsM.HFieldM.HField.CFieldFunctions.CFieldFunctionsM.C我们从头文件开始解读,代原创 2020-08-05 11:56:08 · 2525 阅读 · 5 评论 -
openFOAM中的tensor
是指3*3的张量,其路径为src/OpenFOAM/primitives/Tensor对应的文件关系如下:基本结构和vector非常相似MatrixSpace他用VectorSpace创建,头文件如下:template<class Form, class Cmpt, direction Mrows, direction Ncols>class MatrixSpace: public VectorSpace<Form, Cmpt, Mrows*Ncols>{publ原创 2020-08-01 22:30:54 · 777 阅读 · 0 评论 -
openFOAM中的vector
首先需要声明这里的vector和我们平时C++中说的数组,或者STL中的vector不是一个。它是openFOAM从九十年代改动至今留下来的一个习惯,这里的vector特质(x,y,z)这样的三维向量,用来表示坐标速度等等。他位于路径OpenFOAM/primitives/Vector/complexVector我们首先来看一下文件的依赖关系VectorSpace头文件内容如下:template<class Form, class Cmpt, direction Ncmpts>cl原创 2020-08-01 20:41:25 · 1725 阅读 · 6 评论 -
openFOAM中的Scalar
位于路径src/OpenFOAM/primitives/Scalar标量,其实就是浮点数。但是浮点数具有不同的精度,最终文件将根据宏的设置决定程序使用哪种精度文件依赖关系如下:注意这里大小写的scalar是两个文件,大写的Scalar是各个精度的浮点数的依赖文件,而这些具体的精度的实现又是小写的scalar的实现floatScalar这里给出其中一个文件的具体实现方式,其余的类似头文件内容如下:typedef float floatScalar;定义最大最小的浮点数floatScala原创 2020-08-01 19:50:01 · 2120 阅读 · 2 评论 -
openFOAM学习笔记(五)——chemFoam的运行过程
在前面的帖子中已经大概给出了chemFoam主程序的结构,这里给出一个比较全面的总结首先程序结构如下:添加头文件//*****************************//int main(int argc, char *argv[]){ 初始化 while(runTime.run()) { 计算化学反应 输出中间结果 } return 0;}我们接下来介绍各个部分的具体内容while循环中的燃烧计算其源码如下:while (run原创 2020-07-31 15:38:45 · 4216 阅读 · 0 评论 -
openFOAM中时间步长计算参数是怎样读进程序的——Time类
接着前面的内容,在createTime.H中创建了Time类的对象runTimeFoam::Info<< "Create time\n" << Foam::endl;Foam::Time runTime(Foam::Time::controlDictName, args);这里,我们尝试解读这第二行代码中更加具体的内容。Time类的内容源码有500+行,这里不粘贴了,只给出大概的内容,首先文件使用了一系列的头文件,后面会陆续解读:#include "TimePaths.原创 2020-07-15 16:55:28 · 2218 阅读 · 1 评论 -
openFOAM的基础类型汇总
openFOAM代码非常非常多,但是让人比较郁闷的是很多是基础类的实现,openFOAM中很多基础的类,包括char,string,int等等,都添加功能封装在了Foam这个名字域中。好处就是同样使用int,可以比在C++使用更多的功能,坏处就是一个很简单的功能,依赖的文件数量惊人。把这么多的封装全部读完总结完可能头发都白了,但是只把常用的拿出来总结一下是可以的,这篇帖子就是做这个工作,当然这里是针对chemFoam这个求解器。这个帖子会在编写其他帖子的过程中持续更新基础类的源码组织特点通常为一个x原创 2020-07-15 15:16:18 · 3999 阅读 · 0 评论 -
openFOAM中时间步长计算参数是怎样读进程序的——初步理解框架
内容如题,在阅读完大量的基础代码之后,我们现在可以尝试解读一下chemFOAM中的程序流程。因为内容很多,所以会分好几个子标题讲完。我们使用openFOAM的过程中,通常是从tutorials中找到对应算例的配置文件,复制到run的文件夹中,然后使用编译好程序运行,而控制则通过配置文件中的参数设置。那么,首先我们需要理解这些控制文件中的参数是怎样读入到程序中。配置文件的内容本文以chemFOAM中的氢气燃烧算例为例,对应的文件夹为tutorials/combustion/chemFoam/h2,内容有原创 2020-07-10 21:21:10 · 3321 阅读 · 1 评论 -
openFOAM学习笔记(四)—— openFOAM中的List
又是一个很底层的部分,但是也非常重要原创 2020-06-27 23:13:55 · 3668 阅读 · 1 评论 -
openFOAM中的forAll
这是用户二次开发代码中非常常用的一个语法,我们这里看一下它的底层实现。当然不同的class会各自实现一个forall,这里给出的是UList的实现,具体路径位于src/OpenFOAM/container/Lists/UList/文件夹中定义了UList类,使用一个连续存储,通过制定类型T的指针给定首地址template<class T>class UList { // Private Data //- Number of elements in UList原创 2020-06-27 22:20:40 · 2412 阅读 · 0 评论 -
openFOAM学习笔记(三)—— char和string相关的类
openFOAM中的char和string并不是直接使用C++提供的string,而是进行了一系列的封装,并添加了更多的功能。这里进行一个总结。char类型的更多功能openFOAM中并没有对char进行封装,而是直接在上面添加功能。主要依赖的是如下路径的几个文件:src/OpenFOAM/primitives/chars/charchar.H charIO.Csrc/OpenFOAM/primitives/chars/wcharwchar.H wcharIO.C添加了readCha原创 2020-06-25 22:38:15 · 1012 阅读 · 0 评论 -
openFOAM代码阅读——基础代码中的string
代码仍然是src/OpenFOAM/primitives/路径中的,为文件夹strings,其中有内容fileName keyType lists string stringOps word wordRe这里的多个文件夹都使用到了这里的word文件夹中的文件,而word用到了string中的内容,所以我们先读这个吧。这里包含了如下几个文件:string.C string.H stringI.H stringIO.C stringIOList.C stringIOList.H从string.H开始原创 2020-06-11 23:52:43 · 1052 阅读 · 0 评论 -
openFOAM代码阅读——基础代码中的wchar
路径src/OpenFOAM/primitives/chars中还有另外一个文件夹wchar,我们这里来看看这里面有什么。头文件wchar.H的内容如下:#include <cwchar>#include <string>// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //namespace Foam{class Istream;class Ostream;原创 2020-06-11 17:18:56 · 592 阅读 · 0 评论 -
openFOAM代码阅读——基础代码中的char
openFOAM的源码文件夹src中的内容如下:dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/src$ lsAllwmake genericPatchFields rigidBodyDynamicsatmosphericModels lagrangian rigidBodyMeshMotioncombustionModels mesh rigidBodyState原创 2020-06-11 16:41:58 · 1774 阅读 · 0 评论 -
openFOAM代码阅读——综述和版本说明
这里阅读的是openFOAM7的源码。openFOAM的教程要多少有多少,各种书籍线上教程,甚至还有培训班。但是openFOAM的代码的真正解读的资料缺并不多,这里笔者只好自行补齐部分基础的代码阅读。首先说明一下我们阅读的主要内容。openFOAM中的代码主要分了三个部分:其一,是用来进行计算的参数设置网格设置文件,在文件夹tutorials中其二,是用来支持各个类型的算例运行的具体求解器的源码,在文件夹application中其三,是application的支持性文件,也就是真正的源码所在的文原创 2020-06-11 16:13:33 · 3572 阅读 · 0 评论 -
chemFoam的源码提取
ok!经过一系列的铺垫,我们来尝试一下提取出openFOAM中的chemFoam程序的源码,然后用Makefile编译运行一下,这样可以帮助我们进行二次开发。呃。。。这个怎么说呢。。。openFOAM一个单独算例的程序依赖深度超过我的预期了。首先程序编译的过程是有记录的,保存如下路径下的文件:dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7/platforms/linux64GccDPInt32Opt/applications/solvers/combustion/chemFo原创 2020-06-09 15:49:18 · 947 阅读 · 0 评论 -
openFOAM7几个文件夹的作用
想搞懂openFOAM整个程序的结构,了解程序开发过程中几个命名的文件夹的作用比较重要。这里单独了解一下。openFOAM7的全部文件夹罗列如下:dyfluid@dyfluid:~/OpenFOAM/OpenFOAM-7$ lsAllwmake bin doc platforms src tutorialsapplications COPYING etc README.org test wmake其中Allwmake为openFOAM中的编译命令,类似ma原创 2020-06-09 13:53:41 · 3781 阅读 · 0 评论 -
openFOAM combustion模块学习笔记——程序结构
基础资料废话不多说,首先罗列一些笔者参考的资料openFOAM的官方网站为:https://openfoam.org/东岳流体网站:http://www.dyfluid.com/本文使用的为openFOAM7版本,可以从网上下载到提前预装好的虚拟机,从而避免了安装的麻烦。openFOAM7安装和虚拟机:http://www.dyfluid.com/docs/install.htmlopenFOAM7网页用户手册:https://cfd.direct/openfoam/user-guide/另外原创 2020-06-08 21:41:57 · 3467 阅读 · 0 评论 -
openFOAM学习笔记(二)—— openFOAM的安装和网络资料汇总
安装环境使用虚拟机安装使用的是Ubuntu 16.04版本,目前这个版本的各种软件安装包更加稳定。openFOAM的安装可以直接使用openfoam7,在openFOAM的官网www.openfoam.org中找到最新的版本以及安装步骤。直接更新源之后使用apt-get安装即可,需要同时安装openfoam和paraview。但是!!!but!!!据师兄描述,openFOAM的版本更新在内部结...原创 2019-10-17 15:39:07 · 5650 阅读 · 3 评论 -
openFOAM学习笔记(一)—— C++基础
一、C++基础很久不用C++,学习openFOAM之前复习一下C和C++相关的基础知识1.1常用操作符++,–整型变量的自加自减,用法很多。最简单的有i++,i–。运算速度会比i=i+1更快。此外还有 j = i++ 和 j = ++ i ,前者表示先赋值后自加,后者表示先自加后赋值。类似的用法还有 i += 1 ,实际等价于i=i+1。A+=B等价于A = A+B!取反符号,没什...原创 2019-09-24 15:36:06 · 4786 阅读 · 1 评论