Пример #1
0
        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);
        }
Пример #2
0
        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);
        }