2014-12-24

ParaView で、FIELDVIEW での Complete, no data read 的なやつ

マニュアル読むのが面倒なので適当にやってたら似たようなことができた。まだ完璧じゃないけど、ここまでにわかったことをとりあえずメモ。

今やりたいのはとりあえず以下の様な状況:
「時刻100までの連番データを open して、いい感じの可視化をした。が、もうちょっとデータを追加したい(時刻200とか)」
これやるのに一々全消しして open しなおして、可視化しなおしてた。面倒すぎて死ぬ。

手順

  1. 適当に可視化する。とりあえず save state しとく
  2. 追加で data を open して、apply する(apply 必須)
  3. Pipeline Brouwser で、すでに可視化したオブジェクト、たとえば Contour5 とかを右クリック > "Change Input..." する。このとき、オブジェクトは Shift で複数まとめて選択できる…と思ったが、全部いっぺんに change input はできなかった…
  4. オブジェクトたちが、新たに読み込んだ連番 data の方にぶら下がり、見た目などはそのままでデータセットが変わる
  5. 古い方の data を delete する(右クリックでもいいし、Property ペインの一番上にある Delete ボタンでもいい)
とりあえずこんだけ。
一度アプリ閉じたりしても load state からやればまたできるはず…だが、そもそもの save state したときの流れ場データなくなってたらだめかも?まだ試してない。

2014-10-04

minloc, minval (maxloc, maxval) について再度自分用まとめ。サンプルつき

これ何度目だよって感じだが忘れやすいので…

2次元配列 a(i,j) について考えてみよう。もっと具体的にするか…

a =
i  / j →

 |   1  2   3  0 |     |(1,1) (1,2) (1,3) (1,4)|
 |   5  6   7  8 | ... |(2,1) (2,2) (2,3) (2,4)|
 |   9  8   0  6 |     |(3,1) (3,2) (3,3) (3,4)|
 |  -3  4  -1  2 |     |(4,1) (4,2) (4,3) (4,4)|

としよう。

val:

  • 無指定 → 返り値はスカラ。minval( a ) で配列全体の最小値。 minval( a ) = -3.
  • dim を指定 → 返り値は配列。minval( a, dim=1 ) なら、各列ごとの最小値。minval( a, dim=1 ) = ( -3, 2, -1, 0 )

loc:

  • 無指定 → 返り値は1次元配列(ここを勘違いしてた)。今は2次元配列なので、要素は2つ。考えたら当たり前で、ここに入ってる値ってのが ( i_location_a_is_min, j_location_a_is_min ) ということ。そりゃそうだ…。minloc( a ) = ( 4, 1 ).
  • 当然、3次元配列なら ( i_minloc, j_minloc, k_minloc ) の3要素が入った1次元配列になる。
  • dim を指定 → 返り値は配列。次元は今の場合 2-1 = 1 になる。意味は「各列で最小の値のj位置」になる。つまり minloc( a, dim=1 ) = ( 4, 1, 4, 1 ) となる。i 位置の情報はシーケンシャルというところで入ってるので省略されるわけか…。

サンプルコード

ただし、古い g95 では minloc のところがランタイムに segfault になる。-Wall, -Wextra などはスルーされる。$ g95 -v で 2010 なら多分アウト。バグだったっぽい。gfortran か ifort で試すのがベター。

program test_val_loc
  implicit none
  integer :: a(4,4)

  a(1,1) = 1
  a(1,2) = 2
  a(1,3) = 3
  a(1,4) = 0

  a(2,1) = 5
  a(2,2) = 6
  a(2,3) = 7
  a(2,4) = 8

  a(3,1) = 9
  a(3,2) = 8
  a(3,3) = 0
  a(3,4) = 6

  a(4,1) = -3
  a(4,2) = 4
  a(4,3) = -1
  a(4,4) = 2

  !! val
  write(*,"('minval( a ) = ',i2)") minval( a )
  write(*,"('minval( a, dim=1 ) = ',4(i2,1x))") minval( a, dim=1 )
  write(*,"('minval( a, dim=2 ) = ',4(i2,1x))") minval( a, dim=2 )

  !! loc
  write(*,"('minloc( a ) = (i_minloc,j_minloc) = (',i2,',',i2,')')") minloc( a )
  write(*,"('minloc( a, dim=1 ) = ',4(i2,1x))") minloc( a, dim=1 )
  write(*,"('minloc( a, dim=2 ) = ',4(i2,1x))") minloc( a, dim=2 )

  stop
endprogram test_val_loc

2014-08-27

Fortran でインラインコメントの intent(in/out/inout) を1行に複数書く

今までは Fortran で何かの subroutine を call するとき、

  call subr( &
      &   n       = n &       !! intent(in)
      & , mat_in  = mat_in &  !! intent(in)
      & , mat_out = mat_out & !! intent(out)
  & )

のように書いていた(いる)。コロンの位置が気持ち悪いというのはよく言われるが、今はそこは関係ない(理由は、行単位でのコメントアウトや移動が楽なため)。注目すべきは右にあるインラインコメントによる intent の明示。この書き方、引数が多い時は確かに誤解の余地がなくていいのだが、引数が少ない時は若干煩雑だ。引数3つくらいまでは1行で書いてしまいたい。しかし、引数が2つ以上あるとき、1行にしてしまうと intent(in) がひとつしか書けないのが問題だった。…と思っていた。思いこんでいた。思いこみコワイ。

  call subr( n, mat_in, mat_out ) !! intent(in, in, out)

これでいいじゃん!あるいはセミコロンでもいいか:

  call subr( n, mat_in, mat_out ) !! intent(in; in; out)

C言語系の人にしたらセミコロンは気持ち悪そうだが。

UPDATE 2014-12-03
引数が多いけどそれぞれが短めのとき、

call prep_nc_nf( i, j, nxf, ind,  nc, nf_SW, nf_SE, nf_NW, nf_NE )
!!       intent(in, in, in,  in, out,   out,   out,   out, out   )

とするのを思いついた。これくらいになると安全のために = (イコール)を使いたくなるが…まぁC言語屋さんにはこっちのほうがわかりやすいのかなとか。

2014-08-07

C/C++メモ

こんなの書いておくまでもねーよwwww と思ってたことこそ忘れていく…ので、GTD精神でむしろ忘れるために書くくらいの勢いでメモしておく。

$ gcc foo.cpp -libstdc++ と $ g++ foo.cpp は等価

ということをググっていた(2回目…)ところ、なんと clang にも clang++ がある…だと…?
http://d.hatena.ne.jp/candinmarruh/20140208/p3
あぁ mac でたまに変なエラーが出ていて iostream 使うのやめると通ってたのはこれかぁ…

Fortran でのアレってなんだっけ
  • Fortran でいう変数の save 属性は static
  • Fortran でいう cycle は continue ←ハマった
  • Fortran でいう exit は break
  • Fortran でいう stop が exit(とabort) ← ヤメテ…
  • Fortran でいう call はない。いきなりサブルーチン(じゃなくて関数か)を書く。カッコ必須
  • Fortran でいう intent(in) は const


2014-07-16

nViewでウィンドウを透明化し、透明度を変える

Win8で透明度なくなって寂しいなぁというのと、minttyとかMacのiTerm2とかで半透明が気に入ったので。というか、せっかくきれいな壁紙探してきたのにアプリの裏に隠れて見えねーよ!というのが最大の理由…

以下、nvidiaのビデオカードとnViewっていうツールが入ってること前提。

マルチモニタの設定にしか使ったことなかったんだけど、Notepad++で背景半透明にできないのかなぁと思ってググってたら、nView で任意のウィンドウを半透明化できることが判明。

適当なウィンドウのタイトルバーを右クリックして、「nView オプション > 透明」で透明化できる。ただし、デフォルトだと50%という高めの透明度なので見づらい。透明度を変えるには一手間かかる。

同様のタイトルバー右クリックなどから「nView オプション > メニュー オプション...」でダイアログを呼び出す。ここで「個別設定」にチェック。すると、「nView オプション」に「個別設定」というのが出てくるようになるので、ここをポイントして「編集...」をクリック。ここで、「透過を使用して次の比率で描画する」のところを下げる。実用的には10%とか15%くらいかね…。まぁあまり下げないと結局複数のウィンドウが重なったらもう壁紙は見えないんだが…

あとグローバル設定がどうの、とあるのだが、全てのウィンドウに同じ設定をするという方法はよくわからなかった…

あとオススメの設定として、デスクトップを右クリックして nView Desktop Manager を呼び出し、「ホットキー > ウィンドウとアプリケーション > 透過を切り替える」で「追加...」し、「ホットキーストローク」のところに適当なホットキーを設定する。とりあえず Ctrl+T にしてみた。これで、アクティブなウィンドウの透明⇔不透明が Ctrl+T によりトグル切り替えできるようになった。


2014-07-17 UPDATE
Ctrl+Tってブラウザで「新しいタブを開く」じゃねーか…なにやってんだか。

2014-07-05

自分用メモ:PFV or PMC → AviUtl → XMedia Record で動画作成

高速度ビデオ動画をスライドなどで再生可能な状態に持っていく、かつ、必要に応じて複数の動画を貼り合わせる方法のメモ。

  1. PFV (Photron Fastcam Viewer) または PMC (Phantom MultiCam) で高速度ビデオのデータの必要な区間を、非圧縮 avi または連番 bitmap に変換。一般的には後者が良さそう(下記参照)。PFVの場合、12 bit グレースケールから8 bit グレースケールに変換するのもここ。
  2. 必要に応じて、IrfanView, Ralpha, GIMP や Photoshop で画像処理。これもあるし、bitmap 連番がよさそう。ファイル数が膨大になるのだけネックだけどまぁ…
  3. 必要に応じて、AviUtl (でなくてもいいんだが今のところ)で、複数動画を貼り合わせる。なぜか avi だと真っ白とか真っ黒になることがある(PFV での 12 bit --> 8 bit の関係?)ので、bitmap がよさそう。一番の注意は、「フィルタ」メニューでのチェックが各設定ウィンドウでのチェックに対応していて、「設定メニュー」というただのウィンドウ呼び出しであること。あと、fps指定するとなんかフレーム数が変わってしまう(68フレームある連番ファイルで20fpsにすると45フレームになってしまう。68*20/30 = 45 なので30フレームにしないと変になるってことみたいだが、よくわかってない)。クリッピングはそこそこ使いやすいが、複数動画を拡張編集(ドロップでよい)で並べる時のXY位置の指定が中心原点になっててやりづらすぎる。左上原点とかの絶対座標で指定できないのか…(設定調べたらあるかも)。AviUtl での保存は非圧縮 avi にしている(今のところ)。
  4. 非圧縮 avi を XMedia Record で変換。Macでのプレゼン(Keynote, Powerpoint) では Apple ProRes が容量ちょっと大きいけど今のところ最適っぽい。サイズ気になる場合は Proxy で。画質気にする場合は LT か無印でよさげ。ていうかそんな変わらないような…。Snow Leopard くらいのときは H.264 だと動画動かないって先生(Macユーザ)に怒られてたけど、今ならもう大丈夫なのかも。でも拡張子は mov が安定っぽい。正直 XMedia Record は UI が使いづらいので、なんか違うのに変えたい。Mac の Handbraek よりはいいと思うけどね…

昔は WMV よく使ってたけど、相当圧縮下げないと画質悪いし、なにより Mac で動かないことが多すぎるのでもう使わない。Windows なら確実に H.264 動くし…

2014-06-30

Excelの多項式近似で係数の桁数が少ない場合 → 指数表示にする

Excel 2007 on Windows でのお話。他のバージョンは違うかも。

デフォルトだと、なぜか係数によって桁数が多かったり少なかったりする。特に次数が高い項の係数の桁数が少ないのに気付かず、表示されている数式をそのまま別のセルとかプログラムで使おうとすると、xの値によって関数が再現できていない、ということがある。

こういうときは、近似式を右クリックして、「近似曲線ラベルの書式設定」から、指数にする。「小数点以下の桁数」は15とか多めにすると逆に変になることがあった。単精度なのかな?なので5-7桁あたりがいいんじゃなかろうか。

まぁそもそも6次までしか使えないしExcelのそのままなんて使うなよって話ではあるけど、お手軽なのでつい使ってしまうんだよね。