public ObjectModel(double dt) { this.dt = dt; firstVessel = new List <BaseBlock>(); secondVessel = new List <BaseBlock>(); pipe1 = new ComplexBlock(); pipe2 = new ComplexBlock(); pipe3 = new ComplexBlock(); pipe4 = new ComplexBlock(); valveLimit = new LimitBlock(0, 100); firstVessel.Add(new APBlock(dt, 30, 0, 150)); secondVessel.Add(new APBlock(dt, 30, 0, 100)); pipe1.Blocks.Add(new GainBlock(1)); pipe2.Blocks.Add(new GainBlock(1)); pipe3.Blocks.Add(new GainBlock(1)); pipe3.Blocks.Add(new DelayBlock(1, dt)); pipe4.Blocks.Add(new GainBlock(1)); pipe4.Blocks.Add(new DelayBlock(1, dt)); valve1 = 0; valve2 = 0; valve3 = 0; valve4 = 0; Time = 0; firstVesselValue = 0; secondVesselValue = 0; }
public ControlSystem(double dt) { this.dt = dt; objectModel = new ObjectModel(dt); PID = new PIDBlock(dt, 0, 0.05, 1.8); IsManual = false; setpointLimit = new LimitBlock(0, 100); setpointDamper = new APBlock(dt, 3, 0, 100); }
static void Main(string[] args) { string outFile = @"c:\temp\losses_large_streamed_out"; var executionDataflowBlockOptionsSingle = new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 1 }; var executionDataflowBlockOptions = new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 10 }; var roundCount = 1000000; var dataReader = new DataReaderBlock(DataFormat.Protobuf, roundCount); var dataWriter = new DataWriterBlock(outFile, DataFormat.Protobuf, roundCount, executionDataflowBlockOptionsSingle); var limiter = new LimitBlock(300000, executionDataflowBlockOptions); var scaler = new ScaleBlock(0.9m, executionDataflowBlockOptions); var risk = new RiskMeasuresBlock(executionDataflowBlockOptionsSingle); var nullTarget = DataflowBlock.NullTarget <Trial>(); dataReader .Then(limiter) .Then(scaler) .Then(risk) .Then(dataWriter) .Then(nullTarget); dataReader.InputBlock.Post(@"c:\temp\losses_large_streamed_in1"); var calculationStartDate = DateTime.UtcNow; dataReader.InputBlock.Complete(); while (!dataWriter.GetOutput().Completion.IsCompleted) { var totalTimeElapsed = Math.Round((DateTime.UtcNow - calculationStartDate).TotalSeconds, 2); var calculatedTrials = risk.GetProcessedItemsCount(); var percentComplete = (float)Math.Round(calculatedTrials / (float)roundCount * 100, 2); Console.WriteLine($"Elapsed: {totalTimeElapsed}s, {calculatedTrials}/{roundCount} ({percentComplete}%)"); Task[] tasksToWaitFor = { Task.Delay(1000), dataWriter.GetOutput().Completion }; Task.WaitAny(tasksToWaitFor); } Console.WriteLine(""); var res = risk.GetCalculationResult(); Console.WriteLine(res.ToString()); Console.ReadKey(); }
protected SqlSelectBuilderBase LimitBy(Operand limitBy) { LimitBlock = new LimitBlock(limitBy); CurrentPosition = SqlSelectPosition.Limit; return(this); }