public static double FaceWeightFactor(Element main, Element e,Face face) { double wf = 0; Vector2 dcf = face.centroid - main.centroid; Vector2 dff = e.centroid - face.centroid; wf = (dcf * face.normal) / ((dcf +dff) * face.normal); return wf; }
public bool Create(string filename_) { Inputfile = filename_; if (LoadFromFile() != 0) return false; SetParameters(); count = 0; elements = new Element[imax, jmax]; int i, j; for (i = 0; i < imax; i++) for (j = 0; j < jmax; j++) { Element elem = new Element(); elem.id = i*j+j; elem.u = 0; elem.cfdist = dh; elements[i,j] = elem; } SetBoundary(); return true; }
public bool Create(string filename_) { double[,] points=null ; double[,] polys = null; double[,] bound = null; Dictionary<string, Face> facedic = new Dictionary<string, Face>(); if (!LoadFromFile(filename_, ref points, ref polys, ref bound)) return false; count = 0; SetParameters(); elementcount = polys.GetLength(1); int vertexcount = polys.GetLength(0)-1; elements = new Element[elementcount]; int faceid = 0; int e = 0; for (e = 0; e < elementcount; e++) { Element elem; elements[e] = new Element(vertexcount); elem = elements[e]; elem.id = e; elem.k = 1; Vector2[] vertex = new Vector2[vertexcount]; for (int v = 0; v < vertexcount; v++) { int pointindex = (int)polys[v, e]; vertex[v] = new Vector2(points[0, pointindex], points[1, pointindex]); int p1index = pointindex; int p2index = 0; if (v < vertexcount - 1) p2index = (int)polys[v + 1, e]; else p2index = (int)polys[0, e]; int p1 = p1index; int p2 = p2index; string facestr =Face.GetFaceStrId(p1index,p2index); if (!facedic.ContainsKey(facestr)) { Face face = new Face(new Vector2(points[0, p1], points[1, p1]), new Vector2(points[0, p2], points[1, p2])); face.id = faceid; face.pointid1=p1; face.pointid2=p2; face.owner = elem; faceid++; facedic.Add(facestr, face); elem.faces[v] = face; } else { Face face = facedic[facestr]; face.nbelem = elem; elem.faces[v] = face; Element owner = face.owner; elem.nbs[v] = owner; owner.nbs[owner.FaceLocalId(face)] = elem; } } elem.SetPolygon(vertex); elem.PreCalc(); } faces = new Face[facedic.Count]; bndfaces = new Face[bound.GetLength(1)]; foreach (var pair in facedic) { Face face = pair.Value; faces[face.id] = face; } for (e = 0; e < elementcount; e++) elements[e].Calc(); int f; for (f = 0; f < bound.GetLength(1); f++) { string facestr = Face.GetFaceStrId((int)bound[0, f], (int)bound[1, f]); Face face = facedic[facestr]; face.bnddomain = (int)bound[5, f]; face.bndgroup = (int)bound[4, f]; face.isboundary = true; bndfaces[f]=face; } SetInitialBoundary(); // for (e = 0; e < elementcount; e++) // elements[e].CalcFluxes(); return true; }
public static double FaceWeightFactorSimple(Element main, Element e, Face face) { double wf = main.volume / (main.volume + e.volume); return wf; }
public bool Create(string filename_) { // Inputfile = filename_; // if (LoadFromFile() != 0) // return false; // TestCalcUnstructuredFlux(); // TestCalcUnstructuredFace(); count = 0; SetParameters(); int rowcount=12; elementcount = rowcount * 12; double h = 4; elements = new Element[elementcount]; int e = 0; for (e = 0; e < elementcount ; e++) { elements[e]=new Element(); } Element elem; e = 0; int n = 0; int row = 0; int total = elementcount / rowcount; for (e = row * total; e < (row+1) * total; e++) { elem = elements[e]; elem.id = e + 1; elem.k = 1; Vector2[] vertex = new Vector2[4]; vertex[0] = new Vector2(h * n, h * row); vertex[1] = new Vector2(h * (n + 1), h * row); vertex[2] = new Vector2(h * (n + 1), h * (row + 1)); vertex[3] = new Vector2(h * n, h * (row + 1)); elem.SetPolygon(vertex); elem.nbs[0] = null; elem.nbs[2] = elements[e+total]; if (n == 0) elem.nbs[3] = null; else elem.nbs[3] = elements[e-1]; if (n == total-1) elem.nbs[1] = null; else elem.nbs[1] = elements[e + 1]; elem.PreCalc(); n++; } for (int r = 0; r < rowcount-2; r++) { n = 0; row++; for (e = row * total; e < (row + 1) * total; e++) { elem = elements[e]; elem.id = e + 1; elem.k = 1; elem.SetPolygon4(h * n, h * row, h * (n + 1), h * row, h * (n + 1), h * (row + 1), h * n, h * (row + 1)); elem.nbs[0] = elements[e - total]; elem.nbs[2] = elements[e + total]; if (e == row * total) elem.nbs[3] = null; else elem.nbs[3] = elements[e - 1]; if (e == (row + 1) * total - 1) elem.nbs[1] = null; else elem.nbs[1] = elements[e + 1]; elem.PreCalc(); n++; } } n = 0; row++; for (e = row * total; e < (row + 1) * total; e++) { elem = elements[e]; elem.id = e + 1; elem.k = 1; elem.SetPolygon4(h * n, h * row, h * (n + 1), h * row, h * (n + 1), h * (row + 1), h * n, h * (row + 1)); elem.nbs[0] = elements[e - total]; elem.nbs[2] = null; if (e == row * total) elem.nbs[3] = null; else elem.nbs[3] = elements[e - 1]; if (e == (row + 1) * total - 1) elem.nbs[1] = null; else elem.nbs[1] = elements[e + 1]; elem.PreCalc(); n++; } for (e = 0; e < elementcount; e++) elements[e].Calc(); for (e = 0; e < elementcount; e++) elements[e].CalcFaces(); double bndw = 240; //down e = 0; elem = elements[e]; elem.SetBoundary(0, BoundaryType.BND_CONST, 0); elem.SetBoundary(3, BoundaryType.BND_CONST, bndw); for (int el = 0; el < total - 2; el++) { e++; elem = elements[e]; elem.SetBoundary(0, BoundaryType.BND_CONST, 0); } e++; elem = elements[e]; elem.SetBoundary(0, BoundaryType.BND_CONST, 0); elem.SetBoundary(1, BoundaryType.BND_CONST, 0); //-- //middle for (int r = 0; r < rowcount - 2; r++) { e++; elem = elements[e]; elem.SetBoundary(3, BoundaryType.BND_CONST, bndw); for (int el = 0; el < total - 2; el++) e++; e++; elem = elements[e]; elem.SetBoundary(1, BoundaryType.BND_CONST, 0); } //-- //up e++; elem = elements[e]; elem.SetBoundary(2, BoundaryType.BND_CONST, 0); elem.SetBoundary(3, BoundaryType.BND_CONST, bndw); for (int el = 0; el < total - 2; el++) { e++; elem = elements[e]; elem.SetBoundary(2, BoundaryType.BND_CONST, 0); } e++; elem = elements[e]; elem.SetBoundary(2, BoundaryType.BND_CONST, 0); elem.SetBoundary(1, BoundaryType.BND_CONST, 0); SetInitialBoundary(); for (e = 0; e < elementcount; e++) elements[e].CalcFluxes(); return true; }
public bool Create(string filename_) { // Inputfile = filename_; // if (LoadFromFile() != 0) // return false; count = 0; SetParameters(); elements = new Element[elementcount]; int e = 0; for (e = 0; e < elementcount ; e++) { elements[e]=new Element(); } Element elem; e = 0; for (e = 0; e < elementcount; e++) { elem = elements[e]; elem.id = e + 1; elem.k = 1; elem.SetRectangle(0.1*e, 0, 0.1, 0.1); elem.PreCalc(); /* e++;elem = elements[e];elem.id = e+1;elem.k = 1; elem.SetRectangle(0.1, 0, 0.1, 0.1); elem.PreCalc(); e++;elem = elements[e];elem.id = e+1;elem.k = 1; elem.SetRectangle(0.2, 0, 0.1, 0.1); elem.PreCalc(); e++;elem = elements[e];elem.id = e+1;elem.k = 1; elem.SetRectangle(0.3, 0, 0.1, 0.1); elem.PreCalc(); */ elem.nbs[Side.NORTH] = null; elem.nbs[Side.SOUTH] = null; } elem = elements[0]; elem.nbs[Side.EAST] = elements[1];elem.nbs[Side.WEST] = null; elem = elements[elementcount-1]; elem.nbs[Side.EAST] = null; elem.nbs[Side.WEST] = elements[elementcount-2]; for (e = 1; e < elementcount-1; e++) { elem = elements[e]; elem.nbs[Side.EAST] = elements[e+1]; elem.nbs[Side.WEST] = elements[e-1]; } for (e = 0; e < elementcount; e++) { elements[e].Calc(); } SetInitialBoundary(); return true; }
//by book public bool Create(string filename_) { // Inputfile = filename_; // if (LoadFromFile() != 0) // return false; count = 0; SetParameters(); elements = new Element[elementcount]; int e = 0; for (e = 0; e < elementcount ; e++) { elements[e]=new Element(); } double t500=500/2; double t200=200/2; double t400=400/2; double a = 0.02; double da=0.02/2.0; double h =(Math.Sqrt(3)/2.0)*a; Element elem; e = 0;elem = elements[e]; elem.id = e + 1; elem.k = 1; elem.SetTriangle(a, 0, a + da, h,da, h); elem.nbs[0] = elements[1]; elem.nbs[1] = elements[7]; elem.nbs[2] = null; elem.PreCalc(); e++; elem = elements[e]; elem.id = e + 1; elem.k = 1; elem.SetTriangle(a, 0, 2 * a, 0, a + da, h); elem.nbs[0] = null; elem.nbs[1] = elements[2]; elem.nbs[2] = elements[0]; elem.PreCalc(); e++; elem = elements[e]; elem.id = e + 1; elem.k = 1; elem.SetTriangle(2 * a, 0, 2*a + da, h,a+da, h); elem.nbs[0] = elements[3]; elem.nbs[1] = null; elem.nbs[2] = elements[1]; elem.PreCalc(); e++; elem = elements[e]; elem.id = e + 1; elem.k = 1; elem.SetTriangle(2 * a, 0,3*a,0 ,2*a + da, h); elem.nbs[0] = null; elem.nbs[1] = elements[4]; elem.nbs[2] = elements[2]; elem.PreCalc(); e++; elem = elements[e]; elem.id = e + 1; elem.k = 1; elem.SetTriangle(3 * a, 0,3*a+da,h ,2 * a + da, h ); elem.nbs[0] = null; elem.nbs[1] = elements[5]; elem.nbs[2] = elements[3]; elem.PreCalc(); //--------------------- e++; elem = elements[e]; elem.id = e + 1; elem.k = 1; elem.SetTriangle(2 * a + da, h, 3 * a + da, h, 3 * a ,2*h); elem.nbs[0] = elements[4]; elem.nbs[1] = elements[6]; elem.nbs[2] = null; elem.PreCalc(); e++; elem = elements[e]; elem.id = e + 1; elem.k = 1; elem.SetTriangle(3 * a + da, h,4 * a, 2*h, 3 * a, 2 * h); elem.nbs[0] = null; elem.nbs[1] = null; elem.nbs[2] = elements[5]; elem.PreCalc(); e++; elem = elements[e]; elem.id = e + 1; elem.k = 1; elem.SetTriangle(da, h, a+da, h, a, 2 * h); elem.nbs[0] = elements[0]; elem.nbs[1] = null; elem.nbs[2] = elements[8]; elem.PreCalc(); e++; elem = elements[e]; elem.id = e + 1; elem.k = 1; elem.SetTriangle(da, h, a, 2 * h,0, 2 * h); elem.nbs[0] = elements[7]; elem.nbs[1] = null; elem.nbs[2] = null; elem.PreCalc(); for (e = 0; e < elementcount; e++) elements[e].Calc(); for (e = 0; e < elementcount; e++) elements[e].CalcFaces(); //frombook e = 0; elem = elements[e]; elem.SetBoundary(2, BoundaryType.BND_CONST, t500); e++; elem = elements[e]; elem.SetBoundary(0, BoundaryType.BND_FLUX, 0); e++; elem = elements[e]; elem.SetBoundary(1, BoundaryType.BND_CONST, t400); e++; elem = elements[e]; elem.SetBoundary(0, BoundaryType.BND_FLUX, 0); e++; elem = elements[e]; elem.SetBoundary(0, BoundaryType.BND_CONST, t500); //-- e++; elem = elements[e]; elem.SetBoundary(2, BoundaryType.BND_CONST, t200); e++; elem = elements[e]; elem.SetBoundary(0, BoundaryType.BND_CONST,t500); elem.SetBoundary(1, BoundaryType.BND_FLUX, 0); e++; elem = elements[e]; elem.SetBoundary(1, BoundaryType.BND_CONST, t200); e++; elem = elements[e]; elem.SetBoundary(1, BoundaryType.BND_FLUX, 0); elem.SetBoundary(2, BoundaryType.BND_CONST, t500); //1 //e = 0; elem = elements[e]; elem.SetBoundary(2, BoundaryType.BND_CONST, t500); //e++; elem = elements[e]; elem.SetBoundary(0, BoundaryType.BND_CONST,t500); //e++; elem = elements[e]; elem.SetBoundary(1, BoundaryType.BND_CONST, t400); //e++; elem = elements[e]; elem.SetBoundary(0, BoundaryType.BND_CONST, t500); //e++; elem = elements[e]; elem.SetBoundary(0, BoundaryType.BND_CONST, t500); ////-- //e++; elem = elements[e]; elem.SetBoundary(2, BoundaryType.BND_CONST, t200); //e++; elem = elements[e]; elem.SetBoundary(0, BoundaryType.BND_CONST, t500); elem.SetBoundary(1, BoundaryType.BND_FLUX, 0); //e++; elem = elements[e]; elem.SetBoundary(1, BoundaryType.BND_CONST, t200); //e++; elem = elements[e]; elem.SetBoundary(1, BoundaryType.BND_FLUX, 0); elem.SetBoundary(2, BoundaryType.BND_CONST, t500); //2 //e = 0; elem = elements[e]; elem.SetBoundary(2, BoundaryType.BND_CONST, t500); //e++; elem = elements[e]; elem.SetBoundary(0, BoundaryType.BND_CONST, t500); //e++; elem = elements[e]; elem.SetBoundary(1, BoundaryType.BND_CONST, t200); //e++; elem = elements[e]; elem.SetBoundary(0, BoundaryType.BND_CONST, t200); //e++; elem = elements[e]; elem.SetBoundary(0, BoundaryType.BND_CONST, t200); ////-- //e++; elem = elements[e]; elem.SetBoundary(2, BoundaryType.BND_CONST, t200); //e++; elem = elements[e]; elem.SetBoundary(0, BoundaryType.BND_CONST, t200); elem.SetBoundary(1, BoundaryType.BND_FLUX, 0); //e++; elem = elements[e]; elem.SetBoundary(1, BoundaryType.BND_CONST, t200); //e++; elem = elements[e]; elem.SetBoundary(1, BoundaryType.BND_FLUX, 0); elem.SetBoundary(2, BoundaryType.BND_CONST, t500); nodecount = 0; nodes = new Node[elementcount*3]; int n = 0; int v = 0; for (e = 0; e < elementcount; e++) { elem = elements[e]; for (v = 0; v < elem.vertex.Length; v++) { bool found=false; for (n = 0; n < nodecount; n++) { if (nodes[n].vertex.Equal(elem.vertex[v])) { if (n == 0) { int abb = 1; } nodes[n].elements[nodes[n].elemcount] = elem; nodes[n].elemcount++; found=true; break; } } if (!found) { nodes[nodecount] = new Node(); nodes[nodecount].id = nodecount + 1; nodes[nodecount].vertex = elem.vertex[v]; nodes[nodecount].elements[0] = elem; nodes[nodecount].elemcount++; nodecount++; } } } int n2=0; for (n = 0; n < nodecount; n++) { for (e = 0; e < nodes[n].elemcount; e++) { elem = nodes[n].elements[e]; bool found= false; for (n2 = 0; n2 < Element.FACEMAX; n2++) { if (elem.nodes[n2] == nodes[n]) { found = true; break; } } if(!found) { elem.nodes[elem.nodecount] = nodes[n]; elem.nodecount++; } } } // SetInitialBoundary(); return true; }