1.3 파이썬 API를 이용한 ONERA M6 Wing 해석
quickstart • 2024.08.16 • 박정규
Flow360은 파이썬 API를 이용하여 클라우드 자원에 접근할 수 있는 기능을 제공합니다. 이 기능은 다음과 같은 상황에 매우 유용합니다.
- On-premise 사용자가 보유한 전산자원(HW) 보다 대형 문제를 해결할 필요가 있을 때
- 별도의 사용자 정의 함수 (UDF; User Defined Function)를 사용하여 CFD 해석을 자동화 할 때
안내
여기에 제시된 내용은 Python 언어를 다룰 수 있는 사용자를 대상으로 합니다. Python 언어 사용법에 대한 내용은 다루지 않습니다. Python은 자연과학, 공학, 컴퓨터과학에서 널리 사용되는 프로그래밍 언어이며, 배우기 매우 쉽습니다.
1.3.1 사전 준비 사항
-
ONERA M6 격자 파일 준비 다운로드
1.3.2 Python API 설치 및 격자 업로드
Flow360 Python API를 사용하기 위해서는 먼저 Python 클라이언트를 설치해야 합니다. 설치에 관한 자세한 사항 및 API 명세서는 이 설명서의 Python API 레퍼런스을 참조하세요.
1.3.2.1 파이썬 클라이언트 설치
파이썬 클라이언트는 아래 명령어를 이용하여 설치할 수 있습니다.
pip3 install flow360client
pip3 install --upgrade flow360client
1.3.2.2 격자 업로드
메쉬를 업로드하고 케이스를 실행하려면 Python 인터프리터를 열고 Flow360 클라이언트를 가져와야 합니다.
python3
import flow360client
1.3.2.3 경계조건 설정
파이썬 API에서는 먼저 no-slip wall에 대한 경계조건을 설정해야 합니다. 방법은 세 가지가 있습니다.
방법 1
. 아래와 같이 noSlipWalls 인수에 직접 값을 입력하여 no-slip 경계조건에 해당하는 boundary의 id를 설정할 수 있습니다.
noSlipWalls = [1]
방법 2
. Ugrid 포맷의 “mapbc” 파일을 사용하여 no-slip 경계 조건을 설정할 수 있습니다.
noSlipWalls = flow360client.noSlipWallsFromMapbc('/path/to/fname.mapbc')
방법 3
.meshjson
파일을 사용하는 방법
import json
meshJson = json.load(open('/path/to/Flow360Mesh.json'))
이 문서에서 사용한 ONERA M6 Wing 격자의 meshjson
은 아래와 같습니다.
{
"boundaries" :
{
"noSlipWalls" : [1]
}
}
1.3.2.4 격자 업로드
방법1
또는 방법2
를 사용하는 경우, 다음 명령을 사용하여 격자를 업로드 할 수 있습니다.
meshId = flow360client.NewMesh(fname='/path/to/mesh.lb8.ugrid',
noSlipWalls=noSlipWalls,
meshName='my_nice_mesh_name',
tags=[],
endianness='little'
)
방법3
을 사용하는 경우에는 아래 명령을 사용하여 격자를 업로드 할 수 있습니다.
meshId = flow360client.NewMesh(fname='/path/to/mesh.lb8.ugrid',
meshJson=meshJson,
meshName='my_nice_mesh_name',
tags=[],
endianness='little'
)
안내사항
fname
또는 meshname
에 공백 또는 한글을 사용하면 오류가 발생할 수 있습니다. 클루 및 FlexCompute 팀은 다국어가 지원될 수 있도록 지속적인 노력을 하고 있습니다.
참고 meshName 및 tags에 대한 입력은 선택사항입니다.
"*.lb8.ugrid" (little-endian 형식) 또는 " *.b8.ugrid" (big-endian 형식) 형식의 메쉬 파일 이름을 사용하는 경우 endianness 인수는 선택 사항입니다.
그러나 " *.lb8." 또는 " *.b8."를 사용하지 않고 메쉬 파일 이름을 사용하려는 경우 NewMesh에서 endianness ('little' 또는 'big')를 적절히 지정해야 합니다. 엔디안에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
지원되는 메쉬 파일 형식은 ".ugrid", ".cgns" 및 그들의 ".gz" 및 ".bz2" 압축입니다. 메쉬 상태는 다음을 사용하여 확인할 수 있습니다.
1.3.2.5 격자 정보 확인
업로드 한 격자 정보는 아래의 명령을 이용해 확인할 수 있습니다.
## to list all your mesh files
flow360client.mesh.ListMeshes()
## to view a particular mesh
flow360client.mesh.GetMeshInfo('mesh_Id')
1.3.3 해석 실행
해석 실행에 앞서 해석 케이스 구성을 하여야 합니다. 이 예제의 경우 아래의 구성을 상용할 수 있습니다. 그러나 사용자가 직접 생성한 모델을 사용한다면, geometry
를 비롯한 freestream
등, 사용자가 해석하고자 하는 문제에 적합하도록 모든 매개변수의 값이 적절하게 수정되어야 합니다.
1{
2 "geometry" : {
3 "refArea" : 1.15315084119231,
4 "momentCenter" : [0.0, 0.0, 0.0],
5 "momentLength" : [1.47602, 0.801672958512342, 1.47602]
6 },
7 "volumeOutput" : {
8 "outputFormat" : "paraview",
9 "animationFrequency" : -1,
10 "outputFields": ["primitiveVars", "Mach"]
11 },
12 "surfaceOutput" : {
13 "outputFormat" : "paraview",
14 "animationFrequency" : -1,
15 "outputFields": ["primitiveVars", "Cp", "Cf"]
16 },
17 "navierStokesSolver" : {
18 "absoluteTolerance" : 1e-10,
19 "kappaMUSCL" : -1.0
20 },
21 "turbulenceModelSolver" : {
22 "modelType" : "SpalartAllmaras",
23 "absoluteTolerance" : 1e-8
24 },
25 "freestream" :
26 {
27 "Reynolds" : 14.6e6,
28 "Mach" : 0.84,
29 "Temperature" : 288.15,
30 "alphaAngle" : 3.06,
31 "betaAngle" : 0.0
32 },
33 "boundaries" : {
34 "1" : {
35 "type" : "NoSlipWall",
36 "name" : "wing"
37 },
38 "2" : {
39 "type" : "SlipWall",
40 "name" : "symmetry"
41 },
42 "3" : {
43 "type" : "Freestream",
44 "name" : "freestream"
45 }
46 },
47 "timeStepping" : {
48 "maxPseudoSteps" : 500,
49 "CFL" : {
50 "initial" : 5,
51 "final": 200,
52 "rampSteps" : 40
53 }
54 }
55}
주어진 ONERA M6 Wing 격자를 사용한다면, JSON 구성 파일을 사용하여 다음 명령을 사용하여 해석을 실행할 수 있습니다.
caseId = flow360client.NewCase(meshId='mesh_Id',
config='/output/path/for/Flow360.json',
caseName='my_case_name',
tags=[]
)
참고: caseName 및 tags에 대한 인수는 선택 사항입니다. 그러나 향후 해석 케이스에 대한 추적과 관리를 위해 입력하는 것을 권장합니다.
해석 진행 상태는 다음 명령을 사용하여 확인할 수 있습니다.
## to list all your cases
flow360client.case.ListCases()
## to view a particular case
flow360client.case.GetCaseInfo('case_Id')
mesh_id에는 사용자가 업로드한 격자 파일의 ID가 입력되어야 합니다.
1.3.4 격자 혹은 해석 Case 삭제
다음 명령을 사용하여 업로드된 메쉬 또는 해석 케이스를 삭제할 수 있습니다.
주의: 케이스 및 메쉬 파일 (결과 포함)은 삭제 후에는 복구할 수 없습니다.
## Delete a mesh
flow360client.mesh.DeleteMesh('mesh_Id')
## Delete a case
flow360client.case.DeleteCase('case_Id')
1.3.5 해석 결과 다운로드
해석이 완료되면 아래의 명령을 이용하여, 사용자가 지정한 post-processor에 맞춰 출력된 결과 파일을 다운로드 할 수 있습니다. 또한 surface data와 volume data를 각각 다운로드 받을 수 있습니다.
flow360client.case.DownloadSurfaceResults('case_Id', 'surfaces.tar.gz')
flow360client.case.DownloadVolumetricResults('case_Id', 'volume.tar.gz')
출력파일
Solver 설정 파일(여기서는 flow360.json
)의 volumeOuput
과 surfaceOuput
항목에서 결과파일 포맷과 출력할 변수를 지정할 수 있습니다. 다운로드한 후에는 이러한 출력 파일을 Tecplot 또는 ParaView에서 후처리할 수 있습니다. volumeOutput 및 surfaceOutput 섹션에 있는 "Flow360.json" 파일에서 내보내기 형식을 지정할 수 있습니다.
솔버 모니터링 데이터를 다운로드하려면 아래의 명령을 사용하세요.
flow360client.case.DownloadSolverOut('case_Id', fileName='flow360_case.user.log')
다음 아래의 명령을 사용하면 residual, 공력계수 등을 다운로드할 수 있습니다.
flow360client.case.DownloadResultsFile('case_Id', 'fileName.csv')
fileName
을 각각 nonlinear_residual
, surface_forces
또는 total_forces
로 변경하면 각 filename에 해당하는 모니터링 데이터를 다운로드 할 수 있습니다.