Beispiel #1
0
        protected override void FillSigma(CartesianSection1D section1D, CartesianAnomaly anomaly, LateralDimensions lateral)
        {
            for (int k = 0; k < anomaly.Layers.Count; k++)
            {
                var     layer  = anomaly.Layers[k];
                decimal zStart = layer.Depth;
                decimal zEnd   = layer.Depth + layer.Thickness;

                var index = ModelUtils.FindCorrespondingBackgroundLayerIndex(section1D, layer);
                var value = section1D[index].Sigma;

                PrepareLayer(zStart, zEnd);
                FillLateralGriddingFor(anomaly.Sigma, k, lateral, value);
            }
        }
        protected override void FillSigma(CartesianSection1D section1D, CartesianAnomaly anomaly, LateralDimensions lateral)
        {
            var x0 = (double)StartX;
            var y0 = (double)StartY;

            var xSize = (double)lateral.CellSizeX;
            var ySize = (double)lateral.CellSizeY;

            var zLength = anomaly.Layers.Count();

            for (int i = LocalNxStart; i < LocalNxStart + LocalNxLength; i++)
            {
                Logger.WriteStatus($"nx: {i + 1} of {lateral.Nx}");

                for (int j = 0; j < lateral.Ny; j++)
                {
                    var x = x0 + i * xSize;
                    var y = y0 + j * ySize;

                    var depths = _topography.GetDepths(x, y, xSize, ySize);

                    for (int k = 0; k < zLength; k++)
                    {
                        var z0 = anomaly.Layers[k].Depth;
                        var z1 = z0 + anomaly.Layers[k].Thickness;

                        double impact = CaculateDepthImpact(depths, z0, z1);

                        if (impact == 1)
                        {
                            for (int k2 = k; k2 < zLength; k2++)
                            {
                                anomaly.Sigma[i, j, k2] = CrustConductivity;
                            }
                            break;
                        }

                        var topCond = z1 > section1D.ZeroAirLevelAlongZ ? OceanConductivity : AirConductivity;

                        anomaly.Sigma[i, j, k] = impact == 0
                            ? topCond
                            : CalculateCunductivity(impact, topCond, CrustConductivity);
                    }
                }
            }
        }
        private CartesianAnomaly ConvertAnomaly(LateralDimensions lateral, CartesianSection1D section1D, decimal[] anomalyZSegmentation)
        {
            var allLayers = new CartesianAnomalyLayer[anomalyZSegmentation.Length - 1];

            for (int k = 0; k < allLayers.Length; k++)
            {
                decimal zStart = anomalyZSegmentation[k];
                decimal zEnd   = anomalyZSegmentation[k + 1];

                var thickness = zEnd - zStart;

                allLayers[k] = new CartesianAnomalyLayer(zStart, thickness);
            }

            var anomaly = new CartesianAnomaly(new Size2D(LocalNxLength, lateral.Ny), allLayers);

            if (_createSigma)
            {
                anomaly.CreateSigma();
                FillSigma(section1D, anomaly, lateral);
            }

            return(anomaly);
        }
Beispiel #4
0
 protected AnalyticModel(CartesianSection1D section1D, decimal maxZ, decimal minZ)
 {
     Section1D = section1D;
     MaxZ      = maxZ;
     MinZ      = minZ;
 }
 protected abstract void FillSigma(CartesianSection1D section1D, CartesianAnomaly anomaly, LateralDimensions lateral);