openfoam 修改 src 库经验记录
遇到一个问题,要把 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
因此使用自定义的蒸发模型,需要重新编译 liblagrangianIntermediate、liblagrangianSpray 这两个库
因此做出以下尝试
复制并修改 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 \
这说明要重新编译 coalCombustion、turbulence (╬▔皿▔)╯
再运行 grep -r llagrangianTurbulence .,结果为
./coalCombustion/Make/options: -llagrangianTurbulence \
./spray/Make/options: -llagrangianTurbulence \
说明还要修改 coalCombustion、spray
于是进行以下操作
(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.phaseChangeModel 为 myLiquidEvaporation,这应该与 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 库经验记录的更多相关文章
- android studio 导入第三方库的记录
android studio 导入第三方库的记录.jar包 和 库 一.jar包 1.jar包的话很简单,首先换成project模式,将你要用的jar包复制到lib下面.如图 2.然后右键选择Add ...
- ERP渠道信息的修改和渠道联系记录(二十三)
用例图: 前端代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Cha ...
- SVN修改已经提交过记录的日志和作者
原 SVN修改已经提交过记录的日志和作者 使用TortoiseSVN管理代码,对于已经提交的记录,可以修改提交作者和提交日志,不过会报如下错误: Repository has not been ena ...
- SQL-修改: 将日期修改为空NULL、修改为空的记录
1.将日期修改为空NULL update 表 set 字段=null where 字段='' 如果设置为‘’,会默认1900-01-01 2.修改为空的记录 update [dbo].[pub_ite ...
- Oracle查询库中记录数大于2千万的所有表
Oracle查询库中记录数大于2千万的所有表 假如当前用户拥有select any table权限,则可以使用下列sql语句: select table_name, num_rows from dba ...
- 孤荷凌寒自学python第五十三天使用python写入和修改Firebase数据库中记录
孤荷凌寒自学python第五十三天使用python写入和修改Firebase数据库中记录 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数 ...
- Dynamics CRM 修改Excel 最大导出记录限制及 最大上传文件限制
CRM默认的Excel最大导出记录是10000条,最大上传文件限制为5m. 这样的限制可以满足少量数据的批量更新,但是如果数据量比较大的话需要修改最大的导出记录限制,和上传文件的大小,网上有的是直接修 ...
- Elasticsearch之重要核心概念(cluster(集群)、shards(分配)、replicas(索引副本)、recovery(据恢复或叫数据重新分布)、gateway(es索引的持久化存储方式)、discovery.zen(es的自动发现节点机制机制)、Transport(内部节点或集群与客户端的交互方式)、settings(修改索引库默认配置)和mappings)
Elasticsearch之重要核心概念如下: 1.cluster 代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的.es的一个概念就是 ...
- 修改so库中的依赖名
修改so库中的依赖名 在ArchLinuxArm上有一些针对aarch64, arm, armeabi-v7a等Android常用架构的so库可以下载,有时候可以省去很多编译时间,且都是编译optim ...
- 如何在vue中修改动态标签中的样式和修改组件库样式
vue中修改动态标签中的样式和修改组件库样式 因为vue中的标签在渲染的时候,都会给标签加上id 所以你想在<style lang="scss" scoped>直接修改 ...
随机推荐
- 【GUI界面软件】抖音评论采集:自动采集10000多条,含二级评论、展开评论!
目录 一.背景说明 1.1 效果演示 1.2 演示视频 1.3 软件说明 二.代码讲解 2.1 爬虫采集模块 2.2 软件界面模块 2.3 日志模块 三.获取源码及软件 一.背景说明 1.1 效果演示 ...
- 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 ...
- 🔥🔥🔥httpsok-v1.8.0 SSL证书自动续签就应该这么简单
httpsok-v1.8.0 SSL证书自动续签就应该这么简单 简介 一行命令,一分钟轻松搞定SSL证书自动续期 httpsok 是一个便捷的 HTTPS 证书自动续签工具,专为 Nginx 服务器设 ...
- 基于 three.js 加载器分别加载模型
点击查看代码 /** * 参数:模型文件路径,成功回调函数 * * 基于 three.js 加载器分别加载模型 * * 全部加载后通过回调函数传出打印 */ import { FBXLoader } ...
- AIRIOT物联网低代码平台如何配置Modbus TCP协议?
AIRIOT物联网低代码平台稳定性超高,支持上百种驱动,各种主流驱动已在大型项目中通过验证,持续稳定运行. AIRIOT物联网低代码平台如何配置Modbus TCP协议?操作如下: AIRIOT与西门 ...
- snmpwalk命令详解
snmp安装 yum -y install net-snmp-libs net-snmp net-snmp-utils 系统镜像里面就有这些包.可yum安装 snmpwalk集合 snmpwalk + ...
- docker安装MySQL8.0.35主从复制(实战保姆级)
很久没有记录了,今天有时间就记录一下最近安装遇到的问题 liunx安装docker这个是前提,就不多过述 1 准备两台服务器 10.104.13.139 10.104.13.140 2 确保liunx ...
- 深入理解 Swoole 的底层加载原理
首发原文链接:深入理解 Swoole 的底层加载原理 PHP 扩展加载 我们从 php-src/sapi/cli/php_cli.c:1159 文件的入口函数 int main(int argc, c ...
- .net core 5,6,7【多线程笔记】取消令牌(CancellationToken) CancellationTokenSource
介绍 在使用C#异步的场景,多多少少会接触到CancellationTokenSource.它和取消异步任务相关的,CancellationToken就是它生产出来的. 演示 任务取消执行回调 var ...
- uniapp 小程序分享功能
上个月在做小程序的项目时,甲方需要给小程序添加个分享的功能,查看uniapp官方文档后,发现uniapp有自带的小程序分享功能(https://uniapp.dcloud.io/api/plugins ...