iPhoneでプレイリストをアーティスト順で表示させる2016

Share on Facebook

iOS9,MacはEl Capitan,iTunesのバージョンは12です

2016年になって,iOSは9,iTunesは12になってるのにMusicアプリのプレイリストで曲を思い通りの順にするのに苦労しました。やっとなんとかなったのでその備忘録です。

プレイリストをアーティスト順で表示させたい

MacのiTunesでのプレイリストはアーティスト順にしているのにiPhoneだと曲名順に表示される。同じようにしてるのにアーティスト順で表示されるプレイリストもあって,疑問でしたがやっとなんとかなりました。

MacのiTunesでプレイリストを表示すると右上にプレイリスト,曲とか表示されてるところがあるかと思います。ここを「曲」にして,「アートワークを表示」のチェックを外して,プレイリストをアーティスト順に並べておくと,iPhoneでもアーティスト順になりました。ここでアートワークを表示させると曲名順になりました。この右上のところの設定で表示順が変わります。

iTunes12

Bic SIMに変えた

Share on Facebook

iPhoneのSIMカード変更

2015年にフランスに長期滞在するということでSIMロックフリーのiPhoneを買っていたので,日本に帰ってきてから格安SIMに変更しました。

いろいろ調べましたが,インターネットも新しく契約する必要があったのでビックSIMにしました。フレッツ光の回線をつかうBic光との組み合わせで割引がつくという今時なサービスです。

携帯電話はiPhoneしかないので,音声通話付きで月のデータ容量3GB,1600円のにしました。
ビックSIM

使い勝手

2015年の10月頃に変えて,2ヶ月ちょい使ってみました。

仕事がら2,3ヶ月に一回くらい3日くらいの出張に行く感じで,他は普通に町中で使うくらいですが,月3GBで十分でした。出張にいっても全然だいじょうぶ。毎日に通信料をチェックするためのアプリもあります。毎日動画を長時間みるようだと足りないかもしれませんが,自宅で見ましょう。

Wi2 300が使える

ビックSIMの特典として,公衆無線LANのWi2 300のベーシックエリアが使えます。
Wi2 300

これでUQ Wi-fiとかに繋がるんですが,この前東海道新幹線にのったときにはまりました。新幹線内はUQ Wi-fiエリアですが,オプションになっていて別途料金を払う必要があります。ちなみに常磐線の特急のUQ Wi-fiは無料で使えます。ややこしい。

気になること

年に1回くらい海外出張しますが,ビックSIMだと国際ローミングで通話は可能ですが,データ通信ができないとかいてあります。基本的にデータ通信使いませんが,全く使えないのも困りもんです。

今度出張するなら現地SIMを買うのかなー。

2015年末にGPUを買ってみた

Share on Facebook

目的

GPU使った流体計算に興味があって,今までGPUを全く買ったことがなかったので買ってみました。

Geforce GTX960を買ってみた

全く知らないのでとりあえずCUDAが使えればいいや+予算3万までとおもって,NVIDIAのGTX960を買いました。

GPU計算について

順番がおかしいですが,買ってから性能とか調べてみました。
Wikipediaが一番詳しかったです。
https://en.wikipedia.org/wiki/GeForce_900_series

衝撃的事実。最近のGPUは倍精度計算の性能がほとんどない。
GTX960は 単精度2.3TFLOPSに対して,倍精度は1/32の72GFLOPSしかない。

数値計算する上では倍精度の速度がほしいのに。

なにを買えばよかったか?

GPU計算するならGPGPUとして出てるTeslaを素直に買うのが一番だというのが結論だと思います。それは知ってましたが,個人で買うようなものでもないので,様子見がしたかった。

個人が手が出せるとしたらTitanが限界かと。これも落とし穴があって,今でてるTitan Xだと倍精度計算の性能は全然だめです。Titan Zを買いましょう。Titan Zなら倍精度計算性能が2.7TFLOPSもあります。

まとめ

買ってしまった以上GTX960でなんかできることを考えてやってみようと思います。とりあえず倍精度はやめて単精度でベンチマークとってみるとか。OpenFOAMのCUDA版RapidCFDをとりあえずやってみようと思います。

pisoFOAMのpEqn.flux()について調べてみる

Share on Facebook

はじめに

縁あって流体解析なんぞやっていて,オープンソースのOpenFOAMをよく使うので,それについてメモ書き。ややこしいコードなので間違ってるかもしれませんが,そのときはご指摘ください。

ブログの本筋からは大分外れててすいません。

概要

OpenFOAM2.3.xのpisoFOAM中にある非直交補正のループ内に

pisoFoam.C

pEqn.flux()関数の呼び出しがあります。(行頭は行番号です)flux()関数がどうなっているかをGDBによるデバッグとGNU Globalによるソースコードの読解で調べてみました。

GDBとGlobal

GDB

GDBはGCCのデバッガです。OpenFOAMでGDBを使えるようにするには,コンパイルオプションWM_COMPILE_OPTIONをDebugにしてAllwmakeします。詳細は下記なんかがわかりやすいです。

http://www.tfd.chalmers.se/~hani/kurser/OS_CFD_2008/debugging.pdf

Global

GNU Globalはソースコードにタグをつけてくれるソフトです。関数のソースがどこにあるかなどの情報が見やすくなります。EclipseのF3を押しても同様のことができますが,候補が一覧で表示されるので,個人的にはEclipseよりも使いやすいです。

参考

http://www.machu.jp/diary/20090307.html#p01
http://uguisu.skr.jp/Windows/gtags.html

Globalはソースコードにタグ付けを行うので,OpenFOAMで使う場合にはtutorials, etc, bin, docを除外します。除外の仕方は以下を参考にしました。
http://d.hatena.ne.jp/ohtorii/20110219/1298092604

pisoFOAMのソースコードを見る

はじめにGlobalでflux()関数を見る

GlobalでpisoFoam.Cを見ると,flux()へのリンクができています。リンクをたどると以下のような候補が表示されます。

ごちゃごちゃしてますが,pEqnがfvMatrixのオブジェクトなので,fvMatrix.Cのflux()を見てみます。

fvMatrix.C

途中boundaryFieldの量を各パッチで計算したりしています。これは

の資料にあるように,flux()は圧力勾配から来る流束の修正を行っているように見えます。
(上のNozakiさんの資料は大変参考になります)

気になるのが955行目からの以下の部分

faceFluxCorrectionPtr_の示す値が追加されています。これが何をやっているかを調べてみます。

faceFluxCorrectionPtr_について

faceFluxCorrecitonPtr_のゲッターとしてfaceFluxCorrectionPtr()関数があります。fvMatrix.Hより

fvMatrix.H

pisoFoamのfaceFluxCorrectionPtr()関数の詳細について次で調べてみます。

GDBでデバッグしてみる

ここからGDBによるデバッグでfaceFluxCorrectionPtr()関数について調べてみます。

デバッグのためのセットアップ

GDBの結果を見るのにはEmacsが便利だと思います。以下の設定を.emacs.d/init.elや.emacsにします。Emacs+GDBは以下参照。 http://d.hatena.ne.jp/higepon/20090505/p1

EmacsをGUIで起動して,M-x gdbでGDBを起動します。起動時にはpisoFOAMが立ち上がるようにします。OpenFOAMのコードを走らせるときにはLocal bufferを閉じておきます。こうしないとデバッグが途中で停止します。

cavity flowのチュートリアルをもとにしてデバッグします。fvSchemesはそのままです。非直交補正のについて調べるので,laplacianスキーム,snGradスキームがcorrectedになっているか確認して下さい。

fvSchemes

fvSolutionは以下のようにしました。

fvSolution

メッシュ数が多いとデバッグで見ていくときに何かと大変なので,セル数5個のメッシュを作成しました。以下がそのメッシュを生成するためのblockMeshdictです。blockMeshでメッシュを生成します。初期条件,境界条件は適当に設定します。

blockMeshDict

GDBでブレークポイントを設定する

実際にブレイクポイントを設定して,pisoFoamのfaceFluxCorrectionPtr()関数の挙動を見てみます。

fvMatrix.Hはsrc/finiteVolume/fvMatrices/fvMatrix/fvMatrix.Hにありますが,計算時に参照されるのはsrc/finiteVolume/lnInclude/fvMatrix.Hです。ここにブレイクポイントを置きます。

runで計算を走らせます。コールスタックを抜き出したのが以下。

#1をクリックするとその呼出が表示されます。gaussLapalacianSchemes.Cの該当箇所を見ると,

gaussLapacianSchemes.C

となっています。これはマクロでその定義はすぐ上にあります。

gaussLapacianSchemes.C

64行目以降が非直交補正に関係有るところです。fvSchemesでfluxRequiredを指定してあるので,68行目でfaceFluxCorrectionPtr()関数に対して,snGradの非直交補正による補正量が代入されています。74行目でsource項に非直交補正による補正を代入しています。

このようにGDBを使うことで,OpenFOAMの深い関数呼び出しの関係を調べられます。途中マクロ展開で関数呼び出しを実装することがOpenFOAMの場合には多くあります。このため,関数にあたりをつけて,適切にブレイクポイントを設定する必要があります。

次に71行目のcorrection()関数についてGlobalで見てみます。

GlobalでtsnGradScheme_().correction()を調べる

correction()関数の候補はたくさん表示されます。ここではcorrectedSnGradを使っているので,correctedSnGrad.Cのcorrection()を見てみます。

実装が以下で,correction()関数の計算には102行目にあるfullGradCorrection()関数が関わっています。

correctedSnGrad.C

fullGradCorrection()はその上に定義されています。

correctedSnGrad.C

mesh.nonOrthCorrectionVectors()とlinearで補間されたgradの値の内積を計算しています。これはJasakさんのD論 ( http://powerlab.fsb.hr/ped/kturbo/OpenFOAM/docs/HrvojeJasakPhD.pdf )にある,非直交補正の式と対応します。

以上の内容はNozakiさんの資料にも説明がありますので,そちらを参考にするとわかりやすいです。

まとめ

flux()関数を使った流束の補正とfaceFluxCorrectionPtr()関数から始まる非直交補正の詳細について調べてみました。GDBとGlobalでいろいろたどれるので,使ってみてください。

SphinxでTeXのコマンドを直接使う

Share on Facebook

ドキュメント作成ツールSphinxで,TeXのコマンドを直接使う方法について。

Sphinx上でLaTeXをつかって,PDF作るのに,sectionごとに改ページしたいとかで,TeXのコマンドを直接使うには

.. raw:: latex

   \newpage

のようにrawディレクティブを使います。\newpageはTeXで改ページするためのコマンド。

普通はhtmlのタグをそのまま使うときなどに使うようですが,TeXにも使えます。