package CalculationExample {
private import ISQ::*;
private import NumericalFunctions::*;
part def VehiclePart {
attribute m : MassValue;
}
part def Vehicle :> VehiclePart;
part vehicle : Vehicle {
part eng : VehiclePart;
part trans : VehiclePart;
attribute ::> m = ms.totalMass;
}
calc def MassSum {
in partMasses : MassValue[0..*];
return totalMass : MassValue = sum(partMasses);
}
calc ms: MassSum {
in partMasses = (vehicle.eng.m, vehicle.trans.m);
return totalMass;
}
part vehicles[*] = (vehicle, vehicle);
attribute masses1[*] = (vehicles as VehiclePart).m;
attribute masses2[*] = (vehicles as vehicle).m;
}