public override void UpdateInternalDropletConcentrations() { List <Route> allRoutes = new List <Route>(); InputRoutes.Select(pair => pair.Value).ForEach(listOfRoutes => allRoutes.AddRange(listOfRoutes)); if (allRoutes.Count != 2) { throw new NotImplementedException("Currently only mixing two droplets is supported."); } Dictionary <string, float> dropletConcentrations1 = allRoutes[0].routedDroplet.GetFluidConcentrations(); Dictionary <string, float> dropletConcentrations2 = allRoutes[1].routedDroplet.GetFluidConcentrations(); HashSet <string> allFluidParts = dropletConcentrations1.Keys.Union(dropletConcentrations2.Keys).ToHashSet(); foreach (var fluidName in allFluidParts) { dropletConcentrations1.TryGetValue(fluidName, out float concentration1); dropletConcentrations2.TryGetValue(fluidName, out float concentration2); float sumOfConcetrations = concentration1 + concentration2; BoundModule.GetOutputLayout().Droplets[0].FluidConcentrations[fluidName] = sumOfConcetrations / 2; BoundModule.GetOutputLayout().Droplets[1].FluidConcentrations[fluidName] = sumOfConcetrations / 2; } }
public BoundModule Create(RuntimicSystemModel runtimicSystem, BoundModuleNode moduleNode) { var module = new BoundModule() { Assembly = moduleNode.AssemblyNode.BoundAssembly, ModuleNode = moduleNode }; return(module); }