# Julia,IGAで役立つ知識 チュートリアルのサンプルプログラムで以下をいくつか使っているので,実装で悩んだら参考にしてください.他にも良いこと知っていたら教えてください(どんどん書き込んで下さい). ## 高速化 * Juliaでは,関数の中で計算を行うと100~1000倍程速くなる(関数内で使う変数を引数に全部含めないといけないことに注意.1つでも抜けると遅くなる) * よく使う関数は配列にしておく * B-spline基底関数の台の性質から,非ゼロ部分だけ計算する * 剛性行列が対称行列であることを使って,上三角部分だけ計算する * 剛性行列等の計算で,$C_{ijkl}$の非ゼロ部分だけ計算する * 並列計算を使う * 連立方程式の計算はJuliaのA\bやsparse(A)\bを使うよりParadisoを使うほうが安定して速い * @code_warntypeを使うと,Juliaの型推論が上手くできてるか(ベストパフォーマンスを出せているか)を確認できる ## 省メモリ化 * 3次元ではメモリの心配をする必要がある * $N^I, \partial N^I/\partial x_i, \partial^2 N^I/\partial x_i \partial x_j$などを何でもかんでも配列にするとメモリがあふれる.なので,これらはforループの中で毎度作る方がよい * ヤコビ行列は配列にしてもあまりメモリを食わない * summarysize(A)で配列の使用メモリ量を確認できる ## 他に知っておくといいこと * 配列の配列を作れる.このときリスト内包表記が便利 * 関数の引数に型注釈(::Float64など)をつけられるが,これは構造体や多重ディスパッチを使わないなら不要.つけてもパフォーマンスは向上しない.望む型ではない引数が入ってきたときにエラーメッセージを出してくれるが,一々書く手間の方が大きい * 構造体を使うと変数の管理が楽になるらしい * forループは入れ子にせずに,横に並べて書くこともできる * heatmap()を使うと,配列を可視化できる.剛性行列の中身を見るのによく使う * 表面力を求めるときは,表面用のB-spline基底関数の配列を新たに作らないといけない * eigen()を使うと行列の固有値・固有ベクトルが分かり,rank()を使うと行列のランクが分かる.非物理的な剛性行列になっていないかを調べられる.(座屈しなければ固有値は全て正になっているはず.rankが行列サイズより小さければ自由度があるので,剛体変位モードが入ってしまっている.とか) * 大きな計算は夜家に帰って寝ている間にさせとくといい.このときCSVファイルが使える
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up