﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
5699	Support nonlinear equations with non-real unknowns	Francesco Casella	Karim Adbdelhak	"The whole HelmholtzMedia library has been passing the new frontend 100% since the beginning of 2019, see [https://libraries.openmodelica.org/branches/newInst/HelmholtzMedia/HelmholtzMedia.html report], but then about one third of the models fail in the backend with this error:
{{{
Warning: SimCodeUtil.makeSES_SIMPLE_ASSIGN failed for: 
HelmholtzMedia.Examples.MediaTestModels.ButaneTestModel_dT.Medium.ThermodynamicState(
  fixedMassFlowRate.medium.sat.liq.phase, 
  fixedMassFlowRate.medium.sat.liq.T, 
  fixedMassFlowRate.medium.sat.liq.p, 
  fixedMassFlowRate.medium.sat.liq.d, 
  fixedMassFlowRate.medium.sat.liq.u,
  fixedMassFlowRate.medium.sat.liq.h, 
  fixedMassFlowRate.medium.sat.liq.s) = $TMP_HelmholtzMedia_Examples_MediaTestModels_
       ButaneTestModel__dT_Medium_SaturationProperties74.liq
[OpenModelica/OMCompiler/Compiler/SimCode/SimCodeUtil.mo:6081:7-6081:46:writable]
Error: Internal error No support of solving not real variables with a
non-linear solver.
Equation:
HelmholtzMedia.Examples.MediaTestModels.ButaneTestModel_dT.Medium.SaturationProperties(
  fixedMassFlowRate.medium.sat.psat, 
  fixedMassFlowRate.medium.sat.Tsat,   
  HelmholtzMedia.Examples.MediaTestModels.ButaneTestModel_dT.
    Medium.ThermodynamicState(
      fixedMassFlowRate.medium.sat.liq.phase, 
      fixedMassFlowRate.medium.sat.liq.T, 
      fixedMassFlowRate.medium.sat.liq.p, 
      fixedMassFlowRate.medium.sat.liq.d,   
      fixedMassFlowRate.medium.sat.liq.u, 
      fixedMassFlowRate.medium.sat.liq.h, 
      fixedMassFlowRate.medium.sat.liq.s),    
    HelmholtzMedia.Examples.MediaTestModels.ButaneTestModel_dT.
      Medium.ThermodynamicState(
        fixedMassFlowRate.medium.sat.vap.phase
        fixedMassFlowRate.medium.sat.vap.T, 
        fixedMassFlowRate.medium.sat.vap.p, 
        fixedMassFlowRate.medium.sat.vap.d, 
        fixedMassFlowRate.medium.sat.vap.u, 
        fixedMassFlowRate.medium.sat.vap.h, 
        fixedMassFlowRate.medium.sat.vap.s)) =
  HelmholtzMedia.Examples.MediaTestModels.ButaneTestModel_dT.
    Medium.setSat_p(volume.medium.p) 
solve for {fixedMassFlowRate.medium.sat.vap.h,fixedMassFlowRate.medium.sat.vap.s,
fixedMassFlowRate.medium.sat.vap.p,
fixedMassFlowRate.medium.sat.liq.s,
fixedMassFlowRate.medium.sat.psat,
fixedMassFlowRate.medium.sat.vap.T,
fixedMassFlowRate.medium.sat.liq.phase,
fixedMassFlowRate.medium.sat.liq.h,
fixedMassFlowRate.medium.sat.liq.T,
fixedMassFlowRate.medium.sat.liq.p,
fixedMassFlowRate.medium.sat.Tsat,
fixedMassFlowRate.medium.sat.vap.phase,
fixedMassFlowRate.medium.sat.liq.u,
fixedMassFlowRate.medium.sat.vap.d,
fixedMassFlowRate.medium.sat.liq.d,
fixedMassFlowRate.medium.sat.vap.u}
}}}

We should implement a basic fixed point iteration scheme, whereby we fix the non-Real variables to the start value, solve for the other ones, then re-compute the non-Real variables, and iterate until they don't change after one iteration.

@Karim, @AnHeurmann, what do you think?"	defect	closed	high	1.16.0	Backend		fixed		Andreas Heuermann Mahder Alemseged Gebremedhin
