Changeset 24650
- Timestamp:
- 2015-02-20T11:53:26+01:00 (9 years ago)
- Location:
- trunk/testsuite/simulation/libraries/3rdParty/PNlib
- Files:
-
- 1 added
- 1 deleted
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/testsuite/simulation/libraries/3rdParty/PNlib/PNlib.mo
r24647 r24650 132 132 Boolean emptying = Functions.anyTrue(vec= pre(fireOut)) 133 133 "Is the place emptied by output transitions?"; 134 Blocks.firingSumCon firingSumIn(fire = pre(fireIn), arcWeight = arcWeightIn, instSpeed =instSpeedIn)134 Real firingSumIn = Functions.firingSumCon(fire=pre(fireIn), arcWeight=arcWeightIn, instSpeed=instSpeedIn) 135 135 "firing sum calculation"; 136 Blocks.firingSumCon firingSumOut(fire = pre(fireOut), arcWeight = arcWeightOut, instSpeed =instSpeedOut)136 Real firingSumOut = Functions.firingSumCon(fire= pre(fireOut), arcWeight= arcWeightOut, instSpeed= instSpeedOut) 137 137 "firing sum calculation"; 138 138 // *** BLOCKS END *** 139 139 public 140 Interfaces.PlaceIn inTransition[nIn](each t = t_, each maxTokens = maxMarks, enable = activeIn, each emptied = emptying, each speedSum = firingSumOut .conFiringSum, fire = fireIn, active = activeIn, arcWeight = arcWeightIn, instSpeed = instSpeedIn, maxSpeed = maxSpeedIn, prelimSpeed = prelimSpeedIn, enabledByInPlaces = enabledByInPlaces)140 Interfaces.PlaceIn inTransition[nIn](each t = t_, each maxTokens = maxMarks, enable = activeIn, each emptied = emptying, each speedSum = firingSumOut, fire = fireIn, active = activeIn, arcWeight = arcWeightIn, instSpeed = instSpeedIn, maxSpeed = maxSpeedIn, prelimSpeed = prelimSpeedIn, enabledByInPlaces = enabledByInPlaces) 141 141 "connector for input transitions" annotation(Placement(transformation(origin = {-93, 0}, extent = {{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {-93, 0}, extent = {{-10, -10}, {10, 10}}))); 142 Interfaces.PlaceOut outTransition[nOut](each t = t_, each minTokens = minMarks, enable = activeOut, each arcType = PNlib.Types.ArcType.normal_arc, each testValue = -1.0, each fed = feeding, each speedSum = firingSumIn .conFiringSum, fire = fireOut, active = activeOut, arcWeight = arcWeightOut, instSpeed = instSpeedOut, maxSpeed = maxSpeedOut, prelimSpeed = prelimSpeedOut)142 Interfaces.PlaceOut outTransition[nOut](each t = t_, each minTokens = minMarks, enable = activeOut, each arcType = PNlib.Types.ArcType.normal_arc, each testValue = -1.0, each fed = feeding, each speedSum = firingSumIn, fire = fireOut, active = activeOut, arcWeight = arcWeightOut, instSpeed = instSpeedOut, maxSpeed = maxSpeedOut, prelimSpeed = prelimSpeedOut) 143 143 "connector for output transitions" annotation(Placement(transformation(origin = {93, 0}, extent = {{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {93, 0}, extent = {{-10, -10}, {10, 10}}))); 144 144 //initial equation … … 147 147 equation 148 148 // *** MAIN BEGIN *** 149 der(tSumIn) = firingSumIn .conFiringSum;149 der(tSumIn) = firingSumIn; 150 150 // der(tSumIn_) = arcWeightIn .* instSpeedIn; 151 151 for i in 1:nIn loop 152 152 der(tSumIn_[i]) = if pre(fireIn[i]) then arcWeightIn[i] * instSpeedIn[i] else 0.0; 153 153 end for; 154 der(tSumOut) = firingSumOut .conFiringSum;154 der(tSumOut) = firingSumOut; 155 155 // der(tSumOut_) = arcWeightOut .* instSpeedOut; 156 156 for i in 1:nOut loop 157 157 der(tSumOut_[i]) = if pre(fireOut[i]) then arcWeightOut[i] * instSpeedOut[i] else 0.0; 158 158 end for; 159 der(t_) = firingSumIn .conFiringSum - firingSumOut.conFiringSum159 der(t_) = firingSumIn - firingSumOut 160 160 "calculation of continuous mark change"; 161 161 // *** MAIN END *** … … 199 199 Blocks.activationCon activation(nIn = nIn, nOut = nOut, tIn = tIn, tOut = tOut, arcWeightIn = arcWeightIn, arcWeightOut = arcWeightOut, minTokens = minTokens, maxTokens = maxTokens, fed = fed, emptied = emptied, testValue = inPlaces.testValue, arcType = inPlaces.arcType) 200 200 "activation process"; 201 PNlib.Blocks.preliminarySpeed preliminarySpeed(nIn = nIn, nOut = nOut, arcWeightIn = arcWeightIn, arcWeightOut = arcWeightOut, speedSumIn = speedSumIn, speedSumOut = speedSumOut, maximumSpeed = maximumSpeed, active = activation.active, weaklyInputActiveVec = activation.weaklyInputActiveVec, weaklyOutputActiveVec = activation.weaklyOutputActiveVec)201 Blocks.preliminarySpeed preliminarySpeed(nIn = nIn, nOut = nOut, arcWeightIn = arcWeightIn, arcWeightOut = arcWeightOut, speedSumIn = speedSumIn, speedSumOut = speedSumOut, maximumSpeed = maximumSpeed, active = activation.active, weaklyInputActiveVec = activation.weaklyInputActiveVec, weaklyOutputActiveVec = activation.weaklyOutputActiveVec) 202 202 "preliminary speed calculation"; 203 203 // *** BLOCKS END *** … … 376 376 end for; 377 377 end activationCon; 378 379 block firingSumCon "calculates the firing sum of continuous places"380 input Boolean fire[:] "firability of transitions";381 input Real arcWeight[:] "arc weights";382 input Real instSpeed[:] "istantaneous speed of transitions";383 output Real conFiringSum "continuous firing sum";384 algorithm385 conFiringSum := 0.0;386 for i in 1:size(fire, 1) loop387 if fire[i] then388 conFiringSum := conFiringSum + arcWeight[i] * instSpeed[i];389 end if;390 end for;391 end firingSumCon;392 378 393 379 block preliminarySpeed … … 433 419 end for; 434 420 end anyTrue; 421 422 function firingSumCon "calculates the firing sum of continuous places" 423 input Boolean fire[:] "firability of transitions"; 424 input Real arcWeight[:] "arc weights"; 425 input Real instSpeed[:] "istantaneous speed of transitions"; 426 output Real conFiringSum "continuous firing sum"; 427 algorithm 428 conFiringSum := 0.0; 429 for i in 1:size(fire, 1) loop 430 if fire[i] then 431 conFiringSum := conFiringSum + arcWeight[i] * instSpeed[i]; 432 end if; 433 end for; 434 end firingSumCon; 435 435 end Functions; 436 436 … … 537 537 PNlib.PC P3(nIn = 1, startMarks = 0) annotation(Placement(visible = true, transformation(origin = {40, 0}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); 538 538 equation 539 connect(T2.outPlaces[1], P3.inTransition[1]) annotation(Line(points = {{24.7, 0}, {30.7783, 0}, {30.7783, 0.117925}, {30.7783, 0.117925}})); 540 connect(P2.outTransition[1], T2.inPlaces[1]) annotation(Line(points = {{9.300000000000001, 0}, {15.566, 0}, {15.566, -0.117925}, {15.566, -0.117925}})); 541 connect(T1.outPlaces[1], P2.inTransition[1]) annotation(Line(points = {{-15.3, 0}, {-9.19811, 0}, {-9.19811, -0.353774}, {-9.19811, -0.353774}})); 542 connect(P1.outTransition[1], T1.inPlaces[1]) annotation(Line(points = {{-30.7, 0}, {-24.7642, 0}, {-24.7642, 0}, {-24.7642, 0}})); 539 connect(T2.outPlaces[1], P3.inTransition[1]) annotation(Line(points={{24.7,0}, 540 {30.7783,0},{30.7783,0},{30.7,0}})); 541 connect(P2.outTransition[1], T2.inPlaces[1]) annotation(Line(points={{9.3,0}, 542 {15.566,0},{15.566,0},{15.3,0}})); 543 connect(T1.outPlaces[1], P2.inTransition[1]) annotation(Line(points={{-15.3,0}, 544 {-9.19811,0},{-9.19811,0},{-9.3,0}})); 545 connect(P1.outTransition[1], T1.inPlaces[1]) annotation(Line(points={{-30.7,0}, 546 {-24.7642,0},{-24.7642,0},{-24.7,0}})); 543 547 annotation(experiment(StartTime = 0, StopTime = 3, Tolerance = 1e-006), Diagram(coordinateSystem(extent = {{-60, -20}, {60, 20}}, preserveAspectRatio = false, initialScale = 0.1, grid = {2, 2})), Icon(coordinateSystem(extent = {{-60, -20}, {60, 20}}, preserveAspectRatio = false, initialScale = 0.1, grid = {2, 2}))); 544 548 end Test9; … … 563 567 annotation(experiment(StartTime = 0, StopTime = 3, Tolerance = 1e-006), Diagram(coordinateSystem(extent = {{-80, -60}, {80, 60}}, preserveAspectRatio = true, initialScale = 0.1, grid = {2, 2})), Icon(coordinateSystem(extent = {{-80, -60}, {80, 60}}, preserveAspectRatio = true, initialScale = 0.1, grid = {2, 2}))); 564 568 end Test10; 569 570 model Test11 571 PNlib.PC 'P1'(nOut=1, startMarks=1.5) annotation (Placement(visible=true, 572 transformation( 573 origin={-60,0}, 574 extent={{-10,-10},{10,10}}, 575 rotation=0))); 576 PNlib.TC 'T1'(nOut=1, nIn=1) annotation (Placement(visible=true, 577 transformation( 578 origin={-30,0}, 579 extent={{-10,-10},{10,10}}, 580 rotation=0))); 581 PNlib.PC 'P2'(nOut=1, nIn=1) annotation (Placement(visible=true, 582 transformation( 583 origin={0,0}, 584 extent={{-10,-10},{10,10}}, 585 rotation=0))); 586 PNlib.TC 'T2'( 587 nIn=1, 588 nOut=1, 589 maximumSpeed=0.5 + time) annotation (Placement(visible=true, 590 transformation( 591 origin={30,0}, 592 extent={{-10,-10},{10,10}}, 593 rotation=0))); 594 PC 'P3'(nIn=1) 595 annotation (Placement(transformation(extent={{50,-10},{70,10}}))); 596 equation 597 connect('P1'.outTransition[1], 'T1'.inPlaces[1]) 598 annotation (Line(points={{-50.7,0},{-42,0},{-34.7,0}})); 599 connect('P2'.inTransition[1], 'T1'.outPlaces[1]) 600 annotation (Line(points={{-9.3,0},{-9.3,0},{-25.3,0}})); 601 connect('P2'.outTransition[1], 'T2'.inPlaces[1]) 602 annotation (Line(points={{9.3,0},{25.3,0}})); 603 connect('T2'.outPlaces[1], 'P3'.inTransition[1]) annotation (Line( 604 points={{34.7,0},{50.7,0}}, 605 color={0,0,0}, 606 smooth=Smooth.None)); 607 annotation(experiment(StartTime = 0, StopTime = 2, Tolerance = 1e-006), Diagram(coordinateSystem(extent={{-80,-20}, 608 {80,20}}, preserveAspectRatio=false, initialScale = 0.1, grid = {2, 2}), 609 graphics), Icon(coordinateSystem(extent = {{-80, -20}, {80, 20}}, preserveAspectRatio = false, initialScale = 0.1, grid = {2, 2}))); 610 end Test11; 565 611 annotation(Icon(coordinateSystem(extent = {{-100, -100}, {100, 100}}, preserveAspectRatio = true, initialScale = 0.1, grid = {2, 2})), Diagram(coordinateSystem(extent = {{-100, -100}, {100, 100}}, preserveAspectRatio = true, initialScale = 0.1, grid = {2, 2}))); 566 612 end Examples; -
trunk/testsuite/simulation/libraries/3rdParty/PNlib/Test11.mos
r24471 r24650 4 4 5 5 loadFile("PNlib.mo"); getErrorString(); 6 loadString(" 7 model Test11 8 PNlib.PC 'P1'(nIn = 0, nOut = 1, startMarks = 0.0, minMarks = 0.0, maxMarks = 1.0E9); 9 PNlib.PC 'P2'(nIn = 1, nOut = 1, startMarks = 0.0, minMarks = 0.0, maxMarks = 1.0E9); 10 PNlib.PC 'P3'(nIn = 1, nOut = 0, startMarks = 0.0, minMarks = 0.0, maxMarks = 1.0E9); 11 PNlib.TC 'T1'(nIn = 1, nOut = 1, maximumSpeed = 1, arcWeightIn = {1}, arcWeightOut = {1}); 12 PNlib.TC 'T2'(nIn = 1, nOut = 1, maximumSpeed = 1, arcWeightIn = {1}, arcWeightOut = {1}); 13 equation 14 connect('P1'.outTransition[1], 'T1'.inPlaces[1]); 15 connect('T1'.outPlaces[1], 'P2'.inTransition[1]); 16 connect('P2'.outTransition[1], 'T2'.inPlaces[1]); 17 connect('T2'.outPlaces[1], 'P3'.inTransition[1]); 18 end Test11; 19 "); getErrorString(); 20 21 simulate(Test11); getErrorString(); 22 res := OpenModelica.Scripting.compareSimulationResults("Test11_res.mat", 23 "ReferenceFiles/Test11.mat", 6 simulate(PNlib.Examples.Test11); getErrorString(); 7 res := OpenModelica.Scripting.compareSimulationResults("PNlib.Examples.Test11_res.mat", 8 "ReferenceFiles/PNlib.Examples.Test11.mat", 24 9 "PNlib.Examples.Test11_diff.csv", 0.01, 0.0001, 25 10 { … … 34 19 "'T2'.maximumSpeed" 35 20 }); getErrorString(); 36 21 37 22 // Result: 38 23 // true 39 24 // "" 40 // true41 // ""42 25 // record SimulationResult 43 // resultFile = " Test11_res.mat",44 // simulationOptions = "startTime = 0.0, stopTime = 1.0, numberOfIntervals = 500, tolerance = 1e-06, method = 'dassl', fileNamePrefix = 'Test11', options = '', outputFormat = 'mat', variableFilter = '.*', cflags = '', simflags = ''",26 // resultFile = "PNlib.Examples.Test11_res.mat", 27 // simulationOptions = "startTime = 0.0, stopTime = 2.0, numberOfIntervals = 500, tolerance = 0.000001, method = 'dassl', fileNamePrefix = 'PNlib.Examples.Test11', options = '', outputFormat = 'mat', variableFilter = '.*', cflags = '', simflags = ''", 45 28 // messages = "" 46 29 // end SimulationResult;
Note: See TracChangeset
for help on using the changeset viewer.