8.1.6 사용자 정의 수식
[Note]
이 기능은 현재 베타 기능이며 향후 개발되어 배포되는 Flow360 버전에 따라 변경될 수 있습니다.
사용자 정의 표현식은 기존 정의된 솔버 변수를 사용하여, 새로운 변수를 정의하거나, 완전히 다른 해석 결과를 도출할 수 있는 강력한 도구 입니다. 사용자 정의 표현식의 주요 사용 사례는 다음과 같은 범주로 나눌 수 있습니다.
- 사용자 정의 물리 모델 - Simulate custom dynamics
- 임의의 변수 모니터링 및 분석 - Monitor and analyze custom variables
- 복잡한 초기 유동장 설정 - Initializing complex flow field
- 특별한 유동 조건 설정 - Specifying flow condition on boundaries
8.1.6.1 사용자 정의 수식을 작성하는 방법
표현식은 C 언어와 매우 유사한 구문을 따릅니다. 그러나 안전성을 위해 모든 C 언어 기능을 지원하지는 않는다는 점을 언급해야 합니다. 문장은 세미콜론으로 구분됩니다. 저희 튜토리얼에서 예제를 확인할 수 있습니다.
8.1.6.2 스칼라 함수와 연산 기호
Symbol | Mathematical operator / function |
---|---|
+ | 스칼라 덧셈 |
- | 스칼라 뺄셈 |
* | 스칼라 곱셈 |
/ | 스칼라 나눗셈 |
pow(a,b) | 기본 스칼라 a를 스칼라 b의 거듭제곱으로 |
sqrt() | 스칼라의 제곱근 |
log() | 자연 로그 |
exp() | 기본 e 지수 함수 |
sin() | 삼각 함수 |
cos() | |
tan() | |
min() | 두 값 중의 최소값 |
max() | 두 값 중의 최대값 |
ceil() | 입력값보다 큰 정수 |
floor() | 입력값보다 작은 정수 |
pi | 상수 pi = 3.14158... |
>[Caution] | |
> | |
> 사용자 정의 표현의 모든 경우에 정수 나눗셈("18/12"와 같은)은 소수 부분을 버립니다(이 경우에는 1이 됨). 이는 C 언어와 일관성을 유지합니다. 이러한 동작을 원하지 않는 경우 명시적으로 나눗셈에 최소한 하나의 실수 숫자를 사용하는 것이 좋습니다(예: "18.0/12"). |
8.1.6.3 벡터 연산자 함수
다음 함수에서 사용되는 벡터는 3개의 구성 요소를 가져야 합니다. | 함수 | 수학적 함수 | |--------------|------------------------| | subtract(C, A, B) | 벡터 뺄셈, \vec{C} = \vec{A} - \vec{B} | | cross(C, A, B) | 벡터 외적, \vec{C} = \vec{A} \times \vec{B} | | dot(A, B) | 벡터 내적, \vec{A} \cdot \vec{B} | | magnitude(A) | 벡터 길이/크기 반환 |
8.1.6.4 해석자 변수
표현식에서 사용자는 솔루션 변수와 사용자 지정 변수를 모두 사용할 수 있습니다. 솔루션 변수에는 세 가지 범주가 있습니다:
-
모든 그리드 노드에서 정의되고 특정 "소스" (예: 존 또는 패치)에 바인딩되지 않은 변수입니다.
-
전체 그리드/시뮬레이션에 고유한 변수이며 특정 "소스" (예: 존 또는 패치)에 바인딩되지 않습니다. 첫 번째 범주와 달리 이러한 변수의 값은 특정 그리드 노드와 관련이 없습니다.
-
특정 "소스"에 연관된 변수입니다. 예를 들어, CL은 표면 패치와 연관되어야 합니다. 세타는 특정 볼륨 존과 연관되어야 합니다. 사용자 정의 후처리 과정 및 사용자 정의 동역학에서 예를 확인할 수 있습니다.
[ Note]
모든 변수는 무차원입니다. Flow360에서의 비차원화에 대한 자세한 정보는 무차원 입력 및 무차원 출력에서 확인할 수 있습니다.
8.1.6.4.1 Variables that are defined on all grid nodes
모든 그리드 노드에서 정의된 변수들에 대해 다음과 같은 솔버 변수를 사용할 수 있습니다. 이러한 변수들은 값이 그리드 노드에 따라 다르기 때문에 배열로 나열됩니다. | Name | Type [component] | Note | |-------------------|-------------------|-----------------------------------------------------------------------------------------------------| | mut | Array[1] | 난류 점도 (Turbulent viscosity) | | mu | Array[1] | 정상 점도 (Laminar viscosity) | | solutionNavierStokes | Array[5] | 비관성 참조 프레임에서 보존적인 형태의 N-S 방정식에 대한 솔루션 (Solution for the N-S equation in conservative form in non-inertial reference frame) | | residualNavierStokes | Array[5] | 비관성 참조 프레임에서 보존적인 형태의 N-S 방정식에 대한 잔류 (Residual for the N-S equation in conservative form in non-inertial reference frame) | | solutionTurbulence | Array[2/1] | 난류 모델에 대한 솔루션. 구성 요소 수는 기본 난류 모델에 따라 다름 (Solution for the turbulence model. Number of component depends on underlying turbulence model) | | residualTurbulence | Array[2/1] | 난류 모델에 대한 잔류. 구성 요소 수는 기본 난류 모델에 따라 다름 (Residual for the turbulence model. Number of component depends on underlying turbulence model) | | kOmega | Array[2] | SST 모델 사용 시 효과적인 solutionTurbulence (Effectively solutionTurbulence when using SST model) | | nuHat | Array[1] | SA 모델 사용 시 효과적인 solutionTurbulence (Effectively solutionTurbulence when using SA model) | | solutionTransition | Array[2] | 전이 모델에 대한 솔루션 (Solution for the transition model) | | residualTransition | Array[2] | 전이 모델에 대한 잔류 (Residual for the transition model) | | solutionHeatSolver | Array[1] | 열 방정식에 대한 솔루션 (Solution for the heat equation) | | residualHeatSolver | Array[1] | 열 방정식에 대한 잔류 (Residual for the heat equation) | | coordinate | Array[3] | 지구 좌표계에서의 노드 좌표 (Nodal coordinates in earth system) | | primitiveVars | Array[5] | 밀도, 3속도 및 압력 (density, 3 velocities and pressure) |
8.1.6.4.2 Simulation wise variables
두 번째 카테고리인 경우, 다음과 같은 솔버 변수들을 사용할 수 있습니다. 이 변수들은 전체 그리드/시뮬레이션에서 고유한 값이 있으므로 스칼라로 나열됩니다. | Name | Type[component] | Note | |--------------------|------------------|---------------------------------------------------------------------------------------------| | MachRef | Scalar | 사용자가 freestream에서 지정한 MachRef | | muRef | Scalar | 사용자가 freestream에서 지정한 muRef | | Tref | Scalar | 사용자가 freestream에서 지정한 온도 | | t | Scalar | 물리적 시간 | | physicalStep | Scalar | 0부터 시작하는 물리적 시간 단계 | | pseudoStep | Scalar | 0부터 시작하는 물리적 시간 단계 내의 가상 시간 단계 | | timeStepSize | Scalar | 물리적 시간 단계 크기 | | alphaAngle | Scalar | 사용자가 freestream에서 지정한 alphaAngle | | betaAngle | Scalar | 사용자가 freestream에서 지정한 betaAngle | | pressureFreestream | Scalar | Freestream 참조 압력. 1.0 / 1.4의 상수 값이 있음 | | momentLengthX | Scalar | 사용자가 지오메트리에서 지정한 momentLength의 X 구성 요소 | | momentLengthY | Scalar | 사용자가 지오메트리에서 지정한 momentLength의 Y 구성 요소 | | momentLengthZ | Scalar | 사용자가 지오메트리에서 지정한 momentLength의 Z 구성 요소 | | momentCenterX | Scalar | 사용자가 지오메트리에서 지정한 momentCenter의 X 구성 요소 | | momentCenterY | Scalar | 사용자가 지오메트리에서 지정한 momentCenter의 Y 구성 요소 | | momentCenterZ | Scalar | 사용자가 지오메트리에서 지정한 momentCenter의 Z 구성 요소 |
8.1.6.4.3 Zone or patch associated variables
특정 존 또는 패치와 관련된 변수에 대한 경우 다음과 같은 솔버 변수를 사용할 수 있습니다. bet_thrust, bet_torque 및 bet_omega에 대해서는 사용자가 bet 디스크의 인덱스를 변수 이름에 추가할 수 있습니다. 예를 들어 bet_0_thrust는 첫 번째 bet 디스크의 추력을 나타냅니다.
[Note]
힘 (forceX/Y/Z) 및 모멘트 (momentX/Y/Z)는 힘/모멘트 계수 (예: CL, CMy)와 구별되어야 합니다. 힘과 모멘트는 힘/모멘트 계수의 분자입니다.
여기에 나열된 모든 변수들은 범용 변수에도 동일한 정의가 있습니다. 해당 기능이 활성화되어 있지 않으면 일부 변수를 사용할 수 없습니다. 예를 들어 solutionTransition은 전이 모델을 사용하지 않는 경우 사용할 수 없습니다.
Name | Type[component] | Source type | Note |
---|---|---|---|
bet_thrust | Scalar | BET Disk ID | BET 디스크의 추력 |
bet_torque | Scalar | BET Disk ID | BET 디스크의 토크 |
bet_omega | Scalar | BET Disk ID | BET 디스크의 회전 속도 |
CD | Scalar | Patch name | patch의 마찰 계수 |
CL | Scalar | Patch name | patch의 양력 계수 |
forceX | Scalar | Patch name | X 방향 patch에 대한 총 힘 |
forceY | Scalar | Patch name | Y 방향 patch에 대한 총 힘 |
forceZ | Scalar | Patch name | Z 방향 patch에 대한 총 힘 |
momentX | Scalar | Patch name | X 방향 momentCenter에 대한 patch의 총 모멘트 |
momentY | Scalar | Patch name | Y 방향 momentCenter에 대한 patch의 총 모멘트 |
momentZ | Scalar | Patch name | Z 방향 momentCenter에 대한 patch의 총 모멘트 |
nodeNormals | Array[3] | Patch name | patch의 법선 벡터. 그 크기는 노드에 연결된 면적입니다. |
theta | Scalar | Zone name | volume zone의 회전 각도(라디안) |
omega | Scalar | Zone name | volume zone의 회전 속도 |
omegaDot | Scalar | Zone name | volume zone의 회전 가속도 |
wallFunctionMetric | Array[1] | Patch name | (베타 기능): 이 메트릭은 벽 모델의 품질에 대한 지역적인 지표입니다. 1.25보다 작은 값은 벽 전단 응력의 좋은 추정을 나타냅니다. 1.25 ~ 10은 낮은 신뢰도를 나타내며, 10보다 큰 값은 벽 전단 응력의 추정에 신뢰할 수 없습니다. |
wallShearStress | Array[3] | Patch name | 패치에서의 벽 점성 전단 응력(X, Y 및 Z) |
yPlus | Array[1] | Patch name | 무차원화 벽단위 거리 Y+, patch에 대해 |
Source 형식에 대한 설명 * BET 디스크 ID: 이는 케이스 JSON에 나타나는 BET 디스크의 인덱스 또는 위치입니다. 0부터 시작합니다.
-
Patch 이름: 메시 파일에서 정의된 패치의 이름입니다.
-
Zone 이름: 메시 파일에서 정의된 부피 존의 이름입니다.