// Set element nodal coordinates xy[nind][nDim] public void setElemXy() { for (int i = 0; i < ind.Length; i++) { int indw = ind[i] - 1; if (indw >= 0) { xy[i] = fem.getNodeCoords(indw); } } }
private FeModel copyMesh() { FeModel mB = new FeModel(CSMGEN.RD, CSMGEN.PR); mB.nDim = mA.nDim; mB.nNod = mA.nNod; mB.newCoordArray(); for (int i = 0; i < mB.nNod; i++) { for (int j = 0; j < mB.nDim; j++) { mB.setNodeCoords(i, mA.getNodeCoords(i)); } } mB.nEl = mA.nEl; mB.elems = new Element[mB.nEl]; for (int el = 0; el < mB.nEl; el++) { mB.elems[el] = Element.newElement(mA.elems[el].name); mB.elems[el].setElemConnectivities(mA.elems[el].ind); mB.elems[el].matName = mA.elems[el].matName; } return(mB); }
public double[] getFaceNormalVector(int[] faceNodes) { double[] fn = new double[3] { 0, 0, 0 }; for (int i = 0; i < faceNodes.Length; i++) { double[] current = fem.getNodeCoords(faceNodes[i] - 1); //Console.WriteLine(current[0] + " " + current[1] + " " + current[2]); double[] next = fem.getNodeCoords(faceNodes[(i + 1) % faceNodes.Length] - 1); fn[0] += (current[1] - next[1]) * (current[2] + next[2]); fn[1] += (current[2] - next[2]) * (current[0] + next[0]); fn[2] += (current[0] - next[0]) * (current[1] + next[1]); } return(normalizeVector(fn)); }
// Find coincident nodes in models mA and mB, // generate new node numbers for model mB private void findCoincidentNodes() { newNodesB = new int[mB.nNod]; int ndim = mA.nDim; for (int i = 0; i < mB.nNod; i++) { newNodesB[i] = -1; } // Register coincident nodes of mesh B // in array newNodesB for (int ia = 0; ia < mA.nNod; ia++) { double[] xyA = mA.getNodeCoords(ia); for (int ib = 0; ib < mB.nNod; ib++) { for (int j = 0; j < ndim; j++) { if (Math.Abs(xyA[j] - mB.getNodeCoord(ib, j)) > eps) { goto B; } } newNodesB[ib] = ia; B : { } } } nConnected = 0; int n = mA.nNod; // New node numbers for nodes of model mB for (int i = 0; i < mB.nNod; i++) { if (newNodesB[i] == -1) { newNodesB[i] = n++; } else { nConnected++; } } }