public LinearMesh(CylindricalPlate plate, int countWidthElements)
     : base(plate)
 {
     _plate = plate;
     _countWidthElements = countWidthElements;
     MiddleNodes         = new List <FiniteElementNode>();
 }
Beispiel #2
0
        public Matrix GetConstantMatrix()
        {
            CylindricalPlate plate = _model.Shape as CylindricalPlate;

            double hInv = 1 / plate.Height;

            double K = plate.Curvature;

            double E = _model.Material.E[0];
            double v = _model.Material.v[0, 0];
            double h = plate.Height;

            Matrix A = new Matrix(9, 9);

            A[0, 0] = A[0, 2] = A[1, 1] = A[1, 2] = A[2, 0] = A[2, 1] = A[3, 3] = A[3, 5] = A[4, 4] = A[4, 5] = A[5, 3] = A[5, 4] = (E * h * (1 - v)) / (3 * (1 + v) * (1 - 2 * v));
            A[0, 1] = A[1, 0] = A[3, 4] = A[4, 3] = (E * h * (1 - v)) / (6 * (1 + v) * (1 - 2 * v));
            A[2, 2] = A[5, 5] = (8 * E * h * (1 - v)) / (5 * (1 + v) * (1 - 2 * v));


            A[0, 3] = A[0, 5] = A[1, 4] = A[1, 5] = A[2, 3] = A[2, 4] = A[3, 0] = A[3, 2] = A[4, 1] = A[4, 2] = A[5, 0] = A[5, 1] = (E * h * v) / (3 * (1 + v) * (1 - 2 * v));
            A[0, 4] = A[1, 3] = A[3, 1] = A[4, 0] = (E * h * v) / (6 * (1 + v) * (1 - 2 * v));
            A[2, 5] = A[5, 2] = (8 * E * h * v) / (5 * (1 + v) * (1 - 2 * v));

            A[6, 6] = A[6, 8] = A[7, 7] = A[7, 8] = A[8, 6] = A[8, 7] = (E * h) / (6 * (1 + v));
            A[6, 7] = A[7, 6] = (E * h) / (12 * (1 + v));
            A[8, 8] = (4 * E * h) / (15 * (1 + v));

            Matrix D = matrixD(K, hInv);

            ConstMatrix = Matrix.Transpose(D) * A * D;
            return(ConstMatrix);
        }
        public void Solve()
        {
            Application.Current.Dispatcher.BeginInvoke(new Action(() =>
            {
                CylindricalPlate plate = solidMechanicsModel.Model.Shape as CylindricalPlate;
                if (plate != null)
                {
                    LinearMesh mesh = new LinearMesh(plate, solidMechanicsModel.HorizontalElements);
                    Stopwatch sw    = new Stopwatch();
                    sw.Start();

                    Solver solver = new CylindricalPlate1DSolver(solidMechanicsModel.Model, mesh, error, solidMechanicsModel.MaxAmplitude);
                    IEnumerable <INumericalResult> results = solver.Solve(maxResults);

                    sw.Stop();
                    TimeElapsed = sw.Elapsed;

                    pointsForGrid = mesh.GetPointsForResult();
                    Results.Clear();
                    foreach (INumericalResult result in results)
                    {
                        Results.Add(result);
                    }
                }
            }));
        }
        public override void RefreshProperties(SolidMechanicsModel model)
        {
            base.RefreshProperties(model);
            CylindricalPlate plate = model.Model.Shape as CylindricalPlate;

            if (plate != null)
            {
                Curvature = plate.Curvature;
            }
        }
Beispiel #5
0
        protected Matrix LocalMassMatrixFunction(double eta)
        {
            Matrix baseFunctionsMatrix = GetLocalBaseFunctionsMatrix(eta);

            CylindricalPlate plate = _model.Shape as CylindricalPlate;

            Matrix a = GetAlfa3BaseFunctionsMatrix(plate.Height);

            return(Matrix.Transpose(baseFunctionsMatrix) * a * baseFunctionsMatrix * ((elementCurrent[1].Point.X - elementCurrent[0].Point.X) / 2));
        }
Beispiel #6
0
        protected ICollection <INumericalResult> generateVibrationResults(double[] lambdas, Vector[] eigenVectors)
        {
            List <INumericalResult> results = new List <INumericalResult>();

            CylindricalPlate plate = _model.Shape as CylindricalPlate;

            double h = plate.Height;

            for (int i = 0; i < lambdas.Length; i++)
            {
                Vector eigenVector = eigenVectors[i];
                eigenVector = addStaticPoints(eigenVector, indeciesToDelete);
                EigenValuesCylindricalPlateNumericalResult result = new EigenValuesCylindricalPlateNumericalResult(_mesh.Elements, eigenVector, Math.Sqrt(lambdas[i] / _model.Material.Rho), h);
                results.Add(result);
            }

            return(results);
        }
        private void FillResultPicture()
        {
            CylindricalPlate plate = solidMechanicsModel.Model.Shape as CylindricalPlate;

            if (plate != null)
            {
                LinearMesh   mesh   = new LinearMesh(plate, solidMechanicsModel.HorizontalElements);
                List <Shape> shapes = new List <Shape>();
                foreach (FiniteElementRectangle fe in mesh.Elements)
                {
                    shapes.Add(ConvertFiniteElementToShape(fe));
                }
                Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                {
                    Figures.Clear();
                    foreach (Shape shape in shapes)
                    {
                        Figures.Add(shape);
                    }
                }));
            }
        }