Esempio n. 1
0
 // 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);
         }
     }
 }
Esempio n. 2
0
        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++;
                }
            }
        }