@coolhhh 感谢,本来也是想着OpenFOAM有没有简单的代码全部搞定,最后还是要手动一个一个算😂
讲师
帖子
-
张量二阶偏导数 偏(A_j B_i)/偏(x_i x_j) 如何编程 -
张量二阶偏导数 偏(A_j B_i)/偏(x_i x_j) 如何编程@学流体的小明
问了AI,OpenFOAM需要手动做两次梯度计算#include "fvCFD.H" // OpenFOAM 的核心头文件,包含 mesh、field、fvc/fvm 工具 #include "fvcGrad.H" // 显式声明 fvc::grad int main(int argc, char *argv[]) { #include "setRootCase.H" #include "createTime.H" #include "createMesh.H" // 创建速度场 U volVectorField U ( IOobject ( "U", runTime.timeName(), mesh, IOobject::MUST_READ, IOobject::AUTO_WRITE ), mesh ); // 把 u1 分离出来 volScalarField u1 = U.component(vector::X); // 或者 U.x() // 1. 计算 u1 的一阶梯度 ∇u1 volVectorField gradU1 = fvc::grad(u1); // gradU1.x() = ∂u1/∂x1 // gradU1.y() = ∂u1/∂x2 // gradU1.z() = ∂u1/∂x3 // 2. 对 ∂u1/∂x1 这个标量场,在 x2(Y)方向再求一次梯度 // fvc::grad(gradU1.x()) 是一个 volVectorField, // 其中 .y() 即 ∂(∂u1/∂x1)/∂x2 = ∂²u1/∂x1∂x2 volScalarField d2u1dx1dx2 = fvc::grad( gradU1.x() ).y(); // 写入结果 d2u1dx1dx2.write(); return 0; }
-
张量二阶偏导数 偏(A_j B_i)/偏(x_i x_j) 如何编程想计算一个源项:
$$
\frac{\partial^2 (\overline{\rho} \overline{U}_j u_i^\prime) }{\partial x_i \partial x_j}
$$
其中上横线表示时间平均量,上标撇表示脉动量。
我把rhoMean、UMean和UPrime都计算好了,它们的类型分别是
volScalarField rhoMean; volVectorField UMean; volScalarField UPrime;
展开后是
$$
\begin{multline}
[{\frac{{{\partial ^2}}}{{\partial x_1^2}}(\bar \rho {{\bar U}_1}u_1^\prime ) + \frac{{{\partial ^2}}}{{\partial {x_1}\partial {x_2}}}(\bar \rho {{\bar U}_2}u_1^\prime ) + \frac{{{\partial ^2}}}{{\partial {x_1}\partial {x_3}}}(\bar \rho {{\bar U}_3}u_1^\prime ) + \frac{{{\partial ^2}}}{{\partial {x_2}\partial {x_1}}}(\bar \rho {{\bar U}_1}u_2^\prime ) +
\\
\frac{{{\partial ^2}}}{{\partial x_2^2}}(\bar \rho {{\bar U}_2}u_2^\prime ) + \frac{{{\partial ^2}}}{{\partial {x_2}\partial {x_3}}}(\bar \rho {{\bar U}_3}u_2^\prime ) + \frac{{{\partial ^2}}}{{\partial {x_3}\partial {x_1}}}(\bar \rho {{\bar U}_1}u_3^\prime ) + \frac{{{\partial ^2}}}{{\partial {x_3}\partial {x_2}}}(\bar \rho {{\bar U}_2}u_3^\prime ) + \frac{{{\partial ^2}}}{{\partial x_3^2}}(\bar \rho {{\bar U}_3}u_3^\prime )}]
\end{multline}
$$
然后该如何写这个偏导数呢?和AI战斗了好久它还是没懂,它一直想用fvc::laplacian()
,但是fvc::laplacian()
的含义是$\frac{\partial ^2}{\partial x_1^2}+\frac{\partial ^2}{\partial x_2^2}+\frac{\partial ^2}{\partial x_3^2}$。 -
snappyHexMesh的加密以及在直角处的边界层生成问题@studentTan nCellsBetweenLevels 过渡层设置多一点,试下10层或20层
nCellsBetweenLevels 1;
-
snappyhexMesh划分边界层网格时在锐角处无法生层边界层- 试下 snapControls 用 explicitFeatureSnap
snapControls { implicitFeatureSnap false; explicitFeatureSnap true; }
- 同时把 meshQualityDict 质量要求降低,因为这种尖角边界层网格质量就是挺差
maxBoundarySkewness 10; maxInternalSkewness 4; minDeterminant 0.001; minFaceWeight 0.02; minVolRatio 0.01;
- 按上面方式可能能生成这样的边界层网格,网格质量差,有可能会导致计算发散,得具体试算下
-
Windows 环境安装部署 OpenFOAM-v2106 及 ParaView 保姆级教程在安装完Windows版ParaView之后, 也可以去WSL的
.bashrc
文件里面添加以下内容alias paraview='"/mnt/ParaView/安装/路径/bin/paraview.exe"'
然后重新Source一下就可以使用
paraview
命令启动Windows版ParaView了, 可以直接打开WSL里面的文件夹, 无需在Windows目录下运行OpenFOAM算例 -
openfoam如何将结果文件写到其他文件夹?让AI帮忙写了个脚本,供大家参考。原理是提前在当前的算例文件夹下创建好链接,链接到另一个硬盘已经创建好的时间文件夹。实测在/home/disk1/caseA目录下运行OpenFOAM求解器,可以将数据文件存到/home/disk2/caseB中。注意这个脚本得在/home/disk1/caseA目录下运行,不然
ln
命令总会有一些bug,有时候是没办法正确创建链接,有时候是会出现链接的嵌套。#!/bin/bash # 配置路径 src="/home/disk1/caseA" dst="/home/disk2/caseB" # 创建目标目录 mkdir -p "$dst" # 处理单个 processor 的函数 process_proc() { local proc="$1" local dst="$2" local procname=$(basename "$proc") # 创建 processor 目录 mkdir -p "$dst/$procname" # 生成时间序列并创建时间文件夹(自动剪除尾随零) seq 8.0001 0.0001 8.5 | while read t; do formatted_t=$(printf "%g" "$t") mkdir -p "$dst/$procname/$formatted_t" # 创建符号链接,指向目标目录中的时间文件夹 ln -sfn "$dst/$procname/$formatted_t" "$procname/$formatted_t" done } # 导出函数以便并行使用 export -f process_proc # 收集所有 processor 目录 proc_dirs=("$src"/processor*) # 并行处理(使用所有CPU核心) parallel --jobs 0 --progress --bar process_proc {} "$dst" ::: "${proc_dirs[@]}" echo "processor 文件夹和时间文件夹创建完成。"
-
数据驱动CFD的意义是什么? -
求教Fluent求解前设置压力的问题可以看看压力的分布。
看你现在的情况, 压力问题和温度问题都出现了,那暗示有三种可能,1.网格过于离谱;2.物理模型选择离谱;3.边界条件离谱。 -
求教Fluent求解前设置@length颜 一般来说,5000K是Fluent软件能计算的温度的上限。这么考虑的话,你设置大概需要调整的。如果网格不离谱的话,可以先看看温度分布