2011-11-06 2 views
2

"대수적 루프"가 의미하는 바를 알려 줄 수 있습니까? "pre"연산자를 추가하여이 상황에 어떻게 대처할 수 있습니까? 난 심각 ... 사전에dymola 오류 메시지를 이해하는 데 문제가 있습니까?

Error: Failed to generate code for an algebraic loop 
involving when equations or algorithms with when parts. 
Unknowns: 
    pump.Hb_flow 
    pump.medium.d 
    pump.medium.h 
    pump.medium.state.melting 
    pump.medium.state.T 
    pump.V_flow 
    pump.V_flow_single 
    pump.W_single 

Equations: 
    algorithm 
    when Modelica.SIunits.Conversions.to_degC(pump.medium.state.T) < 13.9 then 
     pump.medium.state.melting := true; 
    elsewhen Modelica.SIunits.Conversions.to_degC(pump.medium.state.T) > 32.8  then 
     pump.medium.state.melting := false; 
    end when; 
    // [removed set of equations that contained no "when"] 

You may be able to cut the loop 
by putting 'pre' around some of the references to 
unknown continuous time variables in when parts or when conditions. 

감사합니다, 안부

티모 그것을받지 못했습니다.

답변

2

이 문제는 일반적으로 when 절 내의 방정식이 조건절을 트리거하는 조건문에 영향을주기 때문에 발생합니다.

Modelica에서 이해해야 할 점은 해석 프로세스가 "후보 솔루션"을 시뮬레이션 프로세스의 일부로 사용하여 방정식을 평가한다는 것입니다. 이것은 반드시 최종적으로 선택할 솔루션 일 필요는 없지만 그럼에도 불구하고 최종 솔루션에 접근 할 때 평가할 필요가 있습니다.

어떻게 관련이 있습니까? 여러분의 경우에 저는 여러분이 "녹는"변수의 가치를 바꾸고있는 것을 봅니다. 그러나이 값이 중간 온도에 영향을 주면 ("녹는"값의 변화를 유발 한) 공구가 방정식 시스템의 불일치를 감지합니다. 툴은 반복적으로 일관된 후보 솔루션을 찾을 수 있지만 Dymola는 단지 "펀트"하고 그러한 상황을 지원하지 않는다고 말합니다.

여기서 중요한 점은 기본적으로 이것은 일반적으로 모두 과 관련이 없으며입니다. 왜? 왜냐하면 대부분의 경우 사용자는 실제로 이러한 절에서 when 절의 기본 의미를 원하지 않기 때문입니다. 대부분의 사용자가 원하는 것은 when 절의 조건을 "원인"으로, when 절의 방정식을 "효과"로 처리하는 것입니다. 이러한 의미에서 이들은 순차적이며 효과가 돌아 서서 원인에 영향을 주어서는 안됩니다 (화이트 스트라이프는 이러한 상황에 대해 훌륭한 노래를 썼음에도 불구하고).

일반적인 패턴은 조건을 분리 한 다음 when 절에서 "pre"연산자를 추가하는 것입니다. 원래 모델이 닮은 경우 :

model Test 
... 
equation 
    when x>12.5 then 
    // equations involving y 
    end when; 
    // equations coupling x to y 
end Test; 
그냥 이렇게 뭔가에 모델을 리팩토링 할 필요가

:

model Test2 
... 
    Boolean cond; 
equation 
    cond = x>12.5; 
    when pre(cond) then 
    // equations involving y 
    end when; 
    // equations coupling x to y 
end Test; 

여기에서 중요한 점은 Y를 포함하는 방정식은 애프터 올 것입니다 조건이 참입니다. 이 경우 'pre'는 기본적으로 현재 시간에서 일부 엡실론을 뺀 값인 이고 (응답으로) when 절의 방정식이 참인 경우

이러한 상황은 조건의 가치가 지나가는 모든 "엡실론"에 대해 뒤집는 "채터 링"이라고하는 조건이지만 문제가 잘 제기되지 않았 음을 의미합니다.

나는 이것이 적절한 것이되기를 바랍니다. 나는 복잡한 사례에서 Dymola가 당신에게 어떤 진단을 제공하려고 시도하지만 대수적 인 루프가있는 곳을 정확하게 탐지하는 것이 어려울 수 있음을 인정합니다. 또한 어떤 경우에는 Modelica의 기본 동작을 원하므로 항상 '사전'한정자를 추가하지 않아도됩니다.

이 설명에 대해 질문이 있으면 알려주십시오.

관련 문제