模型表达的历史背景
安德烈亚斯·瓦尔加的历史综述指出,1967年的连续系统仿真语言(CSSL)标准用相互连接的运算模块表示系统;其运算块延续了模拟计算机的思路,底层用数值方法积分。高级连续仿真语言(ACSL)通过Fortran预处理器实现这类标准。后来,SystemBuild和Simulink把模块图带入图形界面,并分别融入MATRIXx和MATLAB的交互式计算环境。Dymola则以相互连接的子系统组织物理模型,其语言成为Modelica初版的一项基础。Modelica所处的问题脉络,是怎样把长期积累的建模经验整理成共同表达,而不只是怎样方便地画出模型。
参考:[1]
跨机构的共同设计
设计工作由来自瑞典隆德Dynasim公司的希尔丁·埃尔姆奎斯特主持。参与者包括隆德大学的斯文·埃里克·马特松、林雪平大学的彼得·弗里茨松,以及德国航空航天中心上普法芬霍芬机构的马丁·奥特等。
这项工作起初依托“欧洲仿真基础研究工作组”项目,1997年2月成为欧洲仿真学会联合会EUROSIM的技术委员会。委员会希望让模型与模型库能够在不同工具和使用者之间交换,因而需要共同的语言规则。近期工作从连续时间系统入手,以微分代数方程为共同数学框架,同时考虑不连续现象和采样系统。
参考:[2]
工业需求与早期试用
法国燃气公司的研究需求说明了这种交换为什么重要。亚历山大·让德尔和法布里斯·布多在1997年的论文中讨论了锅炉、空调、工业炉及燃气网络的仿真:研究部门既要重用旧模型,也要与合作伙伴共享模型。受单一工具约束的表示方式,妨碍了这一工作。
两人在布拉格建筑仿真会议的论文中,把同一热水器分别用ALLAN和设计中的Modelica表示,部件包括燃烧器、换热器、外壳和管路。他们要求模型便于阅读、附有文档,并能重新执行验证案例。论文结论明确以1997年5月为时点:语言仍在设计,Modelica已在语法分析器中部分实现,并可借助Modelica到Dymola的翻译器运行一些模型。
参考:[3]
用弹簧说明方程式建模
下面是本文依照1.0版基本语法编写的静态弹簧示例。刚度取20牛顿每米,伸长量用米、拉力用牛顿;这些单位由此处约定。SoftSpring保存弹簧关系,PullTest建立一个实例并施加6牛顿拉力:
model SoftSpring parameter Real stiffness=20; Real extension, tension; equation tension=stiffness*extension; end SoftSpring; model PullTest SoftSpring sample; equation sample.tension=6; end PullTest;
两个方程给出伸长量0.3米。把最后一个方程换成sample.extension=0.1,拉力就是2牛顿。等号表示同时满足的关系;改变求解方向,弹簧关系不必重写。
参考:[4]
1997年9月公开定义
蒂洛·恩斯特在1998年1月的《ERCIM News》中记载,首个正式定义1.0版已于1997年9月发布。1997年10月底,德国帕绍的欧洲仿真研讨会还为它设置专题会议和讨论,设计组继续征求意见。
参考:[5]
早期工具怎样接上定义
弗里茨松与瓦迪姆·恩格尔松有一篇1998年刊行的论文,其作者稿把实现链条写得更具体:先把类、实例及其方程展开为方程组,再排序、化简,生成C或C++代码并接入数值求解器。这使部件层面的描述能够变成计算过程。
作者稿称Dynasim已有把Modelica子集翻译到Dymola的工具;林雪平大学团队则在开发与Mathematica集成的另一种实现。该稿还把1998年1月会议写作未来安排,因此刊行年份不能当作这些进展的观察日期;文中没有给出翻译器的首次可用日期,更不能由此推定1997年发布了完整软件。
参考:[6]