Adrian, that wouldn't work in my more detailed model. This formulation might (this simple case works):
model m5 parameter Real a = 3; parameter outRec p=fun2(a); end m5; On Thu, Feb 9, 2012 at 2:22 PM, Adrian Pop <[email protected]> wrote: > > Hi, > > You could try as a workaround: > initial equation > p = outRec(a^2, a^3); > > Cheers, > Adrian Pop/ > > > On 2012-02-09 19:46, Tom Short wrote: >> >> Thanks, Lennart. My initialization involves a few variables in nested >> for loops, so a function call or an algorithm makes the most sense. I >> also tried packaging up return values in a record, but my attempt at >> that also failed in OpenModelica (it worked in Dymola). >> >> package testInitialAlgorithm >> record outRec >> Real y(fixed = false); >> Real z(fixed = false); >> end outRec; >> >> function fun2 >> input Real x; >> output outRec out; >> algorithm >> out.y := x^2; >> out.z := x^3; >> end fun2; >> >> model m5 >> parameter Real a = 3; >> parameter outRec p; >> initial equation >> p = fun2(a); >> end m5; >> >> end testInitialAlgorithm; >> >> >> On Thu, Feb 9, 2012 at 12:02 PM, Lennart Ochel >> <[email protected]> wrote: >>> >>> Hello, >>> >>> currently we do not support initial algorithms at all. >>> >>> As an workaround you can try to convert your initial >>> algorithm into an initial equation. This will help for >>> testInitialAlgorithm.m1 and testInitialAlgorithm.m2. >>> >>> Tomorrow I will take a closer look on how to provide >>> initial algorithms and functions with multiple return-values. >>> >>> Best regards, >>> Lennart Ochel >>> >>> >>> >>> -----Ursprüngliche Nachricht----- From: Tom >>> Short<[email protected]> >>> Reply-to: [email protected] >>> To: [email protected] >>> Subject: Initialization issues during simulation >>> Date: Thu, 09 Feb 2012 09:45:03 -0500 >>> >>> >>> Hello, >>> >>> I'm working on a package where I would eventually like to support both >>> Dymola and OpenModelica. One part relies on quite a bit of >>> pre-processing to initialize several parameters before models are >>> simulated. I haven't found a good way to do this in OpenModelica. The >>> following example shows several ways I've tried to initialize >>> parameters. The first two (m1 and m2) simulate, but the parameters are >>> not initialized properly. The second two (m3 and m4) fail when >>> generating code. Does anyone see errors in my code or know of >>> workarounds for this? All models seem to flatten properly and pass >>> check (except for m4). >>> >>> package testInitialAlgorithm >>> model m1 >>> parameter Real a = 3; >>> parameter Real b(fixed = false); >>> initial algorithm >>> b:=a ^ 2; >>> end m1; >>> >>> model m2 >>> m1 m(a = 4); >>> Real c; >>> equation >>> c = m.b + 1.0; >>> end m2; >>> >>> function fun >>> input Real x; >>> output Real y; >>> output Real z; >>> algorithm >>> y:=x ^ 2; >>> z:=x ^ 3; >>> end fun; >>> >>> model m3 >>> parameter Real a = 3; >>> parameter Real b(fixed = false); >>> parameter Real c(fixed = false); >>> initial equation >>> (b,c) = fun(a); >>> end m3; >>> >>> model m4 >>> parameter Real a = 3; >>> parameter Real b(fixed = false); >>> parameter Real c(fixed = false); >>> initial algorithm >>> (b,c):=fun(a); >>> end m4; >>> end testInitialAlgorithm; >>> >>> The model m3 fails with the following error: >>> >>> CodegenC.tpl: Template error: Unknown expression: (b,c) >>> >>> The model m4 fails with the following error: >>> >>> Tuple assignment only allowed when rhs is function call (in >>> testInitialAlgorithm.fun(a)) >>> >>> I tested this on r11033 on 64-bit win7 and r11047 on ubuntu. >>> >>> - Tom >>> >>> >> >
