public System.Drawing.Bitmap TakeSnapShot(Node node)
        {
            SelectedNode = node;
            ComplexPlainAnalysis SnapAnalysis = (ComplexPlainAnalysis)CurrentAnalysis;//.Clone();

            //SnapAnalysis.Points = 300;
            //Solve(CurrentCircuit, SnapAnalysis);

            System.Drawing.Bitmap bmp = FileUtils.DrawImage(func, SnapAnalysis.Points, SnapAnalysis.Points);

            return(bmp);
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            model             = new ComplexPlainViewModel();
            model.ColorCoding = ColorCoding.ByLights;

            Circuit cir = new Circuit();

            cir.ReadCircuit("Circuits/RCL.net");
            cir2 = (Circuit)cir.Clone();
            cir2.Setup.RemoveAt(0);
            ComplexPlainAnalysis ac1 = new ComplexPlainAnalysis();

            cir2.Setup.Add(ac1);
            ACSweepSolver.Optimize(cir2);
            cir2.Solve();
            sol1 = (ComplexPlainSolver)ac1.Solver;

            int scalefactor = 5000;

            model.MinX    = ac1.SigmaMin / scalefactor;
            model.MaxX    = ac1.SigmaMax / scalefactor;
            model.MaxY    = ac1.WMax / scalefactor;
            model.MinY    = ac1.WMin / scalefactor;
            model.Columns = ac1.Points;
            model.Rows    = ac1.Points;
            var data = new Point3D[model.Rows, model.Columns];

            //public Tuple<Complex32, Complex32>[,] Results { get; set; }
            MathNet.Numerics.Complex32 W;
            for (int i = 0; i < model.Rows; i++)
            {
                for (int j = 0; j < model.Columns; j++)
                {
                    W = sol1.WfromIndexes[new Tuple <int, int>(i, j)];
                    foreach (var node in sol1.Voltages[W])
                    {
                        if (node.Key == "out")
                        {
                            data[i, j] = new Point3D(W.Real / scalefactor,
                                                     W.Imaginary / scalefactor,
                                                     //node.Value.Magnitude);
                                                     2 * Math.Log10(node.Value.Magnitude));
                        }
                    }
                }
            }

            model.Data = data;
            model.UpdateModel(false);
            //model.CreateDataArray(ModuleInDB);

            DataContext = model;
        }
Exemplo n.º 3
0
        private void Simulate(string FileName)
        {
            cir = new Circuit();
            cir.ReadCircuit(FileName);
            cir2 = (Circuit)cir.Clone();
            cir2.Setup.RemoveAt(0);
            ac1 = new ComplexPlainAnalysis();
            cir2.Setup.Add(ac1);
            ACSweepSolver.Optimize(cir2);

            Update();

            lbComponents.ItemsSource = cir.Components;
            lbNodes.ItemsSource      = cir.Nodes.Values;
            //lbComponents.SelectedItem
            DataContext = model;
        }
        private void LoadField()
        {
            Circuit cir = new Circuit();

            cir.ReadCircuit("Circuits/RCL.net");
            cir2 = (Circuit)cir.Clone();
            cir2.Setup.RemoveAt(0);
            ComplexPlainAnalysis ac1 = new ComplexPlainAnalysis();

            cir2.Setup.Add(ac1);
            ACSweepSolver.Optimize(cir2);
            cir2.Solve();
            sol1 = (ComplexPlainSolver)ac1.Solver;


            int Rows    = ac1.Points;
            int Columns = ac1.Points;

            double[,] data    = new double[Rows, Columns];
            Point[,] gridData = new Point[Rows, Columns];
            MathNet.Numerics.Complex32 W;
            for (int i = 0; i < Rows; i++)
            {
                for (int j = 0; j < Columns; j++)
                {
                    W = sol1.WfromIndexes[new Tuple <int, int>(i, j)];
                    foreach (var node in sol1.Voltages[W])
                    {
                        if (node.Key == "out")
                        {
                            data[i, j] = 20 * Math.Log10(node.Value.Magnitude);
                            //data[i, j] = 180 * node.Value.Phase / Math.PI;
                            gridData[i, j] = new Point(W.Real, W.Imaginary);
                        }
                    }
                }
            }

            WarpedDataSource2D <double> dataSource = new WarpedDataSource2D <double>(data, gridData);

            isolineGraph.DataSource  = dataSource;
            trackingGraph.DataSource = dataSource;
        }
        public override bool Solve(Circuit cir, BasicAnalysis ana)
        {
            List <Node> nodos = new List <Node>();

            CurrentAnalysis = ana as ComplexPlainAnalysis;
            CurrentCircuit  = cir;

            //List<Node> nodosnorton = new List<Node>();
            //List<Node> nodoscalculables = new List<Node>();
            //List<SpecialComponentInfo> especialcomponents;
            Voltages     = new Dictionary <Complex32, Dictionary <string, Complex32> >();
            Currents     = new Dictionary <Complex32, Dictionary <string, Complex32> >();
            WfromIndexes = new Dictionary <Tuple <int, int>, Complex32>();
            SolveInfo solveinfo = new SolveInfo();

            PreAnalizeToSolve(cir, nodos, solveinfo);


            ComplexPlainAnalysis analis = ana as ComplexPlainAnalysis;
            double w, sig, wi, wf, deltaw, deltasig, sigmamin, sigmamax;

            wi       = analis.WMin;
            wf       = analis.WMax;
            sigmamax = analis.SigmaMax;
            sigmamin = analis.SigmaMin;
            w        = wi;
            sig      = sigmamin;
            deltaw   = (wf - wi) / analis.Points;
            deltasig = (sigmamax - sigmamin) / analis.Points;

            Complex32 W = Complex32.Zero;

            for (int i = 0; i <= analis.Points; i++)
            {
                for (int j = 0; j <= analis.Points; j++)
                {
                    //Calculo de tensiones de nodos
                    W = new Complex32((float)(sigmamin + j * deltasig), (float)(wi + i * deltaw));
                    ACSweepSolver.Calculate(solveinfo, W);

                    //          Node    Voltage
                    Dictionary <string, Complex32> result = new Dictionary <string, Complex32>();

                    #region almacenamiento temporal

                    foreach (var nodo in nodos)
                    {
                        result.Add(nodo.Name, nodo.Voltage);
                    }
                    if (!Voltages.ContainsKey(W))
                    {
                        Voltages.Add(W, result);
                        WfromIndexes.Add(new Tuple <int, int>(i, j), W);
                    }
                    else
                    {
                        throw new NotImplementedException();
                    }
                    // Results[i,j] = new Tuple<Complex32,Complex32>(W,

                    #endregion

                    //calculo las corrientes:
                    CalculateCurrents(cir, W);
                    Dictionary <string, Complex32> currents = new Dictionary <string, Complex32>();
                    StorageCurrents(cir, currents);
                    Currents.Add(W, currents);
                }
            }
            cir.State = Circuit.CircuitState.Solved;

            return(true);
        }
Exemplo n.º 6
0
        static void Main(string[] args)
        {
            int i = 2;

            switch (i)
            {
            case 0:
                cir.ReadCircuit("circuits/RLcharge.net");
                cir2 = (Circuit)cir.Clone();
                DCSolver.Optimize(cir2);
                DCAnalysis ac0    = (DCAnalysis)cir2.Setup[0];
                DCSolver   solver = (DCSolver)ac0.Solver;
                //solver.Solve(cir2, );
                cir2.Solve();
                solver.ExportToCSV("e:/Test.csv");

                break;

            case 1:
                cir.ReadCircuit("circuits/testidc.net");
                cir2 = (Circuit)cir.Clone();
                DCSolver.Optimize(cir2);
                DCAnalysis ac3     = (DCAnalysis)cir2.Setup[0];
                DCSolver   solver3 = (DCSolver)ac3.Solver;
                //solver.Solve(cir2, );
                cir2.Solve();
                solver3.ExportToCSV("e:/Test.csv");

                break;


            case 2:
                cir.ReadCircuit("circuits/derivador.net");
                //cir.ReadCircuit("RCL.net");
                cir2 = (Circuit)cir.Clone();
                cir2.Setup.RemoveAt(0);
                ACAnalysis ac = new ACAnalysis();
                cir2.Setup.Add(ac);
                ACSweepSolver.Optimize(cir2);
                cir2.Solve();

                ACSweepSolver sol = (ACSweepSolver)ac.Solver;
                sol.ExportToCSV("ACSweep.csv");
                break;

            case 3:
                //cir.ReadCircuit("derivador.net");
                cir.ReadCircuit("circuits/RLC.net");
                cir2 = (Circuit)cir.Clone();
                cir2.Setup.RemoveAt(0);
                ComplexPlainAnalysis ac1 = new ComplexPlainAnalysis();
                cir2.Setup.Add(ac1);
                ACSweepSolver.Optimize(cir2);
                cir2.Solve();
                sol1 = (ComplexPlainSolver)ac1.Solver;
                sol1.SelectedNode = sol1.CurrentCircuit.Nodes["out"];
                // sol1.
                sol1.ExportToCSV("e:/plain.csv");
                Bitmap bmp = FileUtils.DrawImage(func, ac1.Points, ac1.Points);
                bmp.Save("e:/plain.bmp");
                break;


            case 4:
                cir.ReadCircuit("circuits/RCL.net");
                //cir.ReadCircuit("RCcharge.net");
                cir2 = (Circuit)cir.Clone();
                cir2.Setup.RemoveAt(0);
                TransientAnalysis ac5 = new TransientAnalysis();
                ac5.Step = "10n";
                cir2.Setup.Add(ac5);
                TransientSolver sol5 = (TransientSolver)ac5.Solver;
                TransientSolver.Optimize(cir2);
                cir2.Solve();
                sol5.ExportToCSV("e:/time.csv");
                break;

            case 5:
                cir.ReadCircuit("circuits/vsingain.net");
                //cir.ReadCircuit("RCcharge.net");
                cir2 = (Circuit)cir.Clone();
                cir2.Setup.RemoveAt(0);
                TransientAnalysis ac6 = new TransientAnalysis();
                ac6.Step = "100n";
                cir2.Setup.Add(ac6);
                TransientSolver sol6 = (TransientSolver)ac6.Solver;
                TransientSolver.Optimize(cir2);
                cir2.Solve();
                sol6.ExportToCSV("e:/time.csv");
                break;

            default:
                break;
            }



            Console.ReadKey();
        }