LWisteria.StudiesOfOpenTK.SimpleCloo.ComputerCpu.Next C# (CSharp) Method

Next() public method

計算を1ステップ進める
public Next ( ) : void
return void
        public override void Next()
        {
            // 準備処理
            this.prepare();

            // 初期時間刻みを設定
            double dt = this.MaxDt;

            // 各粒子について
            this.EachParticle((particle, i) =>
            {
                // 移動粒子なら
                if(particle.Type == ParticleType.FreeMovable)
                {
                    // 加速度を設定
                    particle.A.X = A * System.Math.Cos(this.Omega * T);
                    particle.A.Z = A * System.Math.Cos(1 / this.Omega * T);
                }
            });

            // 各粒子について
            this.EachParticle((particle, i) =>
            {
                // 移動粒子なら
                if(particle.Type == ParticleType.FreeMovable)
                {
                    // 大きさがゼロでなければ
                    if(!particle.U.IsZero)
                    {
                        // クーラン数から計算した時間刻みを設定
                        dt = System.Math.Min(dt, 0.2 * particle.D / particle.U.Length);
                    }
                }
            });

            // 各粒子について
            this.EachParticle((particle, i) =>
            {
                // 移動粒子なら
                if(particle.Type == ParticleType.FreeMovable)
                {
                    // 等加速度直線運動
                    particle.X += particle.U * dt + particle.A * dt * dt / 2;
                    particle.U += particle.A * dt;
                }
            });

            // 時刻を進める
            base.UpdateTime(dt);
        }