does your omc create C++ code containing "Modelica_Math_sin_rettype"? If
so, where is it defined?

Am Montag, den 03.01.2011, 19:06 +0100 schrieb Martin Sjölund:
> Yes, there are special rules in the flattening that handles certain 
> external "C" functions in the standard library because they need to be 
> evaluated quickly (launching gcc to compile and load a dll just to 
> compute Modelica.Math.sin() is silly).
> 
> However, these all work for me (they are just declared external "C", so 
> nothing special should be needed to make them run):
> $ omc a.mos
> true
> true
> record SimulationResult
>      resultFile = "oscillator_res.plt",
>      simulationOptions = "startTime = 0.0, stopTime = 1.0, 
> numberOfIntervals = 500, tolerance = 1e-06, method = 'dassl', 
> fileNamePrefix = 'oscillator', storeInTemp = false, noClean = false, 
> options = '', outputFormat = 'plt'",
>      messages = "",
>      timeFrontend = 0.082646233,
>      timeBackend = 0.004297787,
>      timeSimCode = 0.001765213,
>      timeTemplates = 0.003413401,
>      timeCompile = 0.811047671,
>      timeSimulation = 0.020562325,
>      timeTotal = 0.923819948
> end SimulationResult;
> 
> --
> Martin Sjölund
> 
> On 2011-01-03 15:51, Christoph Höger wrote:
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA1
> >
> > addendum: The following model
> >
> > model mathtest
> >        parameter Real x = Modelica.Math.sin(1.0);
> >        Real y;
> >        equation
> >        y = Modelica.Math.cos(time) + x;
> > end mathtest;
> >
> > gives the following omc output:
> >
> > class mathtest
> >    parameter Real x = 0.841470984807897;
> >    Real y;
> > equation
> >    y = Modelica.Math.cos(time) + x;
> > end mathtest;
> >
> > So the compiler was able to invoke sin(), even if the runtime system
> > does not know it?
> >
> > Am 03.01.2011 15:34, schrieb Christoph Höger:
> >> Thanks for the fast fix. The lookup problem is indeed solved now.
> >>
> >> Unfortunately I get a C++ error now:
> >>
> >> [choe...@eurybates oscillator]$ LC_ALL=C omc oscillator.mos
> >> true
> >> true
> >> record SimulationResult
> >>      resultFile = "",
> >>      simulationOptions = "startTime = 0.0, stopTime = 10.0,
> >> numberOfIntervals = 500, tolerance = 1e-06, method = 'dassl',
> >> fileNamePrefix = 'oscillator', storeInTemp = false, noClean = false,
> >> options = '', outputFormat = 'plt'",
> >>      messages = "Simulation failed for model: oscillator
> >> Error: Error building simulator. Buildlog: g++ -I. -o oscillator
> >> oscillator.cpp oscillator_functions.cpp    -lsim -linteractive
> >> -I"/opt/openmodelica//include/omc" -march=native -mfpmath=sse
> >> -lsendData -lQtNetwork -lQtCore -lQtGui -lpthread
> >> -L"/opt/openmodelica//lib/omc" -lc_runtime -lf2c oscillator_records.c
> >> oscillator.cpp: In function 'int function_updateDependents()':
> >> oscillator.cpp:918:3: error: 'Modelica_Math_sin_rettype' was not
> >> declared in this scope
> >>
> >> Since Modelica.Math.sin is a stdlib function, is there something I need
> >> to do, to get it working?
> >>
> >> Am 02.01.2011 16:48, schrieb Martin Sjölund:
> >>> This seems to be an issue with evaluation of parameters without
> >>> eq-bindings (it should look at start=binding and give a warning). It's
> >>> easy to fix it in the model, but thanks for reporting this; I'll look
> >>> into the compiler and see if I can make this work quickly.
> >>
> >>> sinevoltage1(freqHz=50,V=240); // works
> >>
> >>> --
> >>> Martin Sjölund
> >>
> >>> On 2010-12-29 13:20, Christoph Höger wrote:
> >>>> Hi all,
> >>>>
> >>>> the following code
> >>>>
> >>>> model oscillator
> >>>>     Modelica.Electrical.Analog.Basic.Capacitor capacitor1;
> >>>>     Modelica.Electrical.Analog.Sources.SineVoltage sinevoltage1;
> >>>>     Modelica.Electrical.Analog.Basic.Inductor inductor1;
> >>>>     Modelica.Electrical.Analog.Basic.Ground ground1;
> >>>>
> >>>> equation
> >>>>     connect(inductor1.n,ground1.p);
> >>>>     connect(capacitor1.p,inductor1.p);
> >>>>     connect(sinevoltage1.p,capacitor1.p);
> >>>>     connect(capacitor1.n,sinevoltage1.n);
> >>>>     connect(capacitor1.n,inductor1.n);
> >>>> end oscillator;
> >>>>
> >>>> throws a lookup error (sinevoltage1.freqHz, sineVoltage1.V) with omc
> >>>> (current trunk) although the flattened output contains the lines:
> >>>>
> >>>>     parameter Real sinevoltage1.V(quantity = "ElectricPotential", unit =
> >>>> "V", start = 1.0) "Amplitude of sine wave";
> >>>>     parameter Real sinevoltage1.phase(quantity = "Angle", unit = "rad",
> >>>> displayUnit = "deg") = 0.0 "Phase of sine wave";
> >>>>     parameter Real sinevoltage1.freqHz(quantity = "Frequency", unit =
> >>>> "Hz", start = 1.0) "Frequency of sine wave";
> >>>>
> >>>> Any ideas how to circumvent?
> >>>>
> >>>> best regards,
> >>>>
> >>>> Christoph
> >>
> >>
> >
> > - --
> > Christoph Höger
> >
> > Technische Universität Berlin
> > Fakultät IV - Elektrotechnik und Informatik
> > Übersetzerbau und Programmiersprachen
> >
> > Sekr. TEL12-2, Ernst-Reuter-Platz 7, 10587 Berlin
> >
> > Tel.: +49 (30) 314-24890
> > E-Mail: [email protected]
> > -----BEGIN PGP SIGNATURE-----
> > Version: GnuPG v1.4.11 (GNU/Linux)
> > Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/
> >
> > iEYEARECAAYFAk0h4nkACgkQhMBO4cVSGS9ZhgCfUgaOST9SizEM9p3ZIXVqW837
> > YXMAn3iuBMrdQ7sYnHgaQ89goAQQ93uQ
> > =cXHV
> > -----END PGP SIGNATURE-----
> 

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to