public GEMSParallel Clone() { GEMSParallel newParallelInfo = new GEMSParallel(this.parent); newParallelInfo.meshCountInX = this.meshCountInX; newParallelInfo.meshCountInY = this.meshCountInY; newParallelInfo.meshCountInZ = this.meshCountInZ; if (this.divisionInX.Count == 0) { newParallelInfo.UpdateDivisionInX(1); } if (this.divisionInX.Count == 0) { newParallelInfo.UpdateDivisionInX(1); } else { newParallelInfo.divisionInX.AddRange(this.divisionInX); } if (this.divisionInY.Count == 0) { newParallelInfo.UpdateDivisionInY(1); } else { newParallelInfo.divisionInY.AddRange(this.divisionInY); } if (this.divisionInZ.Count == 0) { newParallelInfo.UpdateDivisionInZ(1); } else { newParallelInfo.divisionInZ.AddRange(this.divisionInZ); } newParallelInfo.areaList = new List <GEMSParallelArea>(); foreach (GEMSParallelArea area in areaList) { GEMSParallelArea newArea = new GEMSParallelArea(); newArea.IsPEC = area.IsPEC; newArea.Start = area.Start.Clone(); newArea.End = area.End.Clone(); newParallelInfo.areaList.Add(newArea); } newParallelInfo.minAreaMeshCount = this.minAreaMeshCount; newParallelInfo.maxAreaMeshCount = this.maxAreaMeshCount; return(newParallelInfo); }
public void UpdateAreaList() { areaList.Clear(); minAreaMeshCount = -1; maxAreaMeshCount = -1; int zMax = divisionInZ.Count > 0 ? divisionInZ.Count - 1 : 1; int yMax = divisionInY.Count > 0 ? divisionInY.Count - 1 : 1; int xMax = divisionInX.Count > 0 ? divisionInX.Count - 1 : 1; for (int i = 0; i < zMax; i++) { for (int j = 0; j < yMax; j++) { for (int k = 0; k < xMax; k++) { MeshPointKey min = new MeshPointKey(); MeshPointKey max = new MeshPointKey(); if (divisionInX.Count >= 2) { min.X = divisionInX[k]; max.X = divisionInX[k + 1]; } if (divisionInY.Count >= 2) { min.Y = divisionInY[j]; max.Y = divisionInY[j + 1]; } if (divisionInZ.Count >= 2) { min.Z = divisionInZ[i]; max.Z = divisionInZ[i + 1]; } int areaMeshCount = (max.X - min.X) * (max.Y - min.Y) * (max.Z - min.Z); if (minAreaMeshCount < 0) { minAreaMeshCount = areaMeshCount; } else { minAreaMeshCount = minAreaMeshCount < areaMeshCount ? minAreaMeshCount : areaMeshCount; } if (maxAreaMeshCount < 0) { maxAreaMeshCount = areaMeshCount; } else { maxAreaMeshCount = maxAreaMeshCount > areaMeshCount ? maxAreaMeshCount : areaMeshCount; } GEMSParallelArea area = new GEMSParallelArea(); area.Start = min; area.End = max; this.areaList.Add(area); } } } }