Range Over Built in Modelica
Based on the code and the explanation provided, here is the corresponding Modelica code:
Our first program will print the classic “hello world” message. Here’s the full source code.
model HelloWorld
function printHelloWorld
input String message;
algorithm
print(message);
end printHelloWorld;
algorithm
printHelloWorld("hello world");
end HelloWorld;To run the program, save the code in a .mo file and use the OpenModelica compiler omc to execute it:
$ omc HelloWorld.moWe have successfully printed the “hello world” message using Modelica. Let’s learn more about the language by exploring more examples.
Here we use a loop to sum the numbers in an array. Arrays work like this too.
model SumArray
Real nums[3] = {2, 3, 4};
Real sum = 0;
algorithm
for i in 1:size(nums, 1) loop
sum := sum + nums[i];
end for;
print("sum: " + String(sum));
end SumArray;The above code sums the array elements using a for loop and prints the result:
$ omc SumArray.mo
sum: 9To iterate over arrays and get index and value for each entry, although Modelica does not have a direct way to ignore indices like _, you can simply access both.
model IndexValue
Real nums[3] = {2, 3, 4};
algorithm
for i in 1:size(nums, 1) loop
if nums[i] == 3 then
print("index: " + String(i - 1));
end if;
end for;
end IndexValue;Output:
$ omc IndexValue.mo
index: 1Modelica also allows iterating over key/value pairs in a dictionary-like way using records, but it’s more common to handle key-value arrays.
record KeyValue
String key;
String value;
end KeyValue;
model KeyValuePair
KeyValue kvs[2] = {KeyValue("a", "apple"), KeyValue("b", "banana")};
algorithm
for i in 1:size(kvs, 1) loop
print(kvs[i].key + " -> " + kvs[i].value);
end for;
end KeyValuePair;Output:
$ omc KeyValuePair.mo
a -> apple
b -> bananaTo iterate over just the keys, one can simply access the key field of the record.
model KeysOnly
KeyValue kvs[2] = {KeyValue("a", "apple"), KeyValue("b", "banana")};
algorithm
for i in 1:size(kvs, 1) loop
print("key: " + kvs[i].key);
end for;
end KeysOnly;Output:
$ omc KeysOnly.mo
key: a
key: bIterating over strings requires accessing string characters individually.
model StringIteration
String str = "go";
algorithm
for i in 1:length(str) loop
print(String(i - 1) + " " + String(str[i]));
end for;
end StringIteration;Output:
$ omc StringIteration.mo
0 g
1 oNow that we understand how to perform these iterations in Modelica, let’s continue to explore more features of the language.