public static WBSolver GetNewSolver(WBProjectOptions options)
        {
            var layerOpts = StandartOpts;
            var geom      = new GunShape();

            geom.AddPoint(layerOpts.X_left - 10, 0.2);
            geom.AddPoint(layerOpts.X_right + 10, 0.2);
            var initLayer = new GasLayer();

            initLayer.Geom = geom;
            initLayer.InitLayer(0d, layerOpts, InitGasCell, InitGasBound);
            var grid   = new GasGrid("GasGrid_tst1", initLayer);
            var solver = new WBSolver(grid, options);

            return(solver);
        }
        public static WBSolver GetNewSolver2(WBProjectOptions options)
        {
            var layerOpts1 = StandartOpts1;
            var geom       = new GunShape();

            geom.AddPoint(layerOpts1.X_left - 0.2, 0.2);
            geom.AddPoint(layerOpts1.X_right * 100, 0.2);
            var initLayer = new GasLayer();

            initLayer.Geom = geom;
            initLayer.InitLayer(0d, layerOpts1, InitGasCell1, InitGasBound);
            var grid   = new PnGrid("GasGrid_tst1", initLayer);
            var solver = new WBSolver(grid, options);

            initLayer.SynchNodes_X_V();
            return(solver);
        }
示例#3
0
        //public GasLayer EulerStep(double tau) {
        //    var lr0 = this;
        //    foreach (var c in lr0.RealCells) {
        //        c.Sync();
        //    }
        //    lr0.SetBounds();

        //    foreach (var b in lr0.RealBounds) {
        //        b.SetFlux();
        //    }

        //    var lr1 = lr0.Clone() as GasLayer;

        //    lr1.StrechStep(tau);

        //    for (int i = 0; i < lr1.RealCells.Count; i++) {
        //        var c_0 = lr0.RealCells[i];
        //        var c_05 = lr1.RealCells[i];
        //        var qs = (c_0.q * c_0.W + tau * c_0.Get_dQS()) / c_05.W;

        //        c_05.SetQ(qs);
        //    }
        //    return lr1;
        //}

        public GasLayer EulerStep(double tau, GasLayer dqLayer, bool synchMe = true, bool syncDqLayer = true, bool calcDqLayerFluxes = true)
        {
            var lr0 = this;

            if (synchMe)
            {
                foreach (var c in lr0.RealCells)
                {
                    c.Sync();
                }
                lr0.SetBounds();
            }

            if (calcDqLayerFluxes)
            {
                foreach (var b in dqLayer.RealBounds)
                {
                    b.SetFlux();
                }
            }

            var lr1 = lr0.Clone() as GasLayer;

            lr1.StrechStep(tau);
            for (int i = 0; i < lr1.RealCells.Count; i++)
            {
                var c_0  = lr0.RealCells[i];
                var c_n  = lr1.RealCells[i];
                var c_dq = dqLayer.RealCells[i];
                var qs   = (c_0.q * c_0.W + tau * c_dq.Get_dQS()) / c_n.W;

                c_n.SetQ(qs);
            }
            return(lr1);

            //var lst = new List<ComplexStepContainer<GasCell, GasBound>> {
            //    new ComplexStepContainer<GasCell, GasBound>() {
            //        calcFluxes = calcDqLayerFluxes,
            //        synch = syncDqLayer,
            //        multipl = 1d,
            //        dyLayer = dqLayer
            //    }
            //};
            //return ComplexStep(tau, synchMe, lst) as GasLayer;
        }
        public static WBSolver GetNewSolver1(WBProjectOptions options)
        {
            var layerOpts = StandartOpts;
            var geom      = new GunShape();

            geom.AddPoint(layerOpts.X_left - 10, 0.2);
            geom.AddPoint(layerOpts.X_right + 10, 0.2);
            var initLayer = new GasLayer();

            initLayer.Geom = geom;
            initLayer.InitLayer(0d, layerOpts, InitGasCell, InitGasBound);
            var grid   = new GasGrid("GasGrid_tst1", initLayer);
            var solver = new WBSolver(grid, options);

            initLayer.RealBoundsRev[0].V = 0;
            initLayer.RealBounds[0].V    = 0.5;
            // initLayer.RealCells.ForEach(n => n.u = 0.5);
            initLayer.SynchNodes_X_V();
            return(solver);
        }
 public PnGrid(string name, IWBNodeLayer initLayer) : base(name, initLayer)
 {
     lrInit = initLayer as GasLayer;
 }