面に加わる荷重の算出方法について

2,022 views
Skip to first unread message

Sakuma

unread,
Jul 7, 2010, 10:24:05 AM7/7/10
to OpenFOAM
OpenFOAM初心者のsakumaです。

四角柱の梁が流れの中に設置されており,その梁の面に加わるX,Y,Zの3方向の荷重を求めたいと
思っています。どのようにすれば荷重を算出できるのでしょうか。梁は変形のない剛体で,simplefoam
での計算です。よろしくお願いします。

aki-y1985

unread,
Jul 7, 2010, 9:45:12 PM7/7/10
to OpenFOAM
同じくOpenFOAM初心者の,akiです.

便乗質問ですが,バージョン1.6にも力を計算するforcesがありますが,その設定や使い方が
よくわからないでいます.
例えばSakumaさんの解析で,梁の面のうちひとつをhari1として,そこでの力を求めたいと
思っています.

functions
(
forces
{
type forces;
functionObjectLibs ("libforces.so");
patches (hari1);
pName p;
Uname U;
rhoName rhoInf;
rhoInf 1000;
CofR (0 0 0);
outputControl timeStep;
outputInterval 1;
}
);

以上をfvSolutionに書き込んでsimplefoamを実行してみましたが,ソースにあるように
各時刻にforces.datが出力されることもありませんし,paraviewで力を表示できるという
こともないようです.いま,流体は水としrhoInfは1000にしています.
また,ソースを読むとCofRがCentre of rotationとありましたが,よくわからないまま
原点の設定にしています.(これが問題でしょうか.)
ご教授頂けましたらありがたいです.よろしくお願いします.

E.Mogura

unread,
Jul 8, 2010, 8:07:37 AM7/8/10
to OpenFOAM
E.Mogura です。

基本的には、その書式で間違いないと思います。
ただ、各時刻フォルダに出力されるのでなく、出力先は、

forces/<srartTime>/forces.dat

です。forces.datの中味は、

# Time forces(pressure, viscous) moment(pressure, viscous)
1 (((0 0 0) (0 0 0)) ((0 0 0) (0 0 0)))
2 (((0 0 0) (0 0 0)) ((0 0 0) (0 0 0)))
3 (((0 0 0) (0 0 0)) ((0 0 0) (0 0 0)))
4 (((0 0 0) (0 0 0)) ((0 0 0) (0 0 0)))

データが全て「0」になっているのは、
patchの指定を間違えると、こうなります、、、ということです。
momentも計算されるので、
CofR はその回転中心座標ということですね。

aki-y1985

unread,
Jul 8, 2010, 9:10:47 AM7/8/10
to OpenFOAM
E.Mogura様 akiです.

早速お答えくださりありがとうございます.出力先は
forces/<srartTime>/forces.dat
とのことですが,試したところ各時刻はおろかどこにもforcesのフォルダが作られませんでした.
これはどこが間違っていると考えられますか?パッチの指定が間違っているということでしょうか.
あと, 出力のforcesにあるpressureとviscousは,それぞれ圧力と粘性による力を表しているのでしょうか.
申し訳ありませんが,御教授お願いいたします.

aki

IMANO Masashi

unread,
Jul 8, 2010, 10:58:07 AM7/8/10
to open...@googlegroups.com

今野です。

> これはどこが間違っていると考えられますか?パッチの指定が間違っているということでしょうか.

functionsの指定は、fvSolution 内ではなく、controlDict 内で行います。

実際、以下のようにして functions の行があるファイルをtutorialsから探す
と、controlDict に書かれていることがわかると思います。

$ tut
$ grep -r "^functions" .

./combustion/XiFoam/les/pitzDaily/system/controlDict:functions
./combustion/XiFoam/les/pitzDaily3D/system/controlDict:functions
(略)

今野 雅 // IMANO Masashi

At Thu, 8 Jul 2010 06:10:47 -0700 (PDT),

> --
> このメールは Google グループのグループ「OpenFOAM」の登録者に送られています。
> このグループに投稿するには、open...@googlegroups.com にメールを送信してください。
> このグループから退会するには、openfoam+u...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/openfoam?hl=ja からこのグループにアクセスしてください。
>

谷藤亜希

unread,
Jul 8, 2010, 11:45:41 AM7/8/10
to open...@googlegroups.com
今野様 akiです.

早速お教え頂きありがとうございます.
仰せにしたがいfunctionsの指定について,fvSolution内ではなくcontrolDict内で行い実行してみましたが,
すぐに「constant/transportPropertiesにnuがない(keyword nu is undefined in dictionary)」とエラーが
出てプログラムが止まってしまいました.
constant/transportPropertiesの中ではきちんとnuが書いてあるのですが,なぜだと考えられます
でしょうか?
御教授お願いいたします.

aki

E.Mogura

unread,
Jul 8, 2010, 5:12:51 PM7/8/10
to OpenFOAM
E.Mogura です。

>以上をfvSolutionに書き込んで...
はぁ、見落としていました(^^;;

次なる、エラーですが、実行ログのどの段階でこのエラーが出ているのかが
わからないので、またしても外していたらごめんなさいですが、、、

自分もよくこの種のエラーに遭遇しますが、大抵の場合、
きちんと書いたつもりだったのが、スペルミスや、
書式間違い(カッコの不整合、行末のセミコロン忘れなど)であったりします。

IMANO Masashi

unread,
Jul 8, 2010, 8:39:18 PM7/8/10
to open...@googlegroups.com

今野です。

ソースの

OpenFOAM-1.6.x/src/postProcessing/functionObjects/forces/forces/forces.C

を見るとわかるのですが、forces を計算しようとすると、状況によっては
transportProperties から nu を読み込みます。

また、constant/RASPropertiesにおける乱流モデルは何でしょうか?

状況がはっきりわかるよう、問題が無ければ、

constant/transportProperties
constant/RASProperties

を貼ってください。

> あと, 出力のforcesにあるpressureとviscousは,それぞれ圧力と粘性による力を表しているのでしょうか.

OpenFOAM-1.6.x/src/postProcessing/functionObjects/forces/forces/forces.H

に以下のように書いてあります。

Description
Calculates the forces and moments by integrating the pressure and
skin-friction forces over a given list of patches.

Member function calcForcesMoment()calculates and returns the forces and
moments.

Member function forces::write() calls calcForcesMoment() and writes the
forces and moments into the file \<timeDir\>/forces.dat

今野 雅 // IMANO Masashi

At Thu, 8 Jul 2010 14:12:51 -0700 (PDT),

aki-y1985

unread,
Jul 9, 2010, 12:29:18 PM7/9/10
to OpenFOAM
E.Mogura様 今野様 akiです.
早速お答えくださりありがとうございます.

E.Mogura様

> 自分もよくこの種のエラーに遭遇しますが、大抵の場合、
> きちんと書いたつもりだったのが、スペルミスや、
> 書式間違い(カッコの不整合、行末のセミコロン忘れなど)であったりします。

今のところこれだというものが見当たりませんが,まだまだ調べてみます.ありがとうございます.

今野様

> また、constant/RASProperties における乱流モデルは何でしょうか?

今使っているチュートリアルを見ますと,constant/RASProperties にある乱流モデルは,
kEpsilonというモデルでした.

> 状況がはっきりわかるよう、問題が無ければ、
>
> constant/transportProperties
> constant/RASProperties
>
> を貼ってください。

すみません.constant/transportPropertiesは
/*--------------------------------*- C++ -
*----------------------------------*\
| =========
| |
| \\ / F ield | OpenFOAM: The Open Source CFD
Toolbox |
| \\ / O peration | Version:
1.6 |
| \\ / A nd | Web: www.OpenFOAM.org
|
| \\/ M anipulation
| |
\*---------------------------------------------------------------------------
*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "constant";
object transportProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * //

twoPhase
{
transportModel twoPhase;
phase1 phase1;
phase2 phase2;
}

phase1
{
transportModel Newtonian;
nu nu [ 0 2 -1 0 0 0 0 ] 1e-06;
rho rho [ 1 -3 0 0 0 0 0 ] 1000;
CrossPowerLawCoeffs
{
nu0 nu0 [ 0 2 -1 0 0 0 0 ] 1e-06;
nuInf nuInf [ 0 2 -1 0 0 0 0 ] 1e-06;
m m [ 0 0 1 0 0 0 0 ] 1;
n n [ 0 0 0 0 0 0 0 ] 0;
}

BirdCarreauCoeffs
{
nu0 nu0 [ 0 2 -1 0 0 0 0 ] 0.0142515;
nuInf nuInf [ 0 2 -1 0 0 0 0 ] 1e-06;
k k [ 0 0 1 0 0 0 0 ] 99.6;
n n [ 0 0 0 0 0 0 0 ] 0.1003;
}
}

phase2
{
transportModel Newtonian;
nu nu [ 0 2 -1 0 0 0 0 ] 1.48e-05;
rho rho [ 1 -3 0 0 0 0 0 ] 1;
CrossPowerLawCoeffs
{
nu0 nu0 [ 0 2 -1 0 0 0 0 ] 1e-06;
nuInf nuInf [ 0 2 -1 0 0 0 0 ] 1e-06;
m m [ 0 0 1 0 0 0 0 ] 1;
n n [ 0 0 0 0 0 0 0 ] 0;
}

BirdCarreauCoeffs
{
nu0 nu0 [ 0 2 -1 0 0 0 0 ] 0.0142515;
nuInf nuInf [ 0 2 -1 0 0 0 0 ] 1e-06;
k k [ 0 0 1 0 0 0 0 ] 99.6;
n n [ 0 0 0 0 0 0 0 ] 0.1003;
}
}

sigma sigma [ 1 0 -2 0 0 0 0 ] 0.07;


//
************************************************************************* //

です.また,constant/RASPropertiesは
/*--------------------------------*- C++ -
*----------------------------------*\
| =========
| |
| \\ / F ield | OpenFOAM: The Open Source CFD
Toolbox |
| \\ / O peration | Version:
1.6 |
| \\ / A nd | Web: www.OpenFOAM.org
|
| \\/ M anipulation
| |
\*---------------------------------------------------------------------------
*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "constant";
object RASProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * //

RASModel kEpsilon;

turbulence on;

printCoeffs on;


//
************************************************************************* //

でした.チュートリアルはtutorials/multiphase/inteFoam/ras/dambreakから
とってきています.
試行錯誤してみたところ,最初の時刻にforces.datができたものの
# Time forces(pressure, viscous) moment(pressure, viscous)
だけ出力されて,そのあとには何も書かれていませんでした.
何がいけないと思われますか?ご教示お願いいたします.

aki

IMANO Masashi

unread,
Jul 10, 2010, 12:09:00 AM7/10/10
to open...@googlegroups.com

今野です。

> でした.チュートリアルはtutorials/multiphase/inteFoam/ras/dambreakから
> とってきています.

ということですが、多相流をinterFoamを使って解いているのでしょうか?

もし、通常の単相の等温流を解きたいのであれば、

tutorials/incompressible/simpleFoam/pitzDaily/constant/transportProperties

をコピーして、nu に解きたい流体の動粘性係数に設定してください。

もし、多相流で forces を求めたいのであれば、おそらく forces が多相流
のphase指定に対応していないと思うので、とりあえず hari1 が接っしている
流体の以下のような nu の宣言行を transportProperties に足してみてくだ
さい。

nu nu [ 0 2 -1 0 0 0 0 ] 1e-06;

今野 雅 // IMANO Masashi

At Fri, 9 Jul 2010 09:29:18 -0700 (PDT),

aki-y1985

unread,
Jul 11, 2010, 12:49:52 PM7/11/10
to OpenFOAM
今野様 akiです.
いつもお答えいただきありがとうございます.

> ということですが、多相流をinterFoamを使って解いているのでしょうか?

今のところチュートリアルを勉強しつつ,forcesを使えるかどうかいろいろ
試しているところです.interFoamを使っていたのはチュートリアル2.3の
ダム問題でした.


> もし、多相流で forces を求めたいのであれば、おそらく forces が多相流
> のphase指定に対応していないと思うので、とりあえず hari1 が接っしている
> 流体の以下のような nu の宣言行を transportProperties に足してみてくだ
> さい。

試したところ,forces.datにちゃんと値がプロットされていました!ありがとうございます!
ところでこの力は,何を計算していることになるのでしょうか.
hari1に接している2つの流体のうち,transportPropertiesにnuを足した流体の力だけを
求めていることになるのでしょうか.

forces.datを取り出しますと

# Time forces(pressure, viscous) moment(pressure, viscous)
0.00111111 (((-8.53243 0 0) (2.04952e-12 2.79664e-06 0)) ((0
-0.0622867 2.49418) (-2.04155e-08 1.49615e-14 1.65473e-06)))
0.00238095 (((-8.56072 0 0) (2.21888e-12 4.82399e-06 0)) ((0
-0.0624933 2.50232) (-3.52152e-08 1.61978e-14 2.85428e-06)))
0.00390476 (((-8.5869 0 0) (1.67669e-12 7.36012e-06 0)) ((0 -0.0626844
2.50997) (-5.37289e-08 1.22398e-14 4.35487e-06)))
0.00542857 (((-8.6261 0 0) (-1.20052e-12 1.02161e-05 0)) ((0
-0.0629706 2.52145) (-7.45775e-08 -8.7638e-15 6.0447e-06)))
0.00695238 (((-8.66736 0 0) (-1.36729e-12 1.30903e-05 0)) ((0
-0.0632717 2.5335) (-9.55591e-08 -9.98122e-15 7.74532e-06)))
0.00847619 (((-8.71121 0 0) (1.51326e-12 1.5964e-05 0)) ((0 -0.0635918
2.5463) (-1.16537e-07 1.10468e-14 9.44566e-06)))
0.01 (((-8.75765 0 0) (2.96233e-13 1.88305e-05 0)) ((0 -0.0639309
2.55986) (-1.37463e-07 2.1625e-15 1.11417e-05)))

となり,まだhari1に接していないのに,はじめからhari1に-8から-9ものforces(pressure)が
加わっているようです.

aki

Sakuma

unread,
Jul 13, 2010, 6:05:12 PM7/13/10
to OpenFOAM
sakumaです。

皆様の投稿を色々と読ませて頂き勉強していますが,なかなかうまく行きません。
simpleFoamでforceを計算させるには,どのようにfunctionを書けば良いのでしょうか。

また,akiさんが投稿されたfunctionですが、
functions
(
forces
{
type forces;
functionObjectLibs ("libforces.so");
patches (hari1);
pName p;
Uname U;
rhoName rhoInf;
rhoInf 1000;
CofR (0 0 0);
outputControl timeStep;
outputInterval 1;
}
);
このp,Uなどの変数は,どこで設定すれば良いのでしょうか。

ご教授をよろしくお願いします。

E.Mogura

unread,
Jul 14, 2010, 8:09:49 AM7/14/10
to OpenFOAM
E.Mogura です。

> simpleFoamでforceを計算させるには,どのようにfunctionを書けば良いのでしょうか。

system/controlDict

の中(の最後のほう)に、

> functions
> (
> forces
> {
> type forces;
> functionObjectLibs ("libforces.so");
> patches (hari1);
> pName p;
> Uname U;
> rhoName rhoInf;
> rhoInf 1000;
> CofR (0 0 0);
> outputControl timeStep;
> outputInterval 1;
> }
> );

を書きなさいということです。
但し、patchの名前部分は、

> patches (hari1);

自分が計算したいモデルで使っている名前に変更する必要はあります。

Sakumaさんは、DEXCSを使ってくれていたのであえて書かせてもらいますが、
DEXCSの標準モデルをそのまま使えば計算してくれているので、
論より証拠のほど、確認下さい。

(但し、OF-1.5.xなので、書式はやや違ってます。下記参照)

【DEXCS2009(OF-1.5.x)の exe/system/controlDict 中に記述している内容】

forces
{
type forces;
functionObjectLibs ("libforces.so"); //Lib to load
patches (dexcs_Font); // change to your patch name
rhoInf 1.225; //Reference density for fluid
CofR (0.15 0 0); //Origin for moment calculations
}

【近日公開予定(?)のDEXCS2010(OF-1.6.x)のcontrolDict中に記述している内容】

forces
{
type forces;
functionObjectLibs ( "libforces.so" );
outputControl timeStep;
outputInterval 1;
patches (dexcs_Font);
pName p;
UName U;
rhoName rhoInf;
log true;
rhoInf 1.225;
CofR (0.25 0.007 0.125);
}

結果はどちらも同じ、exe/forces/1  の下に、
forces.datが出来ており、その内容は、

# Time forces(pressure, viscous) moment(pressure, viscous)
1 (((53.4678 1.67511 9.77618) (0.77326 -0.0919825 -0.190876))
((-36.669 58.2827 190.456) (0.736248 -0.559496 3.22178)))
2 (((77.9884 2.51417 13.7068) (0.692949 -0.0844395 -0.183923))
((-51.5913 83.1171 277.72) (0.706826 -0.545711 2.89192)))
3 (((63.8866 1.59865 9.50274) (0.525127 -0.070354 -0.153363))
((-35.8437 61.6405 229.423) (0.588762 -0.460883 2.2108)))
4 (((34.8694 0.246298 3.24072) (0.404829 -0.0638166 -0.131072))
((-12.272 26.6006 127.637) (0.505164 -0.402992 1.7405)))


となっているはずです(数字そのものは少々違っているかもしれません)。
> > aki- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

Sakuma

unread,
Jul 15, 2010, 10:09:49 AM7/15/10
to OpenFOAM
sakumaです。

E.Moguraさん,ありがとうございました。
やっと出来ました。まだまだ初心者の私にとってはOpenFOAMは奥が深いです。

DEXCSのテンプレートにあるcontrolDictを見ますと,お教え頂いたforces以外に
forceCoeffsがあります。これは,OpenCFD社のドキュメント/c++のソースを見ます
と Lift, Drag,Pitchを計算するようですが,これは飛行機などの解析で使うので
しょうか。

色々とDEXCSを使わせて頂いていますが,probes1,force,forceCoeffsが
計算されているとは知りませんでした。勉強になりました。

また,DEXCS2010(OF-1.6.x)ですが,1.7も入っているのでしょうか。楽しみに待っています。
> > - 引用テキストを表示 -- 引用テキストを表示しない -
>
> - 引用テキストを表示 -- 引用テキストを表示しない -
>
> - 引用テキストを表示 -
Reply all
Reply to author
Forward
0 new messages