콘텐츠로 이동

7.4. XV-15 로터를 사용한 Blade Element Theory

해석사례 • 2024.10.01 • 조낙원

이 예제는 격자 생성부터 입력 파일 설정, 모니터링 및 결과 후처리에 이르기까지 각 단계에 대한 Blade Element Theory(BET) 해석에 대한 가이드라인을 제공하기 위해 작성되었습니다. BET 적용을 위한 자세한 설명은 주요 기능Knowledge Base를 참고해 주세요.

이 예제에서 사용되는 예시는 형상 회전 해석 및 BET 해석 사례를 위한 Sliding Interface 예제에도 사용되는 XV-15 로터 블레이드 입니다. 본 예제에서는 ONERA M6 날개 모델에 대한 Quick Start에서 수행하는 것과 매우 유사한 간단한 날개를 생성할 것 입니다. 자동화된 격자 생성 도구를 사용하여 격자를 생성할 것이며, 이 예제에서 사용된 구성은 Fig.7.4.1과 함께 뒷에서 바라본 Fig.7.4.5, 옆에서 바라본 Fig.7.4.6에 나와 있습니다.


Fig. 7.4.1 Mach 수로 색을 나타낸 Q-criterion을 사용하여 BET 예제 모델 시각화 결과


이 예제는 정상 상태 BET 디스크 해석에 대해 다루지만, 대부분은 설명은 비정상 상태 BET 라인 해석에도 적용할 수 있습니다.


7.4.1 전처리

예제의 첫 번째 단계에서는 형상 및 격자 생성을 수행합니다. 형상 모델은 내장된 CAD 모델링 도구인 Engineering Sketch Pad, ESP을 사용합니다. 표면 및 체적 격자 매개변수 입력 파일은 아래에서 설명합니다.

사용할 기본 날개 모델 CAD 생성을 위한 ESP 파일은 BET_tutorial_wing.csm을 다운로드하여 사용합니다.

격자는 수많은 격자 생성 소프트웨어를 사용하여 수동으로 생성할 수도 있지만, 본 예제에서는 CSM 파일에서 ESP CAD 모델을 입력으로 받는 자동화된 격자 생성 도구를 사용합니다. 자동화된 격자 생성 프레임워크를 사용하려면 해석에 적어도 하나의 no-slip 경계면이 있어야 하며, 이 경계면은 BET 디스크 영역을 통과하지 않아야 합니다. 이는 단일 로터 해석의 경우 허브일 수도 있고, 날개, 꼬리 등과 같은 다른 비행체 요소일 수도 있습니다.

BET 해석을 위한 격자 생성 모범 사례 및 권장 사항에 대해서는 Knowledge Base를 참조하세요.

이 예제에서 사용되는 격자 단위는 미터 입니다. 첫 번째 단계는 체적 격자 영역 내에 BET 디스크가 배치될 위치에 조밀화 영역의 범위와 간격을 정의하는 것 입니다. XV-15 로터 블레이드는 반경이 3.81 m이며, 블레이드 root는 반경 0.3429 m에 위치합니다. 따라서 앞서 언급한 권장 사항을 따르며, 로터 디스크 조밀화 영역은 다음의 크기를 가져야 합니다:

  • 반경 방향에 대해서는 조밀화 영역이 디스크 중심에서 시작해 로터 디스크 반경의 1.1배를 넘는 약 4.25m까지 확장되도록 설정합니다.
  • 축 방향(두께)에 대해서는 로터 반경의 10% ~ 15% 사이의 값을 선택해야 하며, 해석에서 실제 BET 디스크 두께를 로터 반경의 12%로 선택했습니다. 조밀화 영역이 BET 디스크보다 약간 더 커야 하므로, 조밀화 영역 두께를 로터 반경의 16%로 가정합니다. 따라서 조밀화 영역은 x 축 방향에 대해 3.81m(XV-15 로터 블레이드 반경) * 16% = 0.6m 두께를 갖습니다.
  • BET 디스크 두께에 최소 20개의 노드를 확보하려면 격자 간격은 0.02로 설정되어야 합니다. 이는 조밀화 영역에서 약 30개의 노드를 생성합니다.
  • 좋은 종횡비를 유지하기 위해 반경 방향의 간격을 0.03으로 설정합니다. 조밀화 영역에 약 4.25m(로터 디스크 반경의 1.1배)/0.03 = 142개의 노드가 생성됩니다.
  • 원주 방향으로는 0.06의 간격을 사용하여 둘레를 따라 약 445개의 노드를 배치합니다.
  • 허브는 BET/AD 공식내에서 구현됩니다. 이는 극좌표와 블레이드 형상을 프로펠러 중심인 r=0 까지 정의하는 것을 의미합니다.

체적 격자 입력 JSON 파일의 "rotorDisks" 섹션 결과는 아래와 같습니다:

 1{
 2    "rotorDisks": [
 3     {
 4         "name": "BET_Disk",
 5         "innerRadius": 0,
 6         "outerRadius": 4.25,
 7         "thickness": 0.6,
 8         "axisThrust": [1, 0, 0],
 9         "center": [-2, 5.0, 0],
10         "spacingAxial": 0.02,
11         "spacingRadial": 0.03,
12         "spacingCircumferential": 0.06
13     }
14    ]
15}


자동화 도구(automated tool chain)를 사용하여 형상과 격자를 생성합니다. 이를 위해 위에서 다운로드 한 BET_tutorial_wing.csm 입력 파일을 사용합니다. 그리고 BET_tutorial_surface.json 파일을 사용하여 날개의 표면 격자를 생성하고, BET_tutorial_volume.json 파일을 사용하여 체적 격자를 생성합니다. 뒤에서 앞서 설명한 체적 격자 설정을 사용하여 BET 디스크에 대한 별도의 격자 설정을 수행합니다.

자동화 도구 예제에서 설명했듯이, 웹 UI를 통한 격자 생성은 몇 번의 마우스 클릭으로 쉽게 수행 가능합니다. 파이썬 API를 통한 격자 생성은 아래 두 줄의 코드로 쉽게 수행 가능합니다.

surfaceMeshId = flow360client.NewSurfaceMeshFromGeometry("BET_tutorial_wing.csm", "BET_tutorial_surface.json")
volumeMeshId = flow360client.NewMeshFromSurface(surfaceMeshId=surfaceMeshId, config="BET_tutorial_volume.json")

위 작업이 끝나면, surfaceMeshId 변수로 참조할 수 있는 유효한 날개의 표면 격자와 volumeMeshId 변수로 참조할 수 있는 유효한 체적 격자를 얻을 수 있습니다. 해석을 제출할 때, 체적 격자 식별자(volumeMeshId)가 필요 합니다.

위에서 설명한 과정을 통해 아래 그림과 같은 격자를 얻을 수 있습니다. 그림에서 볼 수 있듯이 생성된 BET 디스크 조밀화 영역은 정렬 격자이며, BET 디스크와 날개 주변에는 비정렬 격자를 사용한 조밀화 영역이 있습니다. 격자는 BET 디스크 내에서 축 방향으로 20개 이상의 노드를 포함하고 있음을 확인할 수 있습니다.


Fig. 7.4.2 날개 중간 스팬(y=5)에서 체적 격자 절단면, 축 방향으로 BET 디시크 조밀화 영역을 보여줌. 비정렬 격자로 구성된 조밀화 영역 내의 정렬 격자 "rotorDisks" 조밀화 영역은 관심있는 물리 현상을 더 잘 포착하기 위해 구성하였음.



Fig. 7.4.3 BET 디스크 중심(x=2)에서 체적 격자 절단면, 반경 방향 및 방위각 방향의 BET 디스크 조밀화 영역을 보여줌.


7.4.2 Flow360 BET 구성

다음 단계는 Flow360.json 파일을 구성하는 것 입니다. 이 예제는 주로 Flow360.json 파일의 BETDisk 섹션에 대한 입력을 정의하는데 중점을 두고 있습니다. 다른 섹션에 대한 자세한 내용은 솔버 세팅 메뉴얼을 참조해 주세요.

먼저 BET 디스크 입력 데이터에 대해 설명합니다. Flow360 내에서 BET 디스크 해석을 실행하려면 다음 정보가 필요합니다:

7.4.2.1 로터 형상 및 성능 정보(json argument: NumberOfBlades, radius, centerOfRotation, axisOfRotation, chords, twists, rotationDirectionRule, omega)

  • NumberOfBlades와 로터 radius는 로터 기본 특성을 정의합니다. 로터 radius는 grid units - 또는 L_{gridUnit} - 으로 입력되어야 합니다.
  • centorOfRotation과 axisOfRotation은 격자 내에서 BET 디스크의 위치와 추력 축 벡터 - 즉, axisOfRotation - 를 정의합니다.
  • 반경에 대한 chords와 twists 분포는 스팬 방향을 따라 변화하는 블레이드의 비틀림과 시위 프로파일을 정의합니다. BET 모델에서 비틀림은 주어진 블레이드 단면에 대한 국부적인 받음각 변화를 적용하기 위해 사용되고, 시위는 해당 단면에서 블레이드의 크기를 정의하기 위해 사용됩니다. Fig. 8.1.15Fig. 8.1.16은 위 설명한 국부 비틀림과 시위에 대한 XV15 프로펠러의 예시 입니다.
  • rotationDirectionRul은 프로펠러가 어느 방향으로 회전하는지 정의합니다.
  • omega는 무차원 회전 속도를 나타냅니다.

7.4.2.2 로터 디스크 두께(json argument: thickness)

로터 디스크 두께와 로터 반경은 BET 방정식이 프로펠러를 모사하기 위한 생성항에 대한 실린더 모양을 정의합니다. 회전 중심과 회전 축은 해당 실린더가 공간에서 어디에 위치하는지를 정의합니다. 따라서, BET 모델 구현에서 사용하는 실린더 영역이 우리가 위에서 정의한 체적 격자 조밀화 영역 안에 완전히 포함되도록 해야 합니다. 따라서 thickness는 격자 조밀화 영역 권장 값보다 약간 작게 설정해야 합니다.

7.4.2.3 블레이드 시위(json argument: bladeLineChord)

이 변수는 비정상상태 blade line 해석에서만 사용됩니다. 정상상태 BET disk 해석에서 bladeLineChord는 무시하거나 0으로 설정합니다.

7.4.2.4 블레이드 팁 간극(json argument: tipGap)

BET 디스크 방정식은 블레이드 팁 근방의 3차원 유동 효과를 고려하기 위한 팁 손실 보정(tip loss correction)이 포함되어 있습니다. 외부 요소(덕트, 슈라우드, 카울링, 나셀 등)가 이러한 3D 팁 손실에 영향을 주는 경우, 사용자는 tipGap 매개변수를 조정하여 3D 팁 손실의 양을 줄일 수 있으며, 필요에 따라 0까지 줄일 수도 있습니다.

7.4.2.5 스팬 방향 노드 수 및 참조 시위(json argument: nLoadingNodes, chordRef)

이 변수들은 출력 변수를 정의하기 위해 사용됩니다.

  • nLoadingNodes는 프로펠러 단면 하중(Ct vs span, Cq vs span) 값을 출력하는데 사용할 스팬 방향 노드의 수를 의미하며, 이 값은 bet_forces_v2.csv BET 출력 파일에 기록됩니다. 해당 파일 형식에 대한 자세한 설명은 여기를 참조하세요.
  • 참조 chordRef는 블레이드의 2D 단면에 대한 결과로 나온 Ct 및 Cq 값을 표시하는데 사용됩니다. 이는 출력된 무차원 Ct 및 Cq 값에서 차원이 있는 추력과 토크를 계산하는데 사용되며, 일반적으로 블레이드의 평균 공력 시위(MAC) 값을 사용합니다.

7.4.2.6 로터 공기역학 정보

프로펠러 단면의 성능을 알기 위해서는 sectionalPolars가 필요합니다. 이는 여러 반경 방향 위치에 해당하는 양력 및 항력 곡선으로, 마하수, 레이놀즈 수, 받음각 공간의 3차원 lookup 테이블을 생성합니다. BET 모델은 이를 사용하여 주어진 프로펠러 단면이 경험할 국소적인 양력 및 항력을 보간합니다.

BET 디스크 해석을 시작할 때 가장 어려운 부분은 보톨 로터의 공기역학적 정보를 정확하게 얻는 것 입니다. 단면 별 양항곡선은 반드시 확보해야 하며, 이는 BET 디스크 해석에서 로터의 공기역학적 특성을 설명하는 주요 정보로 사용됩니다. sectionalPolars를 획득하고 이를 올바르게 Flow360.json 파일의 BETDisks 섹션에 배치하기 위한 여러 가지 옵션이 있습니다.

  • 첫 번째 방법은 스크립트 작성 프로세스를 설정하여 다양한 받음각, 마하수, 레이놀즈 수 범위에서 양력 및 항력 계수를 추출하고, 여기에 정의된 적절한 형식에 따라 Flow360.json 파일의 BETDisks 섹션에 저장 합니다.
  • 두 번째 방법은 FlexCompute에서 제공하는 BET translator를 사용하는 것입니다. 이 방법은 특히 BET translator에서 제공하는 코드 또는 데이터 소스 중 하나를 사용하여 프로펠러에 대한 해석을 수행한 경우 권장됩니다.

이 예제의 BET 입력 내용은 XROTOR translator를 사용해 생성되었습니다. 단면 별 양항곡선은 5개의 반경 방향 위치에 대해 제공됩니다.

고유의 해석 케이스에서 BET translator를 사용하지 않고 직접 스크립트를 작성하여 Flow360.json 입력 파일의 BETDisks 섹션을 정의하려는 경우, sectionalPolars 생성에 대한 모범 사례를 참고하세요.

7.4.2.7 JSON 파일 입력

다음은 Flow360에서 필요로 하는 다른 입력 변수 설정에 대한 권장사항 입니다.

비행 모드에서 26° 피치 조건을 재현하기 위해, 다음과 같은 해석 조건을 설정해야 합니다.

  • 팁 마하 수(Tip Mach Number) = 0.54
  • 회전 속도(RPM) = 460 -> 이 값은 Omega = 0.1417에 대응함.
      - 위에서 정의된 Tip Mach 수에 맞추기 위해 설정됨
  • 전진비(advance ratio) = 0.337 -> 이는 흡입 Mach = 0.182를 의미함.
      - 자유류 속도를 팁 속도로 나눈 값
  • axisOfRotation: 이 경우 x 축이 날개의 후미 방향을 향하고, x 방향으로 전진하는 추력을 계산해야 하므로, 추력이 x 방향으로 전진하도록 axisOfRotation은 [-1, 0, 0]이 되어야 합니다. 자세한 내용은 Knowledge Base - rotationaDirectionRule 내용을 참조하세요.
  • rotationDirectionRule: 오른손 좌표계 또는 왼손 좌표계를 사용하여 정의할 수 있습니다. 회전 방향에 대한 자세한 내용은 Knowledge Base - rotationaDirectionRule을 참조하세요. 아래 예시 JSON 파일은 rightHand로 설정되어 있습니다.
  • omega: omega는 Flow360에서 사용되는 Knowledge Base - RPM을 무차원 회전 속도 omega로 변환에 따라 정의되어 있습니다. 자세한 내용은 이와 관련된 예제를 참조하세요. 본 예제에서 RPM = 460, 자유류 음속 = 340.2 m/sec, 격자 단위는 1 m이므로,
      - \rm omega = \rm \Omega \times L_{gridUnit} / C_{\infty} = \frac{460\times 2 \pi}{60 s} \times \frac{1 m}{340.2 m/sec} = 0.1417
  • chordRef: 이 값은 bet_forces_v2.csv 파일에 기록되는 단면별 하중을 처리하기 위해 사용됩니다. 입력값으로 필요하지만, 국부 단면의 양력계수(Cl)와 항력계수(Cd) 값을 차원화된 값으로 변환하고 싶을 때만 사용됩니다. 이 예제에서는 평균 프로펠러 시위 값을 사용하여 "chordRef": 0.3556이 입력되었습니다.
  • tipGap: 이 변수는 팁 손실 효과를 통해 덕트, 슈라우드에 의한 영향을 반영합니다. 저 자세한 내용은 Knowledge Base - tipGap에서 확인할 수 있습니다. 여기에서는 기본값(반영 안함)을 사용하기 위해 이 변수를 사용하지 않았습니다.

Flow360.json 파일의 변수 설정 방법에 대한 더 많은 권장 사항은 Knowledge Base - BETDisks에서 찾을 수 있습니다.

본 예제의 경우, 입력 Flow360.json 파일의 BEDTDisks 섹션은 다음과 같습니다.

"BETDisks": [
  {
    "axisOfRotation": [-1,0,0],
    "centerOfRotation": [-2.0, 5.0, 0],
    "rotationDirectionRule": "rightHand",
    "omega": 0.1417,
    "numberOfBlades": 3,
    "radius": 3.81,
    "thickness": 0.4572,
    "chordRef": 0.3556,
    "nLoadingNodes": 20,
    "sectionalRadiuses": [ 0.3429, 0.6477, 1.9431, 3.048, 3.81],
    "twists": [
        {
            "radius": 0.0,
            "twist": 90.0
        },
        {
            "radius": 0.3429,
            "twist": 56.2993654
        },
        .............
         {
            "radius": 3.81,
            "twist": 19.97515983
        }
    ],
    "chords": [
        {
            "radius": 0.0,
            "chord": 0.0
        },
        {
            "radius": 0.3429,
            "chord": 0.4494840642
        },
        .........
        {
            "radius": 3.81,
            "chord": 0.3557147064
        }
    ],
    "MachNumbers": [0, 0.5773502691896257, 0.816496580927726, 0.9486832980505138],
    "alphas": [
        -180.0,
        -179.0,
        -178.0,
        ........
            178.0,
        179.0,
        180.0
    ],
    "ReynoldsNumbers": [
        1.0
    ],

    "sectionalPolars": [
        {
            "liftCoeffs": [[[...]],[[...]],[[...]],[...]],
            "dragCoeffs": [[[...]],[[...]],[[...]],[...]],
        },
        {
            "liftCoeffs": [[[...]],[[...]],[[...]],[...]],
            "dragCoeffs": [[[...]],[[...]],[[...]],[...]],
        },
        {
            "liftCoeffs": [[[...]],[[...]],[[...]],[...]],
            "dragCoeffs": [[[...]],[[...]],[[...]],[...]],
        },
        {
            "liftCoeffs": [[[...]],[[...]],[[...]],[...]],
            "dragCoeffs": [[[...]],[[...]],[[...]],[...]],
        },
        {
            "liftCoeffs": [[[...]],[[...]],[[...]],[...]],
            "dragCoeffs": [[[...]],[[...]],[[...]],[...]],
        }]

본 예제에서는 5개의 단면 지점을 사용합니다.

{
    "liftCoeffs": [[[...],[...],[...],[...]]],
    "dragCoeffs": [[[...],[...],[...],[...]]],
}

단면은 2D 익형 양항 곡선을 정의한 다섯 개의 sectionalRadiuses에 해당합니다. 각 liftCoeffs와 dragCoeffs 리스트는 4개의 MachNumbers, 1개의 ReynoldsNumbers, 360개의 alphas에 대응하므로, 4 \times 1 \times 360의 크기를 갖습니다.

이 예제에 대한 전체 구성 파일은 아래 링크에서 받을 수 있습니다. BET_tutorial_Flow360.json

유효한 BET_tutorial_Flow360.json 파일과 함께 앞서 생성한 volumeMeshId를 사용하여 WEBUI를 통해 해석을 제출하거나, 아래와 같은 파이썬 코드를 입력하여 제출할 수 있습니다.

caseId = flow360client.NewCase(meshId = volumeMeshId, config="BET_tutorial_Flow360.json", caseName='BET_tutorial')

caseId는 후처리를 위한 해석 결과를 가져오기 위해 사용됩니다. 전체 해석 프로세스는 표면 격자 생성, 체적 격자 생성, 해석 제출 순으로 이루어지며, 아래와 같이 세 줄의 파이썬 코드로 실행할 수 있습니다.

surfaceMeshId = flow360client.NewSurfaceMeshFromGeometry("BET_tutorial_wing.csm", "BET_tutorial_surface.json")
volumeMeshId = flow360client.NewMeshFromSurface(surfaceMeshId=surfaceMeshId, config="BET_tutorial_volume.json")
caseId = flow360client.NewCase(meshId = volumeMeshId, config="BET_tutorial_Flow360.json", caseName='BET_wing_tutorial')

7.4.3 결과 출력 및 후처리

해석 결과에 대한 후처리 시 가장 먼저 확인해야 할 것은 수렴 여부입니다. 해석 정확도를 위해 비선형 잔차(nonlinear residuals)를 1e-10 이하로 낮춰야 합니다. 아래 그림 Fig. 7.4.4는 이번 해석의 수렴도를 보여주며, 목표한 수렴값을 달성한 것을 확인할 수 있습니다.


Fig. 7.4.4 BET 디스크 계산에 대한 수렴은 7차 정도의 매우 우수한 잔차 감소를 보여줌.


Quick Start에서 언급했듯이, 표면 데이터와 전체 유동장을 다운로드 하려면 각각 다음 명령어를 사용하세요.

flow360client.case.DownloadSurfaceResults('case_Id', 'surfaces.tar.gz')
flow360client.case.DownloadVolumetricResults('case_Id', 'volume.tar.gz')

case_Id는 해석을 실행하기 위해 Python 호출에서 반환된 변수입니다. 다운로드한 후에는 Techplot 또는 Paraview에서 이러한 출력 파일을 후처리할 수 있습니다. Flow360.json 파일의 volumeOutput 및 surfaceOutput 섹션에서 내보내고자 하는 데이터를 지정할 수 있습니다.

사용자가 생성한 BET 디스크 구성 모델이 처음으로 해석되는 경우, 특히 BET 디스크 지표에 중점을 두고 유동장을 검토해야 합니다. Flow360은 BET 결과를 평가하는데 도움이 되는 BET 관련 volumeOutput 지표를 제공합니다. 이를 통해 BET 디스크 입력이 올바른지, 체적 격자 조밀화 영역이 기대에 부합하는지 확인할 수 있습니다. 예를 들어, BET 지표 betMetric_AlphaRadians에 대한 등고선을 확인함으로써, 해당 지표 값이 BET 디스크 영역 외부에서 0이 된다는 점을 고려해, 해석에서 BET 디스크가 조밀화 영역보다 약간 작게 설정된 것이 맞다는 것을 확인할 수 있습니다.

특정 받음각 조건에서 BET 디스크 모델 해석 결과에 대한 시각화 결과는 아래의 Fig. 7.4.5 및 Fig. 7.4.6에서 확인할 수 있습니다.


Fig. 7.4.5 날개 앞쪽 BET 디스크 뒷쪽에서 바라본 모습. 계산된 국소 블레이드 받음각을 사용하여 시각화. 이 해석은 AoA=5°로 수행되었으므로 국소 블레이드에 받음각에서 예상되는 비대칭성을 보여줌.


Fig. 7.4.6 날개 앞쪽의 측면에서 본 BET 디스크. 계산된 국소 블레이드 받음각을 사용하여 시각화.


q-criterion 결과는 와도(vorticity)를 시각화하고, 프로펠러 후류 유동이 어디로 향하는지를 이해할 수 있는 좋은 지표입니다. BET 디스크에 의해 발생한 와도는 Fig. 7.4.1에서 확인할 수 있습니다. BET 디스크가 초기 급격한 후류 수축을 지나면서 매끄러운 전단층을 생성하기 때문에 조밀하지 않은 격자에서는 이 결과가 잘 포착되지 않을 수 있습니다.

BET 해석의 경우 WebUI에서 볼 수 있는 힘과 모멘트 값은 total_forces_v2.csv 및 surface_forces_v2.csv 파일에 기록되며, 이는 해석에서 존재하는 벽(no-slip wall)에서만 발생하는 힘을 포함한다는 점을 유념해야 합니다. 즉, BET 디스크 자체의 힘과 모멘트는 포함되어있지 않습니다.

BET 디스크에 대한 힘과 모멘트는 bet_forces_v2.csv 파일에 별도로 기록됩니다. 이 예제에서 설명한 것처럼, Flow360.json 파일의 형상 섹션에서 참조 데이터를 사용하는 total_forces_v2.csv의 벽에 대한 힘과 모멘트와 달리, BET 힘은 관성 좌표계에서 측정되며(회전 축에 상관없이), 모멘트는 BET 디스크 중심을 기준으로 계산됩니다. 즉, 서로 다른 무차원 참조값을 사용합니다.

기체 전체에 작용하는 힘을 얻으려면 벽의 구성 요소와 BET 디스크의 구성 요소를 결함해야 합니다. 이를 위해서는 벽과 BET 디스크에 사용된 참조값을 동일한 값으로 변환해야 합니다.

BET 힘을 후처리하는 방법에 대한 자세한 내용은 해석 사례를 참조하세요.