示例#1
0
        double [,] calculate_H1_matrix(double[,] jacobiMatrix, double detJ, UniversalElement Element, int pointNr) //obliczam pierwszą część macierzy H
        {
            double[] dNdx = new double[4];                                                                         //strona 2
            double[] dNdy = new double[4];
            double   x = 0, y = 0;

            double[,] temp = new double[4, 4];

            for (int i = 0; i < 4; i++)
            {
                dNdx[i] = (1 / detJ) * (jacobiMatrix[0, 0] * Element.N_Ksi[pointNr, i] + jacobiMatrix[0, 1] * Element.N_Eta[pointNr, i]); //strona pierwsza
                dNdy[i] = (1 / detJ) * (jacobiMatrix[1, 0] * Element.N_Ksi[pointNr, i] + jacobiMatrix[1, 1] * Element.N_Eta[pointNr, i]);
            }

            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    x          = dNdx[i] * dNdx[j];
                    y          = dNdy[i] * dNdy[j];
                    temp[i, j] = (x + y) * GlobalData.k * detJ;//mnożymy po detJ bo po objętości przekstalcenie z lokalnego do globalnego
                }
            }
            return(temp);
        }
示例#2
0
        double[,] calculate_C_matrix(double[,] jacobiMatrix, double detJ, UniversalElement Element, int pointNr) //obliczam macierz C po 4 punktach calkowania
        {
            double[,] C = new double[4, 4];

            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    C[i, j] = (Element.N[pointNr, i] * Element.N[pointNr, j]) * GlobalData.c * GlobalData.ro * detJ;
                }
            }
            return(C);
        }
示例#3
0
        static void Main(string[] args)
        {
            IDataLoader dataLoader = new FileLoader();

            var tmp = dataLoader.LoadData();

            GridBuilderFacade gridBuilder = new GridBuilderFacade();

            var grid = gridBuilder.BuildGrid();

            var test = new UniversalElement(grid.Elements.ToArray(), grid.Nodes.ToArray());

            Console.ReadKey();
        }
示例#4
0
        public JacobiTransformationManager(Configuration config)
        {
            XValues = new double[4] {
                0, config.W / (config.nW - 1), config.W / (config.nW - 1), 0
            };
            YValues = new double[4] {
                0, 0, config.H / (config.nH - 1), config.H / (config.nH - 1)
            };
            DXDEtaValues = new double[4];
            DXDKsiValues = new double[4];
            DYDEtaValues = new double[4];
            DYDKsiValues = new double[4];
            Determinant  = new double[4];
            DNDXValues   = new double[4, 4];
            DNDYValues   = new double[4, 4];

            universalElement = new UniversalElement();
            FillDX_YDEta_KsiValues();
            CalculateDeterminant();
            CalculateDNDX_YValues();
        }
示例#5
0
        public void FillFemGrid()
        {
            for (int i = 0; i < GlobalData.ne; i++)
            {
                El.Add(new Element());
            }
            //Adding nodes
            universalElement = new UniversalElement();
            for (int i = 0; i < GlobalData.nB; i++)
            {
                for (int j = GlobalData.nH; j > 0; j--)
                {
                    if (i == 0 || i == GlobalData.nB || j == 1 || j == GlobalData.nH)
                    {
                        Nd.Add(new Node(xPosition, yPosition, true, 100));//100 temperatura poczatkowa w kazdym wezle
                        yPosition += (GlobalData.H / (GlobalData.nH - 1));
                    }
                    else
                    {
                        Nd.Add(new Node(xPosition, yPosition, false, 100));
                        yPosition += (GlobalData.H / (GlobalData.nH - 1));
                    }
                }
                yPosition  = 0.0;
                xPosition += (GlobalData.B / (GlobalData.nB - 1));
            }
            //adding elements

            int m = 1;

            for (int i = 1, j = 1; i <= GlobalData.ne; i++, j++)
            {
                El[i - 1].IdTab[0] = j;
                El[i - 1].IdTab[3] = j + 1;
                if (j == m * GlobalData.nH - 1)
                {
                    j = m * GlobalData.nH;
                    m++;
                }
            }
            m = 2;
            for (int i = 1, j = GlobalData.nH + 1; i <= GlobalData.ne; i++, j++)
            {
                El[i - 1].IdTab[1] = j;
                El[i - 1].IdTab[2] = j + 1;
                if (j == m * GlobalData.nH - 1)
                {
                    j = m * GlobalData.nH;
                    m++;
                }
            }

            for (int j = 0; j < El.Count; j++)
            {
                for (int i = 0; i < 4; i++) // dla każdego elemntu 4 jakobiany dla 4 punktów całkowania
                {
                    pointTab[i, 0] = Nd[El[j].IdTab[i] - 1].X;
                    pointTab[i, 1] = Nd[El[j].IdTab[i] - 1].Y;
                }
                for (int k = 0; k < 4; k++) // 36 jakobianów bo 9 razy 4
                {
                    //4 jakobiany bo 4 punkty calkowania tablica [2,2] bo jabobian 2d
                    JakobianList.Add(universalElement.CalculateJackobian(pointTab, k));
                }
            }

            for (int i = 0; i < GlobalData.ne; i++)
            {
                Nd[El[i].IdTab[0] - 1].Temp = universalElement.N[0, 0] * Nd[El[i].IdTab[0] - 1].Temp + universalElement.N[0, 1] * Nd[El[i].IdTab[1] - 1].Temp + universalElement.N[0, 2] * Nd[El[i].IdTab[2] - 1].Temp + universalElement.N[0, 3] * Nd[El[i].IdTab[3] - 1].Temp;
                Nd[El[i].IdTab[1] - 1].Temp = universalElement.N[1, 0] * Nd[El[i].IdTab[0] - 1].Temp + universalElement.N[1, 1] * Nd[El[i].IdTab[1] - 1].Temp + universalElement.N[1, 2] * Nd[El[i].IdTab[2] - 1].Temp + universalElement.N[1, 3] * Nd[El[i].IdTab[3] - 1].Temp;
                Nd[El[i].IdTab[2] - 1].Temp = universalElement.N[2, 0] * Nd[El[i].IdTab[0] - 1].Temp + universalElement.N[2, 1] * Nd[El[i].IdTab[1] - 1].Temp + universalElement.N[2, 2] * Nd[El[i].IdTab[2] - 1].Temp + universalElement.N[2, 3] * Nd[El[i].IdTab[3] - 1].Temp;
                Nd[El[i].IdTab[3] - 1].Temp = universalElement.N[3, 0] * Nd[El[i].IdTab[0] - 1].Temp + universalElement.N[3, 1] * Nd[El[i].IdTab[1] - 1].Temp + universalElement.N[3, 2] * Nd[El[i].IdTab[2] - 1].Temp + universalElement.N[3, 3] * Nd[El[i].IdTab[3] - 1].Temp;
            }
        }