콘텐츠로 이동

1.3 파이썬 API를 이용한 ONERA M6 Wing 해석

quickstart • 2024.08.16 • 박정규

원본: PythonAPI_ONERAM6

Flow360은 파이썬 API를 이용하여 클라우드 자원에 접근할 수 있는 기능을 제공합니다. 이 기능은 다음과 같은 상황에 매우 유용합니다.

  • On-premise 사용자가 보유한 전산자원(HW) 보다 대형 문제를 해결할 필요가 있을 때
  • 별도의 사용자 정의 함수 (UDF; User Defined Function)를 사용하여 CFD 해석을 자동화 할 때

안내

여기에 제시된 내용은 Python 언어를 다룰 수 있는 사용자를 대상으로 합니다. Python 언어 사용법에 대한 내용은 다루지 않습니다. Python은 자연과학, 공학, 컴퓨터과학에서 널리 사용되는 프로그래밍 언어이며, 배우기 매우 쉽습니다.

1.3.1 사전 준비 사항

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')
mesh_id에는 사용자가 업로드한 격자 파일의 ID를 입력하여야 합니다. 격자를 업로드 할 때 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)의 volumeOuputsurfaceOuput 항목에서 결과파일 포맷과 출력할 변수를 지정할 수 있습니다. 다운로드한 후에는 이러한 출력 파일을 Tecplot 또는 ParaView에서 후처리할 수 있습니다. volumeOutput 및 surfaceOutput 섹션에 있는 "Flow360.json" 파일에서 내보내기 형식을 지정할 수 있습니다.

솔버 모니터링 데이터를 다운로드하려면 아래의 명령을 사용하세요.

flow360client.case.DownloadSolverOut('case_Id', fileName='flow360_case.user.log')

다음 아래의 명령을 사용하면 residual, 공력계수 등을 다운로드할 수 있습니다.

flow360client.case.DownloadResultsFile('case_Id', 'fileName.csv')
caseId를 해석 케이스의 ID로, fileName을 각각 nonlinear_residual, surface_forces 또는 total_forces로 변경하면 각 filename에 해당하는 모니터링 데이터를 다운로드 할 수 있습니다.