Jack
Jack

Reputation: 1232

data processing of Dymola's result during simulation

I am working on a complex Modelica model that contains a large set of data, and I need the simulation to keep going until I terminate the simulation process, maybe even for days, so the .mat file could get very large, I got trouble with how to do data processing. So I'd like to ask if there are any methods that allow me to

  1. output the data I need after a fixed time step during simulation, but not using the .mat file after simulation. I am considering using Modelica.Utilities.Stream.Print` function to print the data I need into a CSV file, but I have to write a huge amount of code that prints every variable I need, so I think there should be a better solution.
  2. delete the .mat file during a fixed time step, so the .mat file stored on my PC wouldn't get too large, and don't affect the normal simulation of Dymola.

Upvotes: 1

Views: 352

Answers (2)

Markus A.
Markus A.

Reputation: 7500

I didn't fully test this, so please think of this more like "source of inspiration" than a full answer:

In Section "4.3.6 Saving periodic snapshots during simulation" of the Dymola 2021 Release Notes you'll find a description to do the following:

The simulator can be instructed to print the simulation result file “dsfinal.txt” snapshots during simulation.

This can be done periodically using the Simulation Setup options "Complete result snapshots", but I think for your case it could be more useful to trigger it from the model using the function Dymola.Simulation.TriggerResultSnapshot(). A simple example is given as well:

when x > 0 then
  Dymola.Simulation.TriggerResultSnapshot();
end when;

Also one property of this function could help, as it by default creates multiple files without overwriting them:

By default, a time stamp is added to the snapshot file name, e.g.: “dsfinal_0.1.txt”.

The format of the created dsfinal_[TIMESTAMP].txt is a bit overwhelming at first, as it contains all information for initializing the model, but there should be everything you need...

So some effort is shifted to the post processing, as you will likely need to read multiple files, but I think this is an acceptable trade-off.

Upvotes: 1

Atiyah Elsheikh
Atiyah Elsheikh

Reputation: 578

Long time ago I wrote a small C-program that runs the executable of Dymola with two threads. One of them is responsible for terminating the whole simulation after exceeding an input time limit. I used the executable of this C-program within the standard given mfiles from Dymola. I think with some hacking capabilities, one would be able to conduct the mentioned requirements.

Have a look at https://github.com/Mathemodica/dymmat however I need to warn that the associated mfiles were for particular type of models and the software is not maintained since long time. However, the idea of the C-program would be reproducible.

Upvotes: 1

Related Questions