Converge problem when calculating a flowsheet!

Problem with convergence of the ngfccc flowsheet, any way to solve the problem? increase iterations?

Convergence problems are very common with complex flowsheets, especially if they have recycles and / or strict specifications.

The first and foremost cause of convergence failures are unreasonable specifications. I mean asking for the impossible such as a distillation column that should overcome an azeotrope, or an equilibrium reactor with an unattainable conversion set.
So review your latest changes: what did you change that broke it ? (I know in your case this does not apply, but this reply is meant to be quite general).

The second obvious thing to try is to increase iterations as you suggest. Start by looking at the convergence path in the user interface message panel - you may see something like this:

FlowSheet::calculate * Starting sequential pre-computation
FlowSheet::go * = Iter = 0 Error = 1000
FlowSheet::go * = Iter = 1 Error = 800
FlowSheet::go * = Iter = 2 Error = 600
FlowSheet::go * = Iter = 4 Error = 400
FlowSheet::calculate * Switch to simultaneous computation
SolverNleRecipes::solve * 0 100000
SolverNleRecipes::solve * 1 10000
SolverNleRecipes::solve * 2 1000
SolverNleRecipes::solve * 3 100
SolverNleRecipes::solve * 4 10
SolverNleRecipes::solve * 5 1
SolverNleRecipes::solve * 6 0,1
Libpf::User::Case::calculateSync * Computation complete with 0 errors and 0 warning```s

In LIBPF flowsheets are are solved sequentially first, then simultaneously; sequential means that each unit is solved by itself (and recycles + specifications within sub-flowsheets are solved before the higher-level flowsheet is solved) - simultaneous means that all equations are solved together.

In the example above there are 5 sequential iterations (those are the Iter lines) followed by 7 simultaneous iterations (those with the SolverNleRecipes::solve). Notice that in the first part the error decreases linearly (i.e. slowly) and never gets lower than 1 (that means it has not really solved the equations) while in the second part it goes down geometrically (i.e. fast) and does get lower than 1, indicating it’s solved it.

Now check your (non) convergence path in the user interface message panel - how does it look like ?

Provo ad avviare: /Users/marcocescocasanova/Desktop/LIBPF_SDK_osx_1.0.2346/UIPF.app/Contents/MacOS/…/…/…/uipf.app/Contents/Resources/kernel calculate 37049
Il processo è partito correttamente

  • ****************** LIBPF 01.00.2346 [2016/04/02 10:45:23] ******************
  • © Copyright 2004-2016 Paolo Greppi simevo s.r.l.
  • ***************** GasMem 00.01.0118 [2016/01/07 16:59:01] ******************
  • © Copyright 2011-2012 Paolo Greppi Universita di Genova; © Copyright 2012-2016 Paolo Greppi simevo s.r.l.
  • ******************* FC 00.01.0164 [2016/01/07 16:57:13] ********************
  • © Copyright 2007-2012 Paolo Greppi Universita’ di Genova; © Copyright 2013-2014 Paolo Greppi simevo s.r.l.
  • ********************************* McfcCcs **********************************
  • Copyright 2007-2012 Paolo Greppi - Universita di Genova, 2012-2014 Paolo Greppi simevo s.r.l.

  • All rights reserved; do not distribute without permission.

FlowSheet::calculate * Starting sequential pre-computation
FlowSheet::go * == Iter = 0 Error = 0.948944
FlowSheet::go * == Iter = 1 Error = 0.104796
FlowSheet::go * == Iter = 2 Error = 1.94475e-07
FlowSheet::go * === Iter = 0 Error = 0.346466
FlowSheet::go * === Iter = 1 Error = 0.294989
FlowSheet::go * === Iter = 2 Error = 0.21877
FlowSheet::go * === Iter = 3 Error = 0.154274
FlowSheet::go * === Iter = 4 Error = 0.106652
FlowSheet::go * ==== Iter = 0 Error = 0.0979991
FlowSheet::go * ==== Iter = 1 Error = 0.0611433
FlowSheet::go * ==== Iter = 2 Error = 0.034914
FlowSheet::go * ==== Iter = 3 Error = 0.018895
FlowSheet::go * ==== Iter = 4 Error = 0.00989606
FlowSheet::go * ==== Iter = 0 Error = 0.0369927
FlowSheet::go * ==== Iter = 1 Error = 0.0198304
FlowSheet::go * ==== Iter = 2 Error = 0.0103532
FlowSheet::go * ==== Iter = 3 Error = 0.00533647
FlowSheet::go * ==== Iter = 4 Error = 0.00273235
FlowSheet::go * === Iter = 0 Error = 0.403287
FlowSheet::go * ==== Iter = 0 Error = 0.0231187
FlowSheet::go * ==== Iter = 1 Error = 0.0122398
FlowSheet::go * ==== Iter = 2 Error = 0.00633866
FlowSheet::go * ==== Iter = 3 Error = 0.00323296
FlowSheet::go * ==== Iter = 4 Error = 0.00162876
FlowSheet::go * ==== Iter = 0 Error = 0.0736695
FlowSheet::go * ==== Iter = 1 Error = 0.0445897
FlowSheet::go * ==== Iter = 2 Error = 0.0256463
FlowSheet::go * ==== Iter = 3 Error = 0.0143344
FlowSheet::go * ==== Iter = 4 Error = 0.00788405
FlowSheet::go * === Iter = 1 Error = 0.226632
FlowSheet::go * ==== Iter = 0 Error = 0.010175
FlowSheet::go * ==== Iter = 1 Error = 0.00525336
FlowSheet::go * ==== Iter = 2 Error = 0.00272334
FlowSheet::go * ==== Iter = 3 Error = 0.00141178
FlowSheet::go * ==== Iter = 4 Error = 0.000730147
FlowSheet::go * ==== Iter = 0 Error = 0.00732489
FlowSheet::go * ==== Iter = 1 Error = 0.00401438
FlowSheet::go * ==== Iter = 2 Error = 0.0021844
FlowSheet::go * ==== Iter = 3 Error = 0.00118383
FlowSheet::go * ==== Iter = 4 Error = 0.000640008
FlowSheet::go * === Iter = 2 Error = 0.108756
FlowSheet::go * ==== Iter = 0 Error = 0.00452135
FlowSheet::go * ==== Iter = 1 Error = 0.00234019
FlowSheet::go * ==== Iter = 2 Error = 0.00121033
FlowSheet::go * ==== Iter = 3 Error = 0.000624171
FlowSheet::go * ==== Iter = 4 Error = 0.000320492
FlowSheet::go * ==== Iter = 0 Error = 0.00249305
FlowSheet::go * ==== Iter = 1 Error = 0.00133434
FlowSheet::go * ==== Iter = 2 Error = 0.000712455
FlowSheet::go * ==== Iter = 3 Error = 0.000379846
FlowSheet::go * ==== Iter = 4 Error = 0.000202315
FlowSheet::go * === Iter = 3 Error = 0.042117
FlowSheet::go * ==== Iter = 0 Error = 0.0015411
FlowSheet::go * ==== Iter = 1 Error = 0.000800888
FlowSheet::go * ==== Iter = 2 Error = 0.000414955
FlowSheet::go * ==== Iter = 3 Error = 0.000214115
FlowSheet::go * ==== Iter = 4 Error = 0.000109927
FlowSheet::go * ==== Iter = 0 Error = 0.000930885
FlowSheet::go * ==== Iter = 1 Error = 0.000496984
FlowSheet::go * ==== Iter = 2 Error = 0.000265509
FlowSheet::go * ==== Iter = 3 Error = 0.000141731
FlowSheet::go * ==== Iter = 4 Error = 7.56121e-05
FlowSheet::go * === Iter = 4 Error = 0.0153491
FlowSheet::go * == Iter = 0 Error = 1.23355
FlowSheet::go * === Iter = 0 Error = 0.0679326
FlowSheet::go * === Iter = 1 Error = 0.0483589
FlowSheet::go * === Iter = 2 Error = 0.0362776
FlowSheet::go * === Iter = 3 Error = 0.0269264
FlowSheet::go * === Iter = 4 Error = 0.020961
FlowSheet::go * ==== Iter = 0 Error = 0.057512
FlowSheet::go * ==== Iter = 1 Error = 0.0322529
FlowSheet::go * ==== Iter = 2 Error = 0.0173143
FlowSheet::go * ==== Iter = 3 Error = 0.00905463
FlowSheet::go * ==== Iter = 4 Error = 0.00465553
FlowSheet::go * ==== Iter = 0 Error = 0.00932823
FlowSheet::go * ==== Iter = 1 Error = 0.00476702
FlowSheet::go * ==== Iter = 2 Error = 0.00244207
FlowSheet::go * ==== Iter = 3 Error = 0.00128154
FlowSheet::go * ==== Iter = 4 Error = 0.000673608
FlowSheet::go * === Iter = 0 Error = 0.175035
FlowSheet::go * ==== Iter = 0 Error = 0.00879178
FlowSheet::go * ==== Iter = 1 Error = 0.0046053
FlowSheet::go * ==== Iter = 2 Error = 0.00238743
FlowSheet::go * ==== Iter = 3 Error = 0.00122739
FlowSheet::go * ==== Iter = 4 Error = 0.000626124
FlowSheet::go * ==== Iter = 0 Error = 0.00534308
FlowSheet::go * ==== Iter = 1 Error = 0.0028999
FlowSheet::go * ==== Iter = 2 Error = 0.00157822
FlowSheet::go * ==== Iter = 3 Error = 0.000858692
FlowSheet::go * ==== Iter = 4 Error = 0.000466693
FlowSheet::go * === Iter = 1 Error = 0.0650453
FlowSheet::go * ==== Iter = 0 Error = 0.00214781
FlowSheet::go * ==== Iter = 1 Error = 0.00113651
FlowSheet::go * ==== Iter = 2 Error = 0.000598372
FlowSheet::go * ==== Iter = 3 Error = 0.000313566
FlowSheet::go * ==== Iter = 4 Error = 0.00016353
FlowSheet::go * ==== Iter = 0 Error = 0.00235399
FlowSheet::go * ==== Iter = 1 Error = 0.00128477
FlowSheet::go * ==== Iter = 2 Error = 0.000700479
FlowSheet::go * ==== Iter = 3 Error = 0.000381286
FlowSheet::go * ==== Iter = 4 Error = 0.000207168
FlowSheet::go * === Iter = 2 Error = 0.0274039
FlowSheet::go * ==== Iter = 0 Error = 0.00100031
FlowSheet::go * ==== Iter = 1 Error = 0.000530287
FlowSheet::go * ==== Iter = 2 Error = 0.000280026
FlowSheet::go * ==== Iter = 3 Error = 0.000147296
FlowSheet::go * ==== Iter = 4 Error = 7.7158e-05
FlowSheet::go * ==== Iter = 0 Error = 0.00103067
FlowSheet::go * ==== Iter = 1 Error = 0.000563747
FlowSheet::go * ==== Iter = 2 Error = 0.000307685
FlowSheet::go * ==== Iter = 3 Error = 0.000167555
FlowSheet::go * ==== Iter = 4 Error = 9.10508e-05
FlowSheet::go * === Iter = 3 Error = 0.0119701
FlowSheet::go * ==== Iter = 0 Error = 0.00046191
FlowSheet::go * ==== Iter = 1 Error = 0.000244537
FlowSheet::go * ==== Iter = 2 Error = 0.000129005
FlowSheet::go * ==== Iter = 3 Error = 6.7804e-05
FlowSheet::go * ==== Iter = 4 Error = 3.54928e-05
FlowSheet::go * ==== Iter = 0 Error = 0.000460706
FlowSheet::go * ==== Iter = 1 Error = 0.000252221
FlowSheet::go * ==== Iter = 2 Error = 0.000137716
FlowSheet::go * ==== Iter = 3 Error = 7.50085e-05
FlowSheet::go * ==== Iter = 4 Error = 4.07614e-05
FlowSheet::go * === Iter = 4 Error = 0.005333
FlowSheet::go * == Iter = 1 Error = 0.865838
FlowSheet::go * === Iter = 0 Error = 0.0178147
FlowSheet::go * === Iter = 1 Error = 0.0140782
FlowSheet::go * === Iter = 2 Error = 0.0116213
FlowSheet::go * === Iter = 3 Error = 0.00952808
FlowSheet::go * === Iter = 4 Error = 0.00772858
FlowSheet::go * ==== Iter = 0 Error = 0.00097199
FlowSheet::go * ==== Iter = 1 Error = 0.000488691
FlowSheet::go * ==== Iter = 2 Error = 0.000252063
FlowSheet::go * ==== Iter = 3 Error = 0.00013354
FlowSheet::go * ==== Iter = 4 Error = 7.32933e-05
FlowSheet::go * ==== Iter = 0 Error = 0.000703714
FlowSheet::go * ==== Iter = 1 Error = 0.000378019
FlowSheet::go * ==== Iter = 2 Error = 0.000202785
FlowSheet::go * ==== Iter = 3 Error = 0.000108663
FlowSheet::go * ==== Iter = 4 Error = 5.81743e-05
FlowSheet::go * === Iter = 0 Error = 0.00550449
FlowSheet::go * ==== Iter = 0 Error = 0.000501795
FlowSheet::go * ==== Iter = 1 Error = 0.000254611
FlowSheet::go * ==== Iter = 2 Error = 0.000128207
FlowSheet::go * ==== Iter = 3 Error = 6.41639e-05
FlowSheet::go * ==== Iter = 4 Error = 3.35182e-05
FlowSheet::go * ==== Iter = 0 Error = 0.000181114
FlowSheet::go * ==== Iter = 1 Error = 9.69513e-05
FlowSheet::go * ==== Iter = 2 Error = 5.18555e-05
FlowSheet::go * ==== Iter = 3 Error = 2.77156e-05
FlowSheet::go * ==== Iter = 4 Error = 1.48039e-05
FlowSheet::go * === Iter = 1 Error = 0.00141227
FlowSheet::go * ==== Iter = 0 Error = 0.000132511
FlowSheet::go * ==== Iter = 1 Error = 6.71598e-05
FlowSheet::go * ==== Iter = 2 Error = 3.37819e-05
FlowSheet::go * ==== Iter = 3 Error = 1.69831e-05
FlowSheet::go * ==== Iter = 4 Error = 8.93086e-06
FlowSheet::go * ==== Iter = 0 Error = 3.43566e-05
FlowSheet::go * ==== Iter = 1 Error = 1.82527e-05
FlowSheet::go * ==== Iter = 2 Error = 9.696e-06
FlowSheet::go * ==== Iter = 3 Error = 5.15007e-06
FlowSheet::go * ==== Iter = 4 Error = 2.73519e-06
FlowSheet::go * === Iter = 2 Error = 0.000392564
FlowSheet::go * ==== Iter = 0 Error = 3.19738e-05
FlowSheet::go * ==== Iter = 1 Error = 1.62306e-05
FlowSheet::go * ==== Iter = 2 Error = 8.179e-06
FlowSheet::go * ==== Iter = 3 Error = 4.10196e-06
FlowSheet::go * ==== Iter = 4 Error = 2.14795e-06
FlowSheet::go * ==== Iter = 0 Error = 6.91259e-06
FlowSheet::go * ==== Iter = 1 Error = 3.56326e-06
FlowSheet::go * ==== Iter = 2 Error = 1.83776e-06
FlowSheet::go * ==== Iter = 3 Error = 9.48388e-07
FlowSheet::go * === Iter = 3 Error = 0.000122494
FlowSheet::go * ==== Iter = 0 Error = 8.52818e-06
FlowSheet::go * ==== Iter = 1 Error = 4.35484e-06
FlowSheet::go * ==== Iter = 2 Error = 2.20941e-06
FlowSheet::go * ==== Iter = 3 Error = 1.11246e-06
FlowSheet::go * ==== Iter = 4 Error = 5.70094e-07
FlowSheet::go * ==== Iter = 0 Error = 2.20756e-06
FlowSheet::go * ==== Iter = 1 Error = 1.11266e-06
FlowSheet::go * ==== Iter = 2 Error = 5.59431e-07
FlowSheet::go * === Iter = 4 Error = 4.21195e-05
FlowSheet::go * == Iter = 2 Error = 0.36102
FlowSheet::go * === Iter = 0 Error = 0.0348889
FlowSheet::go * === Iter = 1 Error = 0.0234234
FlowSheet::go * === Iter = 2 Error = 0.015587
FlowSheet::go * === Iter = 3 Error = 0.0103132
FlowSheet::go * === Iter = 4 Error = 0.00679275
FlowSheet::go * ==== Iter = 0 Error = 0.0393983
FlowSheet::go * ==== Iter = 1 Error = 0.019358
FlowSheet::go * ==== Iter = 2 Error = 0.00970028
FlowSheet::go * ==== Iter = 3 Error = 0.00489482
FlowSheet::go * ==== Iter = 4 Error = 0.00247046
FlowSheet::go * ==== Iter = 0 Error = 0.0023039
FlowSheet::go * ==== Iter = 1 Error = 0.00125536
FlowSheet::go * ==== Iter = 2 Error = 0.000683082
FlowSheet::go * ==== Iter = 3 Error = 0.000371013
FlowSheet::go * ==== Iter = 4 Error = 0.000201131
FlowSheet::go * === Iter = 0 Error = 0.0254828
FlowSheet::go * ==== Iter = 0 Error = 0.000954375
FlowSheet::go * ==== Iter = 1 Error = 0.000538182
FlowSheet::go * ==== Iter = 2 Error = 0.00030566
FlowSheet::go * ==== Iter = 3 Error = 0.000177316
FlowSheet::go * ==== Iter = 4 Error = 0.000102439
FlowSheet::go * ==== Iter = 0 Error = 0.000343468
FlowSheet::go * ==== Iter = 1 Error = 0.000174655
FlowSheet::go * ==== Iter = 2 Error = 8.8924e-05
FlowSheet::go * ==== Iter = 3 Error = 4.51438e-05
FlowSheet::go * ==== Iter = 4 Error = 2.28512e-05
FlowSheet::go * === Iter = 1 Error = 0.00804066
FlowSheet::go * ==== Iter = 0 Error = 0.000502379
FlowSheet::go * ==== Iter = 1 Error = 0.000265418
FlowSheet::go * ==== Iter = 2 Error = 0.000139793
FlowSheet::go * ==== Iter = 3 Error = 7.33898e-05
FlowSheet::go * ==== Iter = 4 Error = 3.8394e-05
FlowSheet::go * ==== Iter = 0 Error = 0.000200905
FlowSheet::go * ==== Iter = 1 Error = 0.000107342
FlowSheet::go * ==== Iter = 2 Error = 5.72191e-05
FlowSheet::go * ==== Iter = 3 Error = 3.13589e-05
FlowSheet::go * ==== Iter = 4 Error = 1.71303e-05
FlowSheet::go * === Iter = 2 Error = 0.00304041
FlowSheet::go * ==== Iter = 0 Error = 0.000143449
FlowSheet::go * ==== Iter = 1 Error = 7.55757e-05
FlowSheet::go * ==== Iter = 2 Error = 3.96868e-05
FlowSheet::go * ==== Iter = 3 Error = 2.07656e-05
FlowSheet::go * ==== Iter = 4 Error = 1.08216e-05
FlowSheet::go * ==== Iter = 0 Error = 0.000111141
FlowSheet::go * ==== Iter = 1 Error = 6.09999e-05
FlowSheet::go * ==== Iter = 2 Error = 3.33657e-05
FlowSheet::go * ==== Iter = 3 Error = 1.81949e-05
FlowSheet::go * ==== Iter = 4 Error = 9.89524e-06
FlowSheet::go * === Iter = 3 Error = 0.0013221
FlowSheet::go * ==== Iter = 0 Error = 5.14666e-05
FlowSheet::go * ==== Iter = 1 Error = 2.72434e-05
FlowSheet::go * ==== Iter = 2 Error = 1.43781e-05
FlowSheet::go * ==== Iter = 3 Error = 7.56323e-06
FlowSheet::go * ==== Iter = 4 Error = 3.96378e-06
FlowSheet::go * ==== Iter = 0 Error = 5.15841e-05
FlowSheet::go * ==== Iter = 1 Error = 2.82911e-05
FlowSheet::go * ==== Iter = 2 Error = 1.5464e-05
FlowSheet::go * ==== Iter = 3 Error = 8.42747e-06
FlowSheet::go * ==== Iter = 4 Error = 4.58061e-06
FlowSheet::go * === Iter = 4 Error = 0.000591877
FlowSheet::go * == Iter = 3 Error = 0.334874
FlowSheet::go * === Iter = 0 Error = 0.0327672
FlowSheet::go * === Iter = 1 Error = 0.0217446
FlowSheet::go * === Iter = 2 Error = 0.0143728
FlowSheet::go * === Iter = 3 Error = 0.00944447
FlowSheet::go * === Iter = 4 Error = 0.00615699
FlowSheet::go * ==== Iter = 0 Error = 0.0349193
FlowSheet::go * ==== Iter = 1 Error = 0.0188472
FlowSheet::go * ==== Iter = 2 Error = 0.00990339
FlowSheet::go * ==== Iter = 3 Error = 0.00511587
FlowSheet::go * ==== Iter = 4 Error = 0.00261035
FlowSheet::go * ==== Iter = 0 Error = 0.000826457
FlowSheet::go * ==== Iter = 1 Error = 0.000440198
FlowSheet::go * ==== Iter = 2 Error = 0.000234192
FlowSheet::go * ==== Iter = 3 Error = 0.000124491
FlowSheet::go * ==== Iter = 4 Error = 6.61355e-05
FlowSheet::go * === Iter = 0 Error = 0.0122258
FlowSheet::go * ==== Iter = 0 Error = 0.00222917
FlowSheet::go * ==== Iter = 1 Error = 0.00112979
FlowSheet::go * ==== Iter = 2 Error = 0.000567233
FlowSheet::go * ==== Iter = 3 Error = 0.000290411
FlowSheet::go * ==== Iter = 4 Error = 0.000157094
FlowSheet::go * ==== Iter = 0 Error = 0.000751512
FlowSheet::go * ==== Iter = 1 Error = 0.000409393
FlowSheet::go * ==== Iter = 2 Error = 0.000222497
FlowSheet::go * ==== Iter = 3 Error = 0.000120649
FlowSheet::go * ==== Iter = 4 Error = 6.52848e-05
FlowSheet::go * === Iter = 1 Error = 0.00531434
FlowSheet::go * ==== Iter = 0 Error = 6.27695e-05
FlowSheet::go * ==== Iter = 1 Error = 3.50128e-05
FlowSheet::go * ==== Iter = 2 Error = 1.99163e-05
FlowSheet::go * ==== Iter = 3 Error = 1.13138e-05
FlowSheet::go * ==== Iter = 4 Error = 6.41806e-06
FlowSheet::go * ==== Iter = 0 Error = 0.000251613
FlowSheet::go * ==== Iter = 1 Error = 0.00013763
FlowSheet::go * ==== Iter = 2 Error = 7.50528e-05
FlowSheet::go * ==== Iter = 3 Error = 4.0815e-05
FlowSheet::go * ==== Iter = 4 Error = 2.21407e-05
FlowSheet::go * === Iter = 2 Error = 0.00244557
FlowSheet::go * ==== Iter = 0 Error = 8.35461e-05
FlowSheet::go * ==== Iter = 1 Error = 4.4507e-05
FlowSheet::go * ==== Iter = 2 Error = 2.36391e-05
FlowSheet::go * ==== Iter = 3 Error = 1.25144e-05
FlowSheet::go * ==== Iter = 4 Error = 6.60104e-06
FlowSheet::go * ==== Iter = 0 Error = 0.000101807
FlowSheet::go * ==== Iter = 1 Error = 5.58396e-05
FlowSheet::go * ==== Iter = 2 Error = 3.05214e-05
FlowSheet::go * ==== Iter = 3 Error = 1.66315e-05
FlowSheet::go * ==== Iter = 4 Error = 9.03789e-06
FlowSheet::go * === Iter = 3 Error = 0.00113818
FlowSheet::go * ==== Iter = 0 Error = 4.7135e-05
FlowSheet::go * ==== Iter = 1 Error = 2.49835e-05
FlowSheet::go * ==== Iter = 2 Error = 1.32008e-05
FlowSheet::go * ==== Iter = 3 Error = 6.95082e-06
FlowSheet::go * ==== Iter = 4 Error = 3.64572e-06
FlowSheet::go * ==== Iter = 0 Error = 4.79359e-05
FlowSheet::go * ==== Iter = 1 Error = 2.62928e-05
FlowSheet::go * ==== Iter = 2 Error = 1.43712e-05
FlowSheet::go * ==== Iter = 3 Error = 7.83077e-06
FlowSheet::go * ==== Iter = 4 Error = 4.25523e-06
FlowSheet::go * === Iter = 4 Error = 0.000527527
FlowSheet::go * == Iter = 4 Error = 0.404001
FlowSheet::go * === Iter = 0 Error = 0.00522298
FlowSheet::go * === Iter = 1 Error = 0.00336831
FlowSheet::go * === Iter = 2 Error = 0.0021442
FlowSheet::go * === Iter = 3 Error = 0.00134245
FlowSheet::go * === Iter = 4 Error = 0.000848221
FlowSheet::go * ==== Iter = 0 Error = 0.00443949
FlowSheet::go * ==== Iter = 1 Error = 0.00230355
FlowSheet::go * ==== Iter = 2 Error = 0.00118631
FlowSheet::go * ==== Iter = 3 Error = 0.000606709
FlowSheet::go * ==== Iter = 4 Error = 0.000308074
FlowSheet::go * ==== Iter = 0 Error = 0.000468418
FlowSheet::go * ==== Iter = 1 Error = 0.000235937
FlowSheet::go * ==== Iter = 2 Error = 0.000119176
FlowSheet::go * ==== Iter = 3 Error = 6.17131e-05
FlowSheet::go * ==== Iter = 4 Error = 3.18567e-05
FlowSheet::go * === Iter = 0 Error = 0.0111866
FlowSheet::go * ==== Iter = 0 Error = 0.000794069
FlowSheet::go * ==== Iter = 1 Error = 0.000410385
FlowSheet::go * ==== Iter = 2 Error = 0.000210892
FlowSheet::go * ==== Iter = 3 Error = 0.0001077
FlowSheet::go * ==== Iter = 4 Error = 5.46104e-05
FlowSheet::go * ==== Iter = 0 Error = 0.000315091
FlowSheet::go * ==== Iter = 1 Error = 0.000169959
FlowSheet::go * ==== Iter = 2 Error = 9.3434e-05
FlowSheet::go * ==== Iter = 3 Error = 5.11688e-05
FlowSheet::go * ==== Iter = 4 Error = 2.79274e-05
FlowSheet::go * === Iter = 1 Error = 0.00464974
FlowSheet::go * ==== Iter = 0 Error = 0.00022221
FlowSheet::go * ==== Iter = 1 Error = 0.000116242
FlowSheet::go * ==== Iter = 2 Error = 6.05494e-05
FlowSheet::go * ==== Iter = 3 Error = 3.13904e-05
FlowSheet::go * ==== Iter = 4 Error = 1.6186e-05
FlowSheet::go * ==== Iter = 0 Error = 0.000166717
FlowSheet::go * ==== Iter = 1 Error = 9.16948e-05
FlowSheet::go * ==== Iter = 2 Error = 5.02361e-05
FlowSheet::go * ==== Iter = 3 Error = 2.74272e-05
FlowSheet::go * ==== Iter = 4 Error = 1.49283e-05
FlowSheet::go * === Iter = 2 Error = 0.00209565
FlowSheet::go * ==== Iter = 0 Error = 9.36252e-05
FlowSheet::go * ==== Iter = 1 Error = 4.93416e-05
FlowSheet::go * ==== Iter = 2 Error = 2.59104e-05
FlowSheet::go * ==== Iter = 3 Error = 1.35519e-05
FlowSheet::go * ==== Iter = 4 Error = 7.05618e-06
FlowSheet::go * ==== Iter = 0 Error = 8.36568e-05
FlowSheet::go * ==== Iter = 1 Error = 4.5946e-05
FlowSheet::go * ==== Iter = 2 Error = 2.51392e-05
FlowSheet::go * ==== Iter = 3 Error = 1.3709e-05
FlowSheet::go * ==== Iter = 4 Error = 7.45369e-06
FlowSheet::go * === Iter = 3 Error = 0.000967012
FlowSheet::go * ==== Iter = 0 Error = 4.16932e-05
FlowSheet::go * ==== Iter = 1 Error = 2.20486e-05
FlowSheet::go * ==== Iter = 2 Error = 1.16211e-05
FlowSheet::go * ==== Iter = 3 Error = 6.10238e-06
FlowSheet::go * ==== Iter = 4 Error = 3.19108e-06
FlowSheet::go * ==== Iter = 0 Error = 4.09968e-05
FlowSheet::go * ==== Iter = 1 Error = 2.24993e-05
FlowSheet::go * ==== Iter = 2 Error = 1.2302e-05
FlowSheet::go * ==== Iter = 3 Error = 6.70435e-06
FlowSheet::go * ==== Iter = 4 Error = 3.64316e-06
FlowSheet::go * === Iter = 4 Error = 0.000451902
FlowSheet::go * == Iter = 5 Error = 0.30657
FlowSheet::go * === Iter = 0 Error = 0.0288609
FlowSheet::go * === Iter = 1 Error = 0.0189961
FlowSheet::go * === Iter = 2 Error = 0.0124092
FlowSheet::go * === Iter = 3 Error = 0.00805324
FlowSheet::go * === Iter = 4 Error = 0.0051905
FlowSheet::go * ==== Iter = 0 Error = 0.0334639
FlowSheet::go * ==== Iter = 1 Error = 0.0165799
FlowSheet::go * ==== Iter = 2 Error = 0.00834397
FlowSheet::go * ==== Iter = 3 Error = 0.00422004
FlowSheet::go * ==== Iter = 4 Error = 0.0021325
FlowSheet::go * ==== Iter = 0 Error = 0.0018105
FlowSheet::go * ==== Iter = 1 Error = 0.00098671
FlowSheet::go * ==== Iter = 2 Error = 0.000536567
FlowSheet::go * ==== Iter = 3 Error = 0.000291093
FlowSheet::go * ==== Iter = 4 Error = 0.000157556
FlowSheet::go * === Iter = 0 Error = 0.0180759
FlowSheet::go * ==== Iter = 0 Error = 0.000886264
FlowSheet::go * ==== Iter = 1 Error = 0.000493062
FlowSheet::go * ==== Iter = 2 Error = 0.000279386
FlowSheet::go * ==== Iter = 3 Error = 0.000158283
FlowSheet::go * ==== Iter = 4 Error = 9.21398e-05
FlowSheet::go * ==== Iter = 0 Error = 0.000226939
FlowSheet::go * ==== Iter = 1 Error = 0.000112523
FlowSheet::go * ==== Iter = 2 Error = 5.70516e-05
FlowSheet::go * ==== Iter = 3 Error = 2.88328e-05
FlowSheet::go * ==== Iter = 4 Error = 1.45243e-05
FlowSheet::go * === Iter = 1 Error = 0.00568208
FlowSheet::go * ==== Iter = 0 Error = 0.00039205
FlowSheet::go * ==== Iter = 1 Error = 0.000207388
FlowSheet::go * ==== Iter = 2 Error = 0.000109386
FlowSheet::go * ==== Iter = 3 Error = 5.75183e-05
FlowSheet::go * ==== Iter = 4 Error = 3.01433e-05
FlowSheet::go * ==== Iter = 0 Error = 0.000146809
FlowSheet::go * ==== Iter = 1 Error = 7.84689e-05
FlowSheet::go * ==== Iter = 2 Error = 4.31842e-05
FlowSheet::go * ==== Iter = 3 Error = 2.36649e-05
FlowSheet::go * ==== Iter = 4 Error = 1.29201e-05
FlowSheet::go * === Iter = 2 Error = 0.0021856
FlowSheet::go * ==== Iter = 0 Error = 0.000110025
FlowSheet::go * ==== Iter = 1 Error = 5.80512e-05
FlowSheet::go * ==== Iter = 2 Error = 3.05316e-05
FlowSheet::go * ==== Iter = 3 Error = 1.60014e-05
FlowSheet::go * ==== Iter = 4 Error = 8.35314e-06
FlowSheet::go * ==== Iter = 0 Error = 8.91555e-05
FlowSheet::go * ==== Iter = 1 Error = 4.89409e-05
FlowSheet::go * ==== Iter = 2 Error = 2.676e-05
FlowSheet::go * ==== Iter = 3 Error = 1.45812e-05
FlowSheet::go * ==== Iter = 4 Error = 7.92068e-06
FlowSheet::go * === Iter = 3 Error = 0.000986784
FlowSheet::go * ==== Iter = 0 Error = 3.97436e-05
FlowSheet::go * ==== Iter = 1 Error = 2.10975e-05
FlowSheet::go * ==== Iter = 2 Error = 1.11674e-05
FlowSheet::go * ==== Iter = 3 Error = 5.89237e-06
FlowSheet::go * ==== Iter = 4 Error = 3.09804e-06
FlowSheet::go * ==== Iter = 0 Error = 4.33215e-05
FlowSheet::go * ==== Iter = 1 Error = 2.37596e-05
FlowSheet::go * ==== Iter = 2 Error = 1.29808e-05
FlowSheet::go * ==== Iter = 3 Error = 7.06788e-06
FlowSheet::go * ==== Iter = 4 Error = 3.83683e-06
FlowSheet::go * === Iter = 4 Error = 0.000460734
FlowSheet::go * == Iter = 6 Error = 0.296323
FlowSheet::go * === Iter = 0 Error = 0.023242
FlowSheet::go * === Iter = 1 Error = 0.0154747
FlowSheet::go * === Iter = 2 Error = 0.0102762
FlowSheet::go * === Iter = 3 Error = 0.00679516
FlowSheet::go * === Iter = 4 Error = 0.0044672
FlowSheet::go * ==== Iter = 0 Error = 0.0262985
FlowSheet::go * ==== Iter = 1 Error = 0.0140152
FlowSheet::go * ==== Iter = 2 Error = 0.0073129
FlowSheet::go * ==== Iter = 3 Error = 0.00376249
FlowSheet::go * ==== Iter = 4 Error = 0.00191492

FlowSheet::go * ==== Iter = 0 Error = 5.41243e-06
FlowSheet::go * ==== Iter = 1 Error = 2.50917e-06
FlowSheet::go * ==== Iter = 2 Error = 1.1601e-06
FlowSheet::go * ==== Iter = 3 Error = 5.3507e-07
FlowSheet::go * === Iter = 3 Error = 3.70871e-05
FlowSheet::go * ==== Iter = 0 Error = 1.90823e-06
FlowSheet::go * ==== Iter = 1 Error = 9.77923e-07
FlowSheet::go * ==== Iter = 0 Error = 2.63421e-06
FlowSheet::go * ==== Iter = 1 Error = 1.22372e-06
FlowSheet::go * ==== Iter = 2 Error = 5.66816e-07
FlowSheet::go * === Iter = 4 Error = 2.13456e-05
FlowSheet::go * == Iter = 7 Error = 0.0440292
FlowSheet::go * === Iter = 0 Error = 0.00328668
FlowSheet::go * === Iter = 1 Error = 0.00222143
FlowSheet::go * === Iter = 2 Error = 0.00149036
FlowSheet::go * === Iter = 3 Error = 0.000990923
FlowSheet::go * === Iter = 4 Error = 0.000651657
FlowSheet::go * ==== Iter = 0 Error = 0.00435861
FlowSheet::go * ==== Iter = 1 Error = 0.00192085
FlowSheet::go * ==== Iter = 2 Error = 0.000835296
FlowSheet::go * ==== Iter = 3 Error = 0.000358018
FlowSheet::go * ==== Iter = 4 Error = 0.000150832
FlowSheet::go * ==== Iter = 0 Error = 0.000155106
FlowSheet::go * ==== Iter = 1 Error = 7.18471e-05
FlowSheet::go * ==== Iter = 2 Error = 3.31907e-05
FlowSheet::go * ==== Iter = 3 Error = 1.52967e-05
FlowSheet::go * ==== Iter = 4 Error = 7.03499e-06
FlowSheet::go * === Iter = 0 Error = 0.00117939
FlowSheet::go * ==== Iter = 0 Error = 0.000104297
FlowSheet::go * ==== Iter = 1 Error = 5.51278e-05
FlowSheet::go * ==== Iter = 2 Error = 2.89556e-05
FlowSheet::go * ==== Iter = 3 Error = 1.55022e-05
FlowSheet::go * ==== Iter = 4 Error = 8.26773e-06
FlowSheet::go * ==== Iter = 0 Error = 4.34385e-05
FlowSheet::go * ==== Iter = 1 Error = 2.02355e-05
FlowSheet::go * ==== Iter = 2 Error = 9.39592e-06
FlowSheet::go * ==== Iter = 3 Error = 4.3503e-06
FlowSheet::go * ==== Iter = 4 Error = 2.00906e-06
FlowSheet::go * === Iter = 1 Error = 0.000482317
FlowSheet::go * ==== Iter = 0 Error = 3.68201e-05
FlowSheet::go * ==== Iter = 1 Error = 1.71936e-05
FlowSheet::go * ==== Iter = 2 Error = 7.98522e-06
FlowSheet::go * ==== Iter = 3 Error = 3.6857e-06
FlowSheet::go * ==== Iter = 4 Error = 1.68916e-06
FlowSheet::go * ==== Iter = 0 Error = 2.85811e-05
FlowSheet::go * ==== Iter = 1 Error = 1.3305e-05
FlowSheet::go * ==== Iter = 2 Error = 6.17421e-06
FlowSheet::go * ==== Iter = 3 Error = 2.85715e-06
FlowSheet::go * ==== Iter = 4 Error = 1.31887e-06
FlowSheet::go * === Iter = 2 Error = 0.000271435
FlowSheet::go * ==== Iter = 0 Error = 1.71071e-05
FlowSheet::go * ==== Iter = 1 Error = 7.9627e-06
FlowSheet::go * ==== Iter = 2 Error = 3.68422e-06
FlowSheet::go * ==== Iter = 3 Error = 1.69304e-06
FlowSheet::go * ==== Iter = 4 Error = 7.71906e-07
FlowSheet::go * ==== Iter = 0 Error = 1.58233e-05
FlowSheet::go * ==== Iter = 1 Error = 7.37273e-06
FlowSheet::go * ==== Iter = 2 Error = 3.42409e-06
FlowSheet::go * ==== Iter = 3 Error = 1.58567e-06
FlowSheet::go * ==== Iter = 4 Error = 7.32432e-07
FlowSheet::go * === Iter = 3 Error = 0.000160514
FlowSheet::go * ==== Iter = 0 Error = 1.06396e-05
FlowSheet::go * ==== Iter = 1 Error = 4.8969e-06
FlowSheet::go * ==== Iter = 2 Error = 2.23827e-06
FlowSheet::go * ==== Iter = 3 Error = 1.01489e-06
FlowSheet::go * ==== Iter = 4 Error = 4.55848e-07
FlowSheet::go * ==== Iter = 0 Error = 8.86384e-06
FlowSheet::go * ==== Iter = 1 Error = 4.13319e-06
FlowSheet::go * ==== Iter = 2 Error = 1.92087e-06
FlowSheet::go * ==== Iter = 3 Error = 8.90083e-07
FlowSheet::go * === Iter = 4 Error = 9.62173e-05
FlowSheet::go * == Iter = 8 Error = 0.0370012
FlowSheet::go * === Iter = 0 Error = 0.00404263
FlowSheet::go * === Iter = 1 Error = 0.00273878
FlowSheet::go * === Iter = 2 Error = 0.00184185
FlowSheet::go * === Iter = 3 Error = 0.00122758
FlowSheet::go * === Iter = 4 Error = 0.000809278
FlowSheet::go * ==== Iter = 0 Error = 0.00539286
FlowSheet::go * ==== Iter = 1 Error = 0.00237873
FlowSheet::go * ==== Iter = 2 Error = 0.0010348
FlowSheet::go * ==== Iter = 3 Error = 0.000443611
FlowSheet::go * ==== Iter = 4 Error = 0.000186918
FlowSheet::go * ==== Iter = 0 Error = 0.000186944
FlowSheet::go * ==== Iter = 1 Error = 8.66099e-05
FlowSheet::go * ==== Iter = 2 Error = 4.00169e-05
FlowSheet::go * ==== Iter = 3 Error = 1.84455e-05
FlowSheet::go * ==== Iter = 4 Error = 8.48447e-06
FlowSheet::go * === Iter = 0 Error = 0.0014189
FlowSheet::go * ==== Iter = 0 Error = 0.000128461
FlowSheet::go * ==== Iter = 1 Error = 6.79084e-05
FlowSheet::go * ==== Iter = 2 Error = 3.56825e-05
FlowSheet::go * ==== Iter = 3 Error = 1.91268e-05
FlowSheet::go * ==== Iter = 4 Error = 1.02062e-05
FlowSheet::go * ==== Iter = 0 Error = 5.19586e-05
FlowSheet::go * ==== Iter = 1 Error = 2.421e-05
FlowSheet::go * ==== Iter = 2 Error = 1.12439e-05
FlowSheet::go * ==== Iter = 3 Error = 5.20702e-06
FlowSheet::go * ==== Iter = 4 Error = 2.40522e-06
FlowSheet::go * === Iter = 1 Error = 0.000581021
FlowSheet::go * ==== Iter = 0 Error = 4.50914e-05
FlowSheet::go * ==== Iter = 1 Error = 2.10509e-05
FlowSheet::go * ==== Iter = 2 Error = 9.77417e-06
FlowSheet::go * ==== Iter = 3 Error = 4.51023e-06
FlowSheet::go * ==== Iter = 4 Error = 2.06645e-06
FlowSheet::go * ==== Iter = 0 Error = 3.45317e-05
FlowSheet::go * ==== Iter = 1 Error = 1.60771e-05
FlowSheet::go * ==== Iter = 2 Error = 7.46158e-06
FlowSheet::go * ==== Iter = 3 Error = 3.45337e-06
FlowSheet::go * ==== Iter = 4 Error = 1.59432e-06
FlowSheet::go * === Iter = 2 Error = 0.000327149
FlowSheet::go * ==== Iter = 0 Error = 2.07127e-05
FlowSheet::go * ==== Iter = 1 Error = 9.64834e-06
FlowSheet::go * ==== Iter = 2 Error = 4.46776e-06
FlowSheet::go * ==== Iter = 3 Error = 2.0549e-06
FlowSheet::go * ==== Iter = 4 Error = 9.37791e-07
FlowSheet::go * ==== Iter = 0 Error = 1.91464e-05
FlowSheet::go * ==== Iter = 1 Error = 8.92209e-06
FlowSheet::go * ==== Iter = 2 Error = 4.14417e-06
FlowSheet::go * ==== Iter = 3 Error = 1.91939e-06
FlowSheet::go * ==== Iter = 4 Error = 8.86708e-07
FlowSheet::go * === Iter = 3 Error = 0.000193274
FlowSheet::go * ==== Iter = 0 Error = 1.28933e-05
FlowSheet::go * ==== Iter = 1 Error = 5.93782e-06
FlowSheet::go * ==== Iter = 2 Error = 2.71589e-06
FlowSheet::go * ==== Iter = 3 Error = 1.23238e-06
FlowSheet::go * ==== Iter = 4 Error = 5.5401e-07
FlowSheet::go * ==== Iter = 0 Error = 1.07271e-05
FlowSheet::go * ==== Iter = 1 Error = 5.00263e-06
FlowSheet::go * ==== Iter = 2 Error = 2.32525e-06
FlowSheet::go * ==== Iter = 3 Error = 1.07761e-06
FlowSheet::go * ==== Iter = 4 Error = 4.98105e-07
FlowSheet::go * === Iter = 4 Error = 0.000116705
FlowSheet::go * == Iter = 9 Error = 0.0423777
FlowSheet::go * == Iter = 0 Error = 0
FlowSheet::go * = Iter = 6 Error = 0.301806
FlowSheet::calculate * Switch to simultaneous computation
SolverNleRecipes::solve * 0 2.29361e+11 max residual: 656089 in :OC:RX:duty
SolverNleRecipes::solve * 1 1.57242e+11 max residual: 531349 in :OC:RX:duty
SolverNleRecipes::solve * 2 3.88336e+10 max residual: 228785 in :OC:RX:duty
SolverNleRecipes::solve * 3 3.99066e+07 max residual: 8593.83 in :OC:RX:duty
SolverNleRecipes::solve * 4 7593.69 max residual: 120.155 in :OC:RX:duty
SolverNleRecipes::solve * 5 150.632 max residual: 17.2677
SolverNleRecipes::solve * 6 165.926 max residual: 13.9506
SolverNleRecipes::solve * 7 5241.79 max residual: 97.8797 in :SC:netDuty
SolverNleRecipes::solve * 8 358222 max residual: 814.586 in :SC:netDuty
Libpf::User::Case::calculateSync * Computation complete with 68 errors and 4 warnings
Libpf::User::Case::calculateSync * Updating results to persistent storage
Libpf::User::Case::calculateSync * Updated results to persistent storage
Libpf::User::Case::exportOds * The content.xml file exists and will be overwritten
Il processo è terminato con codice di uscita 37049
Il nodo 37049 è stato aperto

WOW ! that’s a LOT of messages !

I told you! tell me if you find something :0

1 Like

That’s interesting.

In the initial part (the sequential convergence history) you may notice that there is a changing number of equal signs before Iter, i.e. there are lines with just one equal sign, as :

FlowSheet::go * = Iter = 0 Error = 5.56203

then there are a few more with two equal signs:

FlowSheet::go * == Iter = 0 Error = 0.948944

then three:

FlowSheet::go * === Iter = 0 Error = 0.346466

and finally the vast majority of lines which have four equal signs:

FlowSheet::go * ==== Iter = 0 Error = 0.0979991

The number of equal signs is an indication of the depth of the sequential iteration. As I wrote above, in sequential mode recycles + specifications within sub-flowsheets are solved before the higher-level flowsheet is solved, so that convergence loops are nested.

In your case there are four nested loops !

Iterations with one equal sign are converging the top-level recycles + specifications i.e. for the ngfccc model, recycle streams S03 (Medium pressure steam) and S10 (FC anode recycle) and the 7 additional equations you can find in the ngfccc::makeUserEquations function.

If we filter the very long trace you sent me (and which I have saved in a text file aa.txt) for iterations of the top-level loop using this command:

grep ' = Iter ' aa.txt 

this is what we get:

FlowSheet::go * = Iter = 0 Error = 5.56203
FlowSheet::go * = Iter = 1 Error = 0.543895
FlowSheet::go * = Iter = 2 Error = 0.378556
FlowSheet::go * = Iter = 3 Error = 0.403907
FlowSheet::go * = Iter = 4 Error = 0.432508
FlowSheet::go * = Iter = 5 Error = 0.370366
FlowSheet::go * = Iter = 6 Error = 0.301806

as you can see, convergence of the top-level loop is linear, slow and steady. It’s stopping at the 7th iteration because that’s set in ngfccc::sequential (code simplified a bit):

int ngfccc::sequential(void) {
  return 7;
};

The simultaneous part on the other hand is very short:

FlowSheet::calculate * Switch to simultaneous computation
SolverNleRecipes::solve * 0 2.29361e+11 max residual: 656089 in :OC:RX:duty
SolverNleRecipes::solve * 1 1.57242e+11 max residual: 531349 in :OC:RX:duty
SolverNleRecipes::solve * 2 3.88336e+10 max residual: 228785 in :OC:RX:duty
SolverNleRecipes::solve * 3 3.99066e+07 max residual: 8593.83 in :OC:RX:duty
SolverNleRecipes::solve * 4 7593.69 max residual: 120.155 in :OC:RX:duty
SolverNleRecipes::solve * 5 150.632 max residual: 17.2677
SolverNleRecipes::solve * 6 165.926 max residual: 13.9506
SolverNleRecipes::solve * 7 5241.79 max residual: 97.8797 in :SC:netDuty
SolverNleRecipes::solve * 8 358222 max residual: 814.586 in :SC:netDuty
Libpf::User::Case::calculateSync * Computation complete with 68 errors and 4 warnings

You can see that the max residual (error) goes down very quickly at the beginning, then it flattens around 150-200 then goes up again and … boom ! it fails.

To summarize, we have very long number of sequential iterations, where the top-level loop has a linear, slow and steady convergence behavior. This is very common: in general, the sequential resolution is very slow, but stable and safe.

The simultaneous resolution is typically faster, but very sensitive to the starting point. The trick we use is to get an incomplete solution from the sequential solver (by limiting its maximum iterations to 7 in this case), and pass it over to the simultaneous solver to complete.

But here the simultaneous resolution fails, which could be due to the low quality of the incomplete solution it uses as starting point. Often making the sequential phase a bit longer makes the estimate for all unknowns that are passed to the simultaneous phase much better, and that helps.

So yes, this is a situation where increasing iterations as you suggest could help: it’s worth trying.

Go ahead and increase the maximum number of sequential iterations for the top level loop as set in ngfccc::sequential from 7 to something higher (such as 20) and give it a try.

Expect an even longer running time, but since the sequential resolution is only attempted once (when the flowsheet is calculated for the first time) that will not affect successive calculations. Anyway to make it faster, you might want to switch to the release build (if you cant’ figure how to do that, just ask).

Also you’ll get an even longer list of messages ! But next time please just post the iterations of the top-level loop using the grep command above to filter it !

If all this did not help, there are other thing we can try but we’ll discuss those only if required: this reply is already quite long !