예제 #1
0
        /// <summary>
        /// Computes the phi: simply supported.
        /// Formula 2.55
        /// </summary>
        /// <returns>The phi symply supported.</returns>
        /// <param name="plate">Plate.</param>
        /// <param name="p">P.</param>
        /// <param name="q">Q.</param>
        /// <param name="x">The x coordinate.</param>
        /// <param name="y">The y coordinate.</param>
        public static double ComputePhiPlateSimplySupported(Plate plate, int p, int q, double x, double y)
        {
            Func <double, int, double, double> beamFunc = (lx, pp, xx) =>
            {
                return(Math.Sin(pp * Math.PI * xx / lx));
            };

            return(beamFunc(plate.L_x, p, x) * beamFunc(plate.L_y, q, y));
        }
예제 #2
0
        /// <summary>
        /// Computes the phi free.
        /// Formula 2.62 and 2.63
        /// </summary>
        /// <returns>The phi free.</returns>
        /// <param name="plate">Plate.</param>
        /// <param name="p">P.</param>
        /// <param name="q">Q.</param>
        /// <param name="x">The x coordinate.</param>
        /// <param name="y">The y coordinate.</param>
        public static double ComputePhiPlateFree(Plate plate, int p, int q, double x, double y)
        {
            // TBD
            Func <double, int, double, double> beamFunc = (lx, pp, xx) =>
            {
                return(0.0);
            };

            return(0.0);
        }
예제 #3
0
 /// <summary>
 /// Computes the eigenfrequencies.
 /// Formula 2.91
 /// </summary>
 /// <returns>The eigenfrequencies.</returns>
 /// <param name="plate">Plate.</param>
 /// <param name="P">P.</param>
 /// <param name="Q">Q.</param>
 public static Complex[][] ComputeSimplySupportedPlateEigenfrequencies(Plate plate, int P, int Q)
 {
     Complex[][] wp = ComplexMatrix.Create2D(P, Q);
     for (int p = 1; p <= P; p++)
     {
         for (int q = 1; q <= Q; q++)
         {
             double multiplier = Math.Sqrt((Math.Pow(Math.PI, 4) * plate.B) / (plate.H * plate.Rho));
             wp[p - 1][q - 1] = multiplier * (Math.Pow(Math.Pow(p / plate.L_x, 2) + Math.Pow(q / plate.L_y, 2), 2));
         }
     }
     return(wp);
 }
예제 #4
0
        /// <summary>
        /// Computes the norms of the plate modes.
        /// Formula 2.102
        /// </summary>
        /// <returns>The norms of the plate modes.</returns>
        /// <param name="room">Room.</param>
        /// <param name="M">M.</param>
        /// <param name="N">N.</param>
        public static Complex[][] ComputeNormsOfThePlateModes(Plate plate, int P, int Q,
                                                              Func <Plate, int, int, double, double, double> func)
        {
            var result = ComplexMatrix.Create2D(P, Q);

            for (int p = 1; p <= P; p++)
            {
                for (int q = 1; q <= Q; q++)
                {
                    result[p - 1][q - 1] = GaussLegendreRule.Integrate((x, y) =>
                    {
                        return(Math.Pow(func(plate, p, q, x, y), 2.0));
                    }, 0.0, plate.L_x, 0.0, plate.L_y, 5);
                }
            }
            return(result);
        }
예제 #5
0
        /// <summary>
        /// Computes the plate room projection coefficients.
        /// Formula 2.87
        /// </summary>
        /// <returns>The plate room projection coefficients.</returns>
        /// <param name="plate">Plate.</param>
        /// <param name="room">Room.</param>
        /// <param name="M">M.</param>
        /// <param name="N">N.</param>
        /// <param name="P">P.</param>
        /// <param name="Q">Q.</param>
        public static Complex[][][][] ComputePlateRoomProjectionCoefficients(Plate plate, Room room, int M, int N, int P, int Q)
        {
            var result = ComplexMatrix.Create4D(M, N, P, Q);

            for (int m = 0; m < M; m++)
            {
                for (int n = 0; n < N; n++)
                {
                    for (int p = 1; p <= P; p++)
                    {
                        for (int q = 1; q <= Q; q++)
                        {
                            result[m][n][p - 1][q - 1] = GaussLegendreRule.Integrate((x, y) =>
                            {
                                return(ComputePhiRoom(room, m, n, x + plate.DeltaX, y + plate.DeltaY)
                                       * ComputePhiPlateSimplySupported(plate, p, q, x, y));
                            }, 0.0, plate.L_x, 0.0, plate.L_y, 5);
                        }
                    }
                }
            }
            return(result);
        }
예제 #6
0
 public void Add(Plate plate)
 {
     _plates.Add(plate);
 }