用户编码的区域配置文件
本节包含用户编码的区域配置文件示例。
假设要将速度初始化为恒定旋流状态。 可以创建一个名为 initVelocity 的用户函数,将形心作为参数并返回这些形心位置处的速度矢量。
在 C 中,使用 uclib.h 文件,可以在文件 initVelocity.c 中对以下内容进行编码:
#include "uclib.h"
/* Initial velocity based on uniform swirl */
void USERFUNCTION_EXPORT
initVelocity(Real (*result)[3], int size, CoordReal (*centroid)[3])
{
/* Angular velocity and origin of rotation */
CoordReal omega[3] = {0.0, 0.0, 100.0};
CoordReal origin[3] = {0.0, 0.0, 0.0};
CoordReal dr[3];
int i;
/* Loop through all entities applying u = omega x (centroid - origin) */
for (i = 0; i != size; ++i)
{
dr[0] = centroid[i][0] - origin[0];
dr[1] = centroid[i][1] - origin[1];
dr[2] = centroid[i][2] - origin[2];
result[i][0] = (Real)(omega[1]*dr[2] - omega[2]*dr[1]);
result[i][1] = (Real)(omega[2]*dr[0] - omega[0]*dr[2]);
result[i][2] = (Real)(omega[0]*dr[1] - omega[1]*dr[0]);
}
}
使用 StarReal.f 文件,Fortran 90 中的等效文件可以是文件 initVelocity.f:
C Initial velocity based on uniform swirl
subroutine initVelocity(result,size,centroid)
use StarRealMod
implicit none
integer, intent(in) :: size
real(StarReal), intent(out) :: result(3,size)
real(CoordReal), intent(in) :: centroid(3,*)
integer i
real(CoordReal) dr(3)
C Angular velocity and origin of rotation
real(CoordReal), parameter :: omega(3) = (/0.0,0.0,100.0/)
real(CoordReal), parameter :: origin(3) = (/0.0,0.0,0.0/)
C Loop through all entities applying u = omega x (centroid - origin)
do i = 1,size
dr(1) = centroid(1,i) - origin(1)
dr(2) = centroid(2,i) - origin(2)
dr(3) = centroid(3,i) - origin(3)
result(1,i) = omega(2)*dr(3) - omega(3)*dr(2)
result(2,i) = omega(3)*dr(1) - omega(1)*dr(3)
result(3,i) = omega(1)*dr(2) - omega(2)*dr(1)
end do
return
end
然后,可以向 Simcenter STAR-CCM+ 注册此用户函数。