public static BellhopNLWrapper Run(string arrivalsFile, double chargeDepth, double chargeMass, double outputRate, double outputDuration, BellhopNLInput.NLModelType modelType) { var wrapper = new BellhopNLWrapper() { ArrivalsFile = new MWCharArray(arrivalsFile), ChargeDepth = chargeDepth, ChargeMass = chargeMass, OutputSampleRate = outputRate, OutputWaveformDuration = outputDuration, ModelName = new MWCharArray(modelType.ToString()), }; var result =new NLDelaySum().NL_delaysum(3,wrapper.ArrivalsFile, wrapper.ChargeDepth, wrapper.ChargeMass, wrapper.OutputSampleRate, wrapper.OutputWaveformDuration, wrapper.ModelName); var waveDimensions = result[0].Dimensions; wrapper.Waveforms = new double[waveDimensions[1], waveDimensions[2], waveDimensions[0]]; wrapper.Ranges = new double[result[1].Dimensions[0]]; wrapper.Depths = new double[ result[2].Dimensions[0]]; for (var i = 0; i < waveDimensions[0]; i++) for (var j = 0; j < waveDimensions[1]; j++) for (var k = 0; k < waveDimensions[2]; k++) wrapper.Waveforms[j, k, i] = (double)((MWNumericArray)result[0])[i + 1, j + 1, k + 1]; for (var i = 0; i < wrapper.Ranges.Length; i++) wrapper.Ranges[i] = (double)((MWNumericArray)result[1])[i + 1]; for (var i = 0; i < wrapper.Depths.Length; i++) wrapper.Depths[i] = (double)((MWNumericArray)result[2])[i + 1]; return wrapper; }
public static void ComputeThirdOctaves(BellhopNLWrapper wrapper) { for (var i = 0; i < wrapper.Waveforms.GetLength(0); i++) { for (var j = 0; j < wrapper.Waveforms.GetLength(1); j++) { var pressures = new double[wrapper.Waveforms.GetLength(2)]; for (var k = 0; k < wrapper.Waveforms.GetLength(2); k++) { pressures[k] = wrapper.Waveforms[i, j, k]; } var retMat = new ThirdOctaveCalculator().ThirdOctave(4,(MWNumericArray)pressures, wrapper.OutputSampleRate); wrapper.PeakEnergy= (double)((MWNumericArray)retMat[0]); wrapper.MaxEnergy = (double)((MWNumericArray)retMat[1]); wrapper.EFD = new double[retMat[2].Dimensions[0]]; wrapper.ThirdOctaveCenterFrequencies = new double[retMat[3].Dimensions[1]]; for (var i1 = 0; i1 < wrapper.EFD.Length; i1++) wrapper.EFD[i1] = (double)((MWNumericArray)retMat[2])[i1 + 1]; for (var i1 = 0; i1 < wrapper.ThirdOctaveCenterFrequencies.Length; i1++) wrapper.ThirdOctaveCenterFrequencies[i1] = (double)((MWNumericArray)retMat[3])[i1 + 1]; } } }