Esempio n. 1
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 generateMesh()
        {
            int[] ind = new int[4];
            m.nDim = 2;

            // Connectivity array
            int nh = nt;
            int nv = nc;

            m.nEl   = nh * nv;
            m.elems = new Element[m.nEl];
            int n = 0;

            for (int iv = 0; iv < nv; iv++)
            {
                for (int ih = 0; ih < nh; ih++)
                {
                    m.elems[n] = Element.newElement("quad4");
                    int in0 = iv * (nh + 1) + ih + 1;
                    ind[0] = in0;
                    ind[1] = in0 + 1;
                    int in1 = (iv + 1) * (nh + 1) + ih + 1;
                    ind[2] = in1 + 1;
                    ind[3] = in1;
                    m.elems[n].setElemConnectivities(ind);
                    m.elems[n].setElemMaterial(mat);
                    n++;
                }
            }

            // Node coordinate array
            m.nNod = (nt + 1) * (nc + 1);
            m.newCoordArray();
            n = 0;
            for (int iv = 0; iv < nv + 1; iv++)
            {
                for (int ih = 0; ih < nh + 1; ih++)
                {
                    //int pc = (ic + 1) / 2;
                    //if (ic % 2 == 0 && it % 2 == 0) // corner noder - 0, 2, 4, 6
                    //{
                    m.setNodeCoord(n, 0, (ri + dt * ih) * Math.Cos((theta1 + dtheta * iv) * Math.PI / 180.0));
                    m.setNodeCoord(n, 1, (ri + dt * ih) * Math.Sin((theta1 + dtheta * iv) * Math.PI / 180.0));
                    n++;
                    //}
                    //else if (ic % 2 == 1 && it % 2 == 0) // midside node on horizontal element side - 3, 7
                    //{
                    //m.setNodeCoord(n, 0, (ri + dt * it) * Math.Cos((theta1 + dtheta * ic) * Math.PI / 180.0));
                    //m.setNodeCoord(n, 1, (ri + dt * it) * Math.Sin((theta1 + dtheta * ic) * Math.PI / 180.0));
                    //n++;
                    //}
                    //else if (ic % 2 == 0 && it % 2 == 1) // midside node on vertical element side - 1, 5
                    //{
                    //m.setNodeCoord(n, 0, (ri + dt * it) * Math.Cos((theta1 + dtheta * ic) * Math.PI / 180.0));
                    //m.setNodeCoord(n, 1, (ri + dt * it) * Math.Sin((theta1 + dtheta * ic) * Math.PI / 180.0));
                    //n++;
                    //}
                }
            }
        }
        // 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. 4
0
        private void generateMesh()
        {
            int[] ind = new int[2];
            m.nDim = this.ndim;

            // Connectivity array
            m.nEl   = this.n;
            m.elems = new Element[m.nEl];

            int el = 0;

            for (int i = 0; i < this.n; i++)
            {
                m.elems[el]   = Element.newElement(this.elType);
                m.elems[el].A = this.a;
                ind[0]        = i + 1;
                ind[1]        = i + 2;
                m.elems[el].setElemConnectivities(ind);
                m.elems[el].setElemMaterial(mat);
                el++;
            }


            // Node coordinate array
            m.nNod = this.n + 1;
            m.newCoordArray();
            int    nid = 0;
            double L, l;
            double lij = 0, mij = 0, nij = 0;

            L   = Math.Sqrt(Math.Pow(ys[1] - ys[0], 2) + Math.Pow(xs[1] - xs[0], 2) + (m.nDim == 3 ? Math.Pow(zs[1] - zs[0], 2) : 0.0));
            l   = L / (double)this.n;
            lij = (xs[1] - xs[0]) / L;
            mij = (ys[1] - ys[0]) / L;
            nij = (m.nDim == 3 ? (zs[1] - zs[0]) / L : 0.0);

            for (int i = 0; i < this.n + 1; i++)
            {
                m.setNodeCoord(nid, 0, xs[0] + i * l * lij);
                m.setNodeCoord(nid, 1, ys[0] + i * l * mij);
                if (m.nDim == 3)
                {
                    m.setNodeCoord(nid, 2, zs[0] + i * l * nij);
                }
                nid++;
            }
        }
Esempio n. 5
0
        private void generateMesh()
        {
            int[] ind = new int[4];
            m.nDim = 2;

            // Connectivity array
            m.nEl   = nx * ny;
            m.elems = new Element[m.nEl];

            int el = 0;

            for (int iy = 0; iy < ny; iy++)
            {
                for (int ix = 0; ix < nx; ix++)
                {
                    m.elems[el]   = Element.newElement("quad4");
                    m.elems[el].t = this.t;
                    int in0 = iy * (nx + 1) + ix + 1;
                    ind[0] = in0;
                    ind[1] = in0 + 1;
                    int in1 = (iy + 1) * (nx + 1) + ix + 1;
                    ind[2] = in1 + 1;
                    ind[3] = in1;
                    m.elems[el].setElemConnectivities(ind);
                    m.elems[el].setElemMaterial(mat);
                    el++;
                }
            }

            // Node coordinate array
            m.nNod = (nx + 1) * (ny + 1);// (3 * nx + 2) * ny + 2 * nx + 1;
            m.newCoordArray();
            int n = 0;

            for (int iy = 0; iy < ny + 1; iy++)
            {
                for (int ix = 0; ix < nx + 1; ix++)
                {
                    m.setNodeCoord(n, 0, xs[ix]);
                    m.setNodeCoord(n, 1, ys[iy]);
                    n++;
                }
            }
        }
        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++;
                }
            }
        }
Esempio n. 7
0
        private void generateMesh()
        {
            int[] ind = new int[8];
            m.nDim = 2;

            // Connectivity array
            m.nEl   = nx * ny;
            m.elems = new Element[m.nEl];

            int el = 0;

            for (int iy = 0; iy < ny; iy++)
            {
                for (int ix = 0; ix < nx; ix++)
                {
                    m.elems[el] = Element.newElement("quad8r");
                    int in0 = iy * (3 * nx + 2) + 2 * ix;
                    ind[0] = in0 + 1;
                    ind[1] = in0 + 2;
                    ind[2] = in0 + 3;
                    int in1 = iy * (3 * nx + 2) + 2 * nx + 1 + ix + 1;
                    ind[3] = in1 + 1;
                    ind[7] = in1;
                    int in2 = (iy + 1) * (3 * nx + 2) + 2 * ix;
                    ind[4] = in2 + 3;
                    ind[5] = in2 + 2;
                    ind[6] = in2 + 1;
                    m.elems[el].setElemConnectivities(ind);
                    m.elems[el].setElemMaterial(mat);
                    el++;
                }
            }

            // Node coordinate array
            m.nNod = (3 * nx + 2) * ny + 2 * nx + 1;
            m.newCoordArray();
            int n = 0;

            for (int iy = 0; iy < 2 * ny + 1; iy++)
            {
                int py = (iy + 1) / 2;
                for (int ix = 0; ix < 2 * nx + 1; ix++)
                {
                    int px = (ix + 1) / 2;
                    if (ix % 2 == 0 && iy % 2 == 0)
                    {
                        m.setNodeCoord(n, 0, xs[px]);
                        m.setNodeCoord(n, 1, ys[py]);
                        n++;
                    }
                    else if (ix % 2 == 1 && iy % 2 == 0)
                    {
                        m.setNodeCoord(n, 0, 0.5 * (xs[px - 1] + xs[px]));
                        m.setNodeCoord(n, 1, ys[py]);
                        n++;
                    }
                    else if (ix % 2 == 0 && iy % 2 == 1)
                    {
                        m.setNodeCoord(n, 0, xs[px]);
                        m.setNodeCoord(n, 1, 0.5 * (ys[py - 1] + ys[py]));
                        n++;
                    }
                }
            }
        }
        private void generateMesh()
        {
            int[] ind = new int[8];
            m.nDim = 2;

            // Element connectivities
            m.nEl   = nh * nv;
            m.elems = new Element[m.nEl];
            int n = 0;

            for (int iv = 0; iv < nv; iv++)
            {
                for (int ih = 0; ih < nh; ih++)
                {
                    m.elems[n] = Element.newElement("quad8r");
                    int in0 = iv * (3 * nh + 2) + 2 * ih;
                    ind[0] = in0 + 1;
                    ind[1] = in0 + 2;
                    ind[2] = in0 + 3;
                    int in1 = iv * (3 * nh + 2) + 2 * nh + ih + 2;
                    ind[3] = in1 + 1;
                    ind[7] = in1;
                    int in2 = (iv + 1) * (3 * nh + 2) + 2 * ih;
                    ind[4] = in2 + 3;
                    ind[5] = in2 + 2;
                    ind[6] = in2 + 1;
                    m.elems[n].setElemConnectivities(ind);
                    m.elems[n].setElemMaterial(mat);
                    n++;
                }
            }

            // Shift of midside nodes for element in xi, eta
            midsideNodeShift();

            // Node coordinate array
            m.nNod = (3 * nh + 2) * nv + 2 * nh + 1;
            m.newCoordArray();
            n = 0;
            double dxi = 1.0 / nh;
            double det = 1.0 / nv;

            for (int iv = 0; iv < 2 * nv + 1; iv++)
            {
                for (int ih = 0; ih < 2 * nh + 1; ih++)
                {
                    if (iv % 2 == 1 && ih % 2 == 1)
                    {
                        continue;
                    }
                    double xi = -1.0 + dxi * ih;
                    double et = -1.0 + det * iv;
                    //  First quadratic transform: xi,et -> s,t
                    double s, t;
                    if (ih % 2 == 0)
                    {
                        s = quadraticTransform(xip, xi, et);
                    }
                    else
                    {
                        s = 0.5 * (quadraticTransform(xip, xi - dxi, et)
                                   + quadraticTransform(xip, xi + dxi, et));
                    }
                    if (iv % 2 == 0)
                    {
                        t = quadraticTransform(etp, xi, et);
                    }
                    else
                    {
                        t = 0.5 * (quadraticTransform(etp, xi, et - det)
                                   + quadraticTransform(etp, xi, et + det));
                    }

                    //  Second quadratic transform: s,t -> x,y
                    m.setNodeCoord(n, 0, quadraticTransform(xp, s, t));
                    m.setNodeCoord(n, 1, quadraticTransform(yp, s, t));
                    n++;
                }
            }
        }
Esempio n. 9
0
        private void generateMesh()
        {
            int[] ind = new int[8];
            m.nDim = 2;

            // Connectivity array
            m.nEl   = nc * nt;
            m.elems = new Element[m.nEl];

            int el = 0;

            for (int ic = 0; ic < nc; ic++)
            {
                for (int it = 0; it < nt; it++)
                {
                    m.elems[el] = Element.newElement("quad8r");
                    int in0 = ic * (3 * nt + 2) + 2 * it;
                    ind[0] = in0 + 1;
                    ind[1] = in0 + 2;
                    ind[2] = in0 + 3;
                    int in1 = ic * (3 * nt + 2) + 2 * nt + it + 2;
                    ind[3] = in1 + 1;
                    ind[7] = in1;
                    int in2 = (ic + 1) * (3 * nt + 2) + 2 * it;
                    ind[4] = in2 + 3;
                    ind[5] = in2 + 2;
                    ind[6] = in2 + 1;
                    m.elems[el].setElemConnectivities(ind);
                    m.elems[el].setElemMaterial(mat);
                    el++;
                }
            }

            // Node coordinate array
            m.nNod = (3 * nt + 2) * nc + 2 * nt + 1;
            m.newCoordArray();
            int n = 0;

            for (int ic = 0; ic < 2 * nc + 1; ic++)
            {
                //int pt = (ic + 1) / 2;
                for (int it = 0; it < 2 * nt + 1; it++)
                {
                    //int pc = (it + 1) / 2;
                    if (ic % 2 == 0 && it % 2 == 0) // corner noder - 0, 2, 4, 6
                    {
                        m.setNodeCoord(n, 0, (ri + dt * it) * Math.Cos((theta1 + dtheta * ic) * Math.PI / 180.0));
                        m.setNodeCoord(n, 1, (ri + dt * it) * Math.Sin((theta1 + dtheta * ic) * Math.PI / 180.0));
                        n++;
                    }
                    else if (ic % 2 == 1 && it % 2 == 0) // midside node on horizontal element side - 3, 7
                    {
                        m.setNodeCoord(n, 0, (ri + dt * it) * Math.Cos((theta1 + dtheta * ic) * Math.PI / 180.0));
                        m.setNodeCoord(n, 1, (ri + dt * it) * Math.Sin((theta1 + dtheta * ic) * Math.PI / 180.0));
                        n++;
                    }
                    else if (ic % 2 == 0 && it % 2 == 1) // midside node on vertical element side - 1, 5
                    {
                        m.setNodeCoord(n, 0, (ri + dt * it) * Math.Cos((theta1 + dtheta * ic) * Math.PI / 180.0));
                        m.setNodeCoord(n, 1, (ri + dt * it) * Math.Sin((theta1 + dtheta * ic) * Math.PI / 180.0));
                        n++;
                    }
                }
            }
        }