tttt's


  • Home

  • Archives

Hexo 备忘录

Posted on 2024-05-26 | In 工具 , Hexo
测试,回顾,使用Hexo
Read more »

nm_ldd_init_tttt_test

Posted on 2023-10-08

nm命令

nm 命令是一个用于查看二进制文件、库文件、可执行文件中符号信息的命令行工具。它通常用于分析程序的二进制文件,以获取关于程序结构的信息。

Ref: linux下强大的文件分析工具 -- nm - 知乎 (zhihu.com)

以OpenFOAM中的一个.o文件为例,OpenFOAM/OpenFOAM-7/platforms/linux64GccDPInt32Opt/applications/solvers/DNS/dnsFoam/dnsFoam.o 用nm命令可以查看其中的符号,nm -C dnsFoam.o。

1
2
3
4
5
6
7
8
9
10
11
12
13
0000000000000000 V vtable for Foam::DimensionedField<double, Foam::volMesh>
0000000000000000 V vtable for Foam::fvMatrix<Foam::Vector<double> >
0000000000000000 V vtable for Foam::fvMatrix<double>
0000000000000000 V vtable for Foam::LduMatrix<Foam::Vector<double>, double, double>::solver
0000000000000000 V vtable for Foam::LduMatrix<double, double, double>::solver
0000000000000000 V vtable for Foam::Residuals<Foam::Vector<double> >
0000000000000000 V vtable for Foam::Residuals<double>
0000000000000010 W non-virtual thunk to Foam::fvMesh::thisDb() const
U operator delete[](void*)
U operator delete(void*)
U operator new[](unsigned long)
U operator new(unsigned long)

以下是 nm 命令的一些常用输出格式:

  1. U:未定义符号,表示该符号在当前目标文件中被引用,但并未在当前目标文件中定义,需要在链接时从其他地方解析。
  2. T:文本段(代码段)符号,表示对应的符号在代码段中,通常是可执行程序的一部分。
  3. D:数据段符号,表示对应的符号在数据段中,通常是全局变量。
  4. B:BSS段符号,表示对应的符号在BSS段中,通常是未初始化的全局变量。
  5. W:弱符号,表示对应的符号是一个可以被重定位或被其他模块覆盖的符号。
  6. S:特殊符号,通常用于标记一些特殊的符号,比如函数的开始和结束。
  7. 地址:符号的内存地址,可以是十六进制数。
  8. 符号名:函数名、变量名等。

TODO: 结合C++的type_trait,typeid等函数来解释符号表。引入函数签名等。

一个示例演示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <typeinfo>

int main() {

    int x = 10;
    double y = 20.5;

    // 使用typeid获取变量的类型信息
    const std::type_info& typeInfoX = typeid(x);
    const std::type_info& typeInfoY = typeid(y);

    // 输出类型信息的名称
    std::cout << "Type of x: " << typeInfoX.name() << std::endl;
    std::cout << "Type of y: " << typeInfoY.name() << std::endl;

    return 0;

}

这种获取类型信息的方式允许程序在运行时获取对象的实际类型,也就是RTTI(Run-Time Type Information)

编译后,运行结果:

1
2
Type of x: i
Type of y: d

nm -C a.out查看其符号表可以发现,

1
2
0000000000003d80 V typeinfo for double@CXXABI_1.3
0000000000003d70 V typeinfo for int@CXXABI_1.3

NOTE:实际在运用typeid的时候,一般会将其转换为人可读的(用cxxabi.h库来实现)。比如下面:

Ask gpt: cxxabi.h 是 C++ 标准库中的一个头文件,提供了用于操作 C++ ABI(Application Binary Interface,应用程序二进制接口)的一些函数。

C++ ABI 定义了在不同编译器和平台下,C++ 编译器如何生成二进制代码以及如何在不同模块之间进行交互。这包括函数名的重整、异常处理、虚函数表等方面的规范。

cxxabi.h 中的函数可以用于对符号(比如函数名)进行反解析,将符号的字符串表示形式转换为其内部的实际表示形式,或者反之。

其中最常用的函数可能就是 abi::__cxa_demangle(),它用于将符号的字符串表示解析成人类可读的形式。

举例来说,如果你有一个 C++ 函数名的字符串(例如 "_ZN5MyClass3fooEv"),你可以使用 __cxa_demangle() 将其解析成对应的函数名(例如 "MyClass::foo()")。

总的来说,cxxabi.h 提供了一些工具,使得在运行时可以对 C++ 符号进行更灵活的处理,这对于某些需要动态获取或者修改函数信息的场景可能会非常有用。

所以,修改后的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <typeinfo>
#include <cxxabi.h>

int main() {
int x = 10;
double y = 20.5;

// 使用typeid获取变量的类型信息
const std::type_info& typeInfoX = typeid(x);
const std::type_info& typeInfoY = typeid(y);

// 使用cxxabi.h中的接口来转换为人类可读形式
int status;
char* demangledNameX = abi::__cxa_demangle(typeInfoX.name(), nullptr, nullptr, &status);
char* demangledNameY = abi::__cxa_demangle(typeInfoY.name(), nullptr, nullptr, &status);

// 输出转换后的类型名
std::cout << "Type of x: " << demangledNameX << std::endl;
std::cout << "Type of y: " << demangledNameY << std::endl;

// 释放内存
free(demangledNameX);
free(demangledNameY);
return 0;
}

得到的结果:

1
2
Type of x: int
Type of y: double

注意:不用的编译器,如gnu,clang,MSVC的typeid行为可能不用,详细可见: parallel101/course: 高性能并行编程与优化 - 课件 (github.com)

最近用nm干了啥

最近用nm来查看这个库中有没有某个符号(报错出现了undefined reference)。最后发现是代码的CMake找错了库 = =!

  1. U:未定义符号,表示该符号在当前目标文件中被引用,但并未在当前目标文件中定义,需要在链接时从其他地方解析。

更新版:OpenFOAM在vscode的代码跳转设置

Posted on 2023-09-27

以前写过一些(理解还不太够),主要对法1的具体操作进行更新,

OpenFOAM代码跳转设置 (qq.com)

代码跳转的本质:找到这个文件

  • 找到所有OpenFOAM中(编译后)的lnInclude所在路径

find . -name "lnInclude" > tttt.findlnInclude 将OpenFOAM所有的lnInclude都找到。将所有的lnInclude链接都加在includePath中(仅仅加上Make/options下链接到的库还不够,代码中还是有不能跳转的地方)。

VScode: ctrl + shift + P, 搜索C++。

​ 同理,代码不用编译都可以跳转,在windows下一样的。只要找到合适的lnInclude路径。

  • linux下OpenFOAM7的lnInclude。/home/tttt/OpenFOAM前面替换一下即可。

  • 一个例子:#include <typeinfo> 是标准库中的头文件,要跳转这个,可以加上C++编译器的includePath,方法如下:

image-20230927152604240

gcc -E -v - 查看这个命令打印信息中的这些:

1
2
3
4
/usr/lib/gcc/x86_64-linux-gnu/11/include
/usr/local/include
/usr/include/x86_64-linux-gnu
/usr/include

将这些粘贴到includePatch中(注意修改前缀)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/home/tttt/OpenFOAM/OpenFOAM-7/src/regionModels/thermalBaffleModels/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/regionModels/pyrolysisModels/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/regionModels/regionCoupling/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/regionModels/surfaceFilmModels/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/regionModels/regionModel/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/fvMotionSolver/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/dynamicFvMesh/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/sampling/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/fvOptions/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/TurbulenceModels/phaseCompressible/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/TurbulenceModels/incompressible/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/TurbulenceModels/turbulenceModels/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/TurbulenceModels/compressible/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/TurbulenceModels/phaseIncompressible/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/dummyThirdParty/ptscotchDecomp/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/dummyThirdParty/scotchDecomp/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/dummyThirdParty/metisDecomp/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/dummyThirdParty/MGridGen/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/surfMesh/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/conversion/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/ODE/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/radiationModels/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/transportModels/incompressible/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/transportModels/immiscibleIncompressibleTwoPhaseMixture/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/transportModels/twoPhaseProperties/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/transportModels/twoPhaseMixture/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/transportModels/compressible/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/transportModels/interfaceProperties/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/fvAgglomerationMethods/pairPatchAgglomeration/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/mesh/extrudeModel/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/mesh/snappyHexMesh/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/mesh/blockMesh/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/atmosphericModels/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/sixDoFRigidBodyState/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/thermophysicalModels/SLGThermo/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/thermophysicalModels/thermophysicalProperties/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/thermophysicalModels/laminarFlameSpeed/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/thermophysicalModels/solidSpecie/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/thermophysicalModels/solidChemistryModel/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/thermophysicalModels/barotropicCompressibilityModel/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/thermophysicalModels/specie/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/thermophysicalModels/basic/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/thermophysicalModels/solidThermo/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/thermophysicalModels/chemistryModel/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/thermophysicalModels/reactionThermo/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/OSspecific/POSIX/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/lagrangian/spray/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/lagrangian/coalCombustion/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/lagrangian/molecularDynamics/molecularMeasurements/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/lagrangian/molecularDynamics/molecule/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/lagrangian/molecularDynamics/potential/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/lagrangian/intermediate/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/lagrangian/DSMC/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/lagrangian/solidParticle/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/lagrangian/distributionModels/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/lagrangian/turbulence/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/lagrangian/basic/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/rigidBodyState/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/OpenFOAM/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/functionObjects/field/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/functionObjects/lagrangian/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/functionObjects/solvers/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/functionObjects/utilities/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/functionObjects/forces/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/dynamicMesh/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/engine/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/rigidBodyMeshMotion/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/sixDoFRigidBodyMotion/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/randomProcesses/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/meshTools/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/waves/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/fileFormats/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/finiteVolume/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/topoChangerFvMesh/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/regionCoupled/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/Pstream/dummy/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/Pstream/mpi/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/renumber/zoltanRenumber/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/renumber/renumberMethods/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/combustionModels/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/parallel/distributed/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/parallel/reconstruct/reconstruct/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/parallel/decompose/ptscotchDecomp/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/parallel/decompose/scotchDecomp/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/parallel/decompose/decompose/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/parallel/decompose/decompositionMethods/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/parallel/decompose/metisDecomp/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/rigidBodyDynamics/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/genericPatchFields/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/triSurface/lnInclude/**
/home/tttt/OpenFOAM/OpenFOAM-7/src/semiPermeableBaffle/lnInclude/**


Windows下(没编没有lnInclde,链到上一个路径也可以,注意windows和linux的文件分隔符),这个是没有编译,在windows中直接解压从GitHub下载的OpenFOAM包。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\regionModels\thermalBaffleModels\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\regionModels\pyrolysisModels\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\regionModels\regionCoupling\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\regionModels\surfaceFilmModels\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\regionModels\surfaceFilmModels\derivedFvPatchFields\wallFunctions\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\regionModels\regionModel\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\fvMotionSolver\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\dynamicFvMesh\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\sampling\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\fvOptions\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\TurbulenceModels\phaseCompressible\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\TurbulenceModels\incompressible\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\TurbulenceModels\turbulenceModels\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\TurbulenceModels\compressible\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\TurbulenceModels\phaseIncompressible\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\dummyThirdParty\ptscotchDecomp\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\dummyThirdParty\scotchDecomp\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\dummyThirdParty\metisDecomp\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\dummyThirdParty\MGridGen\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\surfMesh\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\conversion\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\ODE\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\radiationModels\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\transportModels\incompressible\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\transportModels\immiscibleIncompressibleTwoPhaseMixture\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\transportModels\twoPhaseProperties\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\transportModels\twoPhaseMixture\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\transportModels\compressible\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\transportModels\interfaceProperties\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\fvAgglomerationMethods\pairPatchAgglomeration\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\mesh\extrudeModel\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\mesh\snappyHexMesh\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\mesh\blockMesh\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\atmosphericModels\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\sixDoFRigidBodyState\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\thermophysicalModels\SLGThermo\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\thermophysicalModels\thermophysicalProperties\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\thermophysicalModels\laminarFlameSpeed\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\thermophysicalModels\solidSpecie\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\thermophysicalModels\solidChemistryModel\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\thermophysicalModels\barotropicCompressibilityModel\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\thermophysicalModels\specie\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\thermophysicalModels\basic\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\thermophysicalModels\solidThermo\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\thermophysicalModels\chemistryModel\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\thermophysicalModels\reactionThermo\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\OSspecific\POSIX\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\lagrangian\spray\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\lagrangian\coalCombustion\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\lagrangian\molecularDynamics\molecularMeasurements\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\lagrangian\molecularDynamics\molecule\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\lagrangian\molecularDynamics\potential\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\lagrangian\intermediate\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\lagrangian\DSMC\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\lagrangian\solidParticle\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\lagrangian\distributionModels\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\lagrangian\turbulence\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\lagrangian\basic\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\rigidBodyState\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\OpenFOAM\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\functionObjects\field\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\functionObjects\lagrangian\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\functionObjects\solvers\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\functionObjects\utilities\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\functionObjects\forces\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\dynamicMesh\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\engine\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\rigidBodyMeshMotion\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\sixDoFRigidBodyMotion\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\randomProcesses\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\meshTools\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\waves\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\fileFormats\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\finiteVolume\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\topoChangerFvMesh\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\regionCoupled\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\Pstream\dummy\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\Pstream\mpi\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\renumber\zoltanRenumber\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\renumber\renumberMethods\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\combustionModels\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\parallel\distributed\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\parallel\reconstruct\reconstruct\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\parallel\decompose\ptscotchDecomp\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\parallel\decompose\scotchDecomp\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\parallel\decompose\decompose\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\parallel\decompose\decompositionMethods\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\parallel\decompose\metisDecomp\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\rigidBodyDynamics\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\genericPatchFields\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\triSurface\**
D:\02_DevProject\00_OpenFOAM\OpenFOAM-7-master\src\semiPermeableBaffle\**

设置后的效果:

悬停提示和代码跳转

类似的可以对Eigen进行同种操作

  • Eigen代码跳转

设置:

1
/Users/tongyanjun/tttt_file/zz_lib_tttt/eigen-3.4.0/**

测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
//这里eigen库可以成功跳转了
#include <Eigen/Dense>
using Eigen::MatrixXd;

int main()
{
MatrixXd m(2,2);
m(0,0) = 3;
m(1,0) = 2.5;
m(0,1) = -1;
m(1,1) = m(1,0) + m(0,1);
std::cout << m << std::endl;

}

用doxygen生成类似OpenFOAM的继承关系图和接口手册

Posted on 2023-09-26

生成用的指令

  1. doxygen -g Doxygen.config : 会在当前路径下生成一个Doxygen.config Doxygen.config文件里面有个选项HAVE_DOT推荐打开(不打开就是OpenFOAM那种类图,成员变量和函数较多的时候就不打开了),打开了里面有详细的函数。

更多设置就要研究这个Doxygen.config啦

  1. doxygen Doxigen.config:当前路径生成了html
  2. 如果在linux下firefox ./html/index.html打开,windows直接网页打开,就可以看到了

生成后的(代码中按照一定的注释规范,doxygen会自动识别):

图1
图1

这个图就和OpenFOAM的API Guide一样啦

The OpenFOAM Source Code Guide | OpenFOAM v7 | The OpenFOAM Foundation

以前刚开始学OpenFOAM,既不会C++也不会Doxygen,看API Guide简直是痛苦-0 -。 现在自己写个类试一试用doxygen生成一下,对阅读OpenFOAM的API Guide也有帮助(最近在写一个类,感觉类的设计简直是个规则类怪谈= =!,等哪天整理整理发出来乐呵一下)

图2
图2

通过API Guide来看OpenFOAM

以一个OpenFOAM求解器常用的类来看,createFields.H中的fvMesh。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// createFields.H 
Foam::Info
<< "Create mesh for time = "
<< runTime.timeName() << Foam::nl << Foam::endl;

Foam::fvMesh mesh
(
Foam::IOobject
(
Foam::fvMesh::defaultRegion,
runTime.timeName(),
runTime,
Foam::IOobject::MUST_READ
)
);

fvMesh 这个类继承了PrimitiveMesh 和polyMesh。

image-20230926204031953

image-20230926203313291

继续看PrimitiveMesh 和polyMesh可以发现在顶层的PrimitiveMesh,有许多函数定义为virtual xxx xxxx = 0;定义成了纯虚的接口,意味着实现应该去他的子类去找。当然,子类也可以用父类已经实现了的函数,所以有时在OpenFOAM找具体在哪儿实现的要套好几层。

看到想用的函数是pure virtual,去他的子类找吧~~

image-20230926204825049

生成doxygen手册测试用代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/**
* @file main.cpp
* @brief This is a simple C++ program demonstrating Doxygen documentation.
*/

#include <iostream>

/**
* @brief The base class with a static variable and function.
*/
class Base {
public:
static int staticVar; /**< A static variable. */

/**
* @brief A static function to get the static variable.
* @return The static variable.
*/
static int getStaticVar() {
return staticVar;
}

/**
* @brief A virtual function that prints a message.
*/
virtual void printMessage() {
std::cout << "Base class message." << std::endl;
}

/**
* @brief The base class constructor.
*/
Base() {
std::cout << "Base class constructor." << std::endl;
}

/**
* @brief The base class destructor.
*/
virtual ~Base() {
std::cout << "Base class destructor." << std::endl;
}
};

int Base::staticVar = 10; // Initialize static variable

/**
* @brief The derived class that inherits from Base.
*/
class Derived : public Base {
public:
/**
* @brief A function that prints a different message.
*/
void printMessage() override {
std::cout << "Derived class message." << std::endl;
}

/**
* @brief The derived class constructor.
*/
Derived() {
std::cout << "Derived class constructor." << std::endl;
}

/**
* @brief The derived class destructor.
*/
~Derived() override {
std::cout << "Derived class destructor." << std::endl;
}
};



ansys fluent 安装

Posted on 2023-08-29

ANSYS FLUENT安装: 最新版ANSYS 2022R2来了!(软件+安装教程+汉化) (qq.com) ANSYS 2022R2软件安装包下载及安装教程 (qq.com)

安装zsh以及oh my zsh

Posted on 2023-08-29
  • oh my zsh可以在WSL中安装,用vscode和windows自带的终端打开就是oh my zsh的界面!
  • 安装oh my zsh之前先安装zsh

oh my zsh: ohmyzsh/ohmyzsh: 🙃 A delightful community-driven (with 2,100+ contributors) framework for managing your zsh configuration. Includes 300+ optional plugins (rails, git, macOS, hub, docker, homebrew, node, php, python, etc), 140+ themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community. (github.com)

CuSO4Gem/ohmyzsh-offline: install oh my zsh offline (github.com)

oh my zsh - 搜索结果 - 知乎 (zhihu.com)

学习在fluent和OpenFOAM中设置压力边界条件

Posted on 2023-08-28

update:

[CFD] When and Why do I need Operating Pressure, Temperature and Density? - YouTube

为什么需要Operating Pressue

补充关于压力出入口边界设置的资料:

ANSYS FLUENT 12.0 User's Guide - 7.3.3 Pressure Inlet Boundary Conditions (enea.it)

!![CFD] Pressure-Inlet Boundary Conditions - YouTube

讲的超好!里面有对不同速度工况下(不可压,可压,其中可压又分为亚音速和超音速)压力入口的设置

一个视频理解Ansys Fluent里的压力设置及含义(表压or静压)_哔哩哔哩_bilibili

  • Operating Condition
    • Operating Pressure[Pa] +Gauge Pressure(Relative Pressure, Static Pressure) \(P_{absolute} = P_{operating}+P_{gauge}\) The gauge pressure is what we enter in the Boundary conditions panels. Set the gauge pressure is used to avoid problems with round-off errors which occur when the dynamic pressure differences in a fluid are small compared to the absolute pressure level
  • Reference pressure location, is where the absolute static pressure is known
image-20230828222040140
image-20230828222040140

Reference pressure in OpenFOAM -- CFD Online Discussion Forums (cfd-online.com)

1
2
3
4
5
6
7
In others the reference is set only if required.

Quote:

*In fluent, if we specify pref=1atm, then if we entering a guage perssure of 0 atm at outlet then we can directly enter the value 0. even if I am giving the perssure boundary condition p=0 at outlet, there wont be any wrong in specifying the pref value = 0 in tne fvSolution file, right?*

Right, since you're solving for incompressible flows. As long as you do not over-specify the boundary (setting p and U at the same side, for example), it will be fine. The only difference could be a translation of the values of p.

这个算例里面有句话值得注意:over-specify!(setting p and U at the same side)

ASK GPT:

In OpenFOAM, when setting up a boundary condition with a constant mass flow rate velocity, you usually need to also specify an appropriate pressure boundary condition to ensure the problem is well-posed and physically accurate. The choice of pressure boundary condition depends on the specific problem and flow conditions. Here are a few options you can consider:

  1. Inlet/Outlet Pressure: You can use the inletOutlet boundary condition for pressure at the inlet or outlet. This condition allows the pressure to be determined based on the velocity field and the specified mass flow rate, ensuring that the flow is consistent with the desired mass flow rate.

    1
    2
    3
    4
    5
    6
    inletOutlet
    {
    type inletOutlet;
    inletValue uniform (0 0 0); // Specify the velocity components
    value $internalField; // To set pressure equal to internalField
    }
  2. Fixed Value or Fixed Gradient: Depending on the flow problem, you might be able to set a fixed value or fixed gradient for the pressure at the boundary. However, ensure that the boundary conditions do not lead to unphysical results.

    1
    2
    3
    4
    5
    fixedValue
    {
    type fixedValue;
    value $internalField; // Specify the desired pressure value
    }
    1
    2
    3
    4
    5
    fixedGradient
    {
    type fixedGradient;
    gradient uniform (0 0 0); // Specify a gradient if needed
    }
  3. Zero Gradient: For some cases, you might use a zero gradient condition for pressure at the boundary. This assumes that the pressure gradient is zero, which might be suitable if the boundary is far from the region of interest or if you have a long enough domain.

    1
    2
    3
    4
    zeroGradient
    {
    type zeroGradient;
    }
  4. Pressure Inlet: If you have a known pressure value at the inlet, you can directly specify that value. However, this might affect the mass flow rate, so ensure consistency with your velocity boundary condition.

    1
    2
    3
    4
    5
    6
    pressureInlet
    {
    type pressureInlet;
    p uniform 101325; // Specify the pressure value
    U uniform (0 0 0); // Specify the velocity components
    }

Remember to select a pressure boundary condition that is consistent with your desired mass flow rate velocity condition and that reflects the physics of your problem. Always validate your choice through simulations and comparisons with experimental or analytical results if available.

c_cpp_properties的设置

Posted on 2023-08-27

ubuntu 下 GCC/G++ 的 include 搜索路径查看与设置_ubuntu g++ clude_许野平的博客-CSDN博客

echo 'main(){}'|gcc -E -v -

1
2
3
4
5
6
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/7/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include

OpenFOAM和fluent的SIMPLE计算设置对比【还没写完】

Posted on 2023-08-24

预备知识

  • (Dynamic viscosity)动力粘度:\(\mu\) \(,这个\)\(\mu\)与牛顿内摩擦公式有关:\(\tau = \mu du/ dy\), 单位为\(Pa\cdot s\)或\(N\cdot s/m^2\)
  • (Kinematic viscosity)运动粘度:\(\nu = \mu / \rho\) ,单位为\(m^2/s\)

在OpenFOAM中,一般设置运动粘度:

1
nu [ 0 2 -1 0 0 0 0 ] 0.01;

theory.pdf (dyfluid.com) 对于simpleFoam来说,OpenFOAM求解的方程是这样的:

$$ \[\begin{align} \nabla\cdot\bf{U}=0 \\ \nabla \cdot (\mathbf{U}\mathbf{U})-\nabla \cdot(\nu \nabla \mathbf{U})=-\nabla p \end{align}\] $$ 对于不可压流体时,OpenFOAM对上述方程整个除了密度\(\rho\) 。所以会在边界条件的p文件内看到p的量纲是\(m^2/s^2\):

1
dimensions      [0 2 -2 0 0 0 0];

压力\(p\) 原量纲为:\(kg / m\cdot s^2\) ,除以密度\(kg/m^3\)

\(k-\epsilon\) 模型

对于求解采用\(k-\epsilon\) 模型时,湍流粘度\(\nu_{t}\) 与湍动能\(k\) 和湍流耗散率\(\epsilon\) 结合,有公式: \[ \nu_t = C_{\mu} \frac{k^2}{\epsilon} \] 标准 k-ε 模型: 常数: \[ \begin{align} C_{mu} = 0.0 \\ C_1 = 1.44 \\ C_2 = 1.92 \\ α_k = 1 \\ α_ε = 0.76923 \end{align} \]

Turbulence dissipation rate -- CFD-Wiki, the free CFD reference (cfd-online.com) 湍流耗散率单位:\(m^2/s^3\)

关于边界flowRateInletVelocity

flowRateInletVelocity value uniform (0 0 0) -- CFD Online Discussion Forums (cfd-online.com) OpenFOAM: API Guide: flowRateInletVelocityFvPatchVectorField Class Reference - Example of the boundary condition specification for a volumetric flow rate:

1
2
3
4
5
6
7
8
<patchName>
{
type flowRateInletVelocity;
volumetricFlowRate 0.2;
extrapolateProfile yes;
value uniform (0 0 0);
}

  • example of the boundary condition specification for a mass flow rate:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <patchName>
    {
    type flowRateInletVelocity;
    massFlowRate 0.2;
    extrapolateProfile yes;
    rho rho;
    rhoInlet 1.0;
    value uniform (0 0 0);
    }

  • 检测入口和出口处的流量相同的 Difference between specified and calculated mass flow rate -- CFD Online Discussion Forums (cfd-online.com)

边界条件的\(k-\epsilon\) 模型该怎么取

calculation of k, epsilon and omega -- CFD Online Discussion Forums (cfd-online.com)

Turbulence free-stream boundary conditions -- CFD-Wiki, the free CFD reference (cfd-online.com)

  • 看Henry等人写的关于这部分的内容

Notes on CFD: General Principles - 7.3 Inlet turbulence

  • 看这里的估算方法

Calculator for the estimation of turbulence properties values (boundary and initial conditions) (wolfdynamics.com)

测试数学公式

Posted on 2023-08-19

LaTex: $$ \[\begin{align} \int_{V_p} \nabla \cdot (\rho \mathbf{U} \phi)dV & = \sum_f {\mathbf{S} \cdot (\rho \mathbf{U} \phi )_f } \notag \\ & = \sum_f \mathbf{S} \cdot (\rho \mathbf{U} )_f \phi_f \notag \\ & = \sum_f{F \phi_f} \label{Convection term-1} \end{align}\] $$

Markdown:

\[ \int_{V_p} \nabla \cdot (\rho \mathbf{U} \phi)dV & = \sum_f {\mathbf{S} \cdot (\rho \mathbf{U} \phi )_f } \notag \\ & = \sum_f \mathbf{S} \cdot (\rho \mathbf{U} )_f \phi_f \notag \\ & = \sum_f{F \phi_f} \]

\[ \phi_c = \phi_f+\psi \]

测试结果:LaTeX公式可以过,markdown多行的解析还有问题

12<i class="fa fa-angle-right"></i>

13 posts
2 categories
6 tags
© 2024 tttt
Powered by Hexo
|
Theme — NexT.Muse v5.1.4