示例#1
0
 public static int[,] CirReverse(bool reverse, int[,] CirArrange, CircuitNumber CircuitInfo)
 {
     int[,] CirArrangeCopy = new int[CircuitInfo.number[0], CircuitInfo.TubeofCir[CircuitInfo.number[0] - 1]];
     if (reverse)
     {
         for (int i = 0; i < CircuitInfo.number[0]; i++)
         {
             for (int j = 0; j < CircuitInfo.TubeofCir[i]; j++)
             {
                 CirArrangeCopy[i, j] = CirArrange[i, CircuitInfo.TubeofCir[i] - 1 - j];
             }
             for (int j = 0; j < CircuitInfo.TubeofCir[i]; j++)
             {
                 CirArrange[i, j] = CirArrangeCopy[i, j];
             }
         }
     }
     return(CirArrange);
 }
示例#2
0
        public static int[,] GetCirArrange_2Row(int[,] CirArrange, int Nrow, int N_tube, CircuitNumber CircuitInfo)
        {
            int AddNumber = 0;
            int iCircuit1 = 0;

            for (int iCircuit = 0; iCircuit < CircuitInfo.number[0]; iCircuit++)
            {
                for (int iTube_Cir = 0; iTube_Cir < CircuitInfo.TubeofCir[iCircuit]; iTube_Cir++)
                {
                    if (iTube_Cir < CircuitInfo.TubeofCir[iCircuit] / Nrow)
                    {
                        if (iCircuit == 0)
                        {
                            CirArrange[iCircuit, iTube_Cir] = iTube_Cir + 1 + N_tube;
                        }
                        else
                        {
                            for (iCircuit1 = 1; iCircuit1 <= iCircuit; iCircuit1++)
                            {
                                AddNumber = AddNumber + CircuitInfo.TubeofCir[iCircuit1 - 1] / Nrow;
                            }
                            CirArrange[iCircuit, iTube_Cir] = iTube_Cir + 1 + N_tube + AddNumber;
                            AddNumber = 0;
                        }
                    }
                    else
                    {
                        if (iCircuit == 0)
                        {
                            CirArrange[iCircuit, iTube_Cir] = CircuitInfo.TubeofCir[iCircuit] - iTube_Cir;
                        }
                        else
                        {
                            for (iCircuit1 = 1; iCircuit1 <= iCircuit; iCircuit1++)
                            {
                                AddNumber = AddNumber + CircuitInfo.TubeofCir[iCircuit1 - 1] / Nrow;
                            }
                            CirArrange[iCircuit, iTube_Cir] = CircuitInfo.TubeofCir[iCircuit] - iTube_Cir + AddNumber;
                            AddNumber = 0;
                        }
                    }
                }
            }
            return(CirArrange);
        }
示例#3
0
        public static int[,] GetCirArrange_3Row(int[,] CirArrange, int Nrow, int N_tube, CircuitNumber CircuitInfo)
        {
            CirArrange = new int[CircuitInfo.number[0], CircuitInfo.TubeofCir[CircuitInfo.number[0] - 1]];

            int AddNumber1 = 0;
            int AddNumber2 = 0;
            int AddNumber3 = 0;

            CalcCirArr res_CirArr1 = new CalcCirArr();

            for (int iCircuit = 0; iCircuit < CircuitInfo.number[0]; iCircuit++)
            {
                if (CircuitInfo.TubeofCir[iCircuit] % Nrow == 0)
                {
                    res_CirArr1 = CircuitArrange_0(iCircuit, Nrow, CircuitInfo.TubeofCir[iCircuit] / Nrow, N_tube, CirArrange);
                    CirArrange  = res_CirArr1.CirArrange;

                    for (int iTube_Cir = 0; iTube_Cir < Nrow * CircuitInfo.TubeofCir[iCircuit] / Nrow; iTube_Cir++)
                    {
                        if (iTube_Cir < CircuitInfo.TubeofCir[iCircuit] / Nrow)
                        {
                            CirArrange[iCircuit, iTube_Cir] += AddNumber1;
                        }
                        else if (iTube_Cir >= CircuitInfo.TubeofCir[iCircuit] / Nrow && iTube_Cir < (Nrow - 1) * CircuitInfo.TubeofCir[iCircuit] / Nrow)
                        {
                            CirArrange[iCircuit, iTube_Cir] += AddNumber2;
                        }
                        else
                        {
                            CirArrange[iCircuit, iTube_Cir] += AddNumber3;
                        }
                    }

                    AddNumber1 += res_CirArr1.AddNumber_1;
                    AddNumber2 += res_CirArr1.AddNumber_2;
                    AddNumber3 += res_CirArr1.AddNumber_3;
                }
                else if (CircuitInfo.TubeofCir[iCircuit] % Nrow == 1)
                {
                    res_CirArr1 = CircuitArrange_1(iCircuit, Nrow, CircuitInfo.TubeofCir[iCircuit] / Nrow, N_tube, CirArrange);
                    CirArrange  = res_CirArr1.CirArrange;

                    for (int iCircuit0 = iCircuit; iCircuit0 < iCircuit + 3; iCircuit0++)
                    {
                        for (int iTube_Cir = 0; iTube_Cir < CircuitInfo.TubeofCir[iCircuit0]; iTube_Cir++)
                        {
                            CirArrange[iCircuit0, iTube_Cir] += AddNumber1;
                        }
                    }

                    AddNumber1 += res_CirArr1.AddNumber_1;
                    AddNumber2 += res_CirArr1.AddNumber_2;
                    AddNumber3 += res_CirArr1.AddNumber_3;
                    iCircuit    = iCircuit + 2;
                }
                else
                {
                    res_CirArr1 = CircuitArrange_2(iCircuit, Nrow, CircuitInfo.TubeofCir[iCircuit] / Nrow, N_tube, CirArrange);
                    CirArrange  = res_CirArr1.CirArrange;

                    for (int iCircuit0 = iCircuit; iCircuit0 < iCircuit + 3; iCircuit0++)
                    {
                        for (int iTube_Cir = 0; iTube_Cir < CircuitInfo.TubeofCir[iCircuit0]; iTube_Cir++)
                        {
                            CirArrange[iCircuit0, iTube_Cir] += AddNumber1;
                        }
                    }

                    AddNumber1 += res_CirArr1.AddNumber_1;
                    AddNumber2 += res_CirArr1.AddNumber_2;
                    AddNumber3 += res_CirArr1.AddNumber_3;
                    iCircuit    = iCircuit + 2;
                }
            }
            return(CirArrange);
        }
示例#4
0
        public static CircuitNumber GetTubeofCir(int Nrow, int N_tube, CircuitNumber CircuitInfo)
        {
            int N_total = Nrow * N_tube;
            int a       = N_total / CircuitInfo.number[0];
            int b       = N_total % CircuitInfo.number[0];

            if (b == 0)
            {
                if (a % 2 == 0)
                {
                    for (int i = 0; i < CircuitInfo.number[0]; i++)
                    {
                        CircuitInfo.TubeofCir[i] = a;
                    }
                }
                else
                {
                    if (CircuitInfo.number[0] % 2 != 0)
                    {
                        throw new Exception("error for exchanger input.");
                    }
                    for (int i = 0; i < CircuitInfo.number[0]; i++)
                    {
                        if (i < CircuitInfo.number[0] / 2)
                        {
                            CircuitInfo.TubeofCir[i] = a - 1;
                        }
                        else
                        {
                            CircuitInfo.TubeofCir[i] = a + 1;
                        }
                    }
                }
            }
            else
            {
                if (a % 2 == 0)
                {
                    int c = b / 2;
                    for (int i = 0; i < CircuitInfo.number[0]; i++)
                    {
                        if (i < CircuitInfo.number[0] - c)
                        {
                            CircuitInfo.TubeofCir[i] = a;
                        }
                        else
                        {
                            CircuitInfo.TubeofCir[i] = a + 2;
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < CircuitInfo.number[0]; i++)
                    {
                        if (i >= CircuitInfo.number[0] - b)
                        {
                            CircuitInfo.TubeofCir[i] = a + 1;
                        }
                        else
                        {
                            if (i < (CircuitInfo.number[0] - b) / 2)
                            {
                                CircuitInfo.TubeofCir[i] = a - 1;
                            }
                            else
                            {
                                CircuitInfo.TubeofCir[i] = a + 1;
                            }
                        }
                    }
                }
            }
            return(CircuitInfo);
        }