コード例 #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DrudeFactor"/> class.
        /// </summary>
        /// <param name="medium">The medium.</param>
        /// <param name="timeStep">The time step.</param>
        public DrudeFactor(Drude medium, double timeStep) : base(medium)
        {
            double collisionFreq = medium.PlasmaTerm.CollisionFrequency.ToType(SpectrumUnitType.Frequency);
            double plasmaFreq    = medium.PlasmaTerm.ResonanceFrequency.ToType(SpectrumUnitType.CycleFrequency);
            double epsvc         = collisionFreq * timeStep;
            double exp           = Math.Exp(epsvc);

            this.SampledTimeShift1 = 1.0 + exp;
            this.SampledTimeShift2 = exp;
            this.Electric          = ((plasmaFreq * plasmaFreq * medium.PlasmaTerm.StrengthFactor) * timeStep / collisionFreq) * (1.0 - exp);
            this.EpsilonInfinity   = medium.EpsilonInfinity;
        }
コード例 #2
0
        public void GetPermittivity_Silver_EqualValue()
        {
            // Arrange
            var target     = new Drude();
            var collection = new OpticalSpectrum(
                new LinearDiscreteCollection(300e-9, 1000e-9, 10),
                SpectrumUnitType.WaveLength);
            var gp = new GnuPlot();

            // Act
            var dictionary = collection.ToDictionary(s => s.ToType(SpectrumUnitType.WaveLength), s => target.GetPermittivity(s));

            gp.Plot(dictionary);

            // Assert
            Assert.IsTrue(dictionary.All(x => x.Value.Imaginary >= 0));
            gp.Wait();
        }
コード例 #3
0
        private void initFactors()
        {
            this.mediumFactors.Add(
                "silver",
                () =>
            {
                var silver = new DrudeLorentz();
                return(new DrudeLorentzFactor(silver, this.timeStep));
            });

            this.mediumFactors.Add(
                "silverdrude",
                () =>
            {
                var silver = new Drude();
                return(new DrudeFactor(silver, this.timeStep));
            });

            this.mediumFactors.Add("vacuum", () => null);
        }