Дополнительный вопрос: Modelica: расчет общего времени моделирования и инициализация уравнения - PullRequest
2 голосов
/ 04 мая 2020

Я пишу этот вопрос, связанный с этим . В своем ответе Марко дал мне отличный ответ, но, к сожалению, я новичок в OpenModelica, поэтому мне потребуется дополнительная помощь.

Я на самом деле использую OpenModelica, а не Dymola, поэтому, к сожалению, мне нужно создать функцию, которая делает это для меня, и я очень плохо знаком с языком OpenModelica.

Пока у меня есть модель, которая имитирует физическое поведение на основе DAE. Теперь я пытаюсь построить то, что вы предлагаете здесь:

С помощью get time () вы можете создать функцию, которая: считывает системное время, когда t_start переводит модель, а симуляция в течение 0 секунд читает систему еще раз, и поскольку t_stop вычисляет разницу между t_start и t_stop.

Не могли бы вы дать мне больше подробностей: какую команду я могу использовать для чтения системы в момент времени t_start и для ее моделирования в течение 0 секунд ? Чтобы сделать это как для t_start, так и для t_stop, нужна ли мне другая функция?

После того, как я это сделал, мне нужно вызывать функцию (или функции) внутри модели OpenModelica, о которой я хочу знать ее время ?

Еще раз большое спасибо за вашу драгоценную помощь!

С наилучшими пожеланиями, Габриэле

1 Ответ

2 голосов
/ 05 мая 2020

Из другого вопроса:

Я заметил, что в Modelica есть разные флаги для времени симуляции, но на самом деле время, которое я получаю, очень мало по сравнению со временем, которое проходит с момента нажатия кнопки симуляции до конца симуляции (приблизительно измеряется часами моего телефона).

Время, которое сообщается, является правильным. Большую часть времени занимает не инициализация или симуляция, а компиляция. Если вы используете опцию re-simulate в OMEdit (щелкните правой кнопкой мыши файл результатов в графическом представлении для переменных), вы заметите, что моделирование выполняется очень быстро.

$ cat e.mos
loadString("model M
  Real r(fixed=true, start=2.0);
equation
  der(r) = time;
end M;");getErrorString();
simulate(M);getErrorString();
$ omc e.mos
true
""
record SimulationResult
    resultFile = "/mnt/data/@Mech/martin/tmp/M_res.mat",
    simulationOptions = "startTime = 0.0, stopTime = 1.0, numberOfIntervals = 500, tolerance = 1e-06, method = 'dassl', fileNamePrefix = 'M', options = '', outputFormat = 'mat', variableFilter = '.*', cflags = '', simflags = ''",
    messages = "LOG_SUCCESS       | info    | The initialization finished successfully without homotopy method.
LOG_SUCCESS       | info    | The simulation finished successfully.
",                                                                                                                                                                                                    
    timeFrontend = 0.004114061,                                                                                                                                                                       
    timeBackend = 0.00237546,                                                                                                                                                                         
    timeSimCode = 0.0008126780000000001,                                                                                                                                                              
    timeTemplates = 0.062749837,                                                                                                                                                                      
    timeCompile = 0.633754155,                                                                                                                                                                        
    timeSimulation = 0.006627571000000001,                                                                                                                                                            
    timeTotal = 0.7106012479999999                                                                                                                                                                    
end SimulationResult;                                                                                                                                                                                 
""

OMEdit не сообщает об этих других цифры (время перевести и скомпилировать модель) насколько я знаю. На Windows эти времена довольно велики, потому что связывание занимает больше времени.

...