private void SendData(ComputationData[] level) { for (int j = 0; j < level.Length; j++) { ComputationData cData = level[j]; ComputationBlock cBlock = cData.computationBlock; cBlock.SetOperands(computationResults[cData.operandAName], computationResults[cData.operandBName]); if (availableProcesses.Count > 0) { int processRank = availableProcesses.Dequeue(); SendMessage(Message.BlockSend, processRank); communicator.Send(cBlock, processRank, 0); busyProcesses.Enqueue(new KeyValuePair <int, ComputationData>(processRank, cData)); } else { DisplayOperation(cData.blockName, cData.operandAName, cData.operandBName, cBlock.operandA, cBlock.operandB); Matrix result = cBlock.Execute(); DisplayResult(cData.blockName, result); SaveResult(cData.blockName, result); } } }