Skip to content

Commit e516f43

Browse files
committed
2 parents 79776a6 + 4c2c11f commit e516f43

12 files changed

Lines changed: 243 additions & 20 deletions

File tree

sysml.library/Kernel Library/ComplexFunctions.kerml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ package ComplexFunctions {
2424
function ToString(x: Complex): String specializes BaseFunctions::ToString;
2525
function ToComplex(x: String): Complex;
2626

27-
function sum(collection: Complex[0..*]): Complex {
28-
ScalarFunctions::sum(collection, Rect(0.0, 0.0))
27+
function sum(collection: Complex[0..*]): Complex specializes ScalarFunctions::sum {
28+
ScalarFunctions::sum0(collection, Rect(0.0, 0.0))
2929
}
3030

31-
function product(collection: Real[0..*]): Real {
32-
ScalarFunctions::product(collection, Rect(1.0, 0.0))
31+
function product(collection: Complex[0..*]): Complex specializes ScalarFunctions::product {
32+
ScalarFunctions::product1(collection, Rect(1.0, 0.0))
3333
}
3434
}

sysml.library/Kernel Library/IntegerFunctions.kerml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ package IntegerFunctions {
2828
function ToInteger(x: String): Integer;
2929
function ToReal(x: Integer): Real;
3030

31-
function sum(collection: Integer[0..*]): Integer {
32-
ScalarFunctions::sum(collection, 0)
31+
function sum(collection: Integer[0..*]): Integer specializes ScalarFunctions::sum {
32+
ScalarFunctions::sum0(collection, 0)
3333
}
3434

35-
function product(collection: Integer[0..*]): Integer {
36-
ScalarFunctions::product(collection, 1)
35+
function product(collection: Integer[0..*]): Integer specializes ScalarFunctions::product {
36+
ScalarFunctions::product1(collection, 1)
3737
}
3838
}

sysml.library/Kernel Library/RealFunctions.kerml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ package RealFunctions {
2828
function ToReal(x: String): Real;
2929
function ToComplex(x: Real): Complex;
3030

31-
function sum(collection: Real[0..*]): Real {
32-
ScalarFunctions::sum(collection, 0.0)
31+
function sum(collection: Real[0..*]): Real specializes ScalarFunctions::sum {
32+
ScalarFunctions::sum0(collection, 0.0)
3333
}
3434

35-
function product(collection: Real[0..*]): Real {
36-
ScalarFunctions::product(collection, 1.0)
35+
function product(collection: Real[0..*]): Real specializes ScalarFunctions::product {
36+
ScalarFunctions::product1(collection, 1.0)
3737
}
3838
}

sysml.library/Kernel Library/ScalarFunctions.kerml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,14 @@ package ScalarFunctions {
2727

2828
abstract function '..'(lower: ScalarValue, upper: ScalarValue): ScalarValue[0..*];
2929

30-
function sum(collection: ScalarValue[0..*], zero: ScalarValue): ScalarValue {
30+
abstract function sum(collection: ScalarValue[0..*]): ScalarValue;
31+
abstract function product(collection: ScalarValue[0..*]);
32+
33+
function sum0(collection: ScalarValue[0..*], zero: ScalarValue): ScalarValue {
3134
collection->reduce '+' ?? zero
3235
}
3336

34-
function product(collection: ScalarValue[0..*], one: ScalarValue): ScalarValue {
37+
function product1(collection: ScalarValue[0..*], one: ScalarValue): ScalarValue {
3538
collection->reduce '*' ?? one
3639
}
3740
}

sysml/src/examples/Mass Roll-up Example/Vehicles.sysml

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package Vehicles {
1+
package VehicleMasses {
22
import ScalarValues::*;
33
import MassRollup::*;
44

@@ -21,16 +21,15 @@ package Vehicles {
2121
}
2222

2323
// Example usage
24-
24+
import SI::*;
2525
part c :> car {
26-
import SI::*;
27-
redefines mass = 1000@[kg];
26+
redefines car::mass = 1000@[kg];
2827
part redefines engine {
29-
redefines mass = 100@[kg];
28+
redefines engine::mass = 100@[kg];
3029
}
3130

3231
part redefines transmission {
33-
redefines mass = 50@[kg];
32+
redefines transmission::mass = 50@[kg];
3433
}
3534
}
3635

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package MassRollup {
2+
import ScalarFunctions::*;
3+
4+
block MassedThing {
5+
value mass :> ISQ::mass;
6+
value totalMass :> ISQ::mass;
7+
}
8+
9+
part simpleThing : MassedThing {
10+
value totalMass redefines MassedThing::totalMass = mass;
11+
}
12+
13+
part compositeThing : MassedThing {
14+
part subcomponents: MassedThing[*];
15+
16+
value totalMass redefines MassedThing::totalMass =
17+
mass + sum(subcomponents->collect p:MassedThing (p::totalMass));
18+
}
19+
20+
part filteredMassThing :> compositeThing {
21+
abstract value minMass :> ISQ::mass;
22+
23+
value totalMass redefines MassedThing::totalMass =
24+
sum(./subcomponents/totalMass[p (p >= minMass)]);
25+
}
26+
27+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package Vehicles {
2+
import ScalarValues::*;
3+
import MassRollup::*;
4+
5+
block CarPart :> MassedThing {
6+
value serialNumber: String;
7+
}
8+
9+
part car: CarPart :> compositeThing {
10+
value vin redefines serialNumber;
11+
12+
part carParts: CarPart[*] redefines subcomponents;
13+
14+
part engine :> simpleThing, carParts {
15+
//...
16+
}
17+
18+
part transmission :> simpleThing, carParts {
19+
//...
20+
}
21+
}
22+
23+
// Example usage
24+
25+
part c :> car {
26+
import SI::*;
27+
redefines mass = 1000@[kg];
28+
part redefines engine {
29+
redefines mass = 100@[kg];
30+
}
31+
32+
part redefines transmission {
33+
redefines mass = 50@[kg];
34+
}
35+
}
36+
37+
// c::totalMass --> 1150.0@[kg]
38+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package 'Constraint Assertions-1' {
2+
import ISQ::*;
3+
import SI::*;
4+
import ScalarFunctions::*;
5+
6+
block Engine;
7+
block Transmission;
8+
9+
constraint def MassConstraint (
10+
partMasses : MassValue[0..*],
11+
massLimit : MassValue) {
12+
13+
sum(partMasses) <= massLimit
14+
}
15+
16+
block Vehicle {
17+
assert constraint massConstraint : MassConstraint (
18+
partMasses = {chassisMass, engine::mass, transmission::mass},
19+
massLimit = 2500@[kg]
20+
);
21+
22+
value chassisMass : MassValue;
23+
24+
value engine : Engine {
25+
value mass : MassValue;
26+
}
27+
28+
value transmission : Engine {
29+
value mass : MassValue;
30+
}
31+
}
32+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package 'Constraint Assertions-2' {
2+
import ISQ::*;
3+
import SI::*;
4+
import ScalarFunctions::*;
5+
6+
block Engine;
7+
block Transmission;
8+
9+
constraint def MassConstraint (
10+
partMasses : MassValue[0..*],
11+
massLimit : MassValue);
12+
13+
constraint massConstraint : MassConstraint (
14+
partMasses : MassValue[0..*],
15+
massLimit : MassValue) {
16+
17+
sum(partMasses) <= massLimit
18+
}
19+
20+
block Vehicle {
21+
assert massConstraint (
22+
partMasses = {chassisMass, engine::mass, transmission::mass},
23+
massLimit = 2500@[kg]
24+
);
25+
26+
value chassisMass : MassValue;
27+
28+
value engine : Engine {
29+
value mass : MassValue;
30+
}
31+
32+
value transmission : Engine {
33+
value mass : MassValue;
34+
}
35+
}
36+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package 'Constraints Example-1' {
2+
import ISQ::*;
3+
import SI::*;
4+
import ScalarFunctions::*;
5+
6+
block Engine;
7+
block Transmission;
8+
9+
constraint def MassConstraint (
10+
partMasses : MassValue[0..*],
11+
massLimit : MassValue) {
12+
13+
sum(partMasses) <= massLimit
14+
}
15+
16+
block Vehicle {
17+
constraint massConstraint : MassConstraint (
18+
partMasses = {chassisMass, engine::mass, transmission::mass},
19+
massLimit = 2500@[kg]
20+
);
21+
22+
value chassisMass : MassValue;
23+
24+
value engine : Engine {
25+
value mass : MassValue;
26+
}
27+
28+
value transmission : Engine {
29+
value mass : MassValue;
30+
}
31+
}
32+
}

0 commit comments

Comments
 (0)