Modelica では、単純なマッピング (ケース構造のペア) を作成して、MxN 値のテーブルを 5x5 値のテーブルに縮小しました。しかし、境界 (行 = M または列 = N) にある入力でシミュレートすると、マッピングは「5」を返すはずなのに「0」を返します。範囲外のケースを含めましたが、戻り値は「0」ではなく「3」である必要があります。出力として「0」を指定することはありません。
これは、関数が時不変であること、おそらく初期条件の欠如が原因でしょうか?
コードは次のとおりです。
model chooseTypeArrayPosition
Modelica.Blocks.Interfaces.IntegerInput ModuleRow "Module Row";
Modelica.Blocks.Interfaces.IntegerInput ModuleCol "Module Column";
Modelica.Blocks.Interfaces.IntegerInput ArrayRows "Rows in Array";
Modelica.Blocks.Interfaces.IntegerInput ArrayCols "Columns in Array";
output Modelica.Blocks.Interfaces.IntegerOutput FractExposedTypeRow;
output Modelica.Blocks.Interfaces.IntegerOutput FractExposedTypeCol "Enumeration of FractExposed Column";
algorithm
if ModuleCol > ArrayCols then
FractExposedTypeCol := 3;
elseif ModuleCol < 2 then
FractExposedTypeCol := 1;
elseif ModuleCol < 3 then
FractExposedTypeCol := 2;
elseif ModuleCol > ArrayCols - 1 then
FractExposedTypeRow := 5;
elseif ModuleCol > ArrayCols - 2 then
FractExposedTypeCol := 4;
else
FractExposedTypeCol := 3;
end if;
if ModuleRow > ArrayRows then
FractExposedTypeRow := 3;
elseif ModuleRow < 2 then
FractExposedTypeRow := 1;
elseif ModuleRow < 3 then
FractExposedTypeRow := 2;
elseif ModuleRow > ArrayRows - 1 then
FractExposedTypeRow := 5;
elseif ModuleRow > ArrayRows - 2 then
FractExposedTypeRow := 4;
else
FractExposedTypeRow := 3;
end if;
end chooseTypeArrayPosition;
ご意見ありがとうございます。