Esempio n. 1
0
        private BaseDyadCoordinate <Complex> setNonDiagonalElements(
            DispersionParameter dispersion,
            CartesianCoordinate displacement)
        {
            double rmod  = displacement.Norm;
            double rmod2 = rmod * rmod;
            double rmod3 = rmod2 * rmod;

            double kmod = dispersion.WaveVector.Norm;
            double kr   = kmod * rmod;

            BaseDyadCoordinate <Complex> dyadProduct = displacement.DyadProduct(displacement);

            var initDyad = new DiagonalDyadCoordinate <Complex>(rmod2);

            BaseDyadCoordinate <Complex> firstMember = (kmod * kmod) * (dyadProduct - initDyad);

            BaseDyadCoordinate <Complex> secondMember = (1 / rmod2) * (Complex.ImaginaryOne * kr - 1) *
                                                        (3 * dyadProduct - initDyad);

            Complex multiplier = Complex.FromPolarCoordinates(1 / rmod3, kr);

            return(multiplier * (firstMember + secondMember));
        }