DEXCS2014 for OF(ubuntu-14.04)on VMwarePlayer システム更新トラブル(その2)

VMwarePlayerで使用する場合に、システム更新すると共有フォルダが使えなくなってしまうという問題がありました。どの時点から使えなくなったのか定かではありませんが。

システム更新と併行してVMwareToolsもアップデートするんですが、その際のエラーメッセージを見落としてていました。

範囲を選択_999(461)

 

色々調べたところ、VMwareToolsのバグらしいということは判ったのですが、このツールのヴァージョンによって微妙に対処方法が違うようで、(VMwareTools-9.6.4-2441333)では、以下の方法でソースを変更、再インストール(vmware-config.tools.pl)で何とかなりました。

# cd /usr/lib/vmware-tools/modules/source/
# tar xf vmhgfs.tar
# sed -i ‘s/d_alloc/d_u.d_alloc/’ vmhgfs-only/inode.c
# tar cf vmhgfs.tar vmhgfs-only

要は、Linuxのカーネルに応じて、d_allocの部分を書き換えてやる必要があるということらしいんだが、対象ソースファイルや、書き換え対象テキストが、ツールのヴァージョンによって、微妙に変化してきているようです。

参考にしたサイト情報

http://chocolapod.sakura.ne.jp/blog/entry/47

https://communities.vmware.com/thread/503607

http://akiki2starlet.blog.fc2.com/blog-category-5.html

DEXCS2014 for OF(ubuntu-14.04) システム更新トラブル

DEXCS2014 for OpenFOAM(R)にて、セキュリティアップデートなどのシステム更新をしたりすると、(自分の環境の場合、実マシンでは問題なかったが、仮想マシンで)再起動後にログイン画面でパスワードを入力した後、デスクトップ画面が表示されなくなってしまう、というトラブルが多発しておりました。
まぁ、仮想マシンなので、駄目になったら、再インストールすればいいや・・・ぐらいで使ってきていましたが、少し前に記載した Hira Stl Viewer を使用したいが為、wineをインストールした時も同じ状態になってしまい、この場合は、それまでに何かと作りこんだケースファイルも多くあったので、何とか復旧する手立てはないものかと調べました。

 

これもまぁ結果オーライで、一般性のある解決手段であるかどうか定かではありませんが、自分のマシン環境では解決できたので、その方法を記しておきます。

参考にした情報はこちら

CTRL + ALT + F1 を押して、ターミナルモードでログインし、以下コマンド入力

$ sudo apt-get install –reinstall ubuntu-desktop
$ sudo apt-get install unity
$ sudo apt-get purge nvidia* bumblebee*
$ sudo apt-get install nvidia-prime
$ sudo reboot

自分のマシンは、仮想マシンを動かすマシンはnvidiaのグラフィックカードを使っており(OSもubuntuでない)、DEXCS2014をインストールした実マシンはnvidiaのグラフィックカードを搭載しておらず、多分、この方法で何とかなったんじゃないかと思います。

OpenFOAM ソースコードの探索・デバッグ on DEXCS2014

最近、あるソルバーの動作を調べてもらいたいという注文があったので、久しぶりにコード検索・デバッグツールを使ってみようと思い立ちました。

しかし、数年前に使ったきりで、その当時からお世話になったPENGUINITISさんのサイトには今でも紹介されているんですが、情報が少々古くなってきており、この最新の環境だと、昔の方法がそのまま使えない事項もあったので、ここにDEXCS2014(OpenFOAM-2.3.x on ubuntu-14.04)の場合、どうであったかを取りまとめておくこととしました。

なお、ここで取り扱うのは、本家のWikiページ(HowTo debugging)にあるような、コマンドライン入力でgdbなんかを使ってシコシコやるっていうのではなく、あくまでGUIツールを使ってやる方法です。

 

GUIデバッグツール

これまでに使用したことのあるデバッグツールは以下の3つです。

  • NetBeans
  • KDbg
  • Eclipse

ソースコードを静的に探索するならNetBeans、動的というかステップ実行したり、変数の内容を確認したりの、いわゆるデバッグするにはKDbgがお手軽に使える反面、これらのツールで両方共出来るということはない。片やEclipseではどちらも出来るのだが、設定が面倒だし重いとかあって、お手軽でないという、どれも一長一短あって、用途に応じて使い分けるしかないのかなぁ・・・というのがこれまでの個人的な結論でありました。

そこで、それぞれのツールについて、DEXCS2014で動かす方法とその結果について以下に記しておきます。

 

NetBeans

現時点での最新版 IDE 8.02が使えました。PENGUINITISさんのサイトでは、IDE 7.2 for OF-2.1.1 の説明で、当時は日本語表示がうまく使えなかったようですが、現在は問題なく使えます。言語設定(LANG=…)の必要はありません(英語で使いたい人は別ですが)。また、富山勉強会のサイトにも、NetBeans設定方法(IDE 7.4 for OF-2.2.2)について取りまとめられており、基本的にはこれらの方法と同じで大丈夫でした。

範囲を選択_016

ソースファイル一式を丸ごと解析するので、最初はちょっと時間がかかりますが、解析が終われば、上の図に示すような感じで、キーワードの上でマウス右クリックを使って、さほどストレスなくコードの中味をたどることが出来るようになります。

範囲を選択_015

但し、上の図の例でいうと、ソース行番号の欄で、何やらマークが付けられた行、

turbulence->correct();

は、ライブラリの中味まではたどることが出来ないということです。ただ、ここは後で述べるEclipseのようにコンパイル環境の設定までは実施していないのがそもそもの原因なので、そこが出来ていれば多分可能なんでしょう。そのやり方が判れば・・・なんですがね。(判りました⇒追記参照)

 

KDbg

残念ながら、KDbgはDEXCS2014上では動きませんでした。Synapticパッケージマネージャからはインストール出来るようになっていたのですが、インストール出来はしたものの、実行しようとするとSegmentation fault です。そもそもランチャー用のアイコンも実体がありませんでした。

ソースコードからインストールする方法も試してみましたが、KDEのヘッダーが何チャラというエラーメッセージで、要するにちゃんとしたKDE環境でないと動かないということらしい。多分、ubuntu系なら、Kubuntuを使えということなんでしょう。

とはいうものの、DEXCS2013(OS は、mint 13、実質ubuntu-12.04)の古い環境で、OpenFOAM-2.3.1(注)を動かすことは出来たので、ここで他のツールとの比較という観点から、ちょっとだけ紹介。

(注)本当は、OpenFOAM-2.3.xを調べたかったのですが、拙宅マシン(mint 13 / ubuntu-12.04)で、DEXCS2014公開当時の2.3.xはコンパイル出来ていたのですが、拙宅マシンに当時の版は残っておらず、更新した最新版2.3.xは、不完全なコンパイルしか出来なくなってしまっていたので、2.3.1で検証しました。

基本的には、PENGUINITISさんのサイト記載してある方法でインストールから、ブレークポイントを設定したり、ステップ実行が出来るようになります。

そこで、たとえばNetBeansの静的な解析でたどれなかった箇所にブレークポイントを置いてデバッグを「実行」すると、その箇所で待ち状態になってくれます。

範囲を選択_018

 

ここで「ステップ イントゥ」を何回か(この場合は4回)押すと…

範囲を選択_019となって、所望のライブラリファイル(この例ではkEpsilonを使っているので、kEpsilon.C)にたどり着くことが出来るという次第です。

チャチャッと調べるには、このツールがなかなか便利なだけに、DEXCS2014で使えないのが残念です。

 

Eclipse

はっきり言って、これはややこしい。

「openfoam eclipse debug 」あたりでググっても、拙作記事が結構上位に出てくるくらいで、本家の方にも新しい情報がない。結局、この拙作記事からたどれる、これまた拙作のインストール方法やら、使用(コンパイルから実行までの)方法やらを頼りに、ほぼ同じ方法で、DEXCS2014に環境構築するところまでは出来ました。

範囲を選択_020

コードを検索するあたりは、Ctrlキーを押しながらマウスクリックで、範囲を選択_021

簡単にたどれるようにはなる。

また、Eclipseの上でコンパイルする方法も判っていたので、これも同じやり方(といってもかなり試行錯誤でやり直したが)でなんとかコンパイル出来るようにはなった。

範囲を選択_022

ただこの時点でも、ライブラリの中味までたどれないのはNetBeansと同じです。

次にデバッグ用のケースファイルを作成してデバッグを実行しますが、設定を間違えていなければ、次のメッセージ画面が現れます。

範囲を選択_023

問題は、これが出てくるまでに、異常に長い時間(数分というオーダー)がかかってしまう事でした。2回目以降はそうでもないようですが。

範囲を選択_024

何はともあれ、デバッグが開始されれば、KDbgと同じように、ブレークポイントを設定⇒Step Into(F5) で、所望のライブラリまでたどり着くことは出来ました。

 

なお、以前の方法と「ほぼ同じ」やり方と記しましたが、違う点はgdbをインストールし直す点です。以前の方法では、標準のgdbをアンインストールして、古いヴァージョン(gdb-6.8)を入れ直す必要がありました。今回もそれを試みましたが、残念ながら出来ませんでした。コンパイルすると…

In file included from amd64-linux-nat.c:26:0:
linux-nat.h:63:18: error: field ‘siginfo’ has incomplete type
struct siginfo siginfo;
^
make[2]: *** [amd64-linux-nat.o] エラー 1

というエラーで、ググったところ、それらしい情報もいくつか見かけましたけど、解決策には到らずでした。

デバッガーが起動するまでにやたら時間がかかるのはこのことが原因なのかもしれません。ここ(gdbを入れ直すところ)はスキップ、もしくは最新版を入れ直すなどもやってみて、違いがあるような、無いような・・・よく判りません。

 

まぁ、とりあえず動くようになって、今回調べたいコードの探索も出来るようにはなっており、これ以上時間をかけるのは本筋ではないので、これにて調査終了としました。

 

追記(2015/1/30)

NetBeansでデバッグまでは出来ていないと記しましたが、本記事を見たFaceBookの読者さん(富山県立大の中川慎二先生)から情報を頂きました。

範囲を選択_025

情報はこちら(⇒ http://eddy.pu-toyama.ac.jp/bb7e59f23-126/#_126

早速確認させていただきました。

範囲を選択_017やはり、コンパイルのやり方にひと工夫(wmakeを変更)が必要だったようですが、出来てしまえば、あとは簡単でした。

英語メニューでの解説を日本語メニューで読み替えるのに少し戸惑いましたが、Eclipseに比べるとメニューがそれほど込み入っておらず、メニュー探しに手間取ったり、間違えたりすることは断然少なく済みそうです。

安定性の面では、もう少し使い込まないことにはわかりませんが、これもEclipseとの比較でOKなら、Eclipseは不要になりますね。

 

 

 

cfMeshのオプションパラメタ

cfMeshはsnappyHexMeshに比べて、メッシュ設定用のパラメタの数が少なく、さほど混みいった形状でない場合には、拙作のFreeCAD用マクロ(makeCfMeshSetting.py)のGUIでほとんど用が足りると思います。

そうでない場合に、その他のオプションパラメタで改善される可能性は有るということですが、そもそも設定パラメタとして何があるのか・・・先日の講習会では、以下のような一覧でまとめました。

範囲を選択_560

cfMeshのマニュアル(cfMesh User Guide)にも記してありますが、これらのうち必須(Mandatory)パラメタは、

  • maxCellSize
  • surfaceFile

の2つだけです。その他のパラメタはすべてオプションで、指定してもしなくてもOK。上図右半分のレイヤー(boundaryLayers)とパッチの名前変更(renameBoundary)を除外すると、オプションパラメタとしては、以下8つある事になります。

  1. boundaryCellSize
  2. miniCellSize
  3. keepCellsIntersectingBoundary
  4. checkForGluedMesh(removeGluedMesh?)
  5. keepCellsIntersectingPatch
  6. removeCellsIntersectingPatch
  7. localRefinement
  8. ojectRefinements

拙作のFreeCAD用マクロ において、青字部分はGUIパネルにて設定変更が可能で、赤字部分はmeshDictにパラメタだけは記述してあり、内容をmeshDictの直接編集で追記可能な構造になっています(先に引用したパラメタ総覧での説明内容と一部異なっていますが、こちらの説明が正しい)。

本来であれば、これらのパラメタの意味をしっかり理解してマクロを作成すべきでしたが、それでもこれだけカバーしておけばそこそこ使えそうだ・・・ということで、期日の制限もあり、中途半端でしたがリリースの運びとなりました。

その後、オプションパラメタの意味を自分なりに実例を使いながら調べていますが、いまだよく判らない点は残ってはいるものの、ある程度は判ってきたので、以下にその調査結果を記しておくことにしたのと、改良版マクロ(meshDictに記述するパラメタリストに洩れが無いようにしたもの)を(近日中に)公開することとしました。

 

checkForGluedMesh(removeGluedMesh?)

範囲を選択_561

cfMesh User Guide の10ページ目をキャプチャーしたのが上の図で、本文中にはcheckForGluedMeshとありますが、添付図(Figure 14)ではremoveGluedMeshとなっています。どっちが正しいのか? ってことです。

拙作マクロでは、removeGluedMeshを出力するようにしていましたが、どうやら間違いで、checkForGluedMeshが正しいようです(その効能は後述)。

実は、スペルミスなど間違った名前で記しても無視されるだけで、構文(カッコの位置など)さえ間違っていなければプログラム実行には支障を来たさないという、ロバスト(?)なつくりになっていることも判りました。

 

keepCellsIntersectingBoundary/checkForGluedMesh

上に引用したcfMesh User Guideを見ても判るように、これらは対で使います。つまり、keepCellsIntersectingBoundaryが有効(=1)の場合に、checkForGluedMeshが意味を持ち、(無効=0)の場合には、無視されるということです。

なお、これらはglobal option ということで、メッシュ全体に適用されるパラメタであり、類似の

keepCellsIntersectingPatch/removeCellsIntersectingPatch

は、同様の指定を個別のpatchで使ってもよいということです。

問題は、これらがどうやって作用するかってことですが、ようやく判りやすい具体事例をbackStepモデル(後流領域の高さのサイズは3)で作成できたので、以下に示します。

範囲を選択_562

ベースのメッシュサイズ(maxCellSize)と境界面の関係が下図のようになっていて、

範囲を選択_563

ベースメッシュと境界が交叉する要素(cellsIntersectingBoundary)をkeep(メッシュ作成)するかどうかってことです。模式的に描くと出来上がりメッシュが下図の格子のようになるってことです。

範囲を選択_564

もちろん、実際にはこの模式図のような等間隔にはならなくて、backStepモデルで示すように、maxCellSizeを目安とした不等間隔メッシュになります。

checkForGluedMeshの効能については、maxCellSizeによって、現れる場合(backStepモデルでmaxCellSize=0.3の場合)と、現れない場合(maxCellSize=0.4の場合)もあるってことでした。

要は、keepCellsIntersectingBoundaryを1にしてメッシュ作成すると、maxCellSizeより必然的に小さなメッシュが出来て、それらは境界面にしわ寄せされることになる。そういうGlued(くっついて離れない)メッシュを取り除くかどうかってことのようです。

なお、蛇足になりますが、上述の機能、また個別のpatchで使用する際のパラメタの名前removeCellsIntersectingPatch との対比においても、removeGluedMeshであってくれた方が判りやすかったと思います。

 

もうちょっと実用的なサンプル

これは過去記事にある有料セミナーで実施したもので、

範囲を選択_575

その時はsnappyHexMeshでメッシュ作成したのに対し、今回はcfMeshで作成しようとトライしています。

まず、空気領域のメッシュは、普通に拙作マクロを使って、以下設定。

範囲を選択_566

いとも簡単にメッシュが出来ました。

範囲を選択_576

問題は、固体領域です。空気領域の設定(finのcellSize 0.3)に合わせて、以下のように設定すると・・・範囲を選択_574

残念ながら、こうなってしまいます。フィンの厚さが薄いので仕方ないってことでしょうが・・・

範囲を選択_570

しかし、ここでmeshDictを直接編集、範囲を選択_577

keepCellsIntersectingBoundaryを1にしてやれば・・・

範囲を選択_571

となって、お見事! めでたし、めでたしでした。

 

 

 

まとめ

cfMeshのオプションパラメタのうち、 

  • keepCellsIntersectingBoundary
  • checkForGluedMesh(removeGluedMesh?)
  • keepCellsIntersectingPatch
  • removeCellsIntersectingPatch

について、本記事にて説明させていただきました。

  • localRefinement
  • boundaryCellSize
  • ojectRefinements

については、説明するまでない、ほぼ自明ですね。

  • miniCellSize

については、ある程度判ると思いますが、まだ良くわからない点があります⇒(公開掲示版情報を参照下さい)。現在調査中です。

 

 

その他Tips

マルチコアの環境で計算すると、CPUの負荷状況に応じてマルチスレッド処理がダイナミックに変化するためか、同一パラメタを指定してあっても、計算結果が変化する場合が多々あるようです。簡単なモデルではそうでもないですが、DEXCSの標準チュートリアル問題ではよくあることでした。

また上述したように、間違ったパラメタを指定してもエラーにはなってくれないので、パラメタを変えて実行した際に、パラメタ変更の結果なのか、マルチスレッド処理の結果変化なのか、区別できなくなってしまいまうことがあるので要注意です。

パラメタスタディをする際に、これらの事象を念頭において実施する必要があったということで、これに気づくまでかなりの回り道をしてしまいました。

とはいえ、今時シングルコアのマシンもないでしょうから、ちゃんとパラメタスタディする際には、仮想環境でシングルコアの設定にして実施するのがお勧めです。

FOCUS by DEXCS その1

FOCUSとは

産業利用目的の公的エントリー・スパコンで、初期費用は1万円かかるけど、かなり安価な従量制で、使わなければ一切費用は不要というシンプル利用体系になっていることから、拙事業(OCSE^2)でも大規模計算のコンサル用途に契約することと致しました。

但し、基本的に法人契約しか受け付けてくれないというので、パートナーであるイワタシステムさんの名前で契約して、OCSE^2はその下請けということになってますが・・・

問題は、リモートアクセスで色んな操作をすることになるので、当然、端末を使ってコマンド入力になる。しかも公開されているマニュアルにはWindowsマシン(拙事業ではプレゼン用のノートパソコンしか無いのです)で操作することを前提に、teratermを立ちあげて・・・となっており、こりゃアカン・・・で、表題のFOCUS by DEXCS です。

 

 

狙い

本当はDEXCS on FOCUS、つまりFOCUSスパコンにDEXCSをインストールして解析(ケースファイル操作)したい所ですが、FOCUSのシステムにはアンタッチャブルなので、手元(ローカル)のDEXCSマシンで(リモート)FOCUSスパコン上の解析コントロールが出来るようにしよう・・・ということで、FOCUS by DEXCS です。

懇親会の立ち話などで、すでに一部の人にはアナウンスしておりますが、来年リリース予定のDEXCS2015 for OpenFOAM(R)では、FOCUS対応とすることを予定しており、本記事が第1報ということになります。

本記事では、それを実現する為のもっとも基本となる技術としてDEXCSマシンからFOCUSにログインして、FOCUSのファイルシステムをマウントする方法が判ったので、ここに備忘録がてら記しておくこととします。

 

 

FOCUSにログイン

するには、鍵交換方式を用いたSSH接続と、SSL-VPN接続がありますが、ここでは前者(SSH接続)の方法です。ここは普通に、コマンド端末を開いて、以下の赤字部分を入力。

custom@custom:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/custom/.ssh/id_rsa): ←Enterキーを押す
Enter passphrase (empty for no passphrase): ←パスワード入力
Enter same passphrase again:←パスワード入力
Your identification has been saved in /home/custom/.ssh/id_rsa.
Your public key has been saved in /home/custom/.ssh/id_rsa.pub.
The key fingerprint is:
69:f3:c0:48:da:40:76:69:5e:6b:2e:13:7d:6c:2e:5a custom@custom
The key’s randomart image is:
+–[ RSA 2048]—-+
| o .. |
| o .o . |
| .o.o o |
| =oo+.+ |
| . o+S+ |
| o.E+. |
| = .. |
| . |
| |
+—————–+
custom@custom:~$

そうすると、ホームディレクトリ下、.ssh という隠しフォルダが出来て、その中に、

custom@custom:~$ ls .ssh/ -l
合計 8
-rw——- 1 custom custom 1766 11月 28 18:33 id_rsa
-rw-r–r– 1 custom custom 395 11月 28 18:33 id_rsa.pub

id_rsa と、id_rsa.pub という2つのファイルが出来るので、このうちの公開鍵(id_rsa.pub)をFOCUSのセンター側へ送って登録してもらっておく。ここまでが事前準備。

公開鍵が登録されたら、

custom@custom:~$ ssh -Y -l hoge0001 ssh.j-focus.jp
The authenticity of host ‘ssh.j-focus.jp (114.179.35.249)’ can’t be established.
RSA key fingerprint is 1d:e9:17:12:8c:bc:70:09:7a:54:0a:5c:91:df:8d:9b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘ssh.j-focus.jp,114.179.35.249’ (RSA) to the list of known hosts.
Enter passphrase for key ‘/home/custom/.ssh/id_rsa’:←パスワード入力
Last login: Fri Nov 28 11:24:30 2014 from af230188.dynamic.ppp.asahi-net.or.jp

[hoge0001@login2 ~]$

青字部分はFOCUSに登録されたユーザー名になります)

これでログインサーバーに入れたことになるので、以下

[hoge0001@login2 ~]$ssh ff

にてフロントエンドサーバーに入って、普通に操作することは可能になります。但し、もちろんの事、コマンドライン入力になります。

あと、ファイル転送ソフトは使えるので、ファイルマネージャを使って操作すること(付録にて後述)は可能ですが、残念ながらこれが出来てもTreeFoamで操作することは出来ません。

 

 

FOCUSのファイルシステムをマウントする

には、もう一つツール(sshfs)をインストールする必要がありました(参考にした情報はこちら

範囲を選択_543

これをインストールしてから、端末で以下入力します。

custom@custom:~$ cd Desktop/
custom@custom:~/Desktop$ mkdir focus
custom@custom:~/Desktop$ sshfs hoge0001@ssh.j-focus.jp:/home1/gwgs/hoge0001 ./focus
Enter passphrase for key ‘/home/custom/.ssh/id_rsa’:←パスワード入力
custom@custom:~/Desktop$

こうすると、Desktop上にfocusというフォルダが出来て、範囲を選択_544

ファイルマネージャからもちゃんと見れるようになります。もちろんフォルダー名や作成場所は任意です。TreeFoamからもちゃんと見ることが出来、

範囲を選択_545

GridEditorの起動も確認。但しデータの読み込みで通信時間がかかるので、立ち上がりが遅いのは仕方ないところでしょうね。

範囲を選択_546

あまり意味のない事かもしれませんが、DEXCSマシンのOpenFOAMを使って計算することも可能でした。

今後

当然のことながら、 FOCUSスパコン上のOpenFOAMを使って計算できるようにしないと意味がありません。それが出来るようになったら、本稿で記したコマンド操作などを一括で実施するスクリプト作成、といったところでしょうか。

なお、FOCUSスパコンのジョブ管理システムはSLURMで、これはDEXCS2014 for OpenFOAM(R)にも搭載してあるものです。したがって、いきなりの本番計算でなく、手元のDEXCSマシンでバッチスクリプトの動作確認をしてから、という使い方も出来そうなので、そのやり方をまとめたいと思っています。

また、FOCUSよりもAWS(Amazonクラウドサービス)じゃない?・・・という声も聞こえてきそうなので、そちらもやってみたいとは思っております。

 

 

付録–ファイルマネージャでマウントする方法

範囲を選択_531

上図のように、ファイルマネージャ①を起動し、サーバーへ接続②をクリックします。範囲を選択_537サーバーアドレスを入力する欄が出て来るので、ここ(上図赤枠部)に

sftp://hoge0001@ssh.j-focus.jp

青字部分はFOCUSに登録されたユーザー名になります)

と入力し、「接続する」のボタンを押す。範囲を選択_536

そうすると、パスフレーズを入力するよう促されるので、暗号鍵を作成する際に使ったパスワードを入力し、「接続する」ボタンを押せば完了です。

範囲を選択_539