Exemplo n.º 1
0
        public void CalculateAnomalyFieldE(ObservationLevel level, AnomalyCurrent jQ, AnomalyCurrent field)
        {
            if (_eGreenTensors.ContainsKey(level))
            {
                using (Solver.Profiler?.StartAuto(ProfilerEvent.AtoOFields))
                {
                    CalculateAnomalyFieldE(jQ, field, _eGreenTensors[level]);
                }

                return;
            }
            var greenTensor = CalculateGreenTensorAtoOLevelElectric(level);
            var arg         = new GreenTensorCalculatedEventArgs(level, greenTensor);

            OnGreenTensorECalculated(arg);

            using (Solver.Profiler?.StartAuto(ProfilerEvent.AtoOFields))
            {
                CalculateAnomalyFieldE(jQ, field, greenTensor);
            }

            if (arg.SupressGreenTensorDisposal)
            {
                _eGreenTensors.Add(level, greenTensor);
            }
            else
            {
                greenTensor.Dispose();
            }
        }
Exemplo n.º 2
0
        private AnomalyCurrent CalculateAnomalyFieldE(ObservationLevel level, AnomalyCurrent jQ)
        {
            var field = AnomalyCurrent.AllocateNewOneLayer(MemoryProvider, Model);

            Clear(field);
            _aToOCalculator.CalculateAnomalyFieldE(level, jQ, field);
            return(field);
        }
Exemplo n.º 3
0
 private static XElement ToXElement(ObservationLevel level)
 {
     return(new XElement(ObservationLevel,
                         new XAttribute(ObservationLevelNameAttr, level.Name),
                         new XAttribute(ObservationLevelXShiftAttr, level.ShiftAlongX),
                         new XAttribute(ObservationLevelYShiftAttr, level.ShiftAlongY),
                         new XAttribute(ObservationLevelZCoordinateAttr, level.Z)));
 }
Exemplo n.º 4
0
        protected override void OnHFieldsAtLevelCalculated(ObservationLevel level,
                                                           AnomalyCurrent normalField, AnomalyCurrent anomalyField)
        {
            var e = new MtFieldsAtLevelCalculatedEventArgs(CurrentSource, level, normalField, anomalyField);

            _hFields.Add(e);
            HFieldsAtLevelCalculated?.Invoke(this, e);
        }
Exemplo n.º 5
0
        public TensorPlan(TensorPlan plan, ObservationLevel level)
        {
            NxStart       = plan.NxStart;
            NxCalcLength  = plan.NxCalcLength;
            NxTotalLength = plan.NxTotalLength;
            NRc           = plan.NRc;
            NTr           = plan.NTr;

            ShiftX = level.ShiftAlongX;
            ShiftY = level.ShiftAlongY;
        }
Exemplo n.º 6
0
        private GreenTensor CalculateGreenTensorElectric(SourceLayer layer, ObservationLevel level)
        {
            var plan             = _plansCreater.CreateForSourceToObservation(layer, level);
            var transceiver      = TranceiverUtils.CreateSourceToObservations(SourceThickness, layer, level);
            var scalarCalculator = GreenScalarCalculator.NewAtoOElectricCalculator(Logger, Model);
            var scalars          = scalarCalculator.Calculate(plan, transceiver);

            using (var segments = ScalarSegments.AllocateAndConvert(MemoryProvider, plan, scalars))
            {
                var tensorPlan = new TensorPlan(_templateTensorPlan, layer, level);
                _gtc.ResetKnots();
                var gt = _gtc.CalculateAtoOElectric(segments, MemoryLayoutOrder.AlongVertical, tensorPlan);

                PerformGreenTensorFft(gt);
                return(gt);
            }
        }
Exemplo n.º 7
0
        public FieldsAtLevelCalculatedEventArgs(ObservationLevel level, AnomalyCurrent normalField, AnomalyCurrent anomalyField)
        {
            if (level == null)
            {
                throw new ArgumentNullException(nameof(level));
            }
            if (normalField == null)
            {
                throw new ArgumentNullException(nameof(normalField));
            }
            if (anomalyField == null)
            {
                throw new ArgumentNullException(nameof(anomalyField));
            }

            Level        = level;
            NormalField  = normalField;
            AnomalyField = anomalyField;
            Level        = level;
        }
Exemplo n.º 8
0
        private unsafe GreenTensor CalculateGreenTensorAtoOLevelElectric(ObservationLevel level)
        {
            using (Solver.Profiler?.StartAuto(ProfilerEvent.AtoOGreenCalc))
            {
                var plan             = _plansCreater.CreateForAnomalyToObservationLevels(level);
                var transceiver      = TranceiverUtils.CreateAnomalyToObservation(Model.Anomaly, level);
                var scalarCalculator = GreenScalarCalculator.NewAtoOElectricCalculator(Logger, Model);
                var scalars          = scalarCalculator.Calculate(plan, transceiver);

                using (var segments = ScalarSegments.AllocateAndConvert(MemoryProvider, plan, scalars))
                {
                    var tensorPlan = new TensorPlan(_templateTensorPlan, level);
                    _gtc.ResetKnots();
                    var gt = _gtc.CalculateAtoOElectric(segments, MemoryLayoutOrder.AlongVertical, tensorPlan);

                    PerformGreenTensorFft(gt);
                    return(gt);
                }
            }
        }
Exemplo n.º 9
0
        private AllFieldsAtLevel GatherAllFieldsAtLevelLocally(ObservationLevel level, List <MtFieldsAtLevelCalculatedEventArgs> eFields, List <MtFieldsAtLevelCalculatedEventArgs> hFields)
        {
            var e1 = eFields.First(e => e.Level == level && e.Polarization == Polarization.X);
            var e2 = eFields.First(e => e.Level == level && e.Polarization == Polarization.Y);
            var h1 = hFields.First(h => h.Level == level && h.Polarization == Polarization.X);
            var h2 = hFields.First(h => h.Level == level && h.Polarization == Polarization.Y);

            return(new AllFieldsAtLevel(level)
            {
                AnomalyE1 = e1.AnomalyField,
                NormalE1 = e1.NormalField,
                AnomalyE2 = e2.AnomalyField,
                NormalE2 = e2.NormalField,

                AnomalyH1 = h1.AnomalyField,
                NormalH1 = h1.NormalField,
                AnomalyH2 = h2.AnomalyField,
                NormalH2 = h2.NormalField,
            });
        }
Exemplo n.º 10
0
        private AllFieldsAtLevel GatherAllFieldsAtLevel(ObservationLevel level, List <MtFieldsAtLevelCalculatedEventArgs> eFields, List <MtFieldsAtLevelCalculatedEventArgs> hFields)
        {
            var e1 = eFields.First(e => e.Level == level && e.Polarization == Polarization.X);
            var e2 = eFields.First(e => e.Level == level && e.Polarization == Polarization.Y);
            var h1 = hFields.First(h => h.Level == level && h.Polarization == Polarization.X);
            var h2 = hFields.First(h => h.Level == level && h.Polarization == Polarization.Y);

            return(new AllFieldsAtLevel(level)
            {
                AnomalyE1 = DistibutedUtils.GatherFromAllProcesses(this, e1.AnomalyField),
                NormalE1 = DistibutedUtils.GatherFromAllProcesses(this, e1.NormalField),
                AnomalyE2 = DistibutedUtils.GatherFromAllProcesses(this, e2.AnomalyField),
                NormalE2 = DistibutedUtils.GatherFromAllProcesses(this, e2.NormalField),

                AnomalyH1 = DistibutedUtils.GatherFromAllProcesses(this, h1.AnomalyField),
                NormalH1 = DistibutedUtils.GatherFromAllProcesses(this, h1.NormalField),
                AnomalyH2 = DistibutedUtils.GatherFromAllProcesses(this, h2.AnomalyField),
                NormalH2 = DistibutedUtils.GatherFromAllProcesses(this, h2.NormalField),
            });
        }
Exemplo n.º 11
0
        protected override AnomalyCurrent CalculateNormalFieldH(ObservationLevel level)
        {
            var normalField = AnomalyCurrent.AllocateNewOneLayer(MemoryProvider, Model);

            Clear(normalField);
            var mtAdmitanceOnObs = PlaneWaveCalculator.CalculateFieldH(Model, level.Z);

            if (CurrentSource == Polarization.X)
            {
                var la = GetLayerAccessorY(normalField, 0);
                SetValue(la, mtAdmitanceOnObs);
            }

            if (CurrentSource == Polarization.Y)
            {
                var la = GetLayerAccessorX(normalField, 0);
                SetValue(la, -mtAdmitanceOnObs);
            }

            return(normalField);
        }
Exemplo n.º 12
0
 protected virtual void OnHFieldsAtLevelCalculated(ObservationLevel level,
                                                   AnomalyCurrent normalField, AnomalyCurrent anomalyField)
 {
 }
Exemplo n.º 13
0
 public void CalculateAnomalyFieldH(SourceLayer layer, ObservationLevel level, AnomalyCurrent src, AnomalyCurrent dst)
 {
     using (var greenTensor = CalculateGreenTensorMagnetic(layer, level))
         CalculateAnomalyFieldH(src, dst, greenTensor);
 }
Exemplo n.º 14
0
 protected abstract AnomalyCurrent CalculateNormalFieldH(ObservationLevel level);
Exemplo n.º 15
0
 public AllFieldsAtLevel(ObservationLevel level)
 {
     Level = level;
 }
 public MtFieldsAtLevelCalculatedEventArgs(Polarization polarization, ObservationLevel level, AnomalyCurrent normalField, AnomalyCurrent anomalyField)
     : base(level, normalField, anomalyField)
 {
     Polarization = polarization;
 }
 public GreenTensorCalculatedEventArgs(ObservationLevel level, GreenTensor greenTensor)
 {
     Level       = level;
     GreenTensor = greenTensor;
 }