【问题标题】:OpenModelica solver reaches maximal number of iteration but not able to find rootOpenModelica 求解器达到最大迭代次数但无法找到根
【发布时间】:2017-11-10 14:05:18
【问题描述】:

我正在尝试将 3 个滑动体的一维系统模拟为 I have explained here

这是我实现的代码:

model friction
  //constants
  parameter Real muk = 0.2;
  parameter Real mus = 0.3;
  parameter Real m1 = 1.0;
  parameter Real m2 = 2.0;
  parameter Real m3 = 3.0;
  parameter Real Fn12 = 3.0;
  parameter Real Fn23 = 2.0;
  parameter Real absTol = 0.1;
  //variables
  Real X1, X2, X3, V1, V2, V3, A1, A2, A3, F1, F2, F3, Ff12, Ff23, Fs12, Fs23;

initial equation
  X1 = 0;
  X2 = 0;
  X3 = 0;
  V1 = 0;
  V2 = 0;
  V3 = 0;
equation
  F1 = 2 * sin(5 * time);
  F2 = 2 * sin(7 * time);
  F3 = 3 * sin(11 * time);
  V1 = der(X1);
  V2 = der(X2);
  V3 = der(X3);
  A1 = der(V1);
  A2 = der(V2);
  A3 = der(V3);
  m1 * A1 = F1 - Ff12;
  m2 * A2 = F2 + Ff12 - Ff23;
  m3 * A3 = F3 + Ff23;
  Fs12 = (m2 * F1 - m1 * (F2-Ff23)) / (m1 + m2);
  Fs23 = (m3 * (F2 + Ff12) - m2 * F3) / (m2 + m3);

  if abs(V1 - V2) < absTol and abs(Fs12) < mus * Fn12 then
    Ff12 = Fs12;
  else
    Ff12 = muk * Fn12 * sign(V1 - V2);
  end if;

  if abs(V3 - V2) < absTol and abs(Fs23) < mus * Fn23 then
    Ff23 = Fs23;
  else
    Ff23 = muk * Fn23 * sign(V2 - V3);
  end if;


end friction;

Wolfram SystemModeler 能够运行模拟直到 t=6 秒,但结果不是我所期望的 I have explained here。当我使用 OpenModelica 解决模拟时,出现以下错误:

C:/Users/foo/AppData/Local/Temp/OpenModelica/OMEdit/friction.exe -port=64457 -logFormat=xmltcp -override=startTime=0,stopTime=10,stepSize=0.02,tolerance=1e- 6,solver=dassl,outputFormat=mat,variableFilter=.* -r=friction_res.mat -jacobian=coloredNumerical -w -lv=LOG_STATS 警告:达到最大迭代次数但未找到根 警告:达到最大迭代次数但未找到根 在时间 0.2 时解决非线性系统 42 的错误 在时间 0.2 时解决非线性系统 42 的错误 非线性系统 42 失败:在 t=0.2 求解非线性系统 42 在时间 = 0.2 时失败。 如需更多信息,请使用 -lv LOG_NLS。 模拟过程失败。以代码 -1 退出。

如果您能帮助我了解问题所在以及如何解决,我将不胜感激?

【问题讨论】:

    标签: modelica openmodelica systemmodeler


    【解决方案1】:

    您正在尝试编写自己的摩擦模型。

    在 Modelica 中,通常的方法是使用 s 参数化,例如继承自:Modelica.Mechanics.Translational.Interfaces.PartialFriction(或使用现有模型)。

    它的文档在线: http://doc.modelica.org/help/Modelica_Mechanics_Rotational_UsersGuide.html#Modelica.Mechanics.Rotational.UsersGuide.ModelingOfFriction

    具体来说,您有 Fs12 和 Fs23,它们是粘附的最大摩擦力,如果它们是恒定的,则它们会起作用 - 但在这里它们取决于 Ff12 和 Ff23 - 它们又取决于 Fs12 和 Fs23;这不起作用。

    【讨论】:

    • 感谢您的回答。那么我应该如何更改代码?如果您能包含正确的模型代码,我将不胜感激。
    【解决方案2】:

    对于干摩擦建模,我可以推荐 https://github.com/dzimmer/ZimmersModelicaTutorial/blob/master/Tutorial2015/BaseComponents/Friction/IdealDryFriction.mo,它以简单干净的方式重用 Modelica.Mechanics.Translational.Interfaces.PartialFriction。

    【讨论】:

    • 谢谢。您能否让我知道我的代码的哪一部分出错以及如何修复它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2019-12-04
    • 2020-06-20
    • 1970-01-01
    • 2012-11-11
    相关资源
    最近更新 更多