rumoca 0.7.28

Modelica compiler written in RUST
Documentation
within;

package NestedTestPackage
  package MathUtils
    function polyEval
      input Real a, b, c, x;
      output Real y;
    algorithm
      y := a * x * x + b * x + c;
    end polyEval;

    function scale
      input Real k;
      input Real x;
      output Real y;
    algorithm
      y := k * x;
    end scale;
  end MathUtils;

  package Controllers
    function pid
      input Real kP, kI, kD;
      input Real e;
      input Real de;
      input Real ei;
      output Real u;
    algorithm
      u := kP * e + kD * de + kI * ei;
    end pid;

    model SimpleController
      parameter Real a = 1;
      parameter Real b = 0;
      parameter Real c = 0;
      Real x(start = 0);
      Real y;
      Real out;
      Real e;
      Real de;
      Real ei(start = 0);
    equation
      der(x) = 1;
      y = MathUtils.polyEval(a, b, c, x);
      e = y;
      de = der(e);
      der(ei) = e;
      out = pid(1, 0.1, 0.01, e, de, ei);
    end SimpleController;
  end Controllers;

  package Tests
    model CrossPackageTest
      Real x = 2;
      Real y;
      Real z;
    equation
      y = MathUtils.polyEval(1, -3, 2, x);
      z = MathUtils.scale(3, y);
    end CrossPackageTest;

    model ControllerTest
      Controllers.SimpleController ctrl;
    end ControllerTest;
  end Tests;

  model RootTest
    Tests.CrossPackageTest t1;
    Controllers.SimpleController t2;
  end RootTest;
end NestedTestPackage;