// Paste two meshes.
        // Nodes and elements of the first mesh
        // are first in the resulting mesh.
        // returns   resulting mesh after pasting.
        private FeModel pasteModels()
        {
            FeModel mC = new FeModel(CSMGEN.RD, CSMGEN.PR);

            mC.nDim = mA.nDim;

            // nodal coordinates of model mC
            mC.nNod = mA.nNod + mB.nNod - nConnected;
            mC.newCoordArray();
            // Copy nodes of model mA
            for (int i = 0; i < mA.nNod; i++)
            {
                mC.setNodeCoords(i, mA.getNodeCoords(i));
            }
            // Add nodes of model mB
            for (int i = 0; i < mB.nNod; i++)
            {
                mC.setNodeCoords(
                    newNodesB[i], mB.getNodeCoords(i));
            }

            // Element connectivities of model mC
            mC.nEl   = mA.nEl + mB.nEl;
            mC.elems = new Element[mC.nEl];
            // Copy elements of model mA
            for (int el = 0; el < mA.nEl; el++)
            {
                mC.elems[el] = Element.newElement(mA.elems[el].name);
                mC.elems[el].setElemConnectivities(mA.elems[el].ind);
                mC.elems[el].matName = mA.elems[el].matName;
                mC.elems[el].A       = mA.elems[el].A;
                mC.elems[el].t       = mA.elems[el].t;
                mC.elems[el].I       = mA.elems[el].I;
            }
            // Add elements of mB with renumbered connectivities
            for (int el = 0; el < mB.nEl; el++)
            {
                mC.elems[mA.nEl + el] = Element.newElement(mB.elems[el].name);
                int[] indel = new int[mB.elems[el].ind.Length];
                for (int i = 0; i < mB.elems[el].ind.Length; i++)
                {
                    indel[i] = newNodesB[mB.elems[el].ind[i] - 1] + 1;
                }
                mC.elems[mA.nEl + el].setElemConnectivities(indel);
                mC.elems[mA.nEl + el].matName = mB.elems[el].matName;
                mC.elems[mA.nEl + el].A       = mB.elems[el].A;
                mC.elems[mA.nEl + el].t       = mB.elems[el].t;
                mC.elems[mA.nEl + el].I       = mB.elems[el].I;
            }
            return(mC);
        }
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);
        }
        private void nodeCoordinates3D()
        {
            m3.newCoordArray();

            for (int i2 = 0; i2 < m2.nNod; i2++)
            {
                int step = (nodeType2[i2] == 0) ? 2 : 1;
                int n    = 2 * nlayers + 1;
                // Node at rotation axis
                if (rotate && m2.getNodeCoord(i2, 0) == 0.0)
                {
                    n = 1;
                }
                int nodeNum = nodeNum2[i2] - 1;
                for (int i = 0; i < n; i += step)
                {
                    double z = zlayers[i];
                    double r = m2.getNodeCoord(i2, 0);
                    double y = m2.getNodeCoord(i2, 1);
                    if (rotate)
                    {
                        // Sweeping by rotation around Y
                        double   fi = -Math.PI * (zlayers[i]) / 180.0;
                        double[] w  = { r *Math.Cos(fi), y, r *Math.Sin(fi) };
                        m3.setNodeCoords(nodeNum, w);
                    }
                    else
                    {
                        // Sweeping by translation along Z
                        double[] w = { r, y, z };
                        m3.setNodeCoords(nodeNum, w);
                    }
                    nodeNum++;
                }
            }
        }