用户编码的场函数
本节提供用户编码的场函数示例。
假设要将 Sutherland 粘度定律定义为场函数。 定义此场函数意味着可以可视化给定温度场的 Sutherland 粘度,而无需将其应用为相关区域中的动力粘度。 该定律简单到足以作为用户场函数实施,但在这里可以看到它如何作为用户函数实施。 该函数可称为 sutherlandViscosity,将温度作为参数并返回粘度。
在 C 中,使用 uclib.h 文件,可以在文件 sutherlandViscosity.c 中对以下内容进行编码:
#include <math.h>
#include "uclib.h"
/* Dynamic viscosity based on Sutherland's law */
void USERFUNCTION_EXPORT
sutherlandViscosity(Real *result, int size, Real *T)
{
/* Reference viscosity, Sutherland constant and reference temperature */
Real v0 = 1.716E-5;
Real Cs = 110.0;
Real T0 = 273.15;
int i;
/* Loop through all entities applying Sutherland's law */
for (i = 0; i != size; ++i)
{
result[i] = v0 * pow(T[i]/T0, 1.5) * (T0 + Cs)/(T[i] + Cs);
}
}
使用 StarReal.f 文件,Fortran 90 中的等效文件可以是文件 sutherlandViscosity.f:
C Dynamic viscosity based on Sutherland's law
subroutine sutherlandViscosity(result,size,T)
use StarRealMod
implicit none
integer, intent(in) :: size
real(StarReal), intent(out) :: result(size)
real(StarReal), intent(in) :: T(*)
integer i
C Reference viscosity, Sutherland constant and reference temperature
real(StarReal), parameter :: v0 = 1.716E-5
real(StarReal), parameter :: Cs = 110.0
real(StarReal), parameter :: T0 = 273.15
C Loop through all entities applying Sutherland's law
do i = 1,size
result(i) = v0 * (T(i)/T0)**1.5 * (T0 + Cs)/(T(i) + Cs)
end do
return
end
然后,可以向 Simcenter STAR-CCM+ 注册此用户函数。