Opened 7 years ago
Closed 7 years ago
#4981 closed defect (fixed)
Bad performance of IF97 Modelica.Medium model in NF
Reported by: | Francesco Casella | Owned by: | Per Östlund |
---|---|---|---|
Priority: | high | Milestone: | 2.0.0 |
Component: | New Instantiation | Version: | |
Keywords: | Cc: |
Description
The good news is that the SteamPipe_N_XX
models of the ScalableTestSuite
, which use the very complex IF97
water model from Modelica.Media
are now handled by the NF and produce correct results. Also, the time taken by the NF to flatten the model is more than an order of magnitude less than the old FE.
The bad news is that the generated code is very slow, actually causing the timeout of all the cases in the testsuite.
Please consider this smaller version of the test cases
model Test extends ScalableTestSuite.Thermal.Advection.Models.SteamPipe(N = 1); annotation (experiment( StopTime=20, NumberOfIntervals=500, Tolerance=1e-004)); end Test;
When using the old FE, the simulation takes 0.06 s, while with the NF, it is around 8 s. The reason is an unwanted nonlinear loop involving the computation of steam properties, which is very time-consuming.
non-linear (torn), unknowns: 18, iteration variables: 1 der(h[1]) $cse2 := $DER$Modelica$PMedia$PWater$PIF97_Utilities$PwaterBaseProp_ph(p[1], h[1], 0, 0, $DER.p[1], $DER.h[1]); (residual) $DER$Modelica$PMedia$PWater$PIF97_Utilities$Prho_props_ph(p[1], h[1], $cse1, 0.0, 0.0, $cse2) - $DER.rho[1] = 0 (torn) der(p[1]) := (M[1] * der(h[1]) + $DER.M[1] * h[1] - $DER.E[1]) / V
The output of -d=optdaedump
is nearly identical, except for a small difference:
Old FE: 12/12 (16): $cse1 = Modelica.Media.Water.IF97_Utilities.waterBaseProp_ph(p[1], h[1], 0, 0) [unknown |0|0|0|0|] 13/28 (1): $DER.rho[1] = Modelica.Media.Water.IF97_Utilities.rho_ph_der(p[1], h[1], $cse1, der(p[1]), der(h[1])) [unknown |0|0|0|0|] NF: 12/12 (16): $cse2 = $DER$Modelica$PMedia$PWater$PIF97_Utilities$PwaterBaseProp_ph(p[1], h[1], 0, 0, der(p[1]), der(h[1])) [unknown |0|0|0|0|] 13/28 (16): $cse1 = Modelica.Media.Water.IF97_Utilities.waterBaseProp_ph(p[1], h[1], 0, 0) [unknown |0|0|0|0|] 14/44 (1): $DER.rho[1] = $DER$Modelica$PMedia$PWater$PIF97_Utilities$Prho_props_ph(p[1], h[1], $cse1, 0.0, 0.0, $cse2) [unknown |0|0|0|0|]
The old FE correctly handles the Inline
and derivative
annotations of the Medium functions, eventually calling rho_ph_der
. Apparently, the NF loses some of these annotations, forcing the back-end to take a much more expensive route (including implicit equations and numerical differentiation) to solve the equations.
Unfortunately, if I flatten the model with OMEdit, the annotations are never shown (should they?), so I can't tell which one is lost, but if you check among the functions reported above it shouldn't be hard to find that out and fix the problem.
Fixed in 5f366bae.