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); }
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); }
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(); }
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(); }
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; } }