What's new in LIBPF 0.7

Summary of improvements with LIBPF 0.7

LIBPF 0.7 was released on 2008/02/20, 15 months and about 400 changes after release 0.6 (2006/11/28).

The key improvements are:

  • Solid-vapour-liquid streams with inert solid phase: LIBPF now supports performing mass balances of processes comprising solid streams, with separate accounting of the solid phase so that it does not interfere with the equilibria of the fluid phases;

  • Native implementation for the Non-Random Two Liquids (NRTL) activity coefficient model: users can compute vapor-liquid equilibria of highly non-ideal, polar mixtures without the need for an external thermo engine;

  • Sparse linear solver: during the simultaneous resolution of large flowsheet LIBPF now uses T.A. Davis’ multifrontal  LU code CSparse (a Concise Sparse Matrix package, see this link ) to solve the large-size linear system;

  • Automatic sequencing for sequential resolution of flowsheets: if the user does not manually select the streams to tear to decyclify a cyclic flowsheet, LIBPF now has an euristic algorithm that recusively eliminates all cycles automatically;

  • Support for parallel execution on multicore workstations, (based on the OpenMP standard): if the calculation kernel is executed on a workstation with Symmetric Multiprocessing (SMP), either multicore or multiprocessor, it can arrange for the residuals calculations to be efficiently spread across the processing units;

  • Biomass components defined in terms of elemental analisys and Lower Heating Value (LHV): helps in the formulation of bionass gasification and pyrolysis processes, by enabling to define a generic component on the base of its C-H-N-O elemental (i.e. atomic) composition and thermochemical properties.

This is the complete list of detailed changes:

  • fixed multiReaction_SOFC to have proton conduction and changed resitivity data from Jamsak2007.pdf to Browning2002;

  • psofc0 is now 1D distributed parameters;

  • introduced psofc0::Vset and corresponding makeuserassembly machinery to equalize the potential;

  • call compute_reaction_equilibria_ in multhx::calculate even if option==“z”;

  • proton-conducting Solid Oxide Fuel Cell: multiReaction_SOFC and psofc0;

  • factored out multiReaction_electrochemical;

  • added mm, um and ohm*cm units;

  • making 2D sensitivity more robust;

  • silenced calculate_onepass;

  • fixed pure virtual function being called from many_many constructor;

  • fix update for oracle database;

  • enhance assert in dummy::attach to handle in1, in2, out2 …;

  • added NTHREADS argument to taskgraph::do_schedule and fixed parallelize;

  • add move command line argument;

  • removed taskgraph::operator<<;

  • extracted taskgraph::acquire_upstream_locks and taskgraph::release_downstream_locks;

  • to fix for flowsheet-in-flowsheet, pass level to do_schedule and parallelize;

  • moved call to do_schedule from taskgraph::calculate_onepass to flowsheetBase::calculate;

  • renamed taskgraoh::doit_ to core_calculate_onepass and simplified diagnostic;

  • moved supertaskgraph::findnodes_ to taskgraph;

  • renamed supertaskgraph to flowsheetBase;

  • updated addcut synthax;

  • incremented revision in multi;

  • dummy::attach double checks that no out stream is connected to a sink and no in stream to a source;

  • added task.cc and task.hpp;

  • edgeBase is also a precedence, vertexBase is also a task;

  • taskgraph and tasklist;

  • refactored flowhseet;

  • updated Doxyfiles ad Jamroot;

  • moved MAKEILONG(NITER_NLEflash to stream constructor;

  • fixed stream::testPHflash, testPTflash, testPAflash;

  • NRTL1 and NRTL2, stream_VL_AC working and tested;

  • we do not need a dependency on google sparsetables at the moment;

  • spiralling sensitivity sensitivity_ndot_p;

  • flowsheet::myof_;

  • protect flowsheet::calculate_local_residuals from embedded objective function with 0 size;

  • virtual modelBaseInterface::estimateNowis implemented in flowhseet, stream and compressor only;

  • compressor::Tis;

  • typo in hx::calculate_local_residuals;

  • hx::maxduty default value must be different from zero to avoid division by zero when the dutyhot unknown is initialized the first time in setup_of when restoring from persistency;

  • in hx and multihx scale according to the actual maxduty or minT,maxT values;

  • migrate from compute_scaling and compute_scaling_ to setup_of: gensep, compressor,genflash, genflashN1, genflashNX, hx,multihx, flowhseet;

  • initialize neqs_ and nofs_ in flowsheet::flowsheet;

  • removed mcfc::compute_scaling; moved repeat_unit from Q.cc to usermodels.cc;

  • added mcfc::zO2 and zCO2; reduced verbosity in mcfc::calculate;

  • diagnostic trimming in repeat_unit::calculate;

  • diagnostic trimming in sequentialassembly::makeassignment and in flowsheet::compute_scaling;

  • simpler diagnostic in NLEbase::solve;

  • removed typo in multihx documentation;

  • modelBaseInterface::unsetInput;

  • call unsetInput from within flowsheet::addcut to remove torn streams estimates from input variables list;

  • removed setup.hpp and updated paths;

  • silence flowsheet::compute_scaling but report variable list;

  • work around bug #98;

  • added mcfc error if Javg is out of bounds;

  • streamlined multiReaction pressure handing = bug #58;

  • multiReaction_MCFC::kinetic option;

  • silence jacobian::backslash;

  • fixed bug in multoReactionMCFC::calceqconst;

  • silenced printProfile in mcfc::calculate;

  • repeat_unit::calculate can call stream::copy_homo since inside and outside stream have same type per repeat_unit::attach;

  • enhanced repeat_unit::attach to give a proper tag to inside stream copy;

  • made stream::copy_hetero and copy_homo from copyflash;

  • fix gcc 4.0 error “there are no arguments to ‘readtables’ that depend on a template parameter”;

  • made repeat_unit::factor persistent;

  • added repeat_unit::type_ and type();

  • fixed repeat_unit:: which would bypass the postprocessing;

  • fix repeat_unit::attach which would not register with the correct port (as modified by the host unit’s attach method);

  • stream::operator/=;

  • fixed repeat_unit::calculate and removed test stuff;

  • made cut__in_ and out_ private; provided accessors in() and out(); removed dummy constructor;

  • cleanup and draft repeat_unit;

  • redesign to support more targets;

  • remove setup.hpp; split usermodels.cc and setup.hpp stuff into Qxxxx.cc files;

  • fix gcc 4 compilation;

  • NLEbase::verifysolution;

  • genflashNX<stream_VLe_ideal>;

  • added PSA::option for recovery mode;

  • icon for gensep where appropriate (gensep2.png does not exist anymore);

  • make “drive” logic handle negative/positive residuals correctly in flash::calculate_RRG_residual;

  • reset_errors in stream::calculate;

  • added Tcold hx::option;

  • genflashNX<stream_VLe_ideal>;

  • do not swap cold/hot streams in hx if potential temperature swap detected - just issue warning;

  • do not reset errors in flowsheet:calculate;

  • stream_VLSe_ideal::testPT and spanPTflash enhancement;

  • reshaped drive algorithm in flash::calculateRRGresidual;

  • removed eosFlash::cost_;

  • restored diagnostic in NLEbase::solve;

  • improve dummy error checking;

  • moved fluidx_ from stream_VLSe_ideal to stream_VLS;

  • flash::clip_, drive_ and clipbetweenalfaminmax;

  • enhancements to stream_VLS::estimate;

  • improve mcfc convergence in J mode;

  • scale mre->z in mcfc::makeuserassignments;

  • flowsheet::compute_scaling also prints scaling mode;

  • do not print flowpattern in multistage2D::maketables;

  • scaler::tostring;

  • modelBaseInterface::runtime_;

  • moved flowsheet stuff from Q.cc to graph.cc;

  • moved reactionC2H6_Ref and reactionC2H6_Ref_Eq from Q.cc to usermodels.cc;

  • moved testJacobian from Q.cc to test.cc;

  • included CSparse library;

  • fixed automatic cutting of streams;

  • fixed several leaks in jacobian;

  • automatic sequencing;

  • support sparse jacobians;

  • clearderivatives does not destroy sparsity structure;

  • edgeBase::weight;

  • implementing smarter initialization strategy for mcfc;

  • call mcfcd3s::resampleprofile from main;

  • VJp mode in mcfc::option;

  • mcfc option = Jp;

  • implemented multiReaction_MCFC::option = J in multihx;

  • multiReaction_MCFC::Jset and J option;

  • mcfcd3s::duty0 and duty1;

  • Jresprocol and generalized mcfcd3s::resampleprofile;

  • added mA/cm2 unit of measurement;

  • read mcfcd3s output even if executable not found (help testing under Linux);

  • mcfcd3s::readvector_ to read in the current density profile; profile resampling prototype;

  • spline;

  • fixed randomdouble;

  • changed tolerances and maximum iterations in NLEbase::lsqrdriver;

  • changed behaviour when maximum iterations are exceeded in NLEbase::solve;

  • limit elements of residual vector printed for diagnostic purposes to 10;

  • added buffer to normalize Jacobian columns in NLEbase;

  • fix column normalization;

  • fix error reporting for exceeded number of iterations in lsqrdriver;

  • scale jacobian;

  • avoid lsqrdriver to overwrite F;

  • set the initial guess for LSQR to zero;

  • improved NLEbase::mat_vec_prod to exploit sparsity for mode == 1;

  • update of_FADOO::operator() implementations;

  • NLEbase::Jsparse and LSQR;

  • of_FADOO::operator() interface changed to support Jsparse;

  • fixed option=VJ in mcfc;

  • matrix_inversion_in_place_Jacobi_ and associated vectors sol_ and y_;

  • fixed mcfcd3s massbal;

  • changed kinetic expression in multiReaction_MCFC;

  • added upFlowPattern and rightFlowPattern <2,1> <2,2> <4,2> <8,3> <8,4> <8,8>;

  • added VJ mcfc::option;

  • moved stuff from mcfc::setup to calculate;

  • fixed mcfcd3s::calculate;

  • ST1x1 ST4x3 ST8x6 ST16x12;

  • mcfcd3s will run in dummy mode if no executable is found rather than bouncing out;

  • flowsheet::makeVertex and makeEdge check for duplicate names;

  • errorIC update in components;

  • rightFlowPattern and upFlowPattern for 4x3, 8x6, 16x12;

  • errorIC improvement;

  • enhance convergence in mcfc when option=J;

  • fixed spawn::calculate to call copyflash;

  • mcfcd3s enhancements: does not call readoutmcfc_ if MCFC D3S executable failed, fixed conv2, made more silent, if option=J reads actual Javg from outmcfc.dat;

  • highlight nested sequential modular iterations;

  • reactionC2H6_Ref and reactionC2H6_ref_Eq;

  • mcfcd3s::filename String;

  • added portable (POSIX) test of existance of MCFC D3S executable; MCFC D3S executable must be in current path;

  • added call to _searchenv in mcfcd3s::calculate;

  • errorRT;

  • flowsheet::seqTol;

  • mcfcd3s reads z and I results from outmcfc.dat;

  • modelBase::tag_xml completeTag_xml;

  • mcfc::Voffset;

  • NLEbase::solve does not call jacobian2bmp;

  • removed printprofile commands from multiStage2D::calculate;

  • fixed flaw in mcfc::setup that would invalidate pressure drops;

  • moved ObjectFactory from graph.hpp to models.hpp;

  • moved compressor from multi to othermodels;

  • compressor::Wb to Wm and cleaned up descriptions;

  • gather to look at ndot and not at mdot;

  • calling copyflash for multistage1D outlets;

  • reaction mass unbalance warning message in multix only triggered when overall mass balance is broken, not when broken for individual streams (to allow for mass transfer or electrochemical reactions);

  • calling copyflash for multistage2D outlets;

  • fixed keycomponent in reaction reactionC2H6_TC;

  • silence bmp_io::jacobian2bmp;

  • added mass unbalance check after computing reaction conversions in genflash, hx and multihx;

  • renamed modelBase::print_html_new to print_html;

  • restored minimal solver diagnostic during simultaneous flowsheet resolution;

  • global LIBPFversion string;

  • fixed bug #69 by modifying modelBase::print_html_new;

  • registered stream_LSe_ideal in register_models;

  • fixed “member “multiReaction<N>::type_ [with N=2]” cannot be instantiated – it has been explicitly specialized” warnings from intel compiler;

  • removed stream:.setFlash with 5 arguments;

  • fixed error message in of_FADOO::packResults_;

  • fixed bug #95;

  • fixed doxygen comments in modelBaseInterface::MakeQdouble etc;

  • fix bug #94; fix retruning temporary warning in strem_VL and stream_VLS::fraction;

  • plateau and convergence on deltax issue warning and not error in stream and genflash;

  • fixed typo in NLEbase message;

  • restored correct sign for the WGS equilibrium constant;

  • fix stream::calculateX that would overwrite P when fm == PA;

  • added diagnostic in of_FADOO1::packResults_ to check if the sum of the absolute values of the derivatives of an equation is nonzero;

  • flash::Fraction interface changed;

  • fixed “singular matrix, type 2” and “flash convergence failure” error messages in PA flash;

  • added new stream::getphaseid; stream_{V_,L_,S_,VL,VLS,VS,LS}::Fraction;

  • fixed phasesplit;

  • split off stream::calculateXnoflash;

  • renamed multimixer to mixer; renamed multisplitter to splitter;

  • multistage::stage renamed to stagename;

  • multistage::stream renamed to streamname;

  • multistage2D::stage renamed to stagename;

  • multistage2D::stream renamed to streamname;

  • stream::copyflash;

  • multistage2D::calculate and multisplitter::calculate to call stream::copyflash;

  • removed splitter and migrated to multisplitter;

  • fixed genflash::estimate_;

  • changed interface to hx::calculate_approaches;

  • various fixes to hx and multihx;

  • improve error reporting from NLE_base::matrix_inversion_in_place and solve;

  • try not to calculate_local_residuals once more in of_FADOO1::unscalex;

  • skip RRG residual computation when the fluid phases are missing in stream_VLSe_ideal;

  • improved diagnostic in stream::calculateX and in flowsheet::calculate_local_residual;

  • properly set the local flash variables in stream::setFlash;

  • do not discard errors encountered in Jacobian computation in flowsheet::calculate;

  • detect and try to fix degenerate equations in flowsheet::calculate_local_residual;

  • try to not scale pressure equations by diving by P0;

  • removed Active::nonzero; Active::dernorm;

  • avoid building massbalancemode and flashmode from string in stream::CalculateFeed;

  • active::inactivated;

  • in splitter::calculate and multisplitter::calculate, setFlash and estimate outlet streams;

  • in genflashNX::maketables set parent and tag of embedded splitter;

  • rearranged flash private variables;

  • renamed stream::setStreamFlash setFlash; flash::setFlash_ sets fm_, pid_, Tset_ …;

  • stream::setFlash family of member functions set P, T .. then call flash::setFlash_;

  • in stream::calculateX, set phases[0].fraction only if VL flash is underway;

  • in stream::CalculateFeed_ and FlashFeed_ account for flashmode::SA;

  • in stream::Fraction return alfa_ only if VL flash is underway;

  • don’t use val() in flash::calculate_flashmode_residual and calculate_pressure_residual;

  • avoid flashing outlets in phasesplit - setFlash and estimate instead;

  • improved diagnostic in of_FADOO::prepare_ and packResults_;

  • default argument for stream_VL, stream_VLS, stream_VS, stream_LS constructors;

  • merged flashsolver into stream;

  • moved solveFlash to stream; use Pres and Temp as local arguments variables in flash members;

  • added leaner fillkvl interfaces; added Flash::Fraction to access the current estimates of the flash fractions during flash convergence;

  • flash::estimate takes Pres and Temp and is virtual so that it can be overridden by stream_VL and stream_VLS;

  • stream_V_, stream_L_, stream_S_, stream_VL, stream_VLe, stream_VLS, stream_VLSe, stream_VS, stream_VSe, stream_LS, stream_LSe inherit virtually from stream;

  • of_FADOO::settagof; flowsheet::addcut sets parent property for added stream;

  • flash phasesplit outlets; check duty and deltas convergence in genflash;

  • fixed bug #91;

  • enhanced modelBase::reset_errors to recursively reset errors in embedded models;

  • enhanced of_FADOO::prepare_ diagnostic;

  • initialize to NULL parent_ in Quantity, Ilong, String;

  • fixed stream_VLSe_ideal::solveFlash;

  • revamped of_FADOO::print;

  • Qdouble:: String:: and Ilong:: parent_ and completeTag;

  • initialize fluidvaporfraction_ in stream_VLSe_ideal;

  • added strict check on setActive;

  • removed spurious setInactive call in amix and bmix;

  • modelBase::printFull;

  • enhanced error return codes from NLEbase::solve; NLEbase::message and convergence error reporting;

  • return derivative info in enthalpy-related properties;

  • model::copynonembedded_ and copyembedded_ are public;

  • model::errors and warnings;

  • splitter resets errors on entry;

  • splitter and multisplitter check compatibility of phases;

  • reactionYield issues better error messages when the conversion is bound;

  • stream::calculateX checks boundedness of phase fractions, and its sum;

  • stream::CalculateFeed_ supports flashmode PA;

  • genericphase::id_ and id(); stream_VLSe_ideal uses fluidvaporfraction_ as unknown;

  • stream_VLSe_ideal::spanPTflash; fixed reactionC_WG and reactionCHNO_9;

  • fixed errorFC message; NLEbase::print_settings; NLEauto::test(j);

  • gather by-passes empty streams;

  • gensep::calculate, multimixer::calculate appropriately set error if the outlet stream convergence fails;

  • reactionC_WG;

  • stream:LS, stream_LSe, stream_LS_ideal, stream_LSe_ideal;

  • fixed Bug#: 89 “can not set PA flash for feed stream”;

  • reactionC_TC; reactionC2H6_TC;

  • genflashNX<stream_VLSe_ideal>;

  • constructor for reactive hx with reaction list;

  • register & instantiate genflashNX<stream_VLSe_ideal>;

  • reengineered and moved compressor from othermodels.cc and othermodels.hpp to multi.cc and multi.hpp;

  • added support for compressor in simultaneous mode;

  • added a dynamically allocated compressor::isentropic stream object;

  • consolidated genflashN_VL and genflashN_VS into genflashNX;

  • compressor::Wfis

  • moved compressor from usermodels.cc and usermodels.hpp to othermodels.cc and othermodels.hpp

  • genflashN_VS

  • stripped away from quantity.cc and quantity.hpp any dependence on boost

  • stream_VS_ideal

  • stream_S_ and stream_S

  • fixed bug with phasesplit::calculate and explicit phases

  • baseComponent and pure::Vc and Zc

  • enhanced estimation of fractional conversion in genflash

  • singled out a reactionYield::estimate;

  • fixed equilibriumReaction::calculateKIstWert against zero molar flows;

  • fixed equilibriumReaction::calculate_residual

  • moved code from genflash, hx and nultihx to equilibriumReaction::calculate_residual

  • fixed bug #67

  • fixed gcc error: object missing in reference to ‘of_FADOO::xp_’ or error: ‘xp_’ was not declared in this scope

  • fixed highest temperature limit for bkk_parameter;

  • expose NLEbase &solver() from all models derived from or embedding an NLEbase: flowsheet, flashsolver, genflash, hx, multihx;

  • support constructing a genflashN1 with the list of reaction names;

  • created appropriate makeVertex overload; catch errors in modelBaseInterface::makeEmbedded;

  • made NLEbase::ALF, TOLX, MAXITS, TOLF, TOLMIN, STPMX and DECAY protected;

  • allow user to tweak and query convergence parameters: NLEbase::set_tolerances, set_maximum_iterations, set_maximum_stepsize, set_decay, maxits;

  • moved calculateKSollwert from g() in equilbriumReaction; reactionNH3_synthesis, reactionNH3_synthesis_Eq, reactionN2_oxidation, reactionN2_oxidation_Eq

  • add doxygen configuration file to obtain user-distributable documentation

  • moved phases, findphase, addphase, ptot, calculate_pressure_residual, vphases_, lphases_, sphases_ from flash to stream;

  • equilibriumReaction::calculateKIstWert and calculate_equilibrium take a stream pointer/reference;

  • changed arguments to flash::estimate, calculate_singlephase, calculate_split, calculate_RRG_residual, calculate_flashmode_residual - fixed eosFlah accordingly

  • added printout of revision

  • stream_VLSe_ideal;

  • moved error:.error and ::append from Q.cc to models.cc;

  • fixed errorMB doxygen comments;

  • global Zero and One;

  • flash::calculate_inertsolids;

  • cleaned up error handling, got rid of most std::cerr and exit calls

  • fixed const char problem with gcc

  • enhanced error handling: errorMB, errorNC, errorIC, errorMB, errorDC enhancements, errorUOM extended to unsupported units, errorOF

  • fixed bug with stream::calculateX which would surface with explicit phases;

  • reactionCH4_TC_Eq

  • equilibriumReaction::calculateKIstWert skips solid components

  • pass reference to phase to equilibriumReaction::calculateKIstWert;

  • hence pass pointer to flash to equilibriumReaction::calculate_equilibrium;

  • updated correspondingly calls in genflash, hx and multihx;

  • equilibriumReaction::calculateKIstWert and calculateKSollwert are private;

  • split genflash:: hx:: multihx::compute_reactions_ in compute_reaction_conversions_ and compute_reaction_equilibria_

  • equilibriumReaction::calculate_equilibrium is now within equilibriumReaction, preprocess and postprocess are gone;

  • concrete classes derived from equilibriumReaction should implement calculateKSollwert

  • registered stream_VSe_ideal with Object Factory;

  • stream_VSe_ideal::maketables initializes xp_ and scaler_;

  • adapted stream_VSe_ideal::calculate_residuals originally based stream_VL_ideal;

  • added simple constructor for baseComponent;

  • added isSolid pure virtual method in genericComponent and implemented in concrete classes derived thereof;

  • heatSolid_bkk class for UOM aware version of bkk_group

  • bkk_parameter: Barin-Knacke-Kubachewski single parameter set;

  • bkk_group: assembly of adjacent Barin-Knacke-Kubachewski parameter sets

  • fixed UOM in phase::clearcomposition for massbalancemode::N and M

  • register_models and register_usermodels instead of register_all;

  • multi.hpp does not need to include setup.hpp;

  • moved global variables from usermodels to multi

  • patch tear streams within flowsheets-in-flowsheet failure in simultaneous mode

  • simplified Q.cc: moved sol stuff from Q.cc to setup.hpp and usermodels.cc

  • write Tphase.h=Htot;

  • swap setStreamFlash and calculateX in stream::CalculateFeed_;

  • force calculation of outlet stream in compressor::calculate;

  • do not flash feed streams to flowsheet-in-flowsheet while in simultaneous mode from within dummy:calculate: they get flashed the other way around

  • revert order in multistage2D::printprofile

  • in modelBase::copynonembedded_ do not skip active variables

  • in simultaneous mode, flash feed streams in flowsheet-in-flowsheet only if they are recycles

  • avoid including objective functions for feedstreams to flowsheets-in-flowsheet in the parent flowsheet composite objective function

  • fixed smartenum copy constructor, made values() a virtual member function of base class and values_ a static member of the derived classes

  • gensep pressureDrop fix;

  • genflash pressureDrop fix;

  • genflashN_VL fix;

  • stream::setphase fix;

  • implemented genericphase::operator<<;

  • relaxed asserts in stream::calculateX;

  • tweaked stream::Htot, Stot, HtotN, Rhotot, Cptot to skip a phase with fraction == 0.0

  • gather function;

  • documented pressureDrop;

  • documented duty sign convention in gensep and genflash;

  • removed gensep_::gather_;

  • created gensep::compute_scaling_;

  • cleaned up gensep::calculate, multimixer::calculate and genflash::calculate;

  • removed genflashN1::sum_inlets_;

  • Improvements to multistage2D::printprofile

  • modelBaseInterface::Qs and catalogRAM point to modelBaseInterface - this fixes problem with overwriting parentID while copying outlet streams in multistage2D::calculate; removed mixer;

  • made reset visible from modelBaseInterface;

  • adapted cut constructor arguments

  • it is not allowed to call print_connectivity from within the multistage2D constructor because it invokes completeTag on the vertexes, but this in turn recusrively calls completeTag on the multistage2D itself which due to the yet incomplete construction process is a pure virtual member function

  • streamline mcfc::calculate and mcfc::setup

  • fixed multimixer::calculate;

  • fixed multimixer::calculate to avoid owerwriting outlet streams’ P: sum phases and not streams

  • fixed multistage2D::maketables to avoid split product and feed streams homonimity

  • moved print_xml from modelBase to modelBaseInterface, bug #75;

  • improved diagnostic in flowsheet::print_xml

  • “If deletion through a pointer to a base Base should be allowed, then Base’s destructor should be public and virtual” Sutter, Alexandrescu “C++ Coding Standards” #50

  • delete flop on exit;

  • gensep<N> now supports simultaneous resolution;

  • genflash now supports PA flash and sets correctly alfa in other cases;

  • several diagnostics enhancements

  • avoid Mixing in/out messages fro sale_pepe and mcfcsystem1;

  • included Ts in reults shown in UI for mcfcsystem;

  • added UI results for mcfcsystem1;

  • avoid stream_VL_ideal and ifix outSplit[00] synthax in sale_pepe;

  • enhanced many_many::attach error message;

  • enhanced modelBaseInterface::Q, I, S, O error messages;

  • avoid stream_VL_ideal in mcfcsystem1

  • accepts small deviations for fraction in stream::calculateX;

  • remove any reference to stream_VL_ideal in mcfcsystem

  • pressureDrop does not set the outlet stream pressure (outP) - this is set manually in genflash, hx, multihx only if we are in sequential mode;

  • consequently setFlash(flashmode::PX, P, X) and not out->P;

  • protect against overwriting active variables in stream::calculateX and modelBase::copynonembedded_

  • fixed mixer::calculate and multimixer::calculate: require a stream::calculate after SolveFlash;

  • avoid annoying “Mixing in/out with inXX/outXX mode” warnings in mcfcsystem

  • phase::operator*= implemented, scales flows and leaves specific or adimensional quantities unchanged;

  • phase:operator* does not call calculate but rather operator*=;

  • stream::operator*= calls phase::operator*= on Tphase and on any embedded explicit phase object;

  • fixed stream::HtotN;

  • initialize phases[0].fraction to 1 in single phase stream types such as stream_V_ and stream_L_

  • factored out flash::estimate from flash::setFlash of types 1 and 2, to avoid overwriting active variables when solving simultaneous - streamXY::solveFlash should call flash::estimate before flashsolver:solve_;

  • pure virtual flash::HtotN and StotN, implemented in stream;

  • moved operator= from modelBase to modelBaseInterface;

  • exposed copyembedded_ and copynonembedded_ in modelBaseInterface;

  • stream_V and stream_L::calculate_residuals set the fraction in phases[0]

  • flash::calculate_singlephase

  • enhanced diagnostic in genericphase::hv_;

  • fixed bug in flash::calculate_split, not using correctly clipped alfa_;

  • fixed sign of y in flash::calculate_RRG_residual;

  • renamed flashsolver::solve to solve_;

  • flashsolver::computealfaminmax enhanced;

  • coded stream_ideal::dumpsilo

  • ideal::computealfaminmax;

  • stream::testFlashes, testPAflash, testPHflash,testPTflash

  • fixed construction sequence of stream_VL_ideal, stream_VLe_ideal and stream_VL_eos;

  • removed more pure virtuals

  • avoid calls to pure virtual functions during construction/destruction if mixins

  • setparent;

  • removed modelBase::PATH;

  • modelBase::completeTag now builds dynamically response

  • fixed linking problem due to pure virtual functions being called from the constructors of the mixins

  • major rework of modelBaseInterface derivatives’ construction mechanism

  • got rid of valgrind message “Conditional jump or move depends on uninitialised value(s)”

  • cleaned up MakeEmbedded;

  • removed default constructor where possible (htuntu, reaction…);

  • moved phasesplit before genflash in othermodels.hpp;

  • genflashN1 and genflashN_VL testconnect_, inletstreams_, outletstream?_ stuff

  • instantiate stream_VL_eos <kprrs>; qualify stream_eos<E> in stream_VL_eos constructor

  • factored out stream_V_; stream_V and stream_L are concrete;

  • implemented stream_V

  • added flash::ptot, eosvap, calculate_pressure_residual to support RX flashes;

  • added support for RH RT and SA in setFlash;

  • renamed stream_XYZ_explicit to stream_XYZe;

  • factored out streamIdeal;

  • factored out stream_eos;

  • Q.cc compiles

  • added flashmode RT and SA

  • avoid MSVC issuing: Q.hpp(98) : warning C4244: ‘return’: conversion from ’time_t’ to ’long’, possible loss of data

  • new stream architecture

  • replaces stream * with edgeBase * in many_one, one_many, many_two; removed stream stuff

  • added this-> as required for compiling under gcc

  • factored out flashsolver from stream_VL_ideal; coded stream_VL_eos::calculate_residuals

  • moved T P and setFlash from stream to flash; created a new version of flash::fillkvl without access to the Tphase->x

  • fixed for gcc according to http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30657

  • fixed UOM in heatSolid_dummy::hs, ss, cps

  • removed heatexchanger;

  • added hx::option = “Thot”;

  • calling nonconverged rather than repeatedly delta;

  • genericphase:.setamw;

  • removed stream::Nphases and phase_type;

  • scaler constructor and ::setup take scalingmode by const reference;

  • objective_function::nonconverged

  • bumps out when an UOM error is trapped

  • one_three, two_two, two_one with vertex<N,M>

  • replaced gensep2 and gesep3 with gensep<N>

  • improved genericphase;

  • phases vector in stream;

  • removed phfrac and replaced with phases[].fraction;

  • simplified stream::calculateX interface;

  • moved setphase to stream;

  • newstream prototype interface

  • added flashmode::RH and streamid smartenum

  • renamed genericphase::pt to type

  • genericphase::writephase, amw, rho, .. setp, operator->

  • gensep testconnect_, normalize_, hfluxin_, gather_, calculateFlows_, calculateSplits_

  • gensep<N>

  • added pointer to phase in genericphase

  • genericphases_ vector in streamX and streamVL

  • no need for stream::PAset(P, a)

  • removed 3rd parameter in stream::PHset function call

  • class genericphase

  • streamlined PHflash(void), PSflash(void), RHflash(void)

  • stripped Tbp and Tdp stuff

  • fixed calling phase::calculate(mb) instead calculateX(mb)

  • got rid of 3-args PHflash

  • migrated stream::flashmode and flowmode to smartenums;

  • moved FlashFeed_, CalculateFeed_ and SetFlashFeed_ to the private section of stream

  • removed calculateNx stuff from stream, made private (calculateNx_ in phase)

  • moved CalculateFeed from stream to edgeBase; inlets_ and outlets_ vectors in many_many are edgeBase ; added inletstreams_ and outletstreams_ stream vectors in hx and multihx

  • vertex<M,N> construct, vertex<2,2> tested in hx

  • support smartenums values documentation in doxygen

  • smart enumerators

  • removed heatexchanger_zones; moved vertexbase to models.cc from stream.cc

  • merged idealflash_single into streamX

  • renamed streamVLkprrs to streamVLeos and parameterized with eosBase-type template

  • renamed streamV.cc and streamV.hpp to streamX; introduced streamX class between stream and streamV; added streamL class; switched sale_pepe over to streamL

  • stream::SetFlashFeed is private; moved streamVL and streamVLkprrs::PXset to streamVLbase

  • moved fromTAG, toTAG, fromID, toID, fromPort, toPort, cutsource from stream to edgeBase; removed superfluous flowsheet:.attachinside; phase derives from modelBase and not edgeBase; streamlined flowsheet::makeEdge

  • registered vapor and liquid synonyms for genflash12 and genflashN2

  • improvement to modelBase::print_xml

  • improvements to flowsheet::print_xml

  • restored backwards compatibility with gcc 3.4-1

  • port to SUNDIALS 2.3.0 - IDA 2.5.0

  • compiles with Intel C Compiler 9.0 under Linux

  • moved streamVL::calculateGamma from usermodels.cc to streamVL.cc

  • refactored part of usermodels into test.cc and multi.cc/hpp.