1 #include "udf.h"
2 DEFINE_PROFILE(inlet_x_velocity,thread,position)
3 {
4 real x[ND_ND]; /*this will hold the position vector */
5 real y, h;
6 face_t f;
7 h=0.016; /*inlet height in m*/
8 begin_f_loop(f,thread)
9 {
10 F_CENTROID(x,f,thread);
11 y=2.*(x[1]-0.5*h)/h;/*non-dimensional y coordinate */
12 F_PROFILE(f, thread, position)= 0.1*(1.0-y*y);
13 }
14 end_f_loop(f, thread)
1 : UDF에서 사용할 함수들이 들어 있는 파일을 걸고 들어간다고 생각하시면 되겠습니다. Macro가 참조해야 될 h 파일은 메뉴얼에 보시면 반드시 나와있으니, 어떤 Macro 든지 목적에 맞게 메뉴얼을 찾아보고 쓰실 때 꼭 확인해야 합니다.
2 : Macro 이름이 DEFINE_PROFILE 입니다. 보통 경계조건에 사용되는 Macro입니다.
정의 순서는 (UDF 이름, thread, 위치) 입니다. UDF 이름은 FLUENT에서 UDF를 호출할때 보여지는 이름입니다.
정의 순서는 반드시 지켜야 합니다. 이는 메뉴얼을 보시고 Macro와 함께 사용하셔야 되요.
3: Macro의 시작
4: x[ND_ND]라는 행렬을 실수(real)로 정의했습니다. 이 행렬은 x,y,z 좌표를 호출할때 쓰신다고 생각하시면 되고
0부터 시작하는 1차원 행렬입니다. 그래서 x[0]은 x, x[1]은 y라고 보시면 되겠습니다. z는 x[2] 겟죠?
5: 실수형 변수로 y하고 h라는 이름으로 정의했네요..
6: FLUENT UDF에만 있는 변수형입니다. face를 정의한겁니다. 이름은 f
7: h라는 실수 변수에 0.016을 저장했습니다.
8: loop의 시작인데 face loop입니다. 여러분이 지정할 페이스에서 순차적으로 돌아다니며 loop를 하겠다는 말이죠.
(f, thread) : f는 그래서 위에서 정의했던 face 변수(DEFINE_PROFILE에 face를 정하지 않고 시작하기 때문에 따로 face_t를 써서 사용한거에요)와 Macro에 정의한 thread에서 loop를 한다는 말, 즉 udf를 적용한 face에서 계산한다는 것.
9: loop의 시작
10: F_CENTROID는 face의 중심으로 좌표를 옮기는 것이라고 생각하시면 됩니다.
11: y라는 변수에 face 중심으로 옮겨논 좌표중 y 값(x[1])을 이용해서 계산을 하고 설정했습니다.
12:그래서 F_PROFILE이라는 Macro를 써서 face에 값을 입력합니다. 여기서는 현재 loop하고 있는 face f와 현재 thread인 thread, 위치는 position이라는 처음 정의했던 것을 썼습니다. 즉, udf를 볼러와서 FLUENT에 적용할 경계면에 그대로 적용하라는 거죠. 왜 이러말씀을 드리냐면, thread를 다른면의 값을 읽어서 적용할 수도 있기 때문이에요.. 여기서는 처음 DEFINE macro가 사용한 thread를 그대로 썼으므로 udf가 적용된(hooking) 면에 계산해서 그대로 또 적용.
13:loop를 닫고
14:Macro를 종료
처음 시작하시는 분들을 위해 제가 아는데로 적어봤어요. 참고로만 봐주시길 바랍니다. ^^
경계조건이 velocity inlet이라면 적용한 udf는 m/s로 설정되고
pressure라면 압력값으로 들어가게 되는 거에요.
초보자들을 위한 설명:
c에서는 명령어가 끝나면 ";"으로 닫아줍니다. 함수를 정의하는 경우(loop나 if 조건문)외에는 모두 쓰셔야 하고요.
위에 나와있는 "/"는 Comment 입니다. 그래서 "/ ~~~~~~ /" 이런 방법으로 쓰는 거고
comment는 프로그램 쏘스를 보는 이들을 위한 것이지 프로그램 compile하고는 관련이 없습니다.
댓글
댓글 리스트-
작성자legend 작성시간 12.09.23 감사합니다. ^^
-
작성자너굴앙 작성시간 12.10.25 친절한 설명 감사합니다!!ㅠㅠ
-
작성자Transport phenomena 작성시간 12.12.13 막막했던 UDF사용이 조금씩 길이 보이는듯 합니다. 감사합니다.
-
작성자Game 작성시간 15.04.15 게시글 감사히 잘 읽었습니다. 몇가지 질문이 있습니다. face 중심이 아닌 다른 곳에 좌표계를 위치시키는 매크로도 있나요? 그리고 함수"h"는 inlet 의 반지름을 의미하는 것일까요? 아니면 지름을 의미하는 것일까요? 어제부터
UDF에 대해 공부하고 있는데 정말 궁금한게 한 두가지가 아니네요ㅠㅠ -
작성자박현준 작성시간 19.03.28 감사합니ㅏㄷ.