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); }
protected AnalyticModel(CartesianSection1D section1D, decimal maxZ, decimal minZ) { Section1D = section1D; MaxZ = maxZ; MinZ = minZ; }
protected abstract void FillSigma(CartesianSection1D section1D, CartesianAnomaly anomaly, LateralDimensions lateral);