ANSYS CFX의 Cel에서 Recursive Problem 해결 방법을 알려드립니다.
Cel의 Full name은 CFX Expression Language이며, CFX는 Cel의 기능이 강력하기 때문에 User Fortran과 같은 외부 code를 작성하지 않아도 대부분의 수식 및 소스항의 처리가 가능합니다. 그러나 CEL을 사용할 때 가장 아쉬운 점이 재귀적 문제(recursive problem)를 처리할 수 없다는 점이 있습니다.
재귀적 문제는 A=A+1 과 같이 자기 자신에 어떤 조치를 취하는 문제로 Fortran 등에서는 쉽게 처리할 수 있지만 CEL에서는 이와 같은 수식을 작성하는 solving 단계에서 에러가 발생하기도 합니다.
이런 재귀적 문제는 경계조건을 처리할 때도 발생할 수 있는데, 만일 입구 경계조건의 압력을 밀도를 이용한 CEL 수식으로 처리하는 경우 압축성 유동에서는 밀도가 압력과 연계되어 있으므로 결국에는 재귀적 문제가 발생하여 에러가 발생합니다. 이런 문제를 해결하는 방법으로 함수를 쓰는 방법이 있습니다.
즉 density를 CEL 수식에 바로 사용하지 않고 “areaAve(density)@과 같은 형태로 CEL에서 제공하는 평균함수 등을 사용하면 간단히 해결되는 경우도 있습니다.
하지만 이런 요령이 항상 적용되는 것은 아니며 때에 따라서는 areaAve() 같은 평균값을 사용하지 않고 격자점 마다의 원래 값을 사용하고자 하는 경우에는 사용할 수 없는 요령입니다.
CEL에서 이와 같은 무한 루프의 문제를 해결 방법으로 어떤 additional scalar값이 사용하고자 하는 variable 의 값과 같은 값을 갖게 하여 문제를 피하는 방법이 있습니다.
즉, 임의의 additional scalar variable을 만든 후 이 additional variable 에 사용하고자 하는 variable 의 값을 sub domain의 source 처리 기법을 이용하여 복사하는 것입니다.
위에서 언급한 density를 어떤 함수에 사용하고자 하는데 재귀적 문제가 발생할 경우 아래와 같이 새로 생성한 scalar에 sub domain 에서 density값을 복사한 다음 CEL수식에서는 scalar 값을 이용하여 해결할 수 있습니다.
아래와 같이 CoypOfDensity라는 scalar variable을 생성한 후
ADDITIONAL VARIABLE : CopyOfDensity
Option = Definition
Tensor Type = SCALAR
Units = [kg m^-3]
Variable Type = Specific
END
sub domain 의 source 처리 기법을 이용하여 아래와 같이 CopyOfDensity 가 density의 값을 복사해 가지도록 하는 것입니다.
SUBDOMAIN: Subdomain 1
Coord Frame = Coord 0
Location =
SOURCES:EQUATION SOURCE: CopyOfDensity
Option = Source
Source = (Density CopyOfDensity) * 1000 [kg m^ 3 s^ 1]
Source Coefficient = 1000 [kg m^ 3 s^ 1]
END
위와 같은 방법을 Fluid Age를 구하는 static mixer의 예제에 적용하여 Age와 Copy Of Age를 비교한 결과를 아래의 그림으로 나타내었습니다.
최소값이 다소 차이가 있지만, 최대값과 범위가 거의 동일함을 확인할 수 있습니다.
Scalar 값을 비교하기 위해서는 control volume의 값을 가지는 conservative value로 비교하여야 한다는 점에 주의를 기울여야 합니다.
계산된 Age 값의 분포와 복사 된 Copy of Age 값의 분포 비교
감사합니다.