public static float Calculate_Resindex()
        {
            float T_demand_carp_h_eksi_hstar = 0;
            float T_demand_carp_Hdesign      = 0;

            float[] Hdesignlar               = NodeOp.Get_Hdesign();
            float[] Elevler                  = NodeOp.Get_NodeElev();
            float[] Demandler                = NodeOp.Get_NodeDemand();
            float[] Pressurelar              = NodeOp.Get_Pressure();
            float[] h_eksi_hstar             = new float[NodeOp.Get_numofNode()];
            float[] demand_carp_h_eksi_hstar = new float[NodeOp.Get_numofNode()];
            float[] demand_carp_Hdesign      = new float[NodeOp.Get_numofNode()];
            for (int i = 0; i < NodeOp.Get_numofNode(); i++)
            {
                UnsafeNativeMethods.ENgetnodetype(i + 1, out NodeType kontrol);
                if (kontrol.ToString() != ReservoirOp.ChkNodeType)//reservuar değilse
                {
                    if (Demandler[i] > 0)
                    {
                        h_eksi_hstar[i]             = Pressurelar[i] - Sabitler.MinHead;
                        demand_carp_h_eksi_hstar[i] = Demandler[i] * h_eksi_hstar[i];
                        T_demand_carp_h_eksi_hstar  = T_demand_carp_h_eksi_hstar + demand_carp_h_eksi_hstar[i];
                        demand_carp_Hdesign[i]      = Demandler[i] * Hdesignlar[i];
                        T_demand_carp_Hdesign       = T_demand_carp_Hdesign + demand_carp_Hdesign[i];
                    }
                }
            }
            double ResHesaplanmis = (T_demand_carp_h_eksi_hstar) / (ReservoirOp.Calculate_TotalPowerofSystem() - T_demand_carp_Hdesign);
            double rounded        = Math.Round(ResHesaplanmis, 8);

            return((float)rounded);
        }
 public static float[] Get_ResElevations()
 {
     for (int i = 0; i < NodeOp.Get_numofNode(); i++)
     {
         UnsafeNativeMethods.ENgetnodetype(i + 1, out NodeType kontrol);
         if (kontrol.ToString() == ChkNodeType)
         {
             UnsafeNativeMethods.ENgetnodevalue(i + 1, NodeValue.Head, out float ResHead);
             if (ResHead > 0)
             {
                 if (RezKotlari.ContainsKey(i))
                 {
                     //null
                 }
                 else
                 {
                     RezKotlari.Add(i, ResHead);
                 }
             }
         }
     }
     float[] ResNodeElevations = RezKotlari.Select(z => z.Value).ToArray();
     //float[] ResNodeElevations = RezKotlari.ToArray();
     return(ResNodeElevations);
 }
        public static float[] Get_ResNodeDischarges()
        {
            for (int i = 0; i < NodeOp.Get_numofNode(); i++)
            {
                UnsafeNativeMethods.ENgetnodetype(i + 1, out NodeType kontrol);

                if (kontrol.ToString() == ChkNodeType)
                {
                    UnsafeNativeMethods.ENgetnodevalue(i + 1, NodeValue.Head, out float ResHead);
                    UnsafeNativeMethods.ENgetnodevalue(i + 1, NodeValue.Demand, out float ResDischarge);
                    if (ResHead > 0)
                    {
                        if (Rezbosaltim.ContainsKey(i))
                        {
                            //null
                        }
                        else
                        {
                            Rezbosaltim.Add(i, Math.Abs(ResDischarge));
                        }
                    }
                }
            }
            float[] ResNodeDischarges = Rezbosaltim.Select(z => z.Value).ToArray();
            return(ResNodeDischarges);
        }
        public static float Calculate_Failureindex()
        {
            float[] minDeger    = new float[NodeOp.Get_numofNode()];
            float[] Pressurelar = NodeOp.Get_Pressure();
            for (int i = 0; i < NodeOp.Get_numofNode(); i++)
            {
                UnsafeNativeMethods.ENgetnodetype(i + 1, out NodeType kontrol);
                if (kontrol.ToString() != ReservoirOp.ChkNodeType)//reservuar control
                {
                    minDeger[i] = Pressurelar[i] - Sabitler.MinHead;
                }
            }
            float minimumDeger = minDeger.Where(a => a > 0).Min();

            return(minimumDeger);
        }
        public static void Calculate_PowDis_ILK(Dictionary <int, float> icListem)
        {
            int[]   boruIndex1       = new int[icListem.Count];
            int[]   boruIndex2       = new int[icListem.Count];
            float[] boruFiyat1       = new float[icListem.Count];
            float[] boruFiyat2       = new float[icListem.Count];
            float[] Cap1             = new float[icListem.Count]; //8 elemanlı dizi oluşturdu
            float[] Cap2             = new float[icListem.Count];
            float[] boruLenght1      = new float[icListem.Count];
            float[] boruLenght2      = new float[icListem.Count];
            float[] Pipe_Start_Point = new float[icListem.Count];
            float[] Pipe_End_Point   = new float[icListem.Count];
            //listeyi sıralıyor..
            var iclistSirali = icListem.OrderBy(x => x.Key).ToList();

            Cap1 = iclistSirali.Select(z => z.Value).ToArray();
            //Boruların başlangıç ve bitiş noktalarını bulup dizi haline getiriyor..
            for (int i = 0; i < icListem.Count; i++)
            {
                UnsafeNativeMethods.ENgetlinknodes(i + 1, out int NodeS, out int NodeF);
                Pipe_End_Point[i]   = NodeS;
                Pipe_Start_Point[i] = NodeF;
            }
            //boruların CAP1 ve CAP2 olarak uzunluk ve fiyatlarını buluyor..
            for (int k = 0; k < icListem.Count; k++)
            {
                UnsafeNativeMethods.ENgetlinkvalue(k + 1, LinkValue.Length, out float lenght1);
                boruLenght1[k] = lenght1;
            }
            for (int k = 0; k < icListem.Count; k++)
            {
                boruIndex1[k] = Array.IndexOf(Sabitler.Pipe_Diameters, Cap1[k]);
                boruFiyat1[k] = Sabitler.Pipe_Cost[boruIndex1[k]] * boruLenght1[k];
                Cap2[k]       = Sabitler.Pipe_Diameters[Array.IndexOf(Sabitler.Pipe_Diameters, Cap1[k]) - 1];
                boruIndex2[k] = Array.IndexOf(Sabitler.Pipe_Diameters, Cap2[k]);
                boruFiyat2[k] = Sabitler.Pipe_Cost[boruIndex2[k]] * boruLenght1[k];
            }
            // Junctionların demandlerini alıyoruz.//BUNU SADECE 1 kere yapıyoruz...
            for (int i = 0; i < NodeOp.Get_numofNode(); i++)
            {
                UnsafeNativeMethods.ENgetnodevalue(i + 1, NodeValue.Demand, out float DemandValue);
                if (DemandValue < 0)
                {
                    PublicListeler.Node_Demand_list.Add(i + 1, 0);
                }
                else
                {
                    float deger = DemandValue * (float)3.6;
                    PublicListeler.Node_Demand_list.Add(i + 1, deger);
                }
            }
            //////////////////////////GAMA DURUMU İÇİN (CAP2)//////////////////////
            // Start_Point noktası için HGL-Demand
            float[] Start_Point_HGL_CAP2 = new float[icListem.Count];
            float[] End_Point_HGL_CAP2   = new float[icListem.Count];
            //Networke CAP2'yi atayıp sistemi analiz ediyoruz...
            for (int i = 0; i < icListem.Count; i++)
            {
                UnsafeNativeMethods.ENsetlinkvalue(i + 1, LinkValue.Diameter, Cap2[i]);
            }
            NetworkOp.SaveAndRun();
            // HGL değerlerini çekiyoruz... node numarasına denk gelen HGL leri listeliyoruz.
            for (int i = 0; i < NodeOp.Get_numofNode(); i++)
            {
                UnsafeNativeMethods.ENgetnodevalue(i + 1, NodeValue.Head, out float HGL);
                PublicListeler.Node_HGL_list_CAP2.Add(i + 1, HGL);
            }
            //////////////////////////GAMA DURUMU İÇİN (CAP1)//////////////////////
            // Start_Point noktası için HGL-Demand
            float[] Start_Point_HGL_CAP1 = new float[icListem.Count];
            float[] End_Point_HGL_CAP1   = new float[icListem.Count];
            //Networke CAP1 i atayıp sistemi analiz ediyoruz...
            for (int i = 0; i < icListem.Count; i++)
            {
                UnsafeNativeMethods.ENsetlinkvalue(i + 1, LinkValue.Diameter, Cap1[i]);
            }
            NetworkOp.SaveAndRun();
            // HGL değerlerini çekiyoruz...
            for (int i = 0; i < NodeOp.Get_numofNode(); i++)
            {
                UnsafeNativeMethods.ENgetnodevalue(i + 1, NodeValue.Head, out float HGL);
                PublicListeler.Node_HGL_list_CAP1.Add(i + 1, HGL);
            }
            //power dissipationlar hesaplanacak ve Ratio bulunacak
            float[] PowDisp_1 = new float[icListem.Count];
            float[] PowDisp_2 = new float[icListem.Count];
            float[] Ratio     = new float[icListem.Count];

            for (int t = 0; t < icListem.Count; t++)
            {
                UnsafeNativeMethods.ENgetlinknodes(t + 1, out int NodeS, out int NodeF);
                if (PublicListeler.Node_HGL_list_CAP1[NodeS] > PublicListeler.Node_HGL_list_CAP1[NodeF])
                {
                    PowDisp_1[t] = (PublicListeler.Node_Demand_list[NodeS] * PublicListeler.Node_HGL_list_CAP1[NodeS] - PublicListeler.Node_Demand_list[NodeF] * PublicListeler.Node_HGL_list_CAP1[NodeF]) / 3600;
                }
                else
                {
                    PowDisp_1[t] = -(PublicListeler.Node_Demand_list[NodeS] * PublicListeler.Node_HGL_list_CAP1[NodeS] - PublicListeler.Node_Demand_list[NodeF] * PublicListeler.Node_HGL_list_CAP1[NodeF]) / 3600;
                }

                if (PublicListeler.Node_HGL_list_CAP2[NodeS] > PublicListeler.Node_HGL_list_CAP2[NodeF])
                {
                    PowDisp_2[t] = (PublicListeler.Node_Demand_list[NodeS] * PublicListeler.Node_HGL_list_CAP2[NodeS] - PublicListeler.Node_Demand_list[NodeF] * PublicListeler.Node_HGL_list_CAP2[NodeF]) / 3600;
                }
                else
                {
                    PowDisp_2[t] = -(PublicListeler.Node_Demand_list[NodeS] * PublicListeler.Node_HGL_list_CAP2[NodeS] - PublicListeler.Node_Demand_list[NodeF] * PublicListeler.Node_HGL_list_CAP2[NodeF]) / 3600;
                }

                Ratio[t] = -(boruFiyat2[t] - boruFiyat1[t]) / ((PowDisp_2[t] - PowDisp_1[t]) * Sabitler.g * 1000);
                PublicListeler.Powdis_Dict_ILK.Add(t, Ratio[t]);
            }
            for (int i = 0; i < icListem.Count(); i++)
            {
                UnsafeNativeMethods.ENsetlinkvalue(i + 1, LinkValue.Diameter, Cap1[i]);
            }
            NetworkOp.SaveAndRun();
            PublicListeler.Node_HGL_list_CAP1.Clear();
            PublicListeler.Node_HGL_list_CAP2.Clear();
        }