遇到一个问题,要把 sprayFoam 求解器的蒸发模型修改为自定义蒸发模型

sprayFoam 求解器本身没有实现蒸发模型,而是调用 $FOAM_SRC/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/ 中的模型。

蒸发模型库依赖探究

这里先从 liquidEvaporationBoil 这个已有的蒸发模型入手

首先运行

cd $FOAM_SRC
cd ..
grep -r liquidEvaporationBoil .

可以看到结果中有

grep: ./platforms/linux64GccDPInt32Opt/lib/liblagrangianIntermediate.so: binary file matches
grep: ./platforms/linux64GccDPInt32Opt/lib/liblagrangianSpray.so: binary file matches

因此使用自定义的蒸发模型,需要重新编译 liblagrangianIntermediateliblagrangianSpray 这两个库

因此做出以下尝试

复制并修改 src/lagrangian

mkdir -p $WM_PROJECT_USER_DIR/src
cp -r $FOAM_SRC/lagrangian $WM_PROJECT_USER_DIR/src

(1) 修改 $WM_PROJECT_USER_DIR/src/lagrangian/intermediate/Make/files

LIB = $(FOAM_LIBBIN)/liblagrangianIntermediate 改为

LIB = $(FOAM_USER_LIBBIN)/libmyLagrangianIntermediate

(2) 修改 $WM_PROJECT_USER_DIR/src/lagrangian/spray/Make/files

LIB = $(FOAM_LIBBIN)/liblagrangianSpray 改为

LIB = $(FOAM_USER_LIBBIN)/libmyLagrangianSpray

(3) 修改 $WM_PROJECT_USER_DIR/src/lagrangian/spray/Make/options

EXE_INC

-I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ 改为

-I$(WM_PROJECT_USER_DIR)/src/lagrangian/intermediate/lnInclude \

LIB_LIBS

在开头加上

-L$(FOAM_USER_LIBBIN) \

-llagrangianIntermediate \ 修改为

-lmyLagrangianIntermediate \

(4) 由于测试的 case 调用的是 LiquidEvaporationBoil 模型,因此修改 $WM_PROJECT_USER_DIR/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C 文件

首先 #include <iostream>,然后在构造器中加上

std::cerr << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" << std::endl;
std::cerr << "aaaaaaaaaaaaaaaaaaa Test !!!!!!!!!!!!!!" << std::endl;
std::cerr << "call LiquidEvaporationBoil Constructors" << std::endl;
std::cerr << "aaaaaaaaaaaaaaaaaaa Test !!!!!!!!!!!!!!" << std::endl;
std::cerr << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" << std::endl;

这样可以测试修改蒸发模型的有效性

复制并修改 sparyFoam

cp -r $FOAM_SRC/../applications/solvers/lagrangian/sprayFoam <项目路径>

(1) 修改 <项目路径>/sprayFoam/Make/files

EXE = $(FOAM_USER_APPBIN)/mySprayFoam

(2) 修改 <项目路径>/sprayFoam/Make/options

EXE_INC

-I$(LIB_SRC)/../applications/solvers/lagrangian/reactingParcelFoam \
-I$(WM_PROJECT_USER_DIR)/src/lagrangian/intermediate/lnInclude \
-I$(WM_PROJECT_USER_DIR)/src/lagrangian/spray/lnInclude \

EXE_LIBS

在开头加上 -L$(FOAM_USER_LIBBIN) \

-llagrangianIntermediate \ 修改为 -lmyLagrangianIntermediate \

-llagrangianSpray \ 修改为 -lmyLagrangianSpray \

尝试编译并运行

编译

cd $WM_PROJECT_USER_DIR/src/lagrangian/intermediate
rm -r lnInclude
rm -r Make/linux*
wmake -j4 > wmake.log cd $WM_PROJECT_USER_DIR/src/lagrangian/spray
rm -r lnInclude
rm -r Make/linux*
wmake -j4 > wmake.log cd <项目路径>/sprayFoam
wmake -j4 > wmake.log

之后可以用 $FOAM_USER_APPBIN/mySprayFoam 运行使用 liquidEvaporationBoil 蒸发模型的算例,然后打印

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
aaaaaaaaaaaaaaaaaaa Test !!!!!!!!!!!!!!
call LiquidEvaporationBoil Constructors
aaaaaaaaaaaaaaaaaaa Test !!!!!!!!!!!!!!
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

但是同时看到有一堆报错

Duplicate entry dual in runtime table AveragingMethod
[stack trace]
=============
#1 platforms/linux64GccDPInt32Opt/lib/libmyLagrangianIntermediate.so(+0x4e564a) [0x7f14a396f64a]
#2 /lib64/ld-linux-x86-64.so.2(+0x647e) [0x7f14a5d3847e]
#3 /lib64/ld-linux-x86-64.so.2(+0x6568) [0x7f14a5d38568]
#4 /lib64/ld-linux-x86-64.so.2(+0x202ca) [0x7f14a5d522ca]
=============
Duplicate entry moment in runtime table AveragingMethod
[stack trace]
=============
#1 platforms/linux64GccDPInt32Opt/lib/libmyLagrangianIntermediate.so(+0x4e56dd) [0x7f14a396f6dd]
#2 /lib64/ld-linux-x86-64.so.2(+0x647e) [0x7f14a5d3847e]
#3 /lib64/ld-linux-x86-64.so.2(+0x6568) [0x7f14a5d38568]
#4 /lib64/ld-linux-x86-64.so.2(+0x202ca) [0x7f14a5d522ca]
=============
Duplicate entry moment in runtime table AveragingMethod
[stack trace]
=============
#1 platforms/linux64GccDPInt32Opt/lib/libmyLagrangianIntermediate.so(+0x4e576b) [0x7f14a396f76b]
#2 /lib64/ld-linux-x86-64.so.2(+0x647e) [0x7f14a5d3847e]
#3 /lib64/ld-linux-x86-64.so.2(+0x6568) [0x7f14a5d38568]
#4 /lib64/ld-linux-x86-64.so.2(+0x202ca) [0x7f14a5d522ca]
=============

这是 Duplicate Entry 问题,为解决该问题,运行

cd $WM_PROJECT_USER_DIR/src/lagrangian
grep -r llagrangianIntermediate .

结果为

./coalCombustion/Make/options:    -llagrangianIntermediate \
./turbulence/Make/options: -llagrangianIntermediate \

这说明要重新编译 coalCombustionturbulence (╬▔皿▔)╯

再运行 grep -r llagrangianTurbulence .,结果为

./coalCombustion/Make/options:    -llagrangianTurbulence \
./spray/Make/options: -llagrangianTurbulence \

说明还要修改 coalCombustionspray

于是进行以下操作

(1) 修改 $WM_PROJECT_USER_DIR/src/lagrangian/turbulence/Make/files

LIB = $(FOAM_USER_LIBBIN)/libmyLagrangianTurbulence

(2) 修改 $WM_PROJECT_USER_DIR/src/lagrangian/turbulence/Make/options

-I$(WM_PROJECT_USER_DIR)/src/lagrangian/intermediate/lnInclude \
-L$(FOAM_USER_LIBBIN) \
-lmyLagrangianIntermediate \

(3) 修改 $WM_PROJECT_USER_DIR/src/lagrangian/spray/Make/options

-I$(WM_PROJECT_USER_DIR)/src/lagrangian/turbulence/lnInclude \
-lmyLagrangianTurbulence \

(4) 修改 <项目路径>/sprayFoam/Make/options

-lmyLagrangianTurbulence \

(5) 编译

cd $WM_PROJECT_USER_DIR/src/lagrangian/intermediate
rm -r lnInclude
rm -r Make/linux*
wmake -j3 > wmake.log cd $WM_PROJECT_USER_DIR/src/lagrangian/turbulence
rm -r lnInclude
rm -r Make/linux*
wmake -j3 > wmake.log cd $WM_PROJECT_USER_DIR/src/lagrangian/spray
rm -r lnInclude
rm -r Make/linux*
wmake -j3 > wmake.log cd <项目路径>/sprayFoam
wmake -j3 > wmake.log

之后运行,发现报错消失了

创建自定义蒸发模型

首先要知道蒸发模型是如何被调用的,运行下面命令

cd $WM_PROJECT_USER_DIR/src/lagrangian/intermediate
grep -r LiquidEvaporationBoil.H .

结果为

./parcels/include/makeReactingParcelPhaseChangeModels.H:#include "LiquidEvaporationBoil.H"

这提示了如何添加自定义蒸发模型。

因此首先复制已有的蒸发模型至项目路径并重命名

cp -r $WM_PROJECT_USER_DIR/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil <项目路径>
cd <项目路径>
mv LiquidEvaporationBoil MyLiquidEvaporation cd MyLiquidEvaporation
sed s/LiquidEvaporationBoil/MyLiquidEvaporation/g \
LiquidEvaporationBoil.C >MyLiquidEvaporation.C
sed s/LiquidEvaporationBoil/MyLiquidEvaporation/g \
LiquidEvaporationBoil.H >MyLiquidEvaporation.H
rm LiquidEvaporationBoil.C LiquidEvaporationBoil.H

也要修改 MyLiquidEvaporation.H

TypeName("myLiquidEvaporation");

对应的,要更新 case 文件,修改 constant/sprayCloudProperties.subModels.phaseChangeModelmyLiquidEvaporation,这应该与 TypeName("myLiquidEvaporation") 相对应。同时添加

    myLiquidEvaporationCoeffs
{
enthalpyTransfer enthalpyDifference; activeLiquids ( C7H16 );
}

接下来要创建链接

mkdir -p $WM_PROJECT_USER_DIR/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/MyLiquidEvaporation
ln <项目路径>/MyLiquidEvaporation/MyLiquidEvaporation.H $WM_PROJECT_USER_DIR/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/MyLiquidEvaporation/MyLiquidEvaporation.H
ln <项目路径>/MyLiquidEvaporation/MyLiquidEvaporation.C $WM_PROJECT_USER_DIR/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/MyLiquidEvaporation/MyLiquidEvaporation.C

然后在 $WM_PROJECT_USER_DIR/src/lagrangian/intermediate/parcels/include/makeReactingParcelPhaseChangeModels.H 中加上

#include "MyLiquidEvaporation.H"
makePhaseChangeModelType(MyLiquidEvaporation, CloudType);

之后编译

cd $WM_PROJECT_USER_DIR/src/lagrangian/intermediate
rm -r lnInclude
rm -r Make/linux*
wmake -j3 > wmake.log cd $WM_PROJECT_USER_DIR/src/lagrangian/turbulence
rm -r lnInclude
rm -r Make/linux*
wmake -j3 > wmake.log cd $WM_PROJECT_USER_DIR/src/lagrangian/spray
rm -r lnInclude
rm -r Make/linux*
wmake -j3 > wmake.log

为判断是否成功添加,运行以下命令

cd $WM_PROJECT_USER_DIR/src/lagrangian/intermediate
echo ---lagrangian/intermediate echo MyLiquidEvaporation
grep -r -I MyLiquidEvaporation | wc -l
grep -r -I myLiquidEvaporation | wc -l echo LiquidEvaporationBoil
grep -r -I LiquidEvaporationBoil | wc -l
grep -r -I liquidEvaporationBoil | wc -l echo LiquidEvapFuchsKnudsen
grep -r -I LiquidEvapFuchsKnudsen | wc -l
grep -r -I liquidEvapFuchsKnudsen | wc -l cd $WM_PROJECT_USER_DIR/src/lagrangian/spray
echo ---lagrangian/spray echo MyLiquidEvaporation
grep -r -I MyLiquidEvaporation | wc -l
grep -r -I myLiquidEvaporation | wc -l echo LiquidEvaporationBoil
grep -r -I LiquidEvaporationBoil | wc -l
grep -r -I liquidEvaporationBoil | wc -l cd $FOAM_USER_LIBBIN
echo ---FOAM_USER_LIBBIN echo MyLiquidEvaporation
nm -C libmyLagrangianIntermediate.so | grep MyLiquidEvaporation | wc -l
nm -C libmyLagrangianTurbulence.so | grep LiquidEvaporationBoil | wc -l
nm -C libmyLagrangianSpray.so | grep MyLiquidEvaporation | wc -l echo LiquidEvaporationBoil
nm -C libmyLagrangianIntermediate.so | grep LiquidEvaporationBoil | wc -l
nm -C libmyLagrangianTurbulence.so | grep MyLiquidEvaporation | wc -l
nm -C libmyLagrangianSpray.so | grep LiquidEvaporationBoil | wc -l

如果 MyLiquidEvaporation 相关的符号数与 LiquidEvaporationBoil 相同,应该可以说明成功添加 MyLiquidEvaporation

之后再编译求解器,最后成功运行。至此,已满足把 sprayFoam 求解器的蒸发模型修改为自定义蒸发模型的要求。

openfoam 修改 src 库经验记录的更多相关文章

  1. android studio 导入第三方库的记录

    android studio 导入第三方库的记录.jar包 和 库 一.jar包 1.jar包的话很简单,首先换成project模式,将你要用的jar包复制到lib下面.如图 2.然后右键选择Add ...

  2. ERP渠道信息的修改和渠道联系记录(二十三)

    用例图: 前端代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Cha ...

  3. SVN修改已经提交过记录的日志和作者

    原 SVN修改已经提交过记录的日志和作者 使用TortoiseSVN管理代码,对于已经提交的记录,可以修改提交作者和提交日志,不过会报如下错误: Repository has not been ena ...

  4. SQL-修改: 将日期修改为空NULL、修改为空的记录

    1.将日期修改为空NULL update 表 set 字段=null where 字段='' 如果设置为‘’,会默认1900-01-01 2.修改为空的记录 update [dbo].[pub_ite ...

  5. Oracle查询库中记录数大于2千万的所有表

    Oracle查询库中记录数大于2千万的所有表 假如当前用户拥有select any table权限,则可以使用下列sql语句: select table_name, num_rows from dba ...

  6. 孤荷凌寒自学python第五十三天使用python写入和修改Firebase数据库中记录

     孤荷凌寒自学python第五十三天使用python写入和修改Firebase数据库中记录 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数 ...

  7. Dynamics CRM 修改Excel 最大导出记录限制及 最大上传文件限制

    CRM默认的Excel最大导出记录是10000条,最大上传文件限制为5m. 这样的限制可以满足少量数据的批量更新,但是如果数据量比较大的话需要修改最大的导出记录限制,和上传文件的大小,网上有的是直接修 ...

  8. Elasticsearch之重要核心概念(cluster(集群)、shards(分配)、replicas(索引副本)、recovery(据恢复或叫数据重新分布)、gateway(es索引的持久化存储方式)、discovery.zen(es的自动发现节点机制机制)、Transport(内部节点或集群与客户端的交互方式)、settings(修改索引库默认配置)和mappings)

    Elasticsearch之重要核心概念如下: 1.cluster 代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的.es的一个概念就是 ...

  9. 修改so库中的依赖名

    修改so库中的依赖名 在ArchLinuxArm上有一些针对aarch64, arm, armeabi-v7a等Android常用架构的so库可以下载,有时候可以省去很多编译时间,且都是编译optim ...

  10. 如何在vue中修改动态标签中的样式和修改组件库样式

    vue中修改动态标签中的样式和修改组件库样式 因为vue中的标签在渲染的时候,都会给标签加上id 所以你想在<style lang="scss" scoped>直接修改 ...

随机推荐

  1. 【GUI界面软件】抖音评论采集:自动采集10000多条,含二级评论、展开评论!

    目录 一.背景说明 1.1 效果演示 1.2 演示视频 1.3 软件说明 二.代码讲解 2.1 爬虫采集模块 2.2 软件界面模块 2.3 日志模块 三.获取源码及软件 一.背景说明 1.1 效果演示 ...

  2. docker 权限问题 Got permission denied while trying to connect to the Docker daemon socket at 。。。

    非root用户运行docker命令报如下错误 说明没有权限 haima@haima-PC:/usr/local/docker/docker_compose_efk$ docker ps -a Got ...

  3. 🔥🔥🔥httpsok-v1.8.0 SSL证书自动续签就应该这么简单

    httpsok-v1.8.0 SSL证书自动续签就应该这么简单 简介 一行命令,一分钟轻松搞定SSL证书自动续期 httpsok 是一个便捷的 HTTPS 证书自动续签工具,专为 Nginx 服务器设 ...

  4. 基于 three.js 加载器分别加载模型

    点击查看代码 /** * 参数:模型文件路径,成功回调函数 * * 基于 three.js 加载器分别加载模型 * * 全部加载后通过回调函数传出打印 */ import { FBXLoader } ...

  5. AIRIOT物联网低代码平台如何配置Modbus TCP协议?

    AIRIOT物联网低代码平台稳定性超高,支持上百种驱动,各种主流驱动已在大型项目中通过验证,持续稳定运行. AIRIOT物联网低代码平台如何配置Modbus TCP协议?操作如下: AIRIOT与西门 ...

  6. snmpwalk命令详解

    snmp安装 yum -y install net-snmp-libs net-snmp net-snmp-utils 系统镜像里面就有这些包.可yum安装 snmpwalk集合 snmpwalk + ...

  7. docker安装MySQL8.0.35主从复制(实战保姆级)

    很久没有记录了,今天有时间就记录一下最近安装遇到的问题 liunx安装docker这个是前提,就不多过述 1 准备两台服务器 10.104.13.139 10.104.13.140 2 确保liunx ...

  8. 深入理解 Swoole 的底层加载原理

    首发原文链接:深入理解 Swoole 的底层加载原理 PHP 扩展加载 我们从 php-src/sapi/cli/php_cli.c:1159 文件的入口函数 int main(int argc, c ...

  9. .net core 5,6,7【多线程笔记】取消令牌(CancellationToken) CancellationTokenSource

    介绍 在使用C#异步的场景,多多少少会接触到CancellationTokenSource.它和取消异步任务相关的,CancellationToken就是它生产出来的. 演示 任务取消执行回调 var ...

  10. uniapp 小程序分享功能

    上个月在做小程序的项目时,甲方需要给小程序添加个分享的功能,查看uniapp官方文档后,发现uniapp有自带的小程序分享功能(https://uniapp.dcloud.io/api/plugins ...