Run your own Scala model

You can program tasks in Scala using the ScalaTask. For instance the following workflow sums all the elements of an array using a ScalaTask and displays the results. Similarly, you could use such a task to generate some model parameter values or perform some data analysis. To get more details on the hook part you can check the doc on hooks.

val array = Val[Array[Double]]
val result = Val[Double]

val sum = ScalaTask("val result = array.sum") set (
    inputs += array,
    outputs += result,
    array := Array(8.0, 9.0, 10.0)

(sum hook ToStringHook())

Multiple ScalaTasks can be joined to compose a workflow. Lets imagine that you want to perform an expensive computation on every element of an array. For the sake of simplicity, the "expensive computation" is here a multiplication by 2.

val element = Val[Double]
val multiplied = Val[Double]
val result = Val[Double]

val expensive = ScalaTask("val multiplied = element * 2") set (
  inputs += element,
  outputs += multiplied

val exploration = ExplorationTask(element in List(8.0, 9.0, 10.0))

val sum = ScalaTask("val result = multiplied.sum") set (
  inputs += multiplied.toArray,
  outputs += result

exploration -< expensive >- (sum hook ToStringHook())

The execution of this workflow can be distributed using OpenMOLE's environments. Check the page dedicated to environments to learn more on this process.