/// <summary> /// Calculates the single DDA. /// </summary> /// <param name="waveLength">Length of the wave.</param> /// <param name="parameters">The parameters.</param> /// <returns>The single simulation result.</returns> public SimulationResult CalculateSingleDDA( SpectrumUnit waveLength, SimulationParameters parameters, double[] polarization) { Console.WriteLine("start wave" + waveLength.ToType(Simulation.Models.Enums.SpectrumUnitType.WaveLength)); DispersionParameter dispersion = this.mediumManager.GetDispersionParameters( waveLength, parameters.WavePropagation); ComplexCoordinate[] e = this.getIncidentField( parameters.SystemConfig, parameters.IncidentMagnitude, dispersion); IMatrix <IMatrix <Complex> > a = this.buildMatrixA( parameters.SystemConfig, dispersion); ModernKDDAEntryPoint.OpenMPCGMethod( polarization.Length, CoordinateHelper.ConvertToPlainArrayMatrix(a), polarization, CoordinateHelper.ConvertToPlainArray(e)); var result = new SimulationResult { Polarization = CoordinateHelper.ConvertFromPlainArray(polarization), ElectricField = e }; this.calculateCrossSectionExtinction( result, parameters, dispersion); Console.WriteLine("finish wave" + waveLength.ToType(Simulation.Models.Enums.SpectrumUnitType.WaveLength)); return(result); }