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); } } } }
private static string[] SaveAnomalyLayersToPlainText(string path, CartesianAnomaly cartesianAnomaly) { var fileNames = new string[cartesianAnomaly.Layers.Count]; for (int k = 0; k < fileNames.Length; k++) { fileNames[k] = $"anomaly_layer_{k:0000}.dat"; AnomalyLoaderUtils.WriteAnomalyDataToPlainText(cartesianAnomaly.Sigma, k, Path.Combine(path, fileNames[k])); } return(fileNames); }
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); } } }
public static void LoadAnomalyValuesFromApplique(XElement xapplique, double[,,] sigma, int k) { AnomalyLoaderUtils.ParseApplique(xapplique.Value, sigma, k); }