ざっぱーん to ウズウズ

きしださんにおんぶに抱っこさせてもらった。
■[java][数値計算]ざっぱーん、完成した! - きしだのはてな

>>きしださん
勝手に使っちゃいました。。。すみません、、、、<(..)>

5c5
< public class Particle {
---
> public class Particle_Whirlpool {
34c34
<     static Elem[] elements = new Elem[1000];
---
>     static Elem[] elements = new Elem[3000];
55c55
<         for(double y = 0; y < 0.5; y += parcSize){
---
>         /*for(double y = 0; y < 0.5; y += parcSize){
62a63,70
>         }*/
>         maxy = parcSize*0.5;
>         //upper壁
>         for(double x = -parcSize * 2; x < .8 + parcSize * 2; x += parcSize){
>             elements[elementsCount++] = new Elem(x, maxy + parcSize * 0, Type.OUTWALL);
>             elements[elementsCount++] = new Elem(x, maxy + parcSize * 1, Type.OUTWALL);
>             elements[elementsCount++] = new Elem(x, maxy + parcSize * 2, 
>                     (x < 0 || x > .8) ? Type.OUTWALL : Type.INWALL);
63a72
>                 maxy = 0.5;
74,75c83,85
<         for(double x = parcSize; x < .30; x+= parcSize){
<             for(double y = parcSize * 3; y < .50; y += parcSize){
---
>         for(double x = parcSize; x < 0.30+0.3; x+= parcSize){
>             for(double y = parcSize * 4; y < .50; y += parcSize){
>                                        Type t = Type.WATER;
80c90,93
<                 elements[elementsCount++] = new Elem(x, y, Type.WATER);
---
>                 if(y > .20 && y < .35 && x > 0.3 && x < 0.45){
>                                                t = Type.OUTWALL;
>                                        }
>                 elements[elementsCount++] = new Elem(x, y, t);
84c97
<         //基本の粒子密度n0とラプラシアン用の係数rambda
---
>         //基本の粒子密度n0とラプラシアン用の係数lambda
156,157c173,174
<             elements[i].vx += + deltat * (nyu * laplasux);
<             elements[i].vy += deltat * (nyu * laplasuy + grav);
---
>             elements[i].vx += + deltat * (nyu * laplasux+grav);
>             elements[i].vy += deltat * (nyu * laplasuy + 0);
286a300,303
> 
>                               if (elements[i].x  > 0.83) { 
>                                       elements[i].x =  -3.0/100;
>                          }


壁を上下にして点増やして真ん中に柱置いた。右方向に重力掛けた。粒子が一番右まで行くと左から出るようにした。
・・・あ、、、ダメじゃん。このままじゃ永遠に加速してしまうや*1 orz。粒子数に対して柱でかすぎる気もするし。あんまり面白い結果にはならなさそうな気もする。でも僕のPC遅いのでまだぜんぜん進んでない。これはこれでどうなるかこのまま見とこっと。
平行して MPS法を勉強中。面白いおぉ。ラグランジュ完全とか恐ろしげな用語に慄きながらなんとか質量保存の式と運動量保存の式の置き換えまで理解。仮の速度が正直よくわからない。

追記:
(elements[i].x > 1.0)じゃあない。直しました。相変わらず僕はおっちょこちょい、というかアホだ。

追記2:
しばらくして左右がつながってOK!いい感じ、と思った矢先に・・・・・・・・・・・・・・・・爆発したwww

追記3:
なぜか肝心な重力を横方向にする部分が抜けてた。いかんなあ自分。。。。
なんか一定時間経つと必ず「爆発」するっぽ。

*1:アホです。僕