OpenVSPのGUI/Python APIで翼のモデルの断面形状(翼型)を設定する方法について説明する
OpenVSPのバージョンは(3.41.2)
はじめに
OpenVSPではGUIだけでなく、Python APIを用いてスクリプトからモデルを生成できる
今回は、GUIおよびPython APIを用いて翼のモデルの断面形状(翼型)を設定する方法について説明する
↓Python APIのインストールはここ
それではいってみよう
OpenVSPで利用できる翼の断面形状一覧
OpenVSPでは、翼の断面形状として以下の形状が利用できる
XS_FILE_AIRFOILからXS_ONE_SIX_SERIESまでがいわゆる翼型で、それ以外は胴体などの断面形状になっている
GUIの使い方
GUIで翼の断面形状を設定する方法については、公式が分かりやすい動画を出してくれているのでそちらを参照
字幕を出して日本語翻訳すればなんとなくは理解できる
0:00 – 0:19
本動画では、翼断面における翼型について解説する。
具体的には、異なる種類の翼型を設定する方法と、利用可能なパラメータの一部を調整する方法について述べる。
翼コンポーネントの「Airfoil」セクションに移動すると、異なる種類を選択することができ、いくつかのパラメータを設定することが可能である。
さらに、ここで利用可能な他の機能についても説明する。
0:19 – 0:38
注目すべき点は、VSP内のすべての異なる断面形状にアクセスできるということである。
したがって、もし翼の断面に丸みを帯びた矩形を翼型断面として設定したい場合、それを行うことができる。
また、翼型断面を胴体やスタックコンポーネントに設定したい場合も、それを行うことが可能である。
OpenVSPは、そのような挙動の実装を制止することはしない。
0:38 – 0:57
実際、スタックや胴体のような部分に翼型断面を用いることが非常に有用となる場合も存在する。
そのような場合は、複雑な形状特徴、表面のブレンド、その他さまざまな要素が関与する可能性がある。
そのような操作を行うことは可能である。
ただし、自身が何をしているのかを理解した上で、知的に操作を行うべきであり、その場合は問題ない。
0:57 – 1:18
ここでは、まず単純なNACA 4桁系列翼型を用い、パラメータの調整を試みる。
今回はこの根本断面のみを対象とするが、再度述べると、翼の任意の位置において独立して変更することが可能である。
厚さ・翼弦比を操作すると、指定した値に応じて翼型が厚くなったり薄くなったりすることが確認できる。
1:18 – 1:32
さらに、NACA値がここで設定した値に基づいて、自動的に識別子を更新する点に注目すべきである。
例えば、NACA 12を作成したい場合には、厚さ・翼弦比を12に設定すれば、それが生成される。
1:32 – 1:54
また、この断面のキャンバーを調整することが可能であり、そのキャンバー位置を調整することもできる。
例えば、これを0.4に設定し、さらに4%とすると、NACA 4412が生成される。
これは、望むパラメータを設定した結果である。
このようにして定義することができる。
1:54 – 2:03
ここで留意すべきは、理想揚力係数を設定することも、キャンバーを設定することも可能であるが、両方を同時に設定することはできないという点である。
2:27 – 2:36
もう一つ可能な操作は、翼型断面を反転させることである。
この操作を行うと、翼型全体が上下逆さまに反転することが確認できる。
2:36 – 2:57
この機能がどのような場面で有用となるのか疑問に思うかもしれない。
しかし、Transformタブに移動し、翼を180度回転させ、翼根の取り付け角やその他のいくつかのパラメータを適切に設定すれば、翼型は正しい向きに配置される。
2:57 – 3:09
仮に、左右の翼に対して非対称に作動させたい補助翼(エルロン)セクションを独立して制御したい場合、物理的にモデル化するのであれば、反対側の翼に対応する部分を別のコンポーネントとして作成する必要がある。
もし副翼のようなサブサーフェイス・コントロールを付与したい場合には、その方法も可能である(これについては後で説明する)。
3:09 – 3:21
しかし、何らかの理由により翼型を180度回転させる、あるいは上下逆さまに反転させる必要がある場合には、翼型を反転させるだけで目的を達成できる。
3:21 – 3:32
さらに、例えば自動車設計を行い、翼としてではなくスポイラーを設計したい場合には、翼型を反転させることで、全体が上下逆となり、所望の挙動を実現できる。
Python APIの使い方
OpenVSPのPython APIを用いて翼の断面形状を設定するフローチャートは以下の通り:
- 翼のモデルを作成して
geom_id
を取得する geom_id
を引数としてxsec_surf_id
を取得する- 断面形状の種類を設定する
xsec_surf_id
を引数として各断面のxsec_id
を取得する- 断面形状にパラメータを設定する
- モデルを更新して保存する
注:断面形状の種類を設定するとxsec_idが更新されてしまうので、xsec_idの取得は断面形状の種類の設定の後にする
ソースコードは以下の通り
# 新しいVSPモデルを作成
vsp.ClearVSPModel()
# 翼のモデルを作成してgeom_idを取得する
geom_id = vsp.AddGeom("WING")
vsp.SetGeomName(geom_id, "WingGeom")
# geom_idを引数としてxsec_surf_idを取得する
xsec_surf_id = vsp.GetXSecSurf(geom_id, 0)
# 各断面のループ
for xsec_index in range(vsp.GetNumXSec(xsec_surf_id)):
# 断面形状の種類を設定する
crv_type = vsp.XS_FIVE_DIGIT
vsp.ChangeXSecShape(xsec_surf_id, xsec_index, crv_type)
# xsec_surf_idを引数として各断面のxsec_idを取得する
xsec_id = vsp.GetXSec(xsec_surf_id, xsec_index)
# 断面形状にパラメータを設定する
(ここで断面形状を設定)
# スパン1, コード長1、後退角ゼロに設定 (オプション)
vsp.SetParmValUpdate(vsp.GetXSecParm(xsec_id, 'Span'), 0.5)
vsp.SetParmValUpdate(vsp.GetXSecParm(xsec_id, 'Sweep'), 0)
vsp.SetParmValUpdate(vsp.GetXSecParm(xsec_id, 'Tip_Chord'), 1)
vsp.SetParmValUpdate(vsp.GetXSecParm(xsec_id, 'Root_Chord'), 1)
# モデルを更新して保存する
vsp.Update()
vsp.WriteVSPFile(f"aircraft.vsp3")
それでは翼型のパラメータ設定の部分について1つずつ説明していく
NACA 4字系列
みんな大好きNACA4字系列
NACA < M P TT >
文字 | 説明 | 値 | GUIのパラメータ | Python APIのパラメータ |
---|---|---|---|---|
M | 最大キャンバー | M %c | Camber | Camber |
P | 最大キャンバー位置 | 10P %c | CamberLoc | CamberLoc |
TT | 最大翼厚 | TT %c | T/C | ThickChord |
- 最大キャンバー:M= 2 %c = 0.02
- 最大キャンバー位置:10P = 40 %c = 0.4
- 最大翼厚:TT = 12 %c = 0.12
GUI
GUIでの設定方法は公式を参照
0:00 – 0:14
本動画では、NACA 4系列を翼型に設定する方法について述べる。
また、これらのパラメータを調整することによって、名称を変更したり、既存のNACA 4系列の名称に一致させたり、設計に適したパラメータを設定することが可能となる。
0:15 - 0:50(キャンバー)
ここで最後の二つの数字は、厚さ対コード比を表すものであり、このスライダ上で設定できる。
本例では12%に設定することができる。キャンバーは最初の数字であり、これは百分率で表される。
したがって、本例では0.02と設定すると、これは2%を意味する。
二つ目の数字は、最大キャンバー位置が前縁から何分の10コード後方にあるかを示すものである。
本例では20%に設定されている。これを40%に設定する。
したがって、ここでNACA 2412を生成したことになる。
これはすなわち、2%のキャンバーを持ち、最大キャンバー位置は前縁から40%後方にあり、厚さ対コード比が12%であることを意味する。
0:51 - 1:45(後縁の鋭利化)
このように、これらのパラメータを変更することにより、特定のNACA 4系列翼型を生成することができる。
この翼型および他のいくつかの翼型においては、後縁を鋭利にするか、あるいは鈍いままにするかを選択することができる。
さらに、翼型を反転させることが可能な場合もある。
翼型を反転させる理由については別の動画で論ずるが、ここでは後縁を観察し、「Sharpen Trailing Edge(後縁を鋭利化)」の効果について検討する。
この機能を無効化すると、キャンバー線に対して垂直な、鈍い後縁が得られることに注意されたい。
これは厚さとコードの比率として厚みを持たせた形となり、この翼型に対して適切に鈍い後縁を形成する。
一方で「Sharpen Trailing Edge」を再度有効化すると、コードやキャンバー線自体は変化せず、単に鈍い後縁か鋭い後縁かを選択することになる。
以上のようにして、OpenVSPにおいてNACA 4系列翼型をモデル内で取り扱うことが可能となる。
↓操作画面だとこんな感じ

Python API
NACA4字系列の翼型は、以下のxsec_id
のパラメータに値を設定する
Camber
:最大キャンバーCamberLoc
:最大キャンバー位置ThickChord
:最大翼厚
ここで、xsec_id
のパラメータに値を設定する際は以下の手順が必要になる
xsec_id
のパラメータ名についてvsp.GetXSecParm でparm_id
を取得する- 取得した
parm_id
に対してvsp.SetParmValで値を設定する
これを踏まえると、NACA4字系列の翼型の設定は以下のようになる
# 断面形状の種類を設定する
crv_type = vsp.XS_FOUR_SERIES
vsp.ChangeXSecShape(xsec_surf_id, xsec_index, crv_type)
# 変更した断面の XSec ID を取得する。
xsec_id = vsp.GetXSec(xsec_surf_id, xsec_index)
# 断面形状にパラメータを設定する(例 : 2412)
for parm_name, val in zip(['Camber', 'CamberLoc', 'ThickChord'], [0.02, 0.40, 0.12]):
parm_id = vsp.GetXSecParm(xsec_id, parm_name)
vsp.SetParmVal(parm_id, val)

NACA 5字系列
みんな大好きNACA5字系列
残念ながらOpenVSPでは通常キャンバーしか実装されていないので3文字目のパラメータはゼロしか設定できない
NACA < L P0 TT >
文字 | 説明 | 値 | GUIのパラメータ | Python APIのパラメータ |
---|---|---|---|---|
L | 設計揚力係数 | 0.15 L | Ideal CL | IdealCl |
P0 | 最大キャンバー位置 | P0 / 2 %c | CamberLoc | CamberLoc |
TT | 最大翼厚 | TT %c | T/C | ThickChord |
- 設計揚力係数:0.15L = 0.3
- 最大キャンバー位置:P0 / 2 = 15 %c = 0.15
- 最大翼厚:TT = 12 %c = 0.12
GUI
GUIでの設定方法は公式を参照
0:00 - 0:14
NACA5字系列は、NACA4字系列、6系列、あるいは16系列と同様に、形状を規定する方程式に基づき OpenVSP 内で自動的に生成される。
名称も自動的に作成され、設定された翼型の内容を示す指標を与える。
0:15 - 1:08
したがって、既存の NACA5字系列翼型を再現する必要がある場合には、これらの数字を指針として用いる。
末尾の二桁は、弦長に対する厚さの比率を百分率で表すものである。本例では 15 である。
先頭の一桁は、理想揚力係数における 0.15 の倍数を表す。
本例では 0.45 であり、これは 0.15 の 3 倍に相当するため、先頭の数字は 3 となる。
キャンバー位置は次の二桁によって定義され、最大キャンバー位置を表す値の 2 倍として与えられる(訳者注:S字キャンバーは定義できない)。
本例では、前縁から 30% の位置に最大キャンバーがあるため、二桁の数字は 6 および 0 である。
もしこれを 0.25、すなわち四分の一コード位置に設定した場合、前述の二桁の数値は 60 から 50 に変化することに注意されたい。
1:09 - 1:42
詳細に観察すると、4字系列の場合と同様に、後縁を鋭利化するか鈍化させるかを、このボックスの有効化または無効化によって選択できることが確認できる。
この処理は単に、キャンバー線に対して垂直な鈍い後縁を表現したものであり、必要に応じて採用すればよい。
さらに、4字系列と同様に、この翼型を反転させることも可能である。
以上が、NACA5字系列の表記体系および命名規則に関する説明であり、OpenVSPにおける翼型断面への適用方法を示すものである。
↓操作画面だとこんな感じ

Python API
NACA5字系列の翼型は、xsec_idの以下のパラメータに値を設定する
IdealCl
:設計揚力係数(0.15 L)CamberLoc
:最大キャンバー位置(P0 / 2)ThickChord
:最大翼厚(TT / 100)
NACA5字系列の翼型の設定は以下のようになる
# 断面形状の種類を設定する
crv_type = vsp.XS_FIVE_DIGIT
vsp.ChangeXSecShape(xsec_surf_id, xsec_index, crv_type)
# 変更した断面の XSec ID を取得する。
xsec_id = vsp.GetXSec(xsec_surf_id, xsec_index)
# 断面形状にパラメータを設定する (例 : 25012)
for parm_name, val in zip(['IdealCl', 'CamberLoc', 'ThickChord'], [0.3, 0.25, 0.12]):
parm_id = vsp.GetXSecParm(xsec_id, parm_name)
vsp.SetParmVal(parm_id, val)

繰り返すが、OpenVSPでは通常キャンバーしか実装されていないので3文字目のパラメータはゼロしか設定できない
反転キャンバーのNACA5字系列の翼型を使いたいときは、後述のXS_FILE_AIRFOIL
を使うとよい
NACA 6系列
みんな大好きNACA6系列
OpenVSPのGUIではほぼ定義通りのモデル化が可能だが、Python APIでは後半の三文字に対応するパラメータしか設定できない
NACA < 6 X Y - L TT a=xx >
文字 | 説明 | 値 | GUIのパラメータ | Python APIのパラメータ |
---|---|---|---|---|
6 | シリーズ番号 | - | Series | - |
X | 最小圧力位置 | 10X %c | ↑ | - |
Y | 層流領域が維持されるCLの範囲 | L ± 0.1Y | ↑ | - |
L | 設計揚力係数 | 0.1L | Ideal CL | IdealCl |
TT | 最大翼厚 | TT %c | T/C | ThickChord |
a | キャンバーラインの指定 | 100a %c | a | - |
- 最小圧力位置:10X = 50 %c = 0.5
- 層流領域が維持されるCLの範囲:L ± 0.1 Y = 0.4 ± 0.4 → 0 < CL < 0.8
- 設計揚力係数:0.1L = 0.4
- 最大翼厚:TT = 15 %c = 0.15
- 後縁のオプション:a = 0.5
GUI
GUIでの設定方法は公式を参照
0:00–1:06
OpenVSPにおけるNACA6系列翼型について説明する。各パラメータが翼型形状にどのように影響するかを示す。
シリーズのドロップダウンメニューから各種6系列翼型を選択できる。ここで、第二桁(3、4、5、6、7など)は、最小圧力が発生する位置をコード長の分数で表したものである。
例えば63の場合、最小圧力はコード長の30%の位置に存在する。65に変更すると、中間コード長に最小圧力が移動する。67にすると後方に押しやられる。
この値はシリーズによって調整可能である。
その他のパラメータは比較的自明である。
厚さ比(厚さ/コード長)はここで示される値を更新する。
設計揚力係数は、キャンバーの大きさに影響する。これを0に設定すると、キャンバー線は直線となる。
さらにa値がある。a値は、平均線が弦方向に一様な荷重から後縁に向かって線形に減少する荷重に変化する位置を、コード長の分数で表したものである。
1:06–1:47
例として、理想揚力係数を非常に大きな値、例えば1に設定する。この場合、実用的には不自然な形状となるが、説明のために用いる。
このa値を前縁側に移動させると、翼型の形状にどのような変化が生じるかが確認できる。
現在、ほぼ中間コード長にあり、キャンバー線は滑らかで、弧を描いた曲線となっている。この点を超えてa値を移動させると、キャンバー線は後縁に向かって線形に減少し始める。
これがa値による効果である。
1:50–2:22
さらに、6A系列翼型も利用可能である。この系列には若干のニュアンスがあり、6A翼型の正確な定義を理解することが必要である。
例えば63Aを選択した場合、後縁の鋭い先端は消去され、後縁が厚くなる。
6A翼型の定義上、この処理はコード長の80%の位置で行われ、その位置から後縁まで線形でなければならない。
2:22–2:49
厳密に言えば、6A翼型を再現するには、6系列におけるa値をコード長の80%に設定する必要がある。
OpenVSPではこの値を任意に操作でき、後縁方向に移動させることも可能である。
しかし、80%コード長から後縁までの部分はA指定により固定されており、変更されない。
2:49–3:16
a値で変更されるのは、この点より前方の形状のみである。aパラメータを用いて新しい翼型を作成することは可能であるが、厳密には6A系列の仕様には従っていない。
実際には、6A系列と同様に後縁部を厚くする利点を活用しているが、教科書や風洞実験で使用された元のNACA試験の幾何形状を再現しているわけではない。
a値は80%コード長の位置で処理されることを意味する。
3:16–3:51
例えば63A-415を作成する場合、これらの値を使用してデータを再現することが望ましい。
この区別は重要であり、これらのパラメータを使用する際は正しく設定する必要がある。
以上の例により、OpenVSPにおける6系列翼型の理解、および6A系列の指定が意味する内容と、望む形状をどのように構築するかについて概略を示すことができる。
↓操作画面だとこんな感じ

Python API
Python APIではNACA6系列の6つのパラメータのうち、後半の三文字に対応するパラメータしか設定できない(前半の3文字はデフォルトで63になる)
# 断面タイプを変更する。
crv_type = vsp.XS_SIX_SERIES
vsp.ChangeXSecShape(xsec_surf_id, xsec_index, crv_type)
# 変更した断面の XSec ID を取得する。
xsec_id = vsp.GetXSec(xsec_surf_id, xsec_index)
# パラメータを設定 (例 : NACA63-312)
for parm_name, val in zip(['IdealCl', 'ThickChord'], [0.3, 0.12]):
parm_id = vsp.GetXSecParm(xsec_id, parm_name)
vsp.SetParmVal(parm_id, val)

NACA6系列の翼型を使いたいときは、後述のXS_FILE_AIRFOIL
を使うとよい
NACA 16系列
あまり知られていないNACA16系列
NACA < 1 X - L TT >
文字 | 説明 | 値 | GUIでのパラメータ | Python APIでのパラメータ |
---|---|---|---|---|
1 | シリーズ番号 | - | 1 | 1 |
X=6 | 最小圧力位置 | 60 %c | 6 | 6 |
L | 設計揚力係数 | 0.1L | Ideal C | IdealCl |
TT | 最大翼厚 | TT %c | T/C | ThickChord |
- 最小圧力位置:10X = 60 %c = 0.6
- 設計揚力係数:0.1L = 0.3
- 最大翼厚:TT = 12 %c = 0.12
GUI
GUIでの設定方法は公式を参照
0:00–0:23
この動画では、OpenVSPにおけるNACA 16系列、すなわち1系列翼型の適用方法について論じる。
NACA 16系列は、型式選択のドロップダウンメニュー内に存在し、これを選択すると、6系列、5系列、あるいは4系列と同様に、OpenVSPは入力されたパラメータに基づいて自動的に名称を生成する。
0:24–0:51
NACA 16系列は、実際には最小圧力領域が翼弦の60%後方に位置する1系列翼型である。
この位置はおおよそ翼弦上の該当箇所に相当する。t/c比は、通常の規約に従い、最後の2つのパラメータを決定する要因となる。
また、設計揚力係数は第3のパラメータとして定義される。
これを調整する際には、該当パラメータが変化することが確認される。
さらに、t/c比を調整することも可能であり、それに応じて翼型名称も変更される。
0:52–1:09
なお、4系列翼型と同様に、本翼型においても後縁形状を鋭後縁または鈍後縁のいずれかから選択できる。
また、翼型を反転させることも可能である。以上が、NACA 16系列における桁数規則と、OpenVSPにおけるモデルへの適用方法である。
↓操作画面だとこんな感じ

Python API
NACA16系列の翼型は、xsec_idの以下のパラメータに値を設定する
IdealCl
:設計揚力係数(0.1 L)ThickChord
:最大翼厚(TT / 100)
NACA16系列の翼型の設定は以下のようになる
# 断面タイプを変更する。
crv_type = vsp.XS_ONE_SIX_SERIES
vsp.ChangeXSecShape(xsec_surf_id, xsec_index, crv_type)
# 変更した断面の XSec ID を取得する。
xsec_id = vsp.GetXSec(xsec_surf_id, xsec_index)
# パラメータを設定 (例 : NACA16-312)
for parm_name, val in zip(['IdealCl', 'ThickChord'], [0.3, 0.12]):
parm_id = vsp.GetXSecParm(xsec_id, parm_name)
vsp.SetParmVal(parm_id, val)

座標ファイル
OpenVSPはその他大勢のソフトウェアと同様に、翼型座標の点群ファイルから翼型を設定することができる
座標点のファイルに用いられる形式は以下の2つ(拡張子 .dat / .af)
1行目に翼型名、2行目以降に「後縁 → 上面 → 前縁 → 下面 → 後縁」の順に座標が並んだ形式のファイル
↓例
XFOIL(XFLR5)と同じ形式なので、XFLR5から書き出した.datファイルはそのまま使いまわせる
1行目に翼型名、2行目に上面と下面の座標点数、1行あけて「前縁 → 後縁」の順に並んだ上面座標、さらに1行あけて「前縁 → 後縁」の順に並んだ下面座標、という形式のファイル
↓例
これらのファイル形式は、かの有名なイリノイ州立大学の無料翼型データベースで用いられているファイル形式である
ここからダウンロードした翼型はそのまま加工なしでOpenVSPで読み込むことができる
GUI
GUIでの設定方法は公式を参照
0:00–1:00
ここでは、OpenVSP において空力翼型ファイル(airfoil file type)を特定の断面に適用する方法について説明する。
タイプ選択のドロップダウンメニューには airfoil file オプションが用意されており、これを選ぶと、t/c比(thickness-to-chord ratio)をもつ単純な楕円断面が生成され、そこにロフト処理が行われる。
実際にはベースの t/c 値として 1 が設定され、これは円に相当するが、その後で元の設定値に基づいてt/c比を変更できるようになっている。
翼型ファイルをジオメトリに読み込むには Read File
をクリックし、.af
または .dat
ファイルを選択する。すると点列が読み込まれ、OpenVSP がそれらの点をスプラインで補間して形状を生成する。
ここで使用したのは、OpenVSP に同梱されているサンプルの Boeing 737 Section C
である。ウェブサイトからダウンロードできるサンプルファイルにも、いくつか例を含めておく予定である。
処理の結果、新しいベースのt/c比が設定され、手動での制御もその値に揃えられていることが確認できる。
ただし、必要であればt/c比を自分で変更することも可能である。これは従来できなかった操作であり、VSP に新たに追加された機能である。
1:00–2:18
前述のとおり、ロフト処理が行われ、新しいベース t/c が設定され、手動での t/c 制御もそれと同じ値に揃えられる。ただし、任意でt/c比を調整することもでき、これは従来のバージョンではできなかった新しい機能である。
例えば、ある翼型を用いて設計検討(トレードスタディ)を行いたい場合、t/c比を変えて試したいことがあるだろう。
従来であれば、同じプロファイルに基づいた多数(数十、あるいは数百)の翼型ファイルを作成する必要があったが、VSP では単一のパラメータでt/c比を調整できるため、非常に効率的に試行できる。
さらに、この機能には追加の活用方法がある。例えば翼型ファイルを読み込んだあとに修正を加えたい場合、クラス・シェイプ変換(Class-Shape Transformation; CST)を適用することも可能である(詳細は別のビデオで扱う)。
また、読み込みに用いるファイルとして DAT 形式を指定することもできる。ここでは二つの形式を例に挙げたが、実際には対応する形式が三種類存在し、その点についても別のビデオや参考資料で説明される予定である。
以上が、OpenVSP における airfoil file タイプの選択、適用、そして変更の方法である。
↓操作画面だとこんな感じ

Python API
翼型の座標データを読み込むときは、vsp.ReadFileAirfoilを使う
引数
- xsec_id(str):XSec ID
- file_name(str):翼型の座標ファイル名
# 断面タイプを変更する。
crv_type = vsp.XS_FILE_AIRFOIL
vsp.ChangeXSecShape(xsec_surf_id, xsec_index, crv_type)
# 変更した断面の XSec ID を取得する。
xsec_id = vsp.GetXSec(xsec_surf_id, xsec_index)
# パラメータを設定 (例 : 'E603.dat'を読み込む)
vsp.ReadFileAirfoil(xsec_id, 'E603.dat')

CST翼型
みんな大好きCST翼型
任意の翼型を少ないパラメータで表現できるので、最適化などにもってこいとなっている
↓関連記事
GUI
GUIでの設定方法は公式を参照
0:00-1:34
本動画では、OpenVSPにおける翼型のクラスシェイプ変換(Class Shape Transformation, CST)、あるいはKulfan変換(Kulfan Transformation)の操作方法について述べる。
CST変換はドロップダウンメニューから選択可能であるが、通常は既知の翼型、すなわちNACA 4系列、6系列、その他の系列翼型のいずれかから開始することが多い。
あるいは、対象翼型のKulfan変換を既に把握している場合には、直接それを利用することも可能である。
しかしながら、一般的には多様な次数に設定可能な「Fit CST」ボタンを選択することになる。
既定値は7に設定されているが、3あるいは4に減少させることもでき、また必要に応じてより大きな値へ増加させることも可能である。
このボタンをクリックすると、Kulfan変換、すなわちクラスシェイプ変換を用いて当該翼型形状を近似する処理が実行される。
当該操作を実行すると、CST翼型エディタが起動する。
このエディタにおいては、連続的な前縁曲率半径を強制することができる。
すなわち、下側表面の a0a0 が上側表面の a0a0 と完全に同一に設定される。
このパラメータは翼型前縁を定義するものであり、本例では値7に対応して後縁まで適用される。
簡便化のために、これら両者を3に降格させる操作を行う。クリック操作に伴い形状がわずかに変化することが確認されるが、大きな変化は見られない。
これは、与えられた少数のパラメータのみであっても、本変換が4系列翼型を良好に近似しているためである。
1:35-2:23
次に、これらのパラメータを操作すると、各パラメータが曲線のロフトにどのように反映されているかが確認できる。
たとえば、0を増加させ、1あるいは2を減少させ、3を増加させ、さらに3を減少させ、その後後縁付近のパラメータを調整すると、それぞれが翼型上面および下面上の特定位置に対応していることが明らかとなる。
これにより、当該翼型の形状を極めて容易に崩壊させたり、操作したり、改変して、実用性を完全に失う形状へ変化させることも可能である。
しかしながら、より高次数の設定を用いることにより、例えば次数を5に昇格させ、さらに必要に応じてより高次数に設定することで、興味深い形状を形成する曲線ロフトが可能となる。
2:24-3:06
一方、例えば「Fit Model」のような機能を利用して、CADプログラムからのSTL、メッシュ、あるいは点群データを取得し、それをCSTによって強制的に一致させようとする試みは、最適な方法とは言い難い。CSTは特定の目的に使用されるべきものである。
もしある翼型を正確に再現する必要がある場合には、当該翼型が属するクラスを特定し、それをOpenVSP内で再構築することが最も適切である。
CSTを用いて「Fit Model」のような手法により無理に近似させることは、あくまでも最終手段に留めるべきである。
↓操作画面だとこんな感じ

Python API
CST翼型を設定するときはvsp.SetUpperCSTとvsp.SetLowerCSTを使う
引数
- xsec_id(str):XSec ID
- deg(int):CST翼型の上面の係数の数(次数)
- coefs(list or ndarray):CST翼型の上面の係数の配列
# 断面タイプを変更する。
crv_type = vsp.XS_CST_AIRFOIL
vsp.ChangeXSecShape(xsec_surf_id, xsec_index, crv_type)
# 変更した断面の XSec ID を取得する。
xsec_id = vsp.GetXSec(xsec_surf_id, xsec_index)
# パラメータを設定 (例 : 'E603'相当のパラメータ)
u_coefs = [ 0.16987, 0.52115, -0.08066, 0.91091, -0.08964, 0.46638, 0.23017 ]
l_coefs = [ -0.16987, -0.04044, -0.36415, 0.14310, -0.56062, 0.06706, 0.08466 ]
vsp.SetUpperCST(xsec_id, len(u_coefs)-1, u_coefs)
vsp.SetLowerCST(xsec_id, len(l_coefs)-1, l_coefs)

CST翼型へのフィッティング
ここまで紹介した翼の断面形状はvsp.FitAfCSTを使うことでCST翼型にフィッティングすることができる
が、使い勝手が良くない(近似の精度が低い)ので、CST翼型にフィッティングさせたいときは自作したコードを使った方がいい
↓参考
Karman-Trefftz Airfoil
みんな大好きジューコフスキー翼(Joukowski Airfoil)の上位互換
ジューコフスキー翼の欠点である後縁の鋭さなどが改善したらしい
GUI
GUIでの設定方法は公式を参照
0:00-0:32
本稿では、Kármán–Trefftz翼について述べる。この翼型は、タイプ選択のドロップダウンメニューから選択可能である。
ここでは、εパラメータ、κパラメータ、そしてτパラメータといった要素にアクセスできることに留意されたい。
以下では、それぞれの効果について検討する。
εパラメータは、主として前縁部における形状の曲率を調整するものであり、翼型の厚さに関連する特性を規定する。 κパラメータは翼型にキャンバー(反り)を付与する役割を果たす。 そして、τパラメータは事実上、後縁の角度を設定する。
0:33-1:06
例えば、τを5程度に設定すると、比較的鋭い後縁が得られる。
しかしながら、これを180度まで増加させると、結果として円形を再現することになる。
Kármán–Trefftz翼型、あるいはJoukowski変換に精通している読者であれば理解できるように、これらはすべて、単位円を基準として、それを翼型へと写像する一連の変換に基づいている。
すなわち、これらのパラメータを用いて単位円を翼型へと正則写像することが可能である。
この理論において特筆すべき点は、二次元のポテンシャル流が当該形状周囲において基盤となっていることである。
流れ場自体も、これらの翼型に対して正則写像され得るのである。
1:06-1:29
以上の事実は、極めて興味深く示唆に富んでいる。
特に、空気力学およびポテンシャル理論に関心を有する者にとっては、詳細に掘り下げて検討するに値する内容である。
以上が、カルマン=トレフィッツ翼型族の設定および操作方法に関する解説である。
↓操作画面だとこんな感じ

Python API
OpenVSPのPython APIではKarman-Trefftz翼(XS_VKT_AIRFOIL)を直接設定することはできないが、vsp.GetVKTAirfoilPntsを用いることでGUIと同様に、alpha
、epslion
、kappa
、tau
の値からKarman-Trefftz翼の座標を取得することができる
引数
- npts(int):Karman-Trefftz翼の座標点数
- alpha(double):Karman-Trefftz翼の迎角 [rad]
- epsilon(double):翼厚 [/chord]
- kappa(doule):キャンバー [/chord]
- tau(double):後縁角 [rad]
戻り値
- Array of points on the VKT airfoil (size = npts)
また、vsp.SetAirfoilPntsを使えばvsp.ReadFileAirfoilと同様に断面形状として翼型の座標を直接設定することもできる
引数
- xsec_id():XSec ID
- up_pnt_vec():Array of points defining the upper surface of the airfoil
- low_pnt_vec():Array of points defining the lower surface of the airfoil
これら2つの関数を組み合わせれば、以下の手順でKarman-Trefftz翼を設定することができる
# 断面タイプを変更する。(XS_FILE_AIRFOIL のときしか SetAirfoilPnts は使えない)
crv_type = vsp.XS_FILE_AIRFOIL
vsp.ChangeXSecShape(xsec_surf_id, xsec_index, crv_type)
# 変更した断面の XSec ID を取得する。
xsec_id = vsp.GetXSec(xsec_surf_id, xsec_index)
npts = 121
alpha = 2 * math.pi / 180.0 # degree→rad
epsilon = 0.1
kappa = 0.1
tau = 10 * math.pi / 180.0 # degree→rad
# VKT 点列を取得
xyz_airfoil = vsp.GetVKTAirfoilPnts(npts, alpha, epsilon, kappa, tau)
# (オプション)numpy 配列に変換
# xyz_np = np.array([[p.x(), p.y(), p.z()] for p in xyz_airfoil])
# 上下面に分割
half = npts // 2
up_pnt_vec = xyz_airfoil[:half][::-1]
low_pnt_vec = xyz_airfoil[half:]
vsp.SetAirfoilPnts(xsec_id, low_pnt_vec, up_pnt_vec)

修正版NACA 4字系列 / 5字系列
OpenVSPのGUIでは、NACA4字系列とNACA5字系列をさらに細かく修正することができる
この機能はPython APIでは実装されていない
GUI
GUIでの設定方法は公式を参照
0:00-0:45
NACA 4系列および5系列翼型には、翼型形状をわずかに変更することを可能にする修正が存在する。
これにより、翼型名称には追加の2桁が付加され、利用者が施した変更内容を示すことになる。
なお、4系列および5系列の双方において、この「mod(修正版)」の指定が存在し、ドロップダウンメニューから選択することが可能である。
本動画では例として、4桁修正版翼型について検討する。
ここでは2桁の拡張が付加されていることが確認できる。
既定値としては、通常の4系列翼型を仮定しており、その場合、翼厚位置は翼弦長の30%後方に設定され、前縁半径指標(leading-edge radius index)は6とされる。
これらのパラメータが具体的に何を意味し、どのように幾何形状を変化させるかについては、文献を参照することで確認可能である。
しかしながら、ここでは当面、それらを操作し、形状変化を観察することとする。
0:45-1:33
ここで、拡張部分の第2桁は最大翼厚位置を規定するものであり、その値は翼弦長の20%から60%の範囲で設定可能である。
この値を調整することで、翼型形状は大きく変化することが確認できる。
さらに、前縁半径指標を変更することも可能である。
既定値は6であるが、これを0に設定した場合、前縁は鋭利な形状となる。
一方、6を超えて9に設定すると、半円形に近い形状となり、非常に丸みを帯びた鈍い前縁が得られる。
したがって、4系列および5系列の双方において、この修正版指定が有効となっており、翼厚位置、最大翼厚位置の発生箇所、ならびに前縁半径指標を調整することが可能である。
↓操作画面だとこんな感じ

おわりに
OpenVSPのGUI/Python APIで翼のモデルの断面形状(翼型)を設定する方法について説明した
OpenVSPはGUIで直感的にモデルを作ることができる利点があるが、やはりファイルなどから自動でモデルを作成できた方が便利でよい
これはそのための第一歩になる
コメント