Exemplo n.º 1
0
        public static void ReadAnomalyDataFromPlainText(LinesReader lr, double[,,] sigma, int k)
        {
            int nx = sigma.GetLength(0);
            int ny = sigma.GetLength(1);

            var lines = lr.ReadNextLines(nx);

            // nx is from top to bottom
            // ny is from left to right

            if (lines.Length != nx)
            {
                throw new InvalidDataException($@"model with illegal Nx value");
            }

            for (int i = 0; i < lines.Length; i++)
            {
                var lineValues = GetAllDouble(lines[i]);

                if (lineValues.Length != ny)
                {
                    throw new InvalidDataException(
                              string.Format($"model with illegal Ny value in line {i}"));
                }

                for (int j = 0; j < lineValues.Length; j++)
                {
                    sigma[i, j, k] = lineValues[j];
                }
            }
        }
Exemplo n.º 2
0
        private static unsafe void DistributedLoadModelMaster(Mpi mpi, string fullPath, CartesianModel model, int k)
        {
            using (var lr = new LinesReader(fullPath))
            {
                for (int rank = 0; rank < mpi.Size; rank++)
                {
                    var nxLength   = mpi.CalcLocalHalfNxLength(rank, model.LateralDimensions.Nx);
                    var sigma      = new double[nxLength, model.Anomaly.LocalSize.Ny, 1];
                    var sendLength = nxLength * model.Anomaly.LocalSize.Ny;

                    if (nxLength == 0)
                    {
                        continue;
                    }

                    AnomalyLoaderUtils.ReadAnomalyDataFromPlainText(lr, sigma, 0);

                    if (rank == 0)
                    {
                        for (int i = 0; i < nxLength; i++)
                        {
                            for (int j = 0; j < model.Anomaly.LocalSize.Ny; j++)
                            {
                                model.Anomaly.Sigma[i, j, k] = sigma[i, j, 0];
                            }
                        }
                    }
                    else if (nxLength != 0)
                    {
                        fixed(double *data = &sigma[0, 0, 0])
                        mpi.Send(data, sendLength, Mpi.Double, rank, 0);
                    }
                }
            }
        }
Exemplo n.º 3
0
        private static void LoadAnomalyValuesFromFile(XElement xFromFile, double[,,] sigma, int k, string path)
        {
            var fileType = xFromFile.Attribute(AnomalyFileType).Value;
            var fileName = xFromFile.Attribute(AnomalyFileName);

            if (fileType == "plain-text" && fileName != null)
            {
                var fullPath = Path.Combine(Path.GetDirectoryName(path), fileName.Value);

                using (var lr = new LinesReader(fullPath))
                {
                    AnomalyLoaderUtils.ReadAnomalyDataFromPlainText(lr, sigma, k);
                }
            }
        }