Opened 4 years ago
Last modified 3 years ago
#6014 assigned defect
OMPython: Set structural parameter at initialization
Reported by: | Owned by: | Adrian Pop | |
---|---|---|---|
Priority: | high | Milestone: | |
Component: | Interactive Environment | Version: | v1.14.1 |
Keywords: | structural parameter | Cc: |
Description
Hello,
there a view parameters that can't be set after compilation. For example parameters that define an array size. Is it possible to set these kind of parameters while compiling? Is there any compilerflag that allows this?
best regards
Lukas Koenemann
Change History (7)
comment:1 by , 4 years ago
Component: | *unknown* → Interactive Environment |
---|---|
Milestone: | Future → 1.17.0 |
Owner: | changed from | to
Status: | new → assigned |
follow-up: 3 comment:2 by , 4 years ago
You can already do it via setParameterValue or setComponentModifierValue:
https://www.openmodelica.org/download/OMC_API-HowTo.pdf
This is really easy to do even now via:
loadString("model ChangeParametersInModel = Model(modifications)"); simulate(ChangeParametersInModel);
I guess what you want is to be able to give a short class definition in the translateModel
, buildModel
and simulate
commands:
So which one would prefer?
// this way you would also have a name that goes with the modifications simulate(model ChangeParametersInModel = Model(modifications));
or:
// this way you somehow hide the modifications simulate(Model(modifications));
Now the question is what you should be able to put in the modification values?
Just literals or can they can also use parameters from the Model?
comment:3 by , 4 years ago
Replying to adrpo:
You can already do it via setParameterValue or setComponentModifierValue:
https://www.openmodelica.org/download/OMC_API-HowTo.pdf
This is really easy to do even now via:
loadString("model ChangeParametersInModel = Model(modifications)"); simulate(ChangeParametersInModel);
Aha, I didn't think about short class definitions, in #2174 I was considering inheritance, but then the experiment annotations would be lost. Are they kept if I use short class definition like you propose here?
I guess what you want is to be able to give a short class definition in the
translateModel
,buildModel
andsimulate
commands:
So which one would prefer?
// this way you somehow hide the modifications simulate(Model(modifications));
This one would of course be nicer and more intuitive.
Now the question is what you should be able to put in the modification values?
Just literals or can they can also use parameters from the Model?
I was mostly thinking of providing either literals or top-level variables defined by the scripting environment (whatever that means), e.g.
Real p = {1, 2, 3}; for i in 1:3 loop simulate(MyModel(p = p[i])); // do stuff with the results end for;
In principle I could also fetch those values from inside the model
for i in 1:3 loop simulate(MyModel(p = MyModel.data_p[i])); // do stuff with the results end for;
but that's not what I had in mind. @lukas, what do you think?
Also, it is not fully clear if and how can I avoid to recompile the model all the times from the API. Of course I can call buildModel
and then call the executable via system calls, but that's another approach.
It would be good to have some guides or tutorials you can do such things using the scripting language and OMPython/Matlab/Julia
comment:4 by , 4 years ago
Thank you for the fast reply. It works well with the solution mentioned above (via setParameterValue). With OMPython I just execute the model_name.exe to simulate my model. That's why I couldn't use the solution with the OpenModelica-command "simulate(MyModel(p=p[i]))"...
comment:5 by , 4 years ago
Is it possible to set a string via
loadString("model ChangeParametersInModel = Model(modifications)");
modifications? This one doesnt work:
loadString("model ChangeParametersInModel = Model(PV.filename = "modelica://path_to_file")");
comment:6 by , 4 years ago
Milestone: | 1.17.0 → 1.18.0 |
---|
Retargeted to 1.18.0 because of 1.17.0 timed release.
This is related to #2174. Maybe it's time we finally provide this functionality in the interactive environment, so it can be used by all OMC tools?
@adrpo, what do you think?