用户编码的区域配置文件

本节包含用户编码的区域配置文件示例。

假设要将速度初始化为恒定旋流状态。 可以创建一个名为 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+ 注册此用户函数。