Torsion
Torsion Analysis using BEM

■境界要素法でTorsionのPoisson’s equationを解く■
境界要素法で今回の問題を解いてみました。 と言いてもPoisson’s equationのGreen関数は無いのでLaplace EquationのGreen関数を使い、2Gθは領域積分します。 通常、境界要素法では境界のみを要素分割しますが、今回は領域も要素分割する必要があります。

境界要素法は有限要素法の重み付け残差法と同様に、下式に示す様に残差×重み関数の領域積分からスタートします。

\begin{eqnarray} \iint{\left(\frac{\partial^2\phi\left(\boldsymbol{x}\right)}{\partial x_i\partial x_i}+2G\theta\right)G\left(\boldsymbol{\xi},\boldsymbol{x}\right)dA=0} \end{eqnarray}

上式のG(ξ,x)がGreen関数で、Laplace Equationの場合Green関数は以下です。

\begin{eqnarray} G\left(\boldsymbol{\xi},\boldsymbol{x}\right)=-\frac{1}{2\pi}{log}_e\left(\frac{r}{r_0}\right) \end{eqnarray}

ここにξはSource point、xをObservation point と言います。 これらの2つの点間の距離が上式のrになります。 下図を見て下さい。ξは領域内にxが境界に有る場合を示しています。 今回の場合、2Gθの領域積分があるのでxは領域内にも存在します。 境界要素法では記述を簡略化するために、点を表すときに(x,y)とせずにベクトルxで表します。

有限要素法の場合は、変数の値を計算したい節点がSource pointです。その点を節点Aとすると、節点Aを共有している要素の節点がObservation pointになります。節点Aを共有していない要素はObservation pointになりません。境界要素法では、上のGreen関数で分かる通り、全ての境界要素上の節点がObservation pointになります。 有限要素法と境界要素法の相違点ですが、もう1つあります。境界要素法では部分積分を2回使います。有限要素法では1回でした。境界要素法の詳細についてはサイトを参考にしてください。 まず、1回目の部分積分を上の式に施します。結果は以下です。

\begin{eqnarray} \oint{\frac{\partial\phi\left(\boldsymbol{x}\right)}{\partial x_i}G\left(\boldsymbol{\xi},\boldsymbol{x}\right)n_ids}-\iint{\frac{\partial\phi\left(\boldsymbol{x}\right)}{\partial x_i}\frac{\partial G\left(\boldsymbol{\xi},\boldsymbol{x}\right)}{\partial x_i}dA+2G\theta\iint{G\left(\boldsymbol{\xi},\boldsymbol{x}\right)dA=0}} \end{eqnarray}

上の第2項目の領域積分に対し2回目の部分積分を施します。

\begin{eqnarray} \oint{\frac{\partial\phi\left(\boldsymbol{x}\right)}{\partial x_i}G\left(\boldsymbol{\xi},\boldsymbol{x}\right)n_ids}-\oint{\phi\left(\boldsymbol{x}\right)\frac{\partial G\left(\boldsymbol{\xi},\boldsymbol{x}\right)}{\partial x_i}n_ids}+\iint{\phi\left(\boldsymbol{x}\right)\frac{\partial^2G\left(\boldsymbol{\xi},\boldsymbol{x}\right)}{\partial x_i\partial x_i}dA+2G\theta\iint{G\left(\boldsymbol{\xi},\boldsymbol{x}\right)dA=0}} \end{eqnarray}

ここで気になるのが∂2G(ξ,x)/∂xi∂xiの項 です。実は、ξ=x 以外の点では∂2G(ξ,x)/∂xi∂xi=0です。 確認するために下の極座標系のLaplace EquationにGreen 関数を投入してみます。

\begin{eqnarray} \frac{\partial^2G}{\partial r\partial r}+\frac{1}{r}\frac{\partial G}{\partial r}+\frac{1}{r^2}\frac{\partial^2G}{\partial\theta\partial\theta}=0 \end{eqnarray}

Green 関数(G=-(1/(2π))loge(r/r0)のrでの一階微分は以下になりますよね。Green 関数のr0=1と思って下さい。

\begin{eqnarray} \frac{\partial G}{\partial r}=-\frac{1}{2\pi}\left(\frac{1}{r}\right) \end{eqnarray}

そしてGreen 関数の二階微分は以下になります。この様な部分の場合、数学の本に載っている微分式を使うと便利です。

\begin{eqnarray} \frac{\partial^2G}{\partial r\partial r}=-\frac{1}{2\pi}\left(-\frac{1}{r^2}\right) \end{eqnarray}

Green 関数はθに関数でないのでθでの二階微分項は以下の様にゼロになります。

\begin{eqnarray} \frac{\partial^2G}{\partial\theta\partial\theta}=0 \end{eqnarray}

これらをLaplace Equationに投入すると確かにゼロになります。 では、ξ=xの点ではどうなるのかです。 これを説明するために領域Dを2つに分けます。D-εとεです。

領域εの中央にはSource pointのξがあり、領域は半径がεの円で領域Dの中にあります。 半径εは非常に小さく φ(x) を一定な値の φ(ξ) として扱うことが出来ます。 すると上の領域積分は次の様になります。

\begin{eqnarray} \iint{\phi\left(\boldsymbol{x}\right)\frac{\partial^2G\left(\boldsymbol{\xi},\boldsymbol{x}\right)}{\partial x_i\partial x_i}dA}=\phi\left(\boldsymbol{\xi}\right)\iint{\frac{\partial^2G\left(\boldsymbol{\xi},\boldsymbol{x}\right)}{\partial x_i\partial x_i}dA}=\phi\left(\boldsymbol{\xi}\right)\oint{\frac{\partial G\left(\boldsymbol{\xi},\boldsymbol{x}\right)}{\partial x_i}n_ids} \end{eqnarray}

領域εは円ですのでxi=r, ni=1, ds=εdθになります。loge(r/r0)の微分は1/rです。 再度r0=1と思って下さい。

\begin{eqnarray} \phi\left(\boldsymbol{\xi}\right)\oint{\frac{\partial G\left(\boldsymbol{\xi},\boldsymbol{x}\right)}{\partial x_i}n_ids}=\phi\left(\boldsymbol{\xi}\right)\int_{0}^{2\pi}{\frac{dG\left(\boldsymbol{r}\right)}{dr}\varepsilon}d\theta=\phi\left(\boldsymbol{\xi}\right)2\pi\left(-\frac{1}{2\pi}\frac{1}{\varepsilon}\right)\varepsilon=-\phi\left(\boldsymbol{\xi}\right) \end{eqnarray}

よって部分積分を2回施した式は次の様に記述出来ます。この式のことを境界要素法では境界要素式 またはBoundary Element Equationと呼びます。

\begin{eqnarray} \phi\left(\boldsymbol{\xi}\right)=\oint{\frac{\partial\phi\left(\boldsymbol{x}\right)}{\partial x_i}G\left(\boldsymbol{\xi},\boldsymbol{x}\right)n_ids}-\oint{\phi\left(\boldsymbol{x}\right)\frac{\partial G\left(\boldsymbol{\xi},\boldsymbol{x}\right)}{\partial x_i}n_ids}+2G\theta\iint G\left(\boldsymbol{\xi},\boldsymbol{x}\right)dA \end{eqnarray}

ここで境界要素法で使われる変数を定義しておきます。

\begin{eqnarray} q_n\left(\boldsymbol{x}\right)=\frac{\partial\phi\left(\boldsymbol{x}\right)}{\partial x_i}n_i \end{eqnarray}

\begin{eqnarray} F\left(\boldsymbol{\xi},\boldsymbol{x}\right)=\frac{\partial G\left(\boldsymbol{\xi},\boldsymbol{x}\right)}{\partial x_i}n_i \end{eqnarray}

するとBoundary Element Equationは下に示す様にシンプルな形に書けます。

\begin{eqnarray} \phi\left(\boldsymbol{\xi}\right)=\oint{q_n\left(\boldsymbol{x}\right)G\left(\boldsymbol{\xi},\boldsymbol{x}\right)ds}-\oint\phi\left(\boldsymbol{x}\right)F\left(\boldsymbol{\xi},\boldsymbol{x}\right)ds+2G\theta\iint G\left(\boldsymbol{\xi},\boldsymbol{x}\right)dA \end{eqnarray}

ところでSource pointのξが境界上に有った場合はどうなるか考えてみましょう。上の式はSource pointがInteriorに有る場合でした。下図を参考にして下さい。

Source pointがInteriorに有ると以下の積分は-1になっていましたよね。θの積分範囲が0~2πであることに注目して下さい。

\begin{eqnarray} -1=\oint{\frac{\partial G\left(\boldsymbol{\xi},\boldsymbol{x}\right)}{\partial x_i}n_ids}=\oint F\left(\boldsymbol{\xi},\boldsymbol{x}\right)ds=\int_{0}^{2\pi}{\frac{dG\left(\boldsymbol{r}\right)}{dr}\varepsilon}d\theta \end{eqnarray}

下図に示す様にSource pointが直線またはスムースな境界に有る場合はどうなるか考えてみましょう。

この場合θの積分範囲が0~πになります。積分結果は-0.5です。

\begin{eqnarray} \oint F\left(\boldsymbol{\xi},\boldsymbol{x}\right)ds=\int_{0}^{\pi}{\frac{dG\left(\boldsymbol{r}\right)}{dr}\varepsilon}d\theta=-0.5 \end{eqnarray}

境界要素法では上の積分項をFree termと呼んでいてC(ξ)で表します。下式の積分記号の前に-符号がついているのに注意して下さい。

\begin{eqnarray} C\left(\boldsymbol{\xi}\right)=-\oint F\left(\boldsymbol{\xi},\boldsymbol{x}\right)ds \end{eqnarray}

Laplace Equationの場合、Free termは以下の値を持つことになります。表の中のθは内角を意味します。

Source pointの位置 C(ξ)の値
Interior 1
Boundary θ/(2π)
Exterior 0

結果的に下のBoundary Element Equationが出来上がります。

\begin{eqnarray} C\left(\boldsymbol{\xi}\right)\phi\left(\boldsymbol{\xi}\right)=\oint{q_n\left(\boldsymbol{x}\right)G\left(\boldsymbol{\xi},\boldsymbol{x}\right)ds}-\oint\phi\left(\boldsymbol{x}\right)F\left(\boldsymbol{\xi},\boldsymbol{x}\right)ds+2G\theta\iint G\left(\boldsymbol{\xi},\boldsymbol{x}\right)dA \end{eqnarray}

上の式で未知数はqn(x)とφ(x) です。 上の式の解き方ですが、まず境界を要素で分割します。領域は有限要素法と同じ手順です。次にSource pointを境界上の節点1に置き境界上を周回積分し、領域は面積積分します。次にSource pointを節点2に置き、同様な積分を行います。これを節点nまで行います。すると以下の連立方程式が出来あがります。

\begin{eqnarray} \left[C\right]\left\{\phi\right\}=\left[G\right]\left\{q_n\right\}-\left[F\right]\left\{\phi\right\}+2G\theta\left\{G\right\} \end{eqnarray}

積分の離散化については BEM を見て下さい。 上のマトリックスは全てn×nのフルサイズです。ただし[C]は対角要素のみに数値が入ります。上の連立方程式に境界条件を挿入し解くと未知数が得られます。未知数は節点での qn(x)とφ(x) ですので、2×nが総未知数ですが、半分は既知です。[C]ですが[F]の値を流用出来ます。プログラムでは積分を行う時点で既知と未知を仕分け、連立方程式[A]{x}={b}を直接的に完成させます。理由としては、境界要素法の欠点である Corner Problems(角問題) を軽減させることができるからです。今回のTorsionでも角問題が発生しています。例題のところで角問題とは何かの説明と対策を紹介します。境界要素法では一定要素と言うのがあり、これは角問題を発生しません。

■SET4-TORSION-QUARTER.FOR■
とりあえず有限要素法のtorsion4q.forまたはtorsion9q.forで取り上げたのと同じ問題を解いてみましょう。 下はNEX=10とNEY=10を用いた境界の分割図です。境界は1次要素で分割してあります。計算領域はfemと同じ1/4モデルです。

描画にはELEMENT2.OUTを使います。赤色で示した点が節点1で、反時計方法に節点番号が付与されています。 以下は2Gθ∬G(ξ,x)dA の計算のための要素分割です。ここでは、NEXとNEYは上の境界要素と同じ分割にしましたが、同じである必要はありません。ファイルELEMENT4.OUTを使って描画してあります。

先へ進む前に、ここで作成したブログラムと役目を紹介しておきます。ブログラム間での入出力ファイルのやり取りにも注目して下さい。

プログラム 役目 入力ファイル 出力ファイル
SET4-TORSION-QUARTER.FOR 入力データ作成 NEX, NEY BEM1.DAT
ELEMENT2.OUT
ELEMENT4.OUT
DOMAIN.DAT
PARAM.DAT
BEM8LINQ-TORSION.FOR φの解析 BEM1.DAT
DOMAIN.DAT
INTERNAL.SOL
SOLUTION4.BIN
TORQUEBEM.OUT
TRS4DATA.DAT
BEM.SOL
POSTPROC.DAT
GRA4FILE.FOR φの描画 BEM1.DAT
TRS4DATA.DAT
SOLUTION4.BIN
TORSION4.OUT

描画プログラムのGRA4FILE.FORは有限要素法のものを流用しました。そのためにファイルTRS4DATA.DATをBEM8LINQ-TORSION.FORで作成しています。

■モーメントの計算■
有限要素法のときと同様にここでもモーメントを計算できるようにプログラムを書きました。 モーメントを計算するために下式の領域積分を行う必要があります。 今のプログラムでは2つの方法でモーメントを計算するプログラムを書きました、1つはφの描画の値を使って計算しています。 φの値は領域の要素分割の節点で境界要素式を用い計算されています。 それらの値と形状関数を使ってモーメントを計算します。結果はファイルTORQUEBEM.OUTに入ります。

\begin{eqnarray} M=2\iint\phi dA \end{eqnarray} もう1つは、φの値を要素のGauss- Legendreの積分点で境界要素式を用いて計算し、領域積分しています。 この場合、2Gθ∬G(ξ,x)dAの積分点と同じにならない様に積分点の数を1つ増やしてあります。 同じだとr=0になってしまいまいGreen関数が無限大になってしまいますので。 2Gθ∬G(ξ,x)dAではGauss- Legendreの2点法、モーメントの計算ではGauss- Legendreの3点法にしてあります。 結果はTORQUEBEM2.OUTの別ファイルに入ります。

■角問題(Corner Problems)■
有限要素法では発生しなくて境界要素法で発生する現象が角問題(Corner Problems)です。 理由は、温度、密度、Stress Functionφ等のスカラーを微分するとベクトルになります。 境界でスカラー(φ)を指定するのがDirichlet境界条件で、 スカラーの法線微分(qn=∂φ/∂n)を指定するのがNeumann境界条件です。 境界要素法では、各境界要素においてDirichlet境界条件かNeumann境界条件かを指定しなければなりません。 要素を線積分すると結果は節点に集約されます。 直線状の境界(スムース境界と言う)にこの節点(内角180度)があれば問題ないです。 問題になるのが、Dirichlet境界条件を持つ節点がスムース境界に無い(内角180度以外)ときです。 下図はStress Functionφが既知のスムース境界での節点と要素を表しています。 つまり、節点での内角が180度になっています。

この場合、要素i-1での qn2と要素iでのqn1の方向がそれぞれ同じですよね。 ですので、節点iでStress Functionφの法線方向の微分が1つですので問題無しです。

ところが下図の場合はどうでしょう。 節点iの内角が90度です。 節点iでStress Functionφの法線方向の微分qnが2つ存在しますよね。 微分qnが2つ存在するのに解析では節点iのqnとして1つ計算されます。 これが角問題(Corner Problems)です。

BEMのところでも紹介していますが、以下の2ケースの場合スムース境界でなくても角問題は発生しません。 下図を見て下さい。Element i-1がNeumann境界で、Element iがDirichlet境界の場合です。 この場合、節点iで計算されるqnは、Element iでの値になります。

下図の場合、両要素がNeumann境界です。 この場合、qnは両要素とも既知ですから、節点iではStress Functionの値のみが計算されます。

以上のことから、Dirichlet-Dirichlet境界のみのとき角問題(Corner Problems)に注意しなければなりません。 殆どの場合、重大な問題には至らないが計算精度の向上には何かすべきです。 対策としてよく見かけるのが下図の2点法です。

角に2つの節点を置き要素iを設けます。この要素の長さは出来るだけ短くします。 すると問題になっていた角のqnは要素i-1と要素i+1に分けることが出来ます。節点Iの内角は135度になり、90度から少しスムースな境界になっています。 境界要素法では一定要素があります。 要素の中央で境界値を設定します。 この場合、スムースな境界で未知数が計算されますので角問題は発生しません。 BEMサイト では、もう1つ角問題フリーのMIXED要素も紹介してあります。 この要素ではDirichlet境界を節点で指定し、Neumann境界は要素の中央で指定します。

■例題の計算■
角問題についてお話しましたが、角問題の処理を行わず計算を行ってみました。 NEX=NEY=10で境界および領域を要素分割しました。 Shear Modulus G=26538461.5384615[Pa]、θ= 0.0000670055862315403を使いました。
下は同じ条件のFEMの結果をBEMの結果に重ねて表示してあります。

結果を見る限り、ほぼ同じですね。モーメントは下表にまとめておきました。 計算で使った領域は全て1/4 Modelです。 MOMENTはフルモデル換算です。M=4000[Nm]が3次元弾性解析時に与えたモーメントです。結果θ= 0.0000670055862315403を得ている。

プログラム 要素 計算方法 MOMENT [Nm] MOMENT2 [Nm]
torsion4q.for 1次 FEM 3,984.7
torsion9q.for 2次 FEM 3,999.6
BEM8LINQ-TORSION-MOMENT.FOR 1次 BEM 3,972.6 3,964.6

Torsion問題では、9節点のFEM(torsion9q.for)が良い結果を出しています。 BEMはGreen関数が存在しないので計算精度が若干落ちているようです。 しかし、Laplace EquationのGreen関数を使ってもPoisson's Equationを解けることが示されたことになります。

■Warpingの解析■
WarpingについてはTorsion理論のところ示した通り、Neumann境界は文献に示されていましたが、解析に必要なDirichlet境界条件については不明でした。しかし、 Torsionの3次元弾性解析でシャフトが矩形の場合、 断面の4隅のシャフト長手方向の変位がゼロで有ることが判明しました。この事実を使ってWarpingの解析を行ってみます。 まず解かなければ式は下のLaplace Equationでした。

\begin{eqnarray} \frac{\partial^2\psi}{\partial x\partial x}+\frac{\partial^2\psi}{\partial y\partial y}=0 \end{eqnarray}
そしてNeumann境界条件としてシャフトの表面には外力が存在していないという事実からτnn=0になっていなければなりません
\begin{eqnarray} \tau_{nn}={\tau_{jz}n_j=\tau}_{xz}n_x+\tau_{yz}n_y=\left(\frac{\partial\psi}{\partial x}-y\right)\left(\frac{dy}{ds}\right)+\left(\frac{\partial\psi}{\partial y}+x\right)\left(-\frac{dx}{ds}\right)=0 \end{eqnarray}
そして3次元弾性解析の結果より矩形の四隅の warping関数ψがゼロになっていなければなりません。
\begin{eqnarray} \psi \left(x,y\right)=0 \end{eqnarray}
下図にそれらのDirichlet境界条件の位置を赤丸で示してあります。シャフトの断面の大きさですが、3次元解析と一致させるためにTLX=2[m], TLY==2[m]にしてあります。

次はNeumann境界条件です。これは上で示したτnn=0から設定することになります。下表に上のτnn=0の式から各Sideで得られる式を示します。

項目 Side 1 Side 2 Side 3 Side 4
dx or dy dy=0 dx=0 dy=0dx=0
\begin{eqnarray} \tau_{jz}n_j=0 \end{eqnarray} \begin{eqnarray} \frac{\partial\psi}{\partial y}=-x \end{eqnarray} \begin{eqnarray} \frac{\partial\psi}{\partial x}=y \end{eqnarray} \begin{eqnarray} \frac{\partial\psi}{\partial y}=-x \end{eqnarray} \begin{eqnarray} \frac{\partial\psi}{\partial x}=y \end{eqnarray}

有限要素法や境界要素法では境界での未知数を∂ψ/∂nで表します。これは、境界に対し直角で外向きがプラスのベクトルです。
ここで注意しなければならない事柄を述べておきます。それは、シャフトにモーメントが作用している状態のとき、下図のSide 3とSide 1での反り(wareping)の状態は、逆対称になっています。同様にSide 4 と Side 2も逆対称になっています。 ですのでNeumann境界条件にもこの逆対称の状態を考慮しなけれななりません。 下図は 3次元弾性解析 で得られたのシャフト長手方向の変位u(y,z)を表します。横軸はシャフトの側面を一周する座標(s)になっています。 座標(s)の値と位置は下図で確認できます。Side 1 と Side 4 が共有するコーナーは出発点であり終着点でのありますのでs=0, s=8になっています。

よってLaplace Equationを解く場合、以下のNeumann境界条件を使うと正しいWarping結果が得られるはずです。

Side 1 Side 2 Side 3 Side 4
\begin{eqnarray} \frac{\partial\psi}{\partial n}=-x \end{eqnarray} \begin{eqnarray} \frac{\partial\psi}{\partial n}=-y \end{eqnarray} \begin{eqnarray} \frac{\partial\psi}{\partial n}=x \end{eqnarray} \begin{eqnarray} \frac{\partial\psi}{\partial n}=y \end{eqnarray}

Side 2 と Side 3 のが一つ上の表と比べると、変化しているのが分かると思います。

■Warping計算の実行■
境界条件が明白になったので、計算を行ってみます。まず計算に必要なデータを作成する必要があります。ここでは、 SET4-WARPING-FULL.FOR が作成してくれます。そしてLaplace EquationBEM8LINQ-WARPING.FOR が解いてくれます。以下にこれらのプログラムが入力および出力するファイルを以下に示します。

プログラム 入力ファイル 出力ファイル
SET4-WARPING-FULL.FOR なし BEM1.DAT
ELEMENT2.OUT
BEM8LINQ-WARPING.FOR BEM1.DAT SOLUTION.BEM

ここでは、各Sideを20の線形境界要素で分割しています。下はファイルELEMENT2.OUTをエクセルでプロットしてあります。 今回は要素の長さを場所によって変化させました。Neumann境界条件の値が大きく変化する要素は出来るだけ短くしてあります。

四隅にあるDirichlet境界条件の要素ですが、極力短くしました。下図を見て下さい。 各隅に非常に短い要素をDirichlet境界用に2つ設けました。

計算結果は以下になります。SOLUTION.BEMをエクセルにドラッグアンドドロップしセルにデータを落とし込み、 S-COORDとW(X,Y)列で散布図にすると以下のグラフが得られます。 また、下の図には3次元弾性解析の結果も重ねて表示してあります。2つの結果は、同じですね。

Warping解析でもSaint Venant theoryは正しかったと言えます。 とにかく理論は何らかの方法で確認する必要は有りますね。有限要素法と境界要素法を使って計算してみるというのが、私の方法です。
Torsionについてがこれで終わりにしておきます。何か発見したら、ここに追記しておきます。
Menu Theory-Torsion FEM-Torsion BEM-Torsion 3DIM-Torsion

Internet College of Finite Element Method