2
栏目分类
热点资讯
详确编译为库的话指定的是EXE_LIBS
本文演示在OpenFOAM中自界说库的基本经由。 有本领为了数据封装的需要,不错将荒谬的代码先编译成库,然后在其他的代码中对库加以调用。本案例演示此经由。 1 ...
新闻资讯 你的位置:宁波盈进进出口有限公司 > 新闻资讯 > 详确编译为库的话指定的是EXE_LIBS
详确编译为库的话指定的是EXE_LIBS 发布日期:2024-07-03 15:46    点击次数:197

详确编译为库的话指定的是EXE_LIBS

本文演示在OpenFOAM中自界说库的基本经由。

有本领为了数据封装的需要,不错将荒谬的代码先编译成库,然后在其他的代码中对库加以调用。本案例演示此经由。

1 文献准备

这里将库文献、功能文献以及测试文献分开。总计的文献皆放手在run文献夹下。

使用底下的号令创建文献结构。

runmkdir demo7 && cd demo7mkdir customLibrary && cd customLibrarymkdir Maketouch customLibrary.H customLibrary.Ctouch Make/files Make/optionscd ..foamNewApp demo7

创建终了后的文献结构如下所示。

图片

2 库的界说与编译修改customLibrary/Make/files文献
customLibrary.CLIB = $(FOAM_USER_LIBBIN)/libcustomLibrary

详确这里不再是之前案例的EXE了,而是换成了LIB。

修改customLibrary/Make/options文献
EXE_INC = \    -I$(LIB_SRC)/finiteVolume/lnInclude \    -I$(LIB_SRC)/meshTools/lnInclude EXE_LIBS = \    -lfiniteVolume    -lmeshTools
修改头文献customLibrary/customLibrary.H
#include "fvCFD.H"// 在头文献中声明函数scalar computeR(const fvMesh &mesh,volScalarField & r, dimensionedVector x0);void computeU(const fvMesh & mesh, volVectorField &U, word pname="p");

头文献中仅仅声明了两个函数。

修改源文献customLibrary/customLibrary.C
#include "customLibrary.H"// 这两个函数之前的案例中使用过,就不重叠先容了scalar computeR(const fvMesh &mesh,volScalarField &r, dimensionedVector x0){    r = mag(mesh.C()-x0);    return returnReduce(max(r).value(),maxOp<scalar>());} void computeU(const fvMesh &mesh, volVectorField &U,word pName){    const volScalarField &pField = mesh.lookupObject<volScalarField>(pName);    U = fvc::grad(pField)*dimensionedScalar("tmp",dimTime,1.0);} 

总计文献修改终了后,插足customLibrary旅途下,试验号令wmake进行编译。

图片

不错看到在$FOAM_USER_LIBBIN旅途下生成了一个名为libcustomLibrary.so的动态库文献。

青铜峡市岩新羽毛有限公司3 功能武艺界说

插足demo7目次下。诈骗号令touch createFields.H创建文献,此时demo7文献夹中的文献结构如下:

图片

修改files文献
demo7.CEXE = demo7
修改options文献, 新闻资讯详确编译为库的话指定的是EXE_LIBS, 湖州越球电机有限公司还要详确包含头文献
产品介绍 0, 0, 0.55) 0px 2px 10px;">EXE_INC = \    -I$(LIB_SRC)/finiteVolume/lnInclude \    -I$(LIB_SRC)/meshTools/lnInclude    -I../customLibrary EXE_LIBS = \    -lfiniteVolume \    -lmeshTools \    -L$(FOAM_USER_LIBBIN) -lcustomLibrary

详确库文献的加载,先加载旅途后加载库称号,把库称号前边的lib去掉。

编写createFields.H头文献
// createFields.H中包含了各式参数及物理场的读入Info << "读取tranportProperties文献\n" << endl; IOdictionary transportProperties(    IOobject    (        "transportProperties",        runTime.constant(),        mesh,        IOobject::MUST_READ_IF_MODIFIED,        IOobject::NO_WRITE    )); dimensionedScalar nu(    "nu",    dimViscosity,    transportProperties); Info << "读取p文献"<< endl;volScalarField p(    IOobject    (        "p",        runTime.timeName(),        mesh,        IOobject::MUST_READ,公司简介        IOobject::AUTO_WRITE    ),    mesh); Info << "读取U文献" << endl;volVectorField U(    IOobject    (        "U",        runTime.timeName(),        mesh,        IOobject::MUST_READ,        IOobject::AUTO_WRITE    ),    mesh);
编写源代码demo7.C
 #include "fvCFD.H"// 详确文献旅途#include "../customLibrary/customLibrary.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * // int main(int argc, char *argv[]){#include "setRootCase.H"#include "createTime.H" // 添加两个头文献,一个创建fvMesh对象,另一个读取数据#include "createMesh.H"#include "createFields.H"     // 界说一个向量x0,其量纲为dimLength    const dimensionedVector originVector("x0", dimLength, vector(0.05, 0.05, 0.005));    scalar f(1.0);     // 界说一个标量场r,给了一个驱动值r0    volScalarField r(        IOobject(            "r",            runTime.timeName(),            mesh,            IOobject::NO_READ,            IOobject::NO_WRITE),        mesh,        dimensionedScalar("r0", dimLength, 0.0));     // 诈骗自界说库中的computeR函数    const scalar rFaceCell = computeR(mesh, r, originVector);     Info << "Starting time loop\n" << endl;    while (runTime.loop())    {        Info << "Time = " << runTime.timeName() << nl << endl;        // 诈骗网格距离进行压力策画,没什么相配的兴趣,仅仅大肆策画        // 场变量策画的本领需要详确量纲        p = Foam::sin(2. * constant::mathematical::pi * f * runTime.time().value()) /            (r / rFaceCell + dimensionedScalar("small", dimLength, 1e-12)) *            dimensionedScalar("tmp", dimensionSet(0, 3, -2, 0, 0), 1.0);        p.correctBoundaryConditions();         // 诈骗自界说库中的computeU函数策画速率        computeU(mesh, U);        runTime.write();    }    // * * * * * * * * * * * * * * * * * * * //    Info << nl;    runTime.printExecutionTime(Info);    Info << "End\n" << endl;    return 0;}

代码编写终了后,不错使用wmake进行编译。

图片

4 测试案例

诈骗cavity案例行为测试案例。将cavity案例拷贝到run/demo7文献夹下。

cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity .

详确demo7文献夹下的子文献夹组织神气,如下图所示。

图片

现时目次为run/demo7,诈骗底下的号令插足cavity目次,生成网格并调用上头编译到手的武艺。

cd cavityblockMesh../demo7/demo7

修改system/controlDict文献中endTime要津字的值为2,建筑deltaT为0.1。

试验效果如下图所示。

图片

压力场如下图所示。

图片

(本文完了)

本站仅提供存储办事,总计骨子均由用户发布,如发现存害或侵权骨子,请点击举报。

上一篇:没有了

下一篇:没有了