/// <summary> /// Fills the transition patches for the specified transition group /// </summary> /// <param name="transitionedCells"></param> /// <param name="stratum"></param> /// <param name="transitionGroup"></param> /// <param name="iteration"></param> /// <param name="timestep"></param> /// <remarks></remarks> private void FillTransitionPatches( Dictionary <int, Cell> transitionedCells, Stratum stratum, TransitionGroup transitionGroup, int iteration, int timestep) { Debug.Assert(this.IsSpatial); if (transitionGroup.PatchPrioritization == null) { return; } Debug.Assert(transitionGroup.PatchPrioritization.TransitionPatches.Count == 0); Dictionary <int, Cell> patchCells = new Dictionary <int, Cell>(); foreach (Cell SimulationCell in stratum.Cells.Values) { Debug.Assert(SimulationCell.StratumId != 0); Debug.Assert(SimulationCell.StateClassId != 0); if (patchCells.ContainsKey(SimulationCell.CellId) | transitionedCells.ContainsKey(SimulationCell.CellId)) { continue; } if (this.SelectTransitionPathway(SimulationCell, transitionGroup.TransitionGroupId, iteration, timestep) == null) { continue; } TransitionPatch Patch = new TransitionPatch(SimulationCell); this.GrowTransitionPatch(transitionedCells, patchCells, SimulationCell, Patch, transitionGroup, iteration, timestep); transitionGroup.PatchPrioritization.TransitionPatches.Add(Patch); } transitionGroup.PatchPrioritization.TransitionPatches.Sort((TransitionPatch p1, TransitionPatch p2) => { return(p1.Size.CompareTo(p2.Size)); }); }
/// <summary> /// Shuffles the order of the specified stratum's cells /// </summary> /// <param name="stratum"></param> /// <remarks></remarks> private void ShuffleStratumCells(Stratum stratum) { if (stratum.Cells.Count == 0) { return; } List <Cell> lst = new List <Cell>(); foreach (Cell c in stratum.Cells.Values) { lst.Add(c); } ShuffleUtilities.ShuffleList(lst, this.m_RandomGenerator.Random); stratum.Cells.Clear(); foreach (Cell c in lst) { stratum.Cells.Add(c.CellId, c); } }