/// <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; }
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(); }
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); }