public KrakenComputingResult ComputeModes(AcousticProblemData acousticProblemData) { CalculatedModesInfo modesInfo; KrakenResultAndAcousticFieldSnapshots krakenResultAndAcousticFieldSnapshots = new KrakenResultAndAcousticFieldSnapshots(); try { var profile = _krakenInputProfileMapper.Map(acousticProblemData); (krakenResultAndAcousticFieldSnapshots.KrakenResult, modesInfo) = _krakenNormalModeProgram.CalculateNormalModes(profile); } catch (KrakenException ex) { throw new KrakenComputingException(ex.Message); } if (acousticProblemData.CalculateTransmissionLoss) { var fieldComputingRequiredData = new FieldComputingRequiredData { AcousticProblemData = acousticProblemData, ModesInfo = modesInfo }; var fieldInput = _fieldInputDataMapper.Map(fieldComputingRequiredData); krakenResultAndAcousticFieldSnapshots.AcousticFieldSnapshots = _fieldModel.CalculateFieldPressure(fieldInput); krakenResultAndAcousticFieldSnapshots.TransmissionLoss.AddRange( CalculateTransmissionLossUsingAcousticSnapshots(krakenResultAndAcousticFieldSnapshots. AcousticFieldSnapshots.Snapshots) ); } var result = _krakenComputingResultMapper.Map(krakenResultAndAcousticFieldSnapshots); return(result); }
private AcousticProblemData GetAcousticProblemDataTestData() { var data = new AcousticProblemData { APB = 0, APT = 0, ASB = 0, AST = 0, AddedVolumeAttenuation = "", AttenuationUnits = "F", BottomBCType = "A", BumDen = 0, CHigh = 2000, CLow = 1400, CPB = 2000, CPT = 0, CSB = 0, CST = 0, CalculateTransmissionLoss = false, Eta = 0, Frequency = 10, InterpolationType = "N", ModesTheory = "A", NMedia = 1, NModes = 44, NModesForField = 9999, NR = 1, NRDField = 1, NRR = 1, NSD = 1, NSDField = 1, RHOB = 2, RHOT = 0, RMax = 1000, Sigma = 0, SourceType = "R", TopBCType = "V", Xi = 0, ZB = 5000, ZT = 0 }; data.MediumInfo.AddRange(new List <List <double> > { new List <double> { 500, 0, 5000 } }); data.R.AddRange(new List <double> { 200, 220 }); data.RD.AddRange(new List <double> { 2500 }); data.RDField.AddRange(new List <double> { 2500 }); data.RR.AddRange(new List <double> { 0 }); data.SD.AddRange(new List <double> { 500 }); data.SDField.AddRange(new List <double> { 500 }); data.SSP.AddRange(new List <List <double> > { new List <double> { 0, 1500, 0, 1, 0, 0 }, new List <double> { 5000, 1500, 0, 1, 0, 0 } }); return(data); }