fmi2:API“fmi2SetupExperiment”中输入参数容差的单位是多少

时间:2017-09-19 06:15:27

标签: fmi

我正在为fmi 2.0.实现API

的奴隶
 fmi2SetupExperiment(fmi2Component c, 
 fmi2Boolean toleranceDefined, 
 fmi2Real tolerance, 
 fmi2Real startTime, 
 fmi2Boolean stopTimeDefined, 
 fmi2Real stopTime)

我知道公差参数用于模拟期间的误差估计。

我想知道tolerance参数的单位/值格式,例如tolerance是5%,tolerance的值是多少? 它会是5还是1.05还是其他形式?

2 个答案:

答案 0 :(得分:0)

FMI 2.0标准谈到了第22页的“相对容忍度”。 这里没有严格定义,但对应于传递给数值解算器的相对容差值。 许多FMI导入工具,例如,使用Sundials求解器。 相对容差在那里解释:https://computation.llnl.gov/projects/sundials/faq#cvode_tols。 所以在你的例子中,我认为0.05是正确的值。

答案 1 :(得分:0)

FMI Specification 2.0表示通常使用的相对容差没有单位(%不是单位,它只代表×10 ^ -2)。 因此,最有可能的是,要将5%的值作为容差传递,您必须将{0.05}作为tolerance传递。

以下内容来自FMI Specification 2.0

  

参数 toleranceDefined 容差取决于FMU类型:

     

fmuType = fmi2ModelExchange:

     

如果toleranceDefined = fmi2True,则使用数字调用模型   积分方案,其中通过使用tolerance进行误差估计(通常作为相对容差)来控制步长。   在这种情况下,模型中使用的所有数值算法(例如,用于求解非线性代数方程)也应该使用适当的较小相对容差的误差估计。

     

fmuType = fmi2CoSimulation:

     

如果toleranceDefined = fmi2True,则从属设备的通信间隔由误差估计控制。   如果从机使用具有可变步长和误差估计的数值积分器,建议使用tolerance进行内部积分器的误差估计(通常作为相对容差)。   用于协同仿真的FMU可能会忽略这一论点。

如果您想确切了解此参数的实施方式,您必须询问FMU的创建者 - 或者如果可以,请自己查看。

如果您无法查看FMU并且创建者无法告诉您内部的操作,只需更改该值并比较结果和运行时间。