各位前辈好!
我将网格导入到openfoam中,但只想输出某一个面上所有网格点的坐标信息,有没有类似程序可以参考呢?
麻烦哪位热心前人指点一下!
各位前辈好!
我将网格导入到openfoam中,但只想输出某一个面上所有网格点的坐标信息,有没有类似程序可以参考呢?
麻烦哪位热心前人指点一下!
各位前辈好!
最近我想在工作站的centos7系统上安装of3,我根据wiki上的教程进行了操作(链接如下:链接文本)
其中的一步是“Now let's get and unpack Boost and fix the version in makeCGAL”(中文含义是:“现在让我们获取并解压 Boost 并修复 makeCGAL 中的版本:”)
给出的参考命令是
wget "https://raw.github.com/wyldckat/scripts4OpenFOAM3rdParty/master/getBoost"
但运行发现无法 无法下载,可能是这个链接已经没有了,这也导致后面在编译openfoam的时候报错
g++ -m64 -Dlinux64 -DWM_ARCH_OPTION=64 -DWM_DP -DWM_LABEL_SIZE=64 -Wall -Wextra -Wold-style-cast -Wnon-virtual-dtor -Wno-unused-parameter -Wno-invalid-offsetof -O3 -DNoRepository -ftemplate-depth-100 -I/home/win/OpenFOAM/ThirdParty-3.0.0/platforms/linux64Gcc/boost_1_55_0/include -I/home/win/OpenFOAM/OpenFOAM-3.0.0/src/meshTools/lnInclude -I/home/win/OpenFOAM/OpenFOAM-3.0.0/src/parallel/decompose/decompositionMethods/lnInclude -I/home/win/OpenFOAM/OpenFOAM-3.0.0/src/renumber/renumberMethods/lnInclude -IlnInclude -I. -I/home/win/OpenFOAM/OpenFOAM-3.0.0/src/OpenFOAM/lnInclude -I/home/win/OpenFOAM/OpenFOAM-3.0.0/src/OSspecific/POSIX/lnInclude -fPIC -c SloanRenumber.C -o /home/win/OpenFOAM/OpenFOAM-3.0.0/platforms/linux64GccDPInt64Opt/src/renumber/SloanRenumber/SloanRenumber.o
SloanRenumber.C:34:28: 致命错误:boost/config.hpp:没有那个文件或目录
#include <boost/config.hpp>
^
编译中断。
make: *** [/home/win/OpenFOAM/OpenFOAM-3.0.0/platforms/linux64GccDPInt64Opt/src/renumber/SloanRenumber/SloanRenumber.o] 错误 1
请问一下大家,如何才能下载合适版本的boost用于of3的安装呢?
谢谢
各位前辈好!
自己目前基于OpenFOAM开发了一个简单的程序,做的是气液两相流模拟,目前论文投稿 想投到Physics of Fluids 或者 international journal of multiphase flow杂志
我上网查看发现Physics of Fluids是个比较老牌的杂志,之前口碑很好,但最近几年有点水的趋势,年发文量2000+;international journal of multiphase flow中的论文都很扎实,但感觉圈子比较小,年发文量才200+,目前的影响力没有POF高。所以目前自己也比较纠结投到哪个杂志
有没有哪位前辈能发表一下自己的经验或者看法呢?
感激不尽!
感谢二位前辈的回复,我差不多理解这个意思了
最近看到了一点OF关于 函数声明的代码 ,对于const的使用存在疑惑:
inline scalar k() const { return k_; }
inline const vectorField& Smom() const { return Smom_; }
为什么第一行代码应用了一个const,第二行代码用了两个const呢?
第二行代码中的两个const分别表示什么意思呢?
麻烦老师们能够指点一下
各位前辈好!
如图1 ,我现在流场中有一些气泡,想将每一个气泡的内部压力映射到底部壁面上,效果图如图2,我应该如何在paraview中进行映射/投影呢?我自己试验了pointDatasetInterpolator好像不太对(图3)。
哪位前辈能够指点一个思路呢?谢谢
图1:
图2:
图3:
@tens 谢谢您的热心指点,虽然还有点晕,我后面仔细体会体会 ,再次感谢
@tens 感谢您的回答,我试验了一下,确实可以累加流场,但我非常疑惑,在主程序中添加
c_flow_total += c_flow; // 展开为c_flow_total = c_flow_total + c_flow;
每一次循环,主程序怎么知道等式右边的c_flow_total代表了上一个时间步的值呢?为什么替换为c_flow_total.oldTime()就不可以了呢?
希望您能够在解答一下,谢谢
各位前辈好!
我有一个volScalarField场c_flow,现在想累加每一个时刻的c_flow流场,在一段时间后输出c_flow_total
我写的程序如下:
初始化设置c_flow_total流场为0
Info<< "Initializing c_flow_total" << endl;
volScalarField c_flow_total
(
IOobject
(
"c_flow_total",
mesh.time().timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE
),
mesh,
dimensionedScalar("c_flow_total", dimensionSet(0,1,-1,0,0,0,0), 0)
);
然后在主程序中计算c_flow和c_flow_total
Info<< "Calculating erosion index c_flow\n" << endl;
volScalarField c_flow
(
IOobject
(
"c_flow",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
8.97pos(p_rgh - pSat)*sqrt(mag(p_rgh - pSat)/rho1)
);
Info<< "Calculating c_flow_total" << endl;
volScalarField c_flow_total
(
IOobject
(
"c_flow_total",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
c_flow_total.oldTime() + c_flow
);
程序编译没有问题,但用interPhaseChangeFoam计算case报错如下:
Calculating c_flow_total
#0 Foam::error::printStack(Foam::Ostream&) at ??:?
#1 Foam::sigSegv::sigHandler(int) at ??:?
#2 ? in "/lib64/libc.so.6"
#3 Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>::storeOldTimes() const at ??:?
#4 Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>::oldTime() const at ??:?
#5 ? at ??:?
#6 __libc_start_main in "/lib64/libc.so.6"
#7 ? at ??:?
Segmentation fault
我感觉可能是oldTime()的使用出现了问题,请问一下大家,在程序中 累加每一个时刻的流场有什么好的办法呢?
@小考拉 自问自答来解决这个问题。
首先定义一个全为0的流场命名为c_flow
然后利用下面的命令
c_flow.boundaryField()[patchID] = c_flow_origin.boundaryField()[patchID]
最后输出c_flow流场即可
各位前辈好!我现在有一个volScalarField类型的流场c_flow_origin,但我只想在程序中输出名字为“BOTTOM”的这个面的流场
代码如下:
volScalarField c_flow_origin = 8.97*pos(0.99-alpha1)*sqrtp_rgh/rho1); //流场c_flow
label patchID = mesh.boundaryMesh().findPatchID("BOTTOM"); //查找名字为BOTTOM的面ID
volScalarField c_flow_BOTTOM //输出这个面的流场
(
IOobject
(
"c_flow_BOTTOM",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
c_flow_origin.boundaryField()[patchID]
);
编译发现报错:
createFields.H:139:9: error: no matching function for call to ‘Foam::GeometricField<double, Foam::fvsPatchField, Foam::surfaceMesh>::GeometricField(Foam::IOobject, Foam::fvPatchField<double>&)’
根据报错分析 应该是输出的 BOTTOM面流场的 数据类型volScalarField有问题,但更改了好像也不行,请问这个问题应该如何解决呢?
感谢
@队长别开枪 谢谢老师指点,我好好研究一下
各位前辈好!
我现在想在interPhaseChengFoam中添加一个链表list,里面放一些符合某些条件的单元,比如要求单元蒸汽体积分数大于0.5,我应该如何操作呢?有没有哪些类似的代码 可以参考呢?
麻烦哪位老师指点一下
谢谢
@tens 学到了,感谢老师的指点!
@小考拉 继续补充,对于第二个问题,目前导热系数的确可以通过普朗特数的公式计算得到,但前提是我设置的case里面保证了thermophysicalProperties中的transport里面选择const
具体的介绍,可以参考:https://cfd.direct/openfoam/user-guide/v6-thermophysical/
感谢老师的回复。
是的,我说的就是alphaEff的单位。我目前认为单位是 kg/(ms)
问题二中,对于导热率( thermal diffusivity)我通过查找资料,感觉可能是通过 普朗特数计算得到的吧。
我计算之前设置了流场的普朗特数,就可以计算得到导热率了,不知道我这样的理解是否正确呢?
各位老师好!
我采用compressibleInterFoam二次开发计算了一个可压缩空化问题,目前对里面的能量方程有一点疑问。能量方程代码如下:
fvScalarMatrix TEqn
(
fvm::ddt(rho, T)
+ fvm::div(rhoPhi, T)
- fvm::laplacian(mixture.alphaEff(turbulence->mut()), T)
+ (
fvc::div(fvc::absolute(phi, U), p)
+ fvc::ddt(rho, K) + fvc::div(rhoPhi, K)
)
*(
alpha1/mixture.thermo1().Cv()
+ alpha2/mixture.thermo2().Cv()
)
);
根据东岳老师的能量方程教程(链接:http://www.dyfluid.com/docs/energy.html ) 公式(7)和公式(21),可以得到alpha_eff 的单位应该是 kg/(ms),但通过查看of源代码可以发现alpha_eff 单位竟然可以是 kg/(ms) 还可以是 J/m/s/K。
代码链接:https://cpp.openfoam.org/v3/a02698.html#a9648c27c51ad3b583ca3c44c7ac0d868
https://cpp.openfoam.org/v3/a00123.html#a20f8bad2335b8c29d97af5ac7d324746
问题一:我感觉alpha_eff 单位应该是 kg/(ms),怎么又多出来一个呢?
问题二:通过查阅文献,发现混合热扩散系数alpha_eff 需要通过导热率k,定容比热容Cv来计算(在本例中为水和水蒸气的导热率),在of中如何计算导热率k呢?
麻烦各位老师指点一下,同时请问有什么资料可以推荐参考呢?我去学习一下
感谢老师的指点,我自己去试一试!!
各位老师好!
我想在一个自己写的类中输出一个矢量CCC,参考论坛上的代码,将下面的代码写进了类中:
fileName name = ("coefficient");
OFstream OS(name);
if (Pstream::master())
{
if(OS.opened())
{
OS << runTime_.value() << tab << CCC.value() << endl << "\n"; // CCC是一个dimensionedVector
OS << nl << endl;
}
}
但计算时发现 当前时间步输出的 CCC 将 上一时间步输出的 CCC 覆盖掉了
我现在想输出每一个时间步的CCC值,应该加哪些代码呢? 或者是 有哪些代码可以参考呢?
麻烦哪位老师可以指点一下呢?
各位朋友们好!
我最近在看lagrangian库中的solidParticle库代码,对于里面的 类模板的使用 不太懂,solidParticleCloud.C部分代码如下:
void Foam::solidParticleCloud::move(const dimensionedVector& g) //在solidParticleCloud类中定义一个move函数
{
const volScalarField& rho = mesh_.lookupObject<const volScalarField>("rho");
const volVectorField& U = mesh_.lookupObject<const volVectorField>("U");
const volScalarField& nu = mesh_.lookupObject<const volScalarField>("nu");
interpolationCellPoint<scalar> rhoInterp(rho);
interpolationCellPoint<vector> UInterp(U);
interpolationCellPoint<scalar> nuInterp(nu);
solidParticle::trackingData
td(*this, rhoInterp, UInterp, nuInterp, g.value()); //在solidParticleCloud类下面定义了一个trackingData类的对象td??
Cloud<solidParticle>::move(td, mesh_.time().deltaTValue());
}
代码中的这句话:
solidParticle::trackingData
td(*this, rhoInterp, UInterp, nuInterp, g.value());
目前自己很困惑,为什么在solidParticleCloud类的函数move中可以 定义一个 solidParticle类中的 trackingData类的 对象td呢?
自己查找了solidParticleCloud.H文件发现 solidParticleCloud的基类是 Cloud<solidParticle>类,这个Cloud<solidParticle>类 中solidParticle是实参,对Cloud <ParticleType> 类模板进行了实例化.
我怀疑难道是因为Cloud<solidParticle>类中的 实参是solidParticle,所以其子类solidParticleCloud中函数 就可以调用/定义 solidParticle类中的trackingData类?
请哪位高手能够指点一下呢?感激不尽