使用用户函数
用户函数是采用编译语言(如 C、C++ 或 Fortran)编写的函数或子例程。
每个函数均可从 Simcenter STAR-CCM+ 请求参数,并且必须返回与其类型一致的结果。 用户函数的两个主要类别为:
用户函数的最常见用途是指定区域或边界上的值的分布。 示例有初始条件、边界条件和源项。 注册为标量场函数或矢量场函数的用户函数也可在同一应用中用作场函数(如可视化)。 选择用户函数而非场函数的主要原因在于功能:用户函数与场函数相比可实现更复杂的功能。
Simcenter STAR-CCM+ 还允许具有固定参数列表的特定用户函数,如用于刚性化学求解器的用户编程反应率。
为了使 Simcenter STAR-CCM+ 了解哪些参数将传递到用户函数以及期望什么类型的结果,需要使用库注册函数注册用户函数。 然后可以在对象树的工具下,在用户程序节点的用户库节点中查看可用的用户函数。
用户函数的显示名称及其类型、参数以及大小均可从库注册函数中获得。
什么是用户编程的分布?
用户编程的分布是通过用户函数实施的分布。 以下任一种都可能:
- 边界分布
- 区域分布
编译用户编程的分布并加载其库后,它即可用于用户函数的下拉列表中显示的边界和区域定义。
什么是用户编程的场函数?
用户编程的场函数是通过用户函数实施的场函数。 与所有场函数相同,用户编程的场函数可以为以下任一种:
- 标量场函数
- 矢量场函数
编译用户编程的场函数并加载其库后,就可使用它。 这种可用性与场函数的标量或矢量下拉列表中显示的任何其他场函数相同。
在并行模拟中使用用户函数
系统会向传递到用户函数的每个组分表给定一个大小,具体取决于该分区上的区域或边界的相关实体的数量。 根据分区情况,某些分区最终会具有 0 个相关实体。
切勿假设所有分区上都存在至少一个相关实体。 例如,以下程序在用于不含任何相关实体的分区中时,会导致分段故障:
// This will seg fault if the iter array is sized 0
int currentIteration = iter[0];
什么是库注册函数?
每个用户库都必须包含库注册函数 uclib(对于 C)或 uflib(对于 Fortran)。 Simcenter STAR-CCM+ 会在首次附加用户库时调用此函数。 调用此函数的目的是:
- 发现库中包含哪些用户函数
- 确定需要哪些参数
- 它们返回什么类型的结果
确保库注册函数遵循 C 模板或 Fortran 模板,方法为以这些语言编程或复制其绑定。
创建新用户函数
确保用户函数遵循 C 模板或 Fortran 模板,即采用这些语言编程或者复制其绑定。 对于库中的每个用户函数,需要将程序添加到库注册函数来注册它。 Simcenter STAR-CCM+ 对源文件中可包含的用户函数数量以及源文件名称都无限制。 一组用户函数源文件完成后,下一步即是与库注册函数一同从其创建用户库。
使用用户编程反应率
对于使用非刚性数值计算反应组分源的反应组分输运模型(如涡破碎或涡流接触微观混合模型),可以使用场函数或用户编程的场函数来指定任意反应。 但是,对于使用 ODE 求解器处理数值刚度的燃烧模型(特别是复杂化学和表面化学模型),必须使用特定的用户编程反应率函数。 这些用户函数仅用于计算反应率 — 函数签名已固定。 请参见反应系统属性。