查手册可知,ND是一个宏系列,包括了ND_ND,ND_SUM,ND_SET
ND_ND的定义:
对于2D,即RP_2D(也是一个宏名称),值为2;
对于3D,即RP_3D(也是一个宏名称),值为3;
用这个宏可以让你的UDF程序更有通用性,2D,3D模型不用修改,可通用
举例
real A[ND_ND][ND_ND] 对于2D,实际值为real A[2][2] ,22的矩阵
real A[ND_ND][ND_ND] 对于3D,实际值为real A[3][3] ,33的矩阵
real x[ND_ND] 对于2D,实际值为real x[2] ,2个值的数组
real x[ND_ND] 对于3D,实际值为real x[3] ,3个值的数组
背景
在上一篇推文中,我们介绍了 MySQL Group Replication 8016 支持信息碎片化功能来增强大型事务处理能力。
如果您想在组复制中使用该功能,则任何组成员的版本都不能低于 8016!
简单地说就是由于低版本协议上不支持。MySQL 8016 的组通讯开始支持新协议,简称“分段协议”,之前的版本中只有一种“压缩协议”。
如果多个成员想加入复制组,那么在协议匹配上遵循以下原则:
现有复制组成员和新加入成员版本相同,加入成功。
低版本成员想加入高版本的组会被驱逐,加入失败。
高版本的成员想加入低版本的组,单独加入成功,多个加入失败。
例如:
一个 MySQL Server 8016 实例可以成功加入使用通信协议版本 5724 的组。
一个 MySQL Server 5724 实例无法成功加入使用通信协议版本 8016 的组。
两个 MySQL Server 8016 实例无法同时加入使用通信协议版本 5724 的组。
两个 MySQL Server 8016 实例可以同时加入使用通信协议版本 8016 的组。
新增 UDF
为了能让高版本的复制组更便于加入低版本的成员,MySQL 8016 新增两个 UDF。
您可以使用两个新的 UDF 命令去管理组通信协议:
1 group_replication_set_communication_protocol(new_protocol)
设置组复制通讯协议版本
SELECT group_replication_set_communication_protocol("8015");
填入一个所有成员都支持的版本号,即:new_protocol ≤ 所有成员的 MySQL版本。
new_protocol 格式:majorminorpatch (主版本号次版本号发布版本号)例如:8015。
2 group_replication_get_communication_protocol()
获取复制中最旧成员的 MySQL 版本号
SELECT group_replication_get_communication_protocol(); +------------------------------------------------+ | group_replication_get_communication_protocol() | +------------------------------------------------+ | 5714 | +------------------------------------------------+
获取的版本号可能与设置的值不一致,但不一致的版本之间组复制协议是一样的。
返回结果格式:majorminorpatch (主版本号次版本号发布版本号)例如:8015。
以上两个 UDF 对全部组成员有效,主机或从机上均可执行。
结论
若想使用信息碎片功能。建议将组复制成员全部升级为 8016。
若组内成员版本仅有部分为 8016,可以用两个新的函数来让高版本的成员保持与其它成员组协议一致。
下面有些路径是根据我自己的程序安装路径。1)set environment variables for Fluent, C++, Fortran;//设置FLUENT,c++,Fortran的环境变量;2)put sorce code file into \src folder, put compiled fortran obj files into \ntx86\2d folder, copy sedexe, user_ntudf and makefile_ntudf to the same folder as compiled fortran obj files; (this two folders are created by yourself, you can put them under your case folder)将源文件代码放入\src文件夹下,将编译之后的fortran的obj文件放在路径为···\ntx86\2d的文件夹下,复制文件sedexe,user_ntudf和makefile_ntudf文件到路径为···\ntx86\2d的文件夹下(这两个是自己创建的,你可以放它们在你的case文件夹下)。3)modify user_ntudf file {follow the instructions eg USER_OBJECTS = testobj this obj file is the complied fortran obj file ,SOURCES = $(SRC)test_usec(c source file that is in the \src fold), VERSION = 2d(your model dimension), PARALLEL_NODE = none;按下面的方法修改user_ntudf文件:USER_OBJECTS = testobj // test是你编译之后的fortran程序文件名;SOURCES = $(SRC)test_usec(text_usec是你放入\src文件下的c程序的源码文件) ;VERSION = 2d //为你模型的维数。PARALLEL_NODE = none; //是否并行计算,一般选择不并行计算。4)change the name of file makefile_ntudf tomakefile, modify makefile, (add this line "FLUENT_INC= D:\FluentInc" below "UDFDATA = udf_namesc";改变makefile_ntudf的文件名为:makefile;并且添加在UDFDATA = udf_namesc这行后面添加FLUENT_INC= D:\FluentInc; 5)You might need to copy all the lib files under Fortran\lib fold to folder D:\FluentInc\fluent6326\ntx86\Fortran_lib (this folder is created by myself) change this line "LIBS = /Libpath:$(FLUENT_INC)\fluent$(RELEASE)\$(FLUENT_ARCH)\$(VERSION)" in the makefile file to "LIBS = /Libpath:$(FLUENT_INC)\fluent$(RELEASE)\$(FLUENT_ARCH)\$(VERSION)D:\FluentInc\fluent6326\ntx86\Fortran_lib\lib"你需要复制fortran的库文件到fluent的安装文件D:\FluentInc\fluent6326\ntx86\Fortran_lib(其中Fortran_lib为自己创建的文件名);并且改变makefile文件中的行LIBS = /Libpath:$(FLUENT_INC)\fluent$(RELEASE)\$(FLUENT_ARCH)\$(VERSION)为LIBS = /Libpath:$(FLUENT_INC)\fluent$(RELEASE)\$(FLUENT_ARCH)\$(VERSION)6)Type "nmake" in the command line console, make sure the console is displaying the right path that is including your files such as: "makefile","obj","sedexe"在编译之后,确保在fluent的界面中出现,文件"makefile","obj","sedexe"的正确路径。7)Put the generated dll file with your cas and data files together连接你的dll文件和你的case文件和date文件一起。
Pandas_udf结果无法写入表是一个比较常见的问题,原因可能有很多。首先,您可以检查您的表是否存在,如果不存在,您可以尝试创建表。其次,您可以检查您的pandas_udf函数是否正确,如果不正确,您可以尝试重新定义函数。最后,您可以检查您的表结构是否与pandas_udf结果匹配,如果不匹配,您可以尝试修改表结构。总之,您可以通过以上几个步骤来解决pandas_udf结果无法写入表的问题。
多核版本Fluent,可以读取单核版本的cas文件。你可以将编译好UDF的case保存,再次打开并行版本的Fluent打开case,这时候系统会自动在每个节点下面生成udfconfig-hosth的头文件,这里的号对应节点编号,一般是从0开始的。例如,你选用了12个节点,就会生成udfconfig-host0h到udfconfig-host12h,这12个用于并行调用的程序。
以上就是关于请教关于FLUENT中UDF的问题全部的内容,包括:请教关于FLUENT中UDF的问题、mysql udf函数怎么调用、如何在UDF中调用fortran子程序(整理网上资料)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)