2013年6月30日日曜日

ダムブレイク2

膨張波と伸縮波がうまく表現できてないことが分りました。

もう少し、考えてみます。

とりあえずCで書いてますが、いろんな言語で書くにします。

履歴書書かなきゃ・・・。

そろそろ会社に行くかな?

ダムブレイク

DamBreakはオイラーの方程式を基礎方程式として、FDS系の解法が一番良い気がします。コロケート格子で。

スタッガードスキームだと、そのまま離散化すれば良いですが、ショックキャプチャリングがうまくいかなくて、若干の数値振動が残ります。

シビルエンジニアリングの世界ではほとんど1次風上が多いですね。
正直気に食わないですが。。。

FDS系の解法はXojoで書いてみることにします。そのうち、ソース晒しますね。
今のところbetter C的なC++で書いてます。

もう少し考えてみます。


2013年6月27日木曜日

高速化と可読性

高速化はアルゴリズムの修正を行ったり、基礎方程式からは多少外れます。

でも可読性は若干のオーバーヘッドはあるものの、維持管理は楽な気がします。

科学技術計算は特殊な村の気がしてきました。

2013年6月26日水曜日

C

久々にCを書いてみた。
Cの頭に切り替わらない・・・。

Fortranばかり弄ってるから、こんなことになる。
ポインタがあると、自由度がありますね。

数値解析好きとしてはProgram言語なんて2の次のはずですが、
やはりこだわりたいですね。

2013年6月24日月曜日

C言語

0から作るならば、Cを選択する意味はあまりないと思います。しかし、これまでの財産があり、幸か不幸か、FortramとC/C++は実行速度が圧倒的です。

科学技術計算は、むちゃくちゃな格子数、条件で結果を出さなければなりません。なので、Fortran、C/C++が圧倒的です。

ソースコードの保守を考えると手続き型のC/C++の方が有利だと思いますが、C++のクラス作成して、可読性を高めるためのオーバーヘッドとの兼ね合いかと思います。

ただし、一流の解析屋はすべて出来てしかるべきだと思ってます。

解析は構成則とガバニングイクエーションの基本を踏まえてやりたいですね。
モデラーの醍醐味はメッシュ内の挙動をどのように設定するか?
これにつきるようがします。

2013年6月23日日曜日

xojo


 minmode(r)

  if r>=1 then
    r =1.0
  end if
  if r>0 then
    return r
  else
    return 0.0
  end if

vanLeer(r)
return (r+abs(r))/(1+abs(r))

vanLeerは分母が0になっても構わないので使いやすいと思われます。
その他の制限関数は海外のWikiに載ってます。

2013年6月22日土曜日

名称未設定

TVD法のうち、流束制限関数に関して、ソースを晒したいが、まとまってないので、躊躇してます。

そのうちに。QUICK法とかLaxWendroff法とか、今日ではあまり使わないかもしれませんが、非常に勉強になります。

スキームはこだわりを持って使いたいものですね。
「解ければ何でも良いじゃん!」
はちょっと、バカすぎます。
その場合、1次精度のみでロバスト性を求めるだけで良くて、ぼーっと格子点が増やせるハードが出てくるのを待っているだけです。

CIP法(CSL系)が一番好きですが、既存のコードに対して、フラクショナルステップを使って、移流項のみ改善したい場合は、既存のオイラリアンのスキームの方が良いみたいですね。

ゼロから書くなら、CIP法+その他の項があれば完全陰解法にします。
ロバストかつ高精度。


2013年6月21日金曜日

Xojo先ほどの続き

  とりあえず、Actionに下記ソースを加えると、ファイルへ出力できる

 'ファイル出力用
  fout=GetFolderItem("output.txt")
  txtout=fout.CreateTextFile
  txtout.delimiter =Chr(13)
  for i =1 to ixmx
    txtout.WriteLine str(f(i))
  next i
  txtout.Close

LaxWendroff法とXOJO

  Dim s as string
  Dim i as integer
  dim f() as double
  dim fn() as double
  dim n As  Integer
  dim fout as FolderItem
  Dim txtout as TextOutputStream
 
  s = "Program START!"
  lbResult.AddRow(s)
  Redim f(ixmx)
  Redim fn(ixmx)
 
  For i = 1 to ixmx
    f(i) = 0.0
    fn(i) = 0.0
    If i>10 And i<20 Then
      f(i) = 1.0
      fn(i) =1.0
    end if
    s =str(i) +","+ str(f(i))
    lbResult.AddRow(s)
  next i
 
  For n=1 to 100
    for i =2 to Ixmx-1
      '1次風上
      fn(i) = f(i) - u*dt/dx *(f(i) - f(i-1))
      'オリジナルLaxWendroff法
      fn(i) = f(i) -u*dt/(2.0*dx)*(f(i+1)-f(i-1))+0.5*u*u*dt*dt/dx/dx*(f(i+1)-2*f(i)+f(i-1))
    next i
    for i = 2 to ixmx
      f(i) = fn(i)
    next i
  next n
  For i = 1 to ixmx
    s = str(i) + ","+str(f(i))
    lbResult.AddRow(s)
  next i
 
 
 
 

Elisp

自分用にElispをとりまとめています。
Emacsのorgモードを使えば、かなり楽にHTMLで残せます。

ElispはEmacsカスタマイズ用に勉強するつもりでしたが、
なんか今までのプログラム言語に対する概念が変わりつつあります。

テキスト処理、グラフ化、メール処理、WEBの情報収集等々、日常使いでどこまで出来るか手探りですが、楽しんでやって行こうかと。

何よりフリーで使えます。

xyzzyと同様になにか貢献できればいいですね。

2013年6月20日木曜日

Lisp

Emacsのorg-mode。

かなり使えます。
open-junk-fileはElispの勉強になります。

Gaucheの本も買いました。

GUIまで出来れば良いのですが・・・。

言語なんて所詮ツールです。
でも普通のやつの上を行くには、多くのツールに触れた上で、選択したいものです。

ただし、高速の科学技術計算はFortran、C/C++の二択です。
これはWebやってる人には理解できないかもしれませんが・・・。

良い情報を御待ちしております。
小生の勉強の中で御教えできることは、コードを晒したいと思います。

よろしく御願いいたします。

以上

2013年6月19日水曜日

Lisp

ハッカーと画家を読んでます。

面白い。非常に面白い。

もちろん、疑問だったりする所はあるのですが、
面白いんです。

何事も極めると、社会的に価値があると実感します。

あとLispの設計思想みたいなものにも多少触れられると思います。

「母国語はなんですか?」
「Lispです。」

こう答えられたらカッコいいですね。

プログラミング言語は世界共通ですから。

2013年6月18日火曜日

advection

基本的に

1 中央差分に対して修正する(人工粘性のイメージ)。
2 1次風上に対して修正する(1次精度から高次精度にする)。

の二つの考え方かと思います。

どちらでも構わないですが、海外の書籍だと2が多い気がしてます。
一方、日本は1が多いかなという印象です。

高速流の場合、拡散項が相対的に小さいので、移流項のロバスト性は重要かと。
空間に高次精度を用いる場合、時間積分の精度を上げないと不安定になる場合もあります。





2013年6月17日月曜日

Lisp

いろんな方言があるので、どれが一番良いのか。。。

でも優秀なプログラマーはLispを知っているように思います。

たのしくプログラミングしたいです。
だから色々手を出してるような気がします。

ただし、Fortran、C、Lispは圧倒的な気がします。

プログラミングの思想とか、考え方とかはこれらをやれば圧倒的に視野が広がりそうです。

Lispの使い道が今のところEmacsのElispくらいしかない。

科学技術計算は某コンパイラが圧倒的なのでFortran,C/C++の2択しかないですが、
プロトタイプだったり、テキスト処理なんかはLispももっと使える気がします。

あと、Intel Compilerをコマンドプロンプトから楽にコンパイルできるよう、プロンプトを修正しました。短いコードなら非常に早くコンパイルできるとも居ます。
いかせんせん、Visual Studioが重すぎる時はぜひ使いたいと思います。

Schemaを使ってみるか!
xyzzyも使えるので弄ってみることにします。
惜しむらくはWindowsのみとかは勘弁して欲しいですね。

2013年6月16日日曜日

TVD

自由表面流れの乱流モデルを書いてみたが、TVD系のスキームだときれいに乱れが出ない。

やはりCIP、WENO系か(笑)

というのはおいといて、1次精度の風上差分だと駄目だということがよくわかりました。
仕事柄、1次精度でも十分であり、それ以上にロバストであることが重要であることが多いので、2次精度以上でなければならないことが新鮮でした。

まあ、コーディングしたことがない人間が解析やっちゃ駄目ですね。
だいたい「ロバスト」にいろんな意味を入れすぎてます。「猿でもまわせる」のがロバストではないですよ。


2013年6月15日土曜日

QUICK

Quadratic Upstream Interpolation for Kinematics
最近はあまり使われていないようですが、結構好きなスキームです。

TVD化するときはUMIST関数を使いました。
乱流モデル書いてみると、1次風上との違いがよくわかります。

QUICKにはQUICKEST、Ultimate QUICKESTなんかもありますが、
せいぜい2次精度レベルで良いような解析しかしないことが多いです。

2013年6月14日金曜日

elisp

Emacsの設定をもっと弄りたいのでElispを勉強することにする。
Cとはかなり異なるので、面食らうが、面白い。
古くない言語だ。
;;; 変数aに1をセット
(setq a 1) ; => 1

2013年6月12日水曜日

Lisp

Lispで移流方程式を書こうと思い立った。
リストの作成までは簡単そうだが、リストのいじりがうまく行かない。

でも、すごく勉強になります。
ElispでEmacsを弄りたかっただけなのに(笑)



2013年6月11日火曜日

xojo

皆さんxojoしか興味ないのか・・・。

がんばってソースを晒します。

今、Lispなんですけどね。注目は。

MsgBox "Hello,World !"

お決まりですが、必ずチェックしちゃいますね。

Ruby

ご飯食べるのにFortranじゃ無理でしょ。
とりあえずC/C+。
スクリプトにRuby。
Emacsカスタマイズ用にELISP。

行ったり来たりしながら少しずつ前に進めれば良い。

2013年6月10日月曜日

SLIME

何故かインストールがうまく行かん。

そもそも、Linux,Mac,Windowsで同様の環境を整えようとする所が間違ってるかもしれん。

悔しいなあ。じっくりやるか。

2013年6月9日日曜日

解析スキーム

各分野において、解析スキームの種類があるものの、

結局は偏微分方程式を解いているので、共通のスキームになります。



流体の解析をする場合、おそらく機械流体や熱流体を取り扱う人は1次精度のスキームを使うことは避けると思います。



でも、既存のソフトウェアを使った解析はどうでしょうか?

1次精度スキームを選択できないものはないと思います。



要は数値解が飛んじゃ駄目なんです。

結果が得られないと。

間違ってても、解ければ良いんです。

そんな認識の人は数値シミュレーションを辞めた方が良い。

選択できることは重要ですが、真値からの誤差が大きい、下手したら、解きたい現象を解けていない可能性がある、その認識を持ち続けたいものです。


Common Lisp

実践Common Lispを購入しました。

少ししか読んでませんが、手取り足取り感がハンパないです。

Lisp

Lisper。

カッコいい響きです。
第1言語はLisp。日常からアプリまでLisp。
Emacsしか使わない。

こんな人々はすごいですね。
「自己進化していく言語」を操るウィザードたち。

今日も勉強します。



Visual Studio

Visual Studioが必要になり、会社で買ってもらいました。

いや、正確にはIntel Compiler C/C++が必要だったんですけどね。
統合開発環境がないとなにぶんデバッグとか掛けづらいので。

2012を初めて使ったんですが、インターフェイスがかなり変わってました。
それでもコーディングはしやすいですね。

あと、速い・・・。書き方の問題はもちろんあるのは重々承知ですが、
GCCに比べてワンオーダー速い。
Fortran以上に差がでるようです。
もう、戻れないんだろうな〜。

数値解析のみ考える場合は、コンソールで構わないので、実行速度が速いファイルを吐き出せるコンパイラを使うのが一番手っ取り早いです。

PGIも使ってみたいですね。もちろんMac用ですよ。
なんでCygwin使わなきゃならんのか?





xojo

インターフェイスに慣れないです。。。
でもやっぱりMacでもWindowsでも同じ感覚で使えるのが良いですね。
うまくCSVに吐き出せないのは私の勉強不足です(笑)

なんとか会社に買わせたい。。。

2013年6月8日土曜日

Xojo

移流方程式を修正しつつあります。
今のところ、TVDQUICK、TVDMUSCL。
あとはLeapFrogも予定しておきます。
しばしお待ちを。明日にでも整理します。

技術屋

民主主義、わらりやすい説明、低コスト、精度向上。

低コスト。これは 異論を挟まない。
精度向上。これも異論を挟まない。

ただし民主主義と分りやすい説明。
これは一部同意しかねます。

専門家は、一般市民出来ない近似精度とコスト感覚のバランスを取るのが大事です。
ただ、その説明は非常に難しい。
さぼってる訳ではなく、先人たちが一生かけてきたことを数年で理解し、他人に説明することなんて無理なんです。説明相手も勉強する余裕がないんです。

だから、専門家は必ず自浄作用をもって、大きく間違わない方向の精度を提示した上で、納税者を納得させるのが必要だと思います。

加えて、一般市民(業界外の方々)に対して、しつこく説明すべきだと思います。そうしないと、技術屋は必ず減ります。魅力がない。やったことが、「税金の無駄遣い!」。
それが世論で、政治家がそれをよしとするなら、誰も目指さないし、下手したら、海外に技術が流出します。自国のグランドデザインを国の民間事業をうまく制御できなれば、荒廃がひどいことになります。

それを受容するだけの納税者がどれだけいるのか?
国家のために自分が何が出来るのか?
真剣に考えましょう。

専門家、非専門家、「そしてそれを短絡的に報道するマスコミ」みんな協力しましょう。信号なくなるかもしれませんよ。道路だって平気で壊れっぱなし。「仕方ないよ。お金内んだもん」あり得ないですね。日本という国家がどんな検討ツールとしての武器をもち、一技術者としてどのような判断が必要なのか。関係者の皆さん、お金を引っ張ることだけなく、グランドデザインとして、日本という国家がどうあるべきなのか?考えましょう。その検討のためにどのような勉強が必要なのか、それを勉強するのが専門学校だったり大学だったりします。

みんな得意、不得意は必ずあります。それが最適化されてるとも思いません。

日本のみなさん、選挙に行って、どう考える、悩みましょう。




C/C++

C/C++は書き方がたくさんあります。

Better Cとして。
C with classesとして。
STLをふんだんに使って。

数値解析としては、実行が速くて、可読性に優れ、修正しやすいものが好まれると思います。速度はfortranとC/C++がトップ集団かと思います。

ただし、可読性や修正のしやすさはイマイチ(独断)です。
いや、可読性はFortranであれば、素直に読んで行けば必ずわかるはずです。
時間はめちゃくちゃかかりますが・・・。Cはポインタの概念、C++であればオブジェクト指向の実装方法が分ってないといくら読んでも次に進みません。

解析のコードを0から作るとなると、一旦、ベースの部分をスクリプト言語で書いてから移植するのが良いんでしょうね。

VBAは邪道ですが、結果の確認や出力も簡単なのでオススメですよ。
簡単なGUIも簡単に使えますし。
 その後、高速に実行できる言語に移植します。

 数値解析に依存しない言語にしたいならC/C++でしょう。

なんかソース書く書く言っておきながら晒せてないです。
済みません。

PDE

偏微分方程式はシンプルです。
でも奥が深い。

数値解析では、保存系、非保存系とか出てきます。
数式的には意味は変わりません。

ただし、その結果、保存系、非保存系の基礎方程式如何により、数値解析を得るスキームが変わります。面白い。そして、数値解析を本業としない先生にはその話が通じません。
なぜなら、偏微分方程式を展開しても、数式上等価だからです。

そして、各科学技術分野において、きれいな方程式を用いることは少ないです。
Source Termが必ず入ります。加えて、比例定数が入ると思います。
そのほとんどは陽的な関数で解けません。
摂動法を用いるとうまく表現できることが出来ます。

その比例定数、もしくはプリミティブ変数の関数として表現される変数をうまく近似することが、工学的に意味があると思ってます。各項がどの程度のオーダーなのか、無視し得るのか、場に応じて無視できるのか。
「数値解析」のみに注力されている人はその感覚が分らないと思います。
解析自体は出来ますし、コーディングも非常に速いですが・・・。パラメータ
それは工学的センスに乏しいです。
摂動法は工学的センスにあふれてると思います。

最近でも摂動法を用いた近似解について論文を出している先生がチラホラ見えます。
非常に嬉しくなります。本当に私みたいな人間に対して、こんな考え方があるんだよ!という意識付けになります。摂動法(特異摂動法)を自由に使えると、視野が広がります。
摂動法による解は、電卓叩けば出てきます。これは工学として素晴らしいんです。収束計算しなくていいですし、明確にどの項に注目するのかが明確です。

今後、記述を充実したいと思います。

今日はその1と言うことで、
 ざっくり著者の思いを書いてみました。

XoJoで数値解をグラフ描画を作成したいです。

以上








2013年6月7日金曜日

xojo

Real basic

ポアソンの方程式や格子生成に使えれば良いかなと。


C/C++

数値解析をやる人間(主に科学技術計算)にとって、C/C++のメモリ管理だと思ってます。普通やれよ!とエキスパートに激怒されそうですが、
Fortanは余気にせず、計算アルゴリズムの組み合わせに集中できるところだと思います。

ただし、好きか嫌いかは別。ポインタを理解すれば、あらゆることが出来ると勝手に思ってます。今のところ、第1言語はC/C++、第2言語はPython,
第3言語はRuby。
一番はLISPを理解することだと思います。如何せん「LISPER」です。このように言える人は良い意味で相当マニアックです。

GPGPUならC/C++ですね。組み込みならCになるかと思います。
 0から作るのはあまりないですが、修正を掛ける場合は、Fortran,
C/C++ですね。

新規のウェブアプリなら、PHPとかRailsになるんでしょうね。


流れの解析

流体力学は物理学の範疇では古典です。
コンピュータの演算能力が向上した今では、基礎方程式を(O)記号で支配要因を明確にして、陽的に表現できれば、学ぶ必要もないかもしれません。

加えて、大先輩方はソースコードを書くなんてことをしないと思います。
解析好きの私としては納得がいかないことが多いです。

模型実験でやる検討を数値解析で条件等を詰め、最小の検討ケースで実験をやる。
これこそが数値解析のすごさであり、実験をやることの有意義さだと思ってます。

なにより、お爺ちゃん世代は微分方程式の解を摂動展開なんかをして、陽的に表現してます。これがハンパないです。
絶対に間違いません。微分項の性質を理解しているかです。

私自身はお爺ちゃんになっても、プログラムをひたすらコーディングしてデバッグ作業。
ニュートン物理学の範疇では、解の大まかな性質を持っておくのが大事すね。この感覚こそ工学者の一番の売りだと思います。
zojoのソースコードについては、もうしばしお待ちを。
CSVの吐き出し、グラフ描画がうまく行きません。
 (誰も気にしない)

real basicは楽しいです。楽しいのが一番です。日本でもサードパーティをいっぱい出して欲しいですが。

まったくモッて回し者ではありません。Basicをベートして、多機能で使えます。インターフェイスはプラットフォームで違いが余ありません。
コンソール、デスクトップも同様に使えますし、プラットフォームをシームレス行けるのはすばらしい。

FortanやC/C++には一切かなわないですが、データ処理には絶好調だと思います。

2013年6月5日水曜日

xojo

アクティベーションがどんな形になるのか、イマイチ分ってない。
4月に買ったのだが、xojoに使えるのか?


テキストディタ

みなさんはどのテキストエディタを使うことが多いでしょうか?

私はmiが最初です。
その後、Xcodeに移り、Windowsを使うようになりEmeditor、MIFESも入れてます。

最後に行き着いたのはEmacsでした。Lispカッコ良い。Matzが使ってるからという、かなりミーハーです。Emacsは圧倒的でした。org-mode、howm、非常に使えると思います。

open-junkで簡単にコードの動作チェックできるし。
簡単にshellを呼び出せるのが良いです。

好みのエディタはそれぞれたくさんあって、この中でどれかを否定する気は一切ないです。皆さん、テヅガクをもって作成されていると思いますし、多くがフリー。

この秀丸とかも優秀ですし、Notepad++、サクラエディタもそうです。
ただし、カスタマイズを考えるとVim、Emacsが圧倒的だと思います。学習速度は必要とされますが。。。rubyだとTextMateのようですが、Emacs(xyzzy)でごり押しする予定です。

Lispの記述も増やしたいと思います。

Xojo

出ました。
早速使ってみると、インタフェース周りがかなり変わっています。

びっくりはしませんでした。
こんなものかなと(その時点でライトユーザだとバレる...)。
でも、デバッグのみならフリーのはずです。

Basic系の言語がかなり残っているのは、やはり先人たちが使っていること、
加えてxojoはオブジェクト指向をバリバリ使っているので、かなりコーディングが短くて済みますし学習コストも低いと思います。

オブジェクト指向も学び安いと思います。rubyを勉強したあとにコーディングするとよくわかります。

サンデープログラマーとして、一番良いと思います。
GUIプログラミングでは抜群です。プラットフォーム依存しませんし。

強いて言えば、もう少しリファレンスや書籍を充実させれば、敷居が下がるように思います。Visual Basic(or VBA)を使っていれば入りやすいですし。

予定では線形移流方程式の解法を記述したいと思ってます。
以前の一次風上だけでなく、TVD−Lax-Wendroff法やCIP法、日本人なら外しちゃだめでしょK-Kスキームは予定です。あとはCSVへの吐き出しと、グラフ描画までできれば。

詰まったところについても記述したい意向です。

GUIをネィテブコードで吐き出せて、プラットフォームに依存しないのは非常に素晴らしいと思ってます(回し者ではないです!)。MacもWinもLinuxも使う身としてはありがたいです。これこそサードパーティに良さ。

関係者の皆さんに感謝です。
つたないコーディグになると思いますが、「出来損ないのアマチュア」がバカなりに頑張ってると思っていただければ・・・。

Real Basic5.5の日本語マニュアルが欲しいです・・・。

2013年6月4日火曜日

vim

「i」挿入モード
「v」ビジュアルモード
「esc」ノーマルモード

ビジュアルモードで
「y」:ヤンク
「p」:ペースト

「:w」保存
「:!」シェル
「:q」終了

2013年6月3日月曜日

C

最近、Cを書いてない・・・。
高速の処理にはどうしてもC/C++が必要だから、忘れないようにしないと。

と言いつつLispを入れてます。

最高速はFORTRAN、C/C++。
続いて、Javaとかですかね。
私の独断と偏見に満ちあふれてますが。

スクリプトだとPythonが速いと思います。
rubyの方が若干遅いかなという印象です。

一番カッコいいのはLispだと思います。

今の状況は先人たちの努力に立ってるもの。
皆さんに感謝です。

2013年6月2日日曜日

乱流

NS方程式はそのままだと解けません。
というのは語弊がありますが、現在のスパコンを持ってしても、限られた流れしか解けないはずです。それは流れというものが、非常に小さい時間スケールで変動するためであり、
それを解像するには空間の刻み幅も同様に小さくしなければならないからです。

ただし、その非常に小さい時間スケールの流れの速さ(流速)が問題になることは限られています。もっと大きい時間スケール(数分間の平均とか1時間の平均とか)での速さを知りたい場合がほとんどかと思います。

そんなときにRANSを使います。ある程度のスケールの乱れを解像したいのであれば、LESを使います。

最近、乱れを勉強し直して、楽しくなってきました。
スペクトル解析も使えないといけませんし、摂動法も重要です。

勉強して楽しいと思えるのが良いですね。

Fortran

BLASとか、LAPACKとか、いろいろ入れてみたいですね。
速そうですし。

fortran

カンマの場合は注意が必要。

program main
  integer i
  integer fout
  real(8) a(100),b(100)
  fout = 20
  open(fout,file='test.out')
  do i=1,100
    a(i) = real(i)
    b(i) = real(i)
  end do
  do i =1,100
    write(fout,'(I5,a,e10.3,a,e10.3)') i,",",a(i),",",b(i)
  end do
end program main