public LinearMesh(CylindricalPlate plate, int countWidthElements) : base(plate) { _plate = plate; _countWidthElements = countWidthElements; MiddleNodes = new List <FiniteElementNode>(); }
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; } }
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)); }
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); } })); } }