What's new in LIBPF 0.8

Summary of improvements with LIBPF 0.8

LIBPF 0.8 was released on 2008/09/22, 7 months and about 300 changes after release 0.7 (2008/02/20). Apart from the usual bug-fixing the key improvements are:

  • User interface:

    • Portability: LIBPF UI is now based on Qt Cross-Platform Application Framework 4, Open Source Edition (previously, the Microsoft .NET framework); consequently it now runs under Windows 2000 - Vista, Apple OSX 10.2 - 10.5 and Linux (tested: Debian Etch) - see announcement;

    • Internationalization: the User Interface is available in English, French, German, Italian and Portuguese;

    • Open source LIBPF UI: the source code of LIBPF UI is distributed under an Open Source license (GPL version 2);

    • Problem configuration editing, limited to selected integer variables: allows interactively turning on and off additional equations and recycles;

    • Usability: added a PFD (Process Flowsheet Diagram) tab with clickable items;

    • Workflow: user can now retrieve existing cases, create new cases, save cases from within the User Interface;

  • Calculation kernel:

    • Database connectivity: the Database connectivity options for LIBPF expand beyond LIBPF ODBC, to cover SQLite website, a public domain embedded transactional SQL database engine - see announcement;
    • Open Standards: exporting the stream results to the ODF (Open Document Format for Office Applications) 1.0 file format as a Spreadsheet Document, allows easier access using a variety of office productivity suites: OpenOffice, StarOffice by Sun Microsystems, Lotus Symphony by IBM and the upcoming Microsoft Office 2007 Service Pack 2 (SP2) - see announcement;
    • Reliability: the calculation kernel now issues warnings or errors on less and more severe flowsheet-level mass imbalances;

In the following you can find the complete list of detailed changes from version 0.7 to version 0.8 for the calculation kernel and for the user interface.

List of changes for the calculation kernel

  • genflashNX::estimateNow
  • fix dummy::calculate to use PH when first pass also in simultaneous mode
  • remove print_connectivity call from multistage::maketables (pure virtual error)
  • QTBL::insert use SQLPREPARE / SQLBindParameter to maximise precision
  • phase::setequimolar, setequimass, setpure, setimpure; stream_VL::spanPAflash(nsteps, i)
  • stream_VL_ideal::estimateNow; stream_VLe_ideal::estimateNow
  • tighten eps in NLEauto::test to 1e-9
  • fix flash::computealfaminmax and clipbetweenalfaminmax
  • add call to computealfaminmax in stream_VL::estimate and stream_VLS::estimate
  • stream_VL::spanPAflash
  • alfa out-of-range correction in flash::calculate_RRG_residual is substracted/added
  • in stream::testPTflash and testPHflash T range narrowed
  • remove pseudo-random perturbation in stream::testPHflash
  • clipbetweenalfaminmax in stream_VL and stream_VLS::estimate
  • do not VLtest with setimpure if components[i]->isSolid()
  • improve flash convergence: flashbase, stream_VL, stream_VLS::clip_
  • catch errors in stream::testPTflash, testPHflash and stream_VL::testPAflash
  • global variables Pmin, Pmax
  • increase precision in Quantity::print_
  • setpure and setimpure check number of components; diagnostic improvements
  • improve robustness in flash::calculate_RRG_residual
  • complete redesign of stream tests
  • removed stream::testFlashes; added stream_VL::testPurePAflash
  • in multihx sequential, estimate outlet streams' temperatures based on inlet streams and outletApproaches if option==“Ts”
  • reduce diagostic noise from multiReaction::calculate
  • virtual flowsheetBase::supports_simultaneous
  • enthalpy flow imbalance is possible if there is an energy input/putput froa unit so this check is now deactivated by default
  • overall mass flows are checked for gross imbalance (error) and for finer imbalance (warning)
  • enableAssignment vector was deallocated by std::vector destructor called in compiler-generated flowsheetBase destructor, but item in Is stayed there so modelBase::~modelBase would go and try to delete it again
  • flowsheetBase::~flowsheetBase and provided code to delete from Is any element which is a pointer to an element of a std::vector<Ilong>
  • remove redundant Tphase->h*Tphase->AMW
  • include as optional code to verifying the solution and the derivatives
  • issue errors on flowsheet-level enthalpy/mass imbalance
  • perform overall mass balances in dummy (source and sink)
  • stream::setFlash uses molar enthalpy / entropy
  • introduce molar-based phase::H and S
  • in column, initial estimates for cut streams; column1
  • add test target
  • initialize streams to be cut in multistage::setup
  • update unit tests
  • compute dutycold in hx::calculate_residuals
  • improved error reporting for errorFC
  • do not zero-pad indices
  • flowsheetBase::disableAssignments and flowsheetBase::enableAssignments; improve descriptions for
  • enableAssignment in flowsheetBase::enableAssignments
  • simplified sequentialassembly::makeAssignment using default arguments
  • added functionality to deactivate individual assignemnts via enableAssignment and nAssignments
  • fix assignment
  • genericphase::{h,s}mol{v,l,s}_
  • UOMarrayGen<T>::tostring and ::print print “invalid unit” rather than kmol^2147483647 rad^2147483647 A^2147483647 m^2147483647 cd^2147483647 kg^2147483647 K^2147483647 s^2147483647
  • various diagnostic improvements
  • move makesequentialassembly and makeuserassembly from flowsheet to flowsheetBase
  • check uom of destination in Quantity::operator= with valuetype arg
  • improve diagnostic and fix const args in calculate_singlephase_split
  • improved diagnostic in NLEbase::verifysolution and fixed max index calculation in NLEbase::solve
  • milden error reporting in reactionYield::calculate
  • improved diagnostic, especially in stream::Htot; do not reset_errors() in stream::calculate
  • completely intialize tear streams
  • calculate estimated recycles as feed streams to the flowsheet before cutting to exploit the information supplied by user
  • stream_LS_ideal
  • diagnostic enhancements, call copy_hetero(inletstream, outSplit[i]) in splitter::calculate
  • several diagnostic enhancements, fix logic to skip enthalpy calculation for cut or PH streams in stream::calculateX, copy_hetero factor
  • stream::copy_hetero with optional factor parameter
  • stream_*::calculate_residuals takes also NULL as argument
  • heatVapor_dummy enhancements
  • J/kmol/K
  • diagnostic refinement in NLEauto::test
  • calculate with three arguments
  • handle NaN error return code from line search
  • substract cid to all catalog ids print_dot
  • several options for drive_ algorithm in flash::calculate_RRG_residual
  • clip alfa between 0 and 1 in stream_VL::estimate, stream_VL::estimateNow, stream_VLS::estimate reset errors in flowsheet::calculate in sequential modular mode
  • fix compressor flashmode
  • fix compilation with gcc
  • multistage::setup and multistage::cutstreamname
  • fix modelBaseInterface::print_ods to print out xml-compliant contents.xml even if some type names contain brackets
  • use stream_VLe_ac<NRTL1> in column, increase stages and number of iterations
  • column separation with NRTL
  • instantiate and register multistage<genflashNX<stream_VLe_ac<NRTL1> >, genflashNX<stream_VLe_ac<NRTL1> >, stream_VLe_ac<NRTL1>
  • use more tolerance in detecting unfeasible phase fractions in stream::calculateXnoflash; avoid division by zerowhen
  • calculating enthalpy of zero stream in stream::HtotN
  • add zero and one globals
  • NRTL1::setA and NRTL1::setB increase assert checks
  • deltah to compute heat of reactions
  • NRTL::test and fix NRTL convergence problems
  • fixed NLEauto::test
  • fixed cos sparse derivative
  • fixed cos and fabs derivativesActive::sin and cos; instantiate Active<double>:: friends
  • stream_VLe_ac
  • factored out stream_ac: streamAc.[cc,hpp]
  • move pof to stream_ideal, stream_ac, stream_eos
  • sin, cos support with derivatives
  • improve print_ods
  • use only stream_L
  • modelBaseInterface::print_ods
  • genflash::resizeReactionList
  • replaced Q.cc include with streamlined main function
  • improved diagnostic in stream::calculateXnoflash
  • fixed missing copy_hetero
  • fixed genflash::addReaction
  • vertex<2,3>
  • improved diagnostic in smaller::operator()
  • vertex<4,2>
  • fixed timing stuff
  • genflash::addReaction
  • added timing for insert into persistency operation
  • fixed problem with updating the number of errors and warnings after a recalc
  • implemented persistency::tc for sqlite
  • fixed parent ids and offsets
  • added DESCRIPTION, PARENT, UOM, INPUT, OUTPUT; fixing insert
  • first test with persistency_SQLite
  • removed Object type; split persistency_sqlite.cc and .hpp
  • implemented modelBase::insert, update and constructor with new persistency
  • completed transition to persistency_item; updated some properties
  • updated constructors
  • modelBaseInterface::CATALOGID now is persistent_item_interface::id_
  • modelBaseInterface : virtual public persistent_item_interface
  • updated Jamfile and Doxyfile.* to include types.*
  • add ohm*m resistivity unit
  • proton sofc: Resistivity electrolyte correlation;
  • if SQLExecDirect executes a searched update or delete statement that does not affect any rows at the data source, the call to SQLExecDirect returns SQL_NO_DATA
  • databaseODBC::purge should not throw an errorODBC then
  • fix modelBaseInterface::del command
  • fixed databaseODBC::purge to habdle TC table
  • added ID argument to databaseODBC
  • added save, purge, calculate, delete, new commands to Q.cc
  • changed return type of modelBase::insert and fixed parentid field
  • moved common stuff in Q.cc; updated ILong::set to set_var where necessary
  • bound properly in QTBL::update and insert
  • override estimateNow in stream_VS and stream_LS
  • move code to zero inertfraction and fluidfraction from stream_XXX::calculate_residuals to
  • flashbase::calculate_inertsolids
  • fix TRIM synthax in Access ODBC
  • fixed set_vals
  • fix datasource name for Linux
  • updated all main() functions to use “CATALOG::instance().tc();” and not to output HTML and XML files
  • trim strings read from database
  • purge TC before CATALOG
  • fix gcc error: extra qualification CATALOG:: on member tc
  • transitive closure
  • widen buffers
  • stream::calculateX should be virtual, phase::calculateX not
  • fixed call to fillkvl in flash::setFlash_
  • fix postgres underflow
  • include iostream to avoid gcc invalid use of incomplete type
  • included types.cc, UtfConverter.ccp and ConvertUTF.c in Jamroot
  • fixed parent_ in case it is not initialized
  • fixed a duplicate parent_ member in Quantity
  • moved parentID from ITBL to PARENT field in CATALOG
  • Pointer type
  • renamed Ilong::I to I_ and String::S to S_
  • fixed String by removing TAG, ID, DESCRIPTION and making S private
  • renamed Ilong::set to set_val
  • Qdouble, Ilong and String are derived from persistent_item
  • factor out types.cc .hpp; added stuff to convert between UTF-8 and UTF-16
  • removed GID from ITBL, STBL, QTBL
  • max residual diagnostic in NLEbase::solve
  • vertex<3,2> and flowsheet<vertex<3,2> >
  • enhanced model::print to give it a chance to print at least the name of a Qs, Is, Ss, Os pointer that has gone astray
  • modified stream_VLS constructor to avoid screwing up the Qs[“phases[0].fraction”] and Qs[“phases[1].fraction”] already set up by stream_VL constructor
  • genericphase::reset and modified stream::calculateXnoflash and copy_hetero to handle zero streams;
  • stream_VLS::stream_VLS makes phases[2].fraction;
  • genericphase::reset and documented getphase
  • differentiate between flash and flashbase; stream_VLS is derived from streaam_VL
  • adapted for documentation generation on Linux
  • force instantiation of flowsheet<vertex<4, 3> > and of vertex<4, 3>
  • force instantiation of template class flowsheet <many_two>
  • added properties svn:keywords and svn:eol-style; removed useless stuff; updated Jamroot
  • genflashNX <stream_LSe_ideal>
  • kg/d and g/d
  • fixed insert in QTBL to user the SQL compliant keywords TRUE and FALSE
  • fixed purge to use countRows; inverted arguments for countRows to allow for default argument value for ID
  • changed table names and login to support Postgres on Linux Debian Etch
  • use iODBC rather than unixodbc on Linux
  • eliminate reference to TCHAR
  • fixed gcc 4.1 error: extra qualification NRTL:: on member
  • moved gmm include files in a subfolder.

List of changes for the user interface<

  • fix showGenericMessage; MainWindow::purge_ clears first, then purges
  • fix crash in OpenDialog when user does not select any row
  • verified fr translation
  • fix crash in OpenDialog::okClicked when table_existing->rowCount == 0
  • reverted order of errorMessage and flag in MainWindow’s statusBar; MainWindow::showSuccessMessage needs not be a slot;  MainWindow::finished to interpret negative error codes as errors; updated versions
  • avoid Multiple Instances of the Application
  • update GUI during purge and delete
  • differentiate temporary messages from status/error messages in status bar, add green/red led
  • port to Qt 4.4.1; fix URL for opening streamtable.ods
  • open_ods calls doods external program
  • simplify MainWindow::reset_, fix MainWindow::calculate_, MainWindow::open_xls and MainWindow::delete to use root_node
  • TreeWindow::root_node
  • add open_xls_main node argument
  • also look up locale in settings
  • remove now useless stuff from hierarchy constructor
  • hide PFD tab after clearing
  • QWidget *SvgWindow::view
  • new EditableSqlModel::, EditableIntSqlModel::clear all setQuery to empty string
  • pt, fr, de trasnlations - first versions
  • MainWindow::types_file and build_newdialog; fix MainWindow::selectkernel to handle missing trailing slash
  • cleaner xls icon
  • fixed delete and purge to access kernel; implemented selectkernelAction and selectkernel
  • open_xls Win32 implementation
  • Updated license text and about UIPF; implemented open_xls in Win32; do not show xlsAction on non-Win32
  • implement open_ods
  • improve error reporting
  • handle empty active_kernel; always use “/” as directory separator: Qt will translate the paths to conform to the underlying operating system
  • ods and xls actions; still need to implement MainWindow::open_ods slot
  • fix path to svg files
  • lock types selection in NewWindow nd if there is only one, to avoid calling kernel with empty type specification !
  • NewDialog::lock_type
  • NewDialog::index
  • load types.txt
  • about and aboutQt Help menu commands
  • MainWindow::highlight_ and fix empty lines in messages window
  • added main window icon; set the application icon on OSX and on Windows
  • TreeWindow::refresh
  • relaod tree and tables whenever the user changes the toggle child option
  • fix filtering by totalclosure to inlcude also current node for root node
  • fixed translations and use Itbl_ enums wherever possible
  • add Config tab to modify enableAssignments
  • clear after deleting or purging
  • fixed gcc warning “In constructor EditableSqlModel::EditableSqlModel extraFilter_ will be initialized after child_"; fixed error in EditableTable
  • sql query for Linux
  • table.cpp:29: warning: when initialized here
  • add lens icon
  • MainWindow::run toggleTC
  • EditableSqlModel::toggle_child and TableWindow::toggle_child
  • TreeWindow::type
  • revive Qmcfc
  • do not write registry setting, just read; MainWindow::reset_and calculate_ dirty workaround
  • duplicate actBase, NRTL, NRTL1
  • genflashNX<stream_VLe_ac<NRTL1> >, multistage<genflashNX,stream_VLe_ac<NRTL1> >, stream_VLe_ac<NRTL1>, column
  • add sez200, sez300, vertex<4,2> and flowsheet<vertex<4,2>>
  • fix Q_WS_WIN
  • remover stray initialization
  • uncrustify, update revision, hide diagnostic message
  • mac port to OSX 10.2 and Qt 4.1.4 tested
  • implement sqlite
  • added comments, readme, license; modified to compile against Qt 4.1.4; renamed hierarchy.h
  • clean up and uncrustify
  • include latest code from Dmytro Skrypnyk
  • updated kernel path and filename in Win32
  • new view menu, toolbars, icons…
  • add icons
  • add icons folder
  • fix EditableSqlModel::go to store current node and use it in refresh
  • updated phase icon
  • simplify messages tab and use color codes for warnings and errors
  • TreeWindow::rootnode_ and fix root button returning to node 0
  • Messages tab
  • hide ID column
  • colorize items in tree according to the number of errors and/or warnings
  • fix update sql synthax for Access; also update complete tag with user-input tag
  • arranged OpenDialog vertically for consistency with NewDialog
  • added tag and description editable text fields and rearranged NewDialog
  • added filter to avoid “<” and “>” characters in filenames
  • call XmlData::clear in SvgWindow::openFile
  • linked SvgWindow::select signal to TreeWindow::force_go_relative, hidden debug stuff
  • merged in sd2k “clickable svg widget in Qt” alpha deliverable
  • merged in sd2k “clickable svg widget in Qt” alpha deliverable
  • minot
  • fixing OpenDialog::table_existing
  • add table in OpenDialog
  • fixed OpenDialog
  • added cancel button in NewDialog
  • add proper NewDialog
  • improved menus
  • OpenDialog::update_list_existing ignores argument and is public; reload list of existing cases
  • whenever OpenDialog is executed
  • translate Qt libraries
  • enable run menus after loading existing case
  • update table headers after refresh
  • make output table read-only
  • implemented very rough editable table
  • fix MainWindow::openExisting to just open results and not start run
  • fix compilation with Qt 4.1 for compatibility with OSX 10.2
  • settings is a pointer; MainWindow and TreeWindow::showpfd
  • disable run, reset and update actions initially
  • hide PFD tab initially
  • MainWindow::updateLog optional highlighting
  • TreeWindow::set_current_node
  • show completetag in tree root node
  • don’t go(0) when starting; inly go after 1-st run
  • TreeWindow::force_go emits showpfd
  • highlight lines with " . Iter” and “solve” in messages window
  • OpenDialog shows list of saved cases
  • store type description in hierarchy
  • fixed svg location in Win32
  • build OpenDialog::list based on data in hierarchy
  • test types for derivation from flowsheet<zero_zero> to populate the
  • OpenDialog::list ComboBox; implemented hierarchy::is_a_strict; set
  • working directory in Linux
  • added OpenDialog::addItem and moved initialization of OpenDialog::list
  • from OpenDialog constructor to MainWindow constructor
  • minor
  • added unknown method; included flowsheet types from Qijhe and Qgianluca;
  • added support for multireactions
  • included multireaction icon in resources
  • added icon for multireaction types
  • fixed some GPF when the tree is empty
  • show descriptions rather than type named is OpenDialog drop-down list
  • added OpenDialog
  • added static PFD page with zoomable view
  • fix again for ACCESS
  • fixed substring in Postgresql
  • do not show ID column in Table
  • strip leading part of the path
  • add TableWindow::strip;simplify TableWindow::TableWindow by calling go()
  • fixed for ACCESS which requires the INNER keyword in JOINs
  • fixed const char * warning; use transitive closure to filter RGS table view
  • and fix again for Win32
  • fix on Linux
  • switch from QSqlTableModel tp QSqlQueryModel
  • tabbed right hand side
  • added input/output filter
  • public treewindow::current_node and expandThis
  • also read standard error; capture QProcess::started signal; fix running on windows;
  • launch kernel, automatically reload results
  • added lower messages bar, process object
  • made “Up” key response more intuitive
  • set icons
  • Streams and Units subfolders are now created for all flowsheets,
  • including nested flowsheets
  • creates Units and Streams folders
  • implemented 90% of icons in tree view
  • added class hierarchy stuff
  • fixed “QSqlQuery::value: not positioned on a valid record” error if retention database is empty.