Добро пожаловать на сайт Российской группы пользователей Modelica.

Modelica – это не привязанный к конкретному набору инструментов объектно-ориентированный язык, нацеленный на моделирование физических процессов при помощи уравнений. Модели могут быть представлены как в текстовом виде, так и в графическом, при этом хранение графического представления также описано в стандарте.

Что это значит для пользователя:

  • не привязанный к конкретному инструменту – отдельно существует официальная спецификация языка (см. например Modelica Language Specification v3.4) и разнообразные компиляторы и среды разработки, реализующие эту спецификацию – как коммерческие, так и открытые. Кроме того, Modelica Association поддерживает библиотеку стандартных блоков, доступную для использования в конкретных реализациях языка.
  • моделирование при помощи уравнений – иногда это формулируют как то, что вы можете взять уравнения in their textbook form («переписать из учебника») и поместить в модель. То есть, если вам, например, понадобится уравнение Менделеева-Клапейрона (pV=νRT), то вам не придётся думать, что через что выразить: просто запишите уравнение в виде «произведение двух величин слева равно произведению трёх величин справа» – а дальше это уже дело компилятора
  • моделирование физических процессов – неотъемлемой составляющей Modelica является поддержка моделирования процессов, описываемых дифференциальными уравнениями. Как и в предыдущем случае, вам не нужно описывать метод решения: просто напишите a = der(v), а при компиляции модели укажите, какой из поддерживаемых методов решения ДУ использовать
  • стандартное представление графических моделей – спецификация описывает не только обработку текстовых уравнений, но и сборку моделей из готовых графических блоков. При этом среда разработки описывает получившуюся диаграмму в виде аннотаций, которые впоследствии сможет загрузить не только она, но и другие IDE, поддерживающие стандарт

Например, так можно описать гармонические колебания:

model Oscillator
  Real x;
  Real xdot;
initial equation
  x = 1;
  xdot = 0;
equation
  xdot = der(x);
  x = -der(xdot);
annotation(experiment(StartTime = 0, StopTime = 10,
                      Tolerance = 1e-6, Interval = 0.02));
end Oscillator;

А так выглядит результат симуляции этой модели:

Результат симуляции