Skip to content

Instantly share code, notes, and snippets.

@finback-at
Created March 29, 2020 06:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save finback-at/1c1af86c47669aaef3ef99e34df5576a to your computer and use it in GitHub Desktop.
Save finback-at/1c1af86c47669aaef3ef99e34df5576a to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### FMI2.0 CS のCo-Simulation Master 機能を使ってみる\n",
"JModelica.org には、FMI2.0CS の規格の FMU を読み込んで Co-Simulation モデルを構築するMasterツールの機能があります。\n",
"この機能を使用して FMI10CS_BouncingBall.ipynb と同様の Co-Simulation モデルを作成します。\n",
"\n",
"#### BouncingBall モデル\n",
"BouncingBall モデルのソースコードを作成します。入力信号は反発係数$e$、出力信号は高さ$y=h$です。"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%%writefile BouncingBall.mo\n",
"model BouncingBall\n",
" import SI = Modelica.SIunits;\n",
" Modelica.Blocks.Interfaces.RealInput e(start=0.8);\n",
" Modelica.Blocks.Interfaces.RealOutput y;\n",
" SI.Length h;\n",
" SI.Velocity v;\n",
" parameter SI.Acceleration g = Modelica.Constants.g_n;\n",
" parameter SI.Height h0 = 1.0;\n",
"initial equation\n",
" h = h0;\n",
"equation\n",
" v = der(h);\n",
" der(v) = -g;\n",
" y = h;\n",
" when h < 0 then\n",
" reinit(v, -e * pre(v));\n",
" end when;\n",
"end BouncingBall;"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"FMI2.0 for Co-Simualtion の規格に従う BouncingBall モデルの FMU を生成します。 "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from pymodelica import compile_fmu\n",
"fmu = compile_fmu(\"BouncingBall\",\"BouncingBall.mo\", version='2.0', target='cs',compile_to = \"BouncingBallCS20.fmu\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 反発係数を出力するモデル\n",
"\n",
"同様に、Modelica.Blocks.Souces.Step から入力信号モデルの FMU を生成します。 "
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"fmu = compile_fmu(\"Modelica.Blocks.Sources.Step\", version='2.0', target='cs', compile_to = \"StepCS20.fmu\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Co-Simulation モデル\n",
"2つのサブシステムモデルをロードし、パラメータを設定します。"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"from pyfmi import load_fmu\n",
"restitution = load_fmu(\"StepCS20.fmu\")\n",
"bouncingBall = load_fmu(\"BouncingBallCS20.fmu\")\n",
"restitution.set(\"height\",-0.3)\n",
"restitution.set(\"offset\", 1.0)\n",
"restitution.set(\"startTime\",1.0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Co-Simulation モデルを構成するサブシステムモデルのリストと接続関係のリストを作成します。"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"models = [restitution, bouncingBall]\n",
"connections = [(restitution, \"y\", bouncingBall,\"e\")]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Co-Simulation モデルを作ります。"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING:root:No dependency information for the outputs was found in the model description. Assuming complete dependency with the exception if the output is a state by itself.\n"
]
}
],
"source": [
"from pyfmi.master import Master\n",
"coupled_simulation = Master(models, connections)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Co-Simulation の実行\n",
"シミュレーションの開始時刻、終了時刻、communication step を決めてシミュレーションを実行します。\n",
"オプションの linear_correction 機能は、FMUの directional derivatives 機能が使えるときのみサポートされるようです。"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Elapsed initialization time: 0.000314950942993 seconds.\n",
"Master Algorithm options:\n",
" Algorithm : Jacobi (fixed-step)\n",
" Execution : Serial\n",
" Extrapolation Order : 0\n",
" Step-size : 0.006\n",
" Algebraic loop : False\n",
" Linear Correction : False\n",
"\n",
"Statistics: \n",
" Number of global steps : 500\n",
"\n",
"Simulation interval : 0.0 - 3.0 seconds.\n",
"Elapsed simulation time : 0.270776987076 seconds.\n",
" 0.003081 seconds spent in StepCS20.\n",
" 0.003817 seconds spent in BouncingBallCS20.\n",
" 0.239775 seconds spent saving simulation result.\n"
]
}
],
"source": [
"t_start = 0.0\n",
"t_end = 3.0\n",
"dt = (t_end - t_start)/500\n",
"opts = coupled_simulation.simulate_options()\n",
"opts[\"step_size\"] = dt\n",
"opts[\"linear_correction\"] = False\n",
"res = coupled_simulation.simulate(start_time = t_start, final_time = t_end, options = opts)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"シミュレーション結果をプロットします。"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f28ad8b03d0>,\n",
" <matplotlib.lines.Line2D at 0x7f28ad8b0510>]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f28b005c0d0>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"t = res[restitution][\"time\"]\n",
"e = res[restitution][\"y\"]\n",
"h = res[bouncingBall][\"y\"]\n",
"plt.figure(1)\n",
"plt.plot(t,e,t,h)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.17"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment