Created
March 29, 2020 06:25
-
-
Save finback-at/1c1af86c47669aaef3ef99e34df5576a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"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