6

Modelica モデルで医療関連の非 SI 単位を使用したいと考えています。Dymola で Modelica を使用しています。エンジニアとして、私は SI 単位の方が好きです。しかし、私のモデル パラメータは医学出版物から入手したものであり、変換ミスを避けたいと考えています。医療ユニットは、医師とのコミュニケーションも簡素化します。

たとえば、圧力には「Pa」の代わりに「mmHg」(水銀柱ミリメートル)という単位が使用されます。圧力変数は、モデルで次のように定義されます。

type Pressure_mmHg = Real (final quantity="Pressure", final unit="mmHg")

シミュレーション用にモデルを変換すると、モデル内の非 SI 変数ごとに次の警告が表示されます (合計で約 300 の警告)。

Could not decode the unit symbol "mmHg" appearing in the unit string "mmHg"

モデルの変更によって新しい警告が発生した場合、それを検出することはほぼ不可能です。したがって、Modelica に単位「mmHg」を教える必要があります。

トピックに関する私の現在の知識:
- Modelica 言語仕様 3.3、第 19 章単位式: 「ユーザー定義の単位記号をサポートすることは可能です。」ただし、ドキュメントはこれについて詳しく説明していません。
- ユーザーは、Dymola ディレクトリの「displayunit.mos」ファイルで次のように変換係数が定義されている限り、シミュレーション GUI で使用する表示単位 (Real 属性「displayUnit」) を定義できます。

defineUnitConversion("Pa", "mmHg", 760/101325);

モデルの移植性が低下するため、これはオプションではありません。モデルを実行するすべてのコンピューターで手動で実行する必要があり、管理者権限が必要です (私は持っていません)。

よろしくお願いいたします。

編集(将来これに遭遇する人に役立つかもしれません):
投稿時のバージョン: Modelica Standard Library 3.2, Dymola Version 2014 (64-bit) 2013-03-25

このトピックに関する現在の知識に次のことを追加するのを忘れていました: Physilibrary 2.1.1 は、GUI の displayUnits を定義します。コーディングのために、著者は次のトリックを使用します。

type Pressure =  Modelica.SIunits.Pressure(displayUnit="mmHg", nominal=133.322387415);

このように、Modelica は圧力タイプの変数を単位がパスカル (N/m2) であるとして処理しますが、コードに入力されたすべての値を所定の公称値で除算します。

訂正:
このセクションでは、物理ライブラリーが単位変換に公称実数属性を使用することを以前に述べました。これはそうではありません。私を訂正してくれた Marek Matejak (Physilibrary の著者) に感謝します。属性名義の唯一の目的は、安定性の理由から数値問題をスケーリングすることです。

4

3 に答える 3

4

@Jay_At_Play さん、@MichaelTiller さんがシェアした Modelica Trac サイトをもう一度見てみてください。役立つ可能性のあるアプローチについて説明しました。ただし、警告として、これは非標準であり、Modelica 標準ライブラリと直接互換性がありません。

(元の質問の下のコメントにこれを追加したかったのですが、評判ポイントがありません。)

于 2014-07-25T20:30:02.510 に答える
3

Dymola の Modelica Medical 非 SI (表示) 単位:

  1. 医療用の非 SI (ディスプレイ) ユニットをサポートするには、 https ://github.com/MarekMatejak/Physilibrary/ などの Dymola ファイル「C:\Program Files*\Dymola*\insert\displayunit.mos」を拡張してみてください。ブロブ/マスター/フィジオライブラリー/リソース/DisplayUnits/displayunit.mos

  2. パラメータまたは変数の定義では、属性 unit を常に SI 単位に設定する必要があり、displayUnit は、Dymola ファイル「displayunit.mos」で変換を定義したすべてのものにすることができます。

例えば:

パラメータ Real systolicPressure(final unit="Pa", displayUnit="mmHg") = 16000;

パラメータ Real diastolicPressure(final unit="Pa", displayUnit="torr") = 10000;

Modelica は常に SI 単位でモデルを計算しますが、Dymola のパラメーター ダイアログと出力プロットは表示単位になります。注意してください - テキスト コードのすべての値は SI 単位でなければなりません。

公称は変換とは直接関係ありません。これらは、背後にある数値数学の相対的な許容誤差のみを対象としています。

Physiolibrary の表示単位に間違いを見つけた場合は、遠慮なくご報告ください。ありがとうございました!

于 2014-08-27T15:56:36.637 に答える
3

私の知る限り、移植可能な方法でこれを行う良い方法はありません。

Modelica の仕様では、ユーザー定義単位の処理方法が規定されていないため、各ツールは独自の方法で処理します (または処理しない)。

私が思う最良の方法は、一部のツールで警告が表示された場合でも、モデルまたはライブラリで型を定義することによって行うことです。

Dymola では、次の方法で警告を取り除くことができます。

Advanced.CheckUnits = false

コマンドウィンドウで。

于 2014-07-17T02:49:34.277 に答える