Giter Site home page Giter Site logo

dyssoltec / dyssol-open Goto Github PK

View Code? Open in Web Editor NEW
21.0 8.0 13.0 139.89 MB

System for dynamic flowsheet simulation of solids processes

Home Page: https://dyssoltec.github.io/Dyssol-open/

License: Other

C++ 94.75% Inno Setup 2.47% Batchfile 0.09% CMake 0.91% C 0.48% PowerShell 0.99% Python 0.18% Shell 0.13%
simulation flowsheet flowsheeting solids process

dyssol-open's Introduction

Dyssol

Dyssol is a tool for dynamic flowsheet simulation of complex production processes with advanced treatment of granular materials.

To contact developers, visit dyssoltec.com.

For more information and documentation, check dyssoltec.github.io.

Video intruductions: Basics and Simulation of granulation process.

New versions and updates on our github page.

To cite Dyssol please use the following:

  • Skorych, V., Dosta, M., Hartge, E.-U., Heinrich, S. (2017). Novel system for dynamic flowsheet simulation of solids processes. Powder Technology, 314, 665-679. doi.org/10.1016/j.powtec.2017.01.061.
  • Skorych, V., Dosta, M., Heinrich, S. (2020). Dyssol — An open-source flowsheet simulation framework for particulate materials. SoftwareX, 12, 100572. doi.org/10.1016/j.softx.2020.100572.

Dyssol® is a registered trade mark of DyssolTEC GmbH.

Installation on Windows

Dyssol should install and work on all latest versions of Windows. Requires Visual C++ Redistributable for Visual Studio 2019 to run. To install, run the installer and follow the instructions.

Compilation on Windows

Compilation requirements on Windows

Build on Windows

  • Make sure all programs and tools from the list are installed.
  • Setup Qt Visual Studio Tools extension to point to the installed Qt libraries. In Visual Studio 2019, go to Extensions → Qt VS Tools → Qt Versions → add new Qt version → ... → Navigate in the Qt installation directory to Qt/5.15.0/msvc2019/bin/qmake.exe → rename Version to msvc2019 → OK. Repeat for Qt/5.15.0/msvc2019_64/bin/qmake.exe and rename Version to msvc2019_64.
  • Compile and build external libraries: zlib, HDF5, SUNDIALS, graphviz. To do this, navigate to Dyssol/ExternalLibraries/ and execute file RunAll.bat. It will start building all the required libraries by executing files CompileZLib.ps1, CompileHDF5.ps1, CompileSundials.ps1, CompileGraphviz.ps1. To use the scripts, the following requirements apply: Visual Studio 16 2019, CMake, PowerShell 5.0.
  • Open Dyssol/Dyssol.sln with Visual Studio and build the solution.

Build documentation and installers on Windows

  • Install Doxygen.
  • Install Graphviz, with "add to PATH" option enabled
  • Install MikTeX with packages: amscls, anyfontsize, preview, zhmetrics. With default installation, MikTeX will install the packages on-the-fly during the first build of the documentation (user confirmation may be required).
  • Install required python libraries by running in terminal
py -m ensurepip --upgrade
pip install -U sphinx sphinx-rtd-theme breathe
  • In Visual Studio Solution Explorer go to Installers, right click on the Installer project and choose Build. The built .exe installer locates in Dyssol/DyssolInstallers/Installers.

Also, other versions of Microsoft Visual Studio can be used, but additional preparations may be required:

  • Install build tools for the corresponding Visual Studio.
  • Configure all *.ps1 scripts to use the required version of Visual Studio build tools before running Dyssol/ExternalLibraries/RunAll.bat.
  • If the Models Creator SDK tool is required, files associated with it may need to be updated. They to be found in Dyssol/DyssolInstallers/Data/ModelsCreatorSDK/.

Compilation on Linux

Compilation requirements on Linux

  • gcc-9, g++-9
  • CMake 3.1.0 or higher

Build on Linux

Ubuntu 20/22

cd /path_to_repo
sudo add-apt-repository ppa:gladky-anton/sundials
sudo apt install build-essential cmake libsundials-dev libhdf5-serial-dev libqt5opengl5-dev libgraphviz-dev doxygen python3-sphinx python3-sphinx-rtd-theme python3-breathe texlive-latex-extra
mkdir install
mkdir build
cd build
cmake .. -DCMAKE_CXX_COMPILER=g++ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../install
cmake --build . --parallel
make doc
make install

Debian 12

cd /path_to_repo
sudo apt install build-essential cmake libsundials-dev libhdf5-serial-dev libqt5opengl5-dev libgraphviz-dev doxygen python3-sphinx python3-sphinx-rtd-theme python3-breathe texlive-latex-extra
mkdir install
mkdir build
cd build
cmake .. -DCMAKE_CXX_COMPILER=g++ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../install
cmake --build . --parallel
make doc
make install

The compiled executable file and all the units' libraries will appear in /path_to_repo/install

Code organization

  • BaseSolvers - interfaces for equation solvers
  • CahceHandlers - dynamic data caching
  • Documentation - manuals
  • DyssolCLI - main project for command-line version of Dyssol
  • DyssolGUI - main project for GUI version of Dyssol
  • DyssolInstallers - scripts and data needed to build installers for Windows
  • EquationSolvers - built-in equation solvers based on SUNDIALS library
  • ExternalLibraries - all third-party libraries and scripts to build them
  • GUIDialogs - main GUI components
  • GUIWidgets - auxiliary GUI components and tools
  • HDF5Handler - wrapper for HDF5 library
  • MaterialsDatabase - database of materials
  • ModelsAPI - part of the core components needed to develop units
  • Modules - additional modules
  • PropertySheets - projects settings for Visual Studio
  • SimulatorCore - core components
  • Solvers - all solvers and templates for them
  • Units - all units and templates for them
  • Utilities - auxiliary program components
  • Dyssol.sln - main file of the Visual Studio solution
  • LICENSE - license agreement
  • Materials.dmdb - exemplary database of materials
  • README.md - this file

Installation directory organization

  • Example flowsheets – flowsheet examples
  • Example solvers – source code of solvers (C++)
  • Example units – source code of units (C++)
  • Help – documentation files (pdf)
  • Licenses – information about licenses
  • platforms - Qt libraries to support GUI
  • Solvers – libraries of developed solvers
  • styles - Qt libraries to support GUI
  • Units – libraries of developed units
  • ModelsCreatorSDK – Models Creator tool: template project for Microsoft Visual Studio
  • Dyssol.exe – main executable of Dyssol
  • DyssolC.exe – command-line utility
  • ExampleConfigFile.txt – example configuration file for command-line utility
  • LICENSE - license agreement
  • Materials.dmdb – default materials database
  • Qt5*.dll - Qt libraries to support GUI
  • *.dll - Other external libraries
  • unins000.exe – Dyssol uninstaller

Third-party tools and libraries

dyssol-open's People

Contributors

dostamax avatar gladk avatar learieck avatar lizardzhou avatar vasylskorych avatar ytykhonova avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

dyssol-open's Issues

Throw exceptions in PlotManager

Now, if a unit devepoler makes mistakes when manipulating with plots (trying to add already existing plots, trying to access not existing plots, etc.) via CBaseUnit interface, exceptions are thown. Simulator catches them and notifies the user about the problems. The same should work if the the plots are manipulated explicitly via pointers to plots and curves.

Limits for unit parameters

Add possibility to simply define different limits for unit parameters, like NONNEGATIVE, POSITIVE, open and close intervals

New documentation

Update documentation for all new classes and unit development.
Possibly transfer everything from pdf files to Wiki

Grid Editor

If press OK, application can stuck as if it is thinking. If press apply insted, everything works

Dyssol crashes

If the End siumlation time is larger than certain value Dyssol crashes. The Model was tested on two different devices. With one PC 60 s was the max value, 100 s with the other one.
After Dyssol is closed the fault report in the Linux-terminal looks like this:
Materials.dmdb.zip
anlage_gesamt_nr27_eingang_abschnitt_4.dflw.zip

End siumlation time 100 s:
„terminate called after throwing an instance of 'std::filesystem::__cxx11::filesystem_error'
what(): filesystem error: cannot get file size: No such file or directory [/home/hannesweska/.config/Dyssol/cache/MD_Ku108RcTFzQL6gzgcRjh1.cache]
Aborted (core dumped)“
End siumlation time 90 s:
„terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted (core dumped)"
anlage_gesamt_nr27_eingang_abschnitt_4.dflw.zip
Materials.dmdb.zip

Solids bunker with variable output mass

It would be nice to have a solid bunker whitch considers an external variable Stream and adjust the outputmass of itself.
In addition it is necessary to have an Unit Parameter where you can define the maximum of the throughput to be achieved.

For example fixed maximum throuput at 3 kg/s, with an variable Stream of 2 kg/s so the solid Bunker have to add 1 kg/s.

Dependent unit parameters

Next to time dependent unit parametes add a possibility to define parametes that depend of other values, like coordinate, temperature or just number.

Troubleshooting

Add FAQ/Troubleshooting section to docs with solutions of most common problems, e.g.:

  • Not loaded models
  • Not loaded databases
  • Search and inclusion of developed models

Extend log colors

Print messages from units shown with ShowInfo() in green.
Print system messages in black.

Extend work with solvers

Better integration of DAE and KINSOL solvers in units

  • Build in solvers indo units and hide their interfaces.
  • Automatically add solver settings to GUI.
  • Global settings for max time step for all defined solvers on the flowsheet.
  • Keep track of previous time point.
  • Better indexing of DAE variables, especially distributed ones.

Tests for installed software

Sometimes it is necessary to check the software functionality without having an access to the build folder or source code (Debian autopkgtests for example).

It would be good to have an opportunity to run the tests from the command line of the DyssolC. Something like "DyssolC --test" and it should run the whole cycle of available tests.

Update log during simulation

Put logger into a separate thread to allow showing text printed by ShowInfo()/RaiseWarning() during the long work of a single unit

Units converter

Add converter of measurement units, builtin in all dialogs

Addresssanitizer: alloc-dealloc-mismatch (malloc vs operator delete []) after opening a saved simulation

Dyssol, compiled with AddressSanitizer crashes after opening any saved simulation with the following backtrace:

`=================================================================
==2847510==ERROR: AddressSanitizer: alloc-dealloc-mismatch (malloc vs operator delete []) on 0x602000808650
# 0 0x6344cd in operator delete (/inst-clang-asan/bin/DyssolGUI+0x6344cd)
# 1 0x7fc8e6c06f4a in CH5Handler::ReadData(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, std::allocator<std::__cxx11::basic_string<char, std::char_traits, std::allocator > > >&) const /Dyssol-open/HDF5Handler/H5Handler.cpp:264:3
# 2 0x7fc8e6d2cbfc in CDistributionsGrid::LoadFromFile(CH5Handler&, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&) /Dyssol-open/ModelsAPI/DistributionsGrid.cpp:320:11
# 3 0x7fc8e6e33a30 in CFlowsheet::LoadFromFile_v3(CH5Handler&, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&) /Dyssol-open/SimulatorCore/Flowsheet.cpp:765:9
# 4 0x7fc8e6e321fc in CFlowsheet::LoadFromFile(CH5Handler&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) /Dyssol-open/SimulatorCore/Flowsheet.cpp:696:10
# 5 0x68ebec in CSaveLoadThread::StartTask() /Dyssol-open/DyssolMainWindow/SaveLoadThread.cpp:46:31
# 6 0x7dd940 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (CBasicThread::)()>::call(void (CBasicThread::)(), CBasicThread*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:152:13
# 7 0x7dd878 in void QtPrivate::FunctionPointer<void (CBasicThread::)()>::call<QtPrivate::List<>, void>(void (CBasicThread::)(), CBasicThread*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:185:13
# 8 0x7dd797 in QtPrivate::QSlotObject<void (CBasicThread::)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase, QObject*, void**, bool*) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:418:17
# 9 0x7fc8e5f8a545 (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2e4545)
# 10 0x7fc8e5d70c49 in QThread::started(QThread::QPrivateSignal) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0xcac49)
# 11 0x7fc8e5d72b68 (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0xccb68)
# 12 0x7fc8e588dea6 in start_thread nptl/pthread_create.c:477:8
# 13 0x7fc8e5386dee in clone misc/../sysdeps/unix/sysv/linux/x86_64/clone.S:95

0x602000808650 is located 0 bytes inside of 5-byte region [0x602000808650,0x602000808655)
allocated by thread T36 (QThread) here:
# 0 0x603ecd in malloc (/inst-clang-asan/bin/DyssolGUI+0x603ecd)
# 1 0x7fc8e5b4613f (/usr/lib/x86_64-linux-gnu/libhdf5_serial.so.103+0x29d13f)

Thread T36 (QThread) created by T0 here:
# 0 0x5ee8fa in pthread_create (/inst-clang-asan/bin/DyssolGUI+0x5ee8fa)
# 1 0x7fc8e5d7264a in QThread::start(QThread::Priority) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0xcc64a)

SUMMARY: AddressSanitizer: alloc-dealloc-mismatch (/inst-clang-asan/bin/DyssolGUI+0x6344cd) in operator delete
==2847510==HINT: if you don't care about these errors you may set ASAN_OPTIONS=alloc_dealloc_mismatch=0
==2847510==ABORTING
`

It looks like this part of the code needs attention:

void CH5Handler::ReadData(const std::string& _sPath, const std::string& _sDatasetName, std::vector<std::string>& _vData) const { _vData.clear(); StrType h5Datatype(PredType::C_S1, H5T_VARIABLE); const size_t nElemNum = ReadSize(_sPath, _sDatasetName); if (nElemNum == 0) return; auto** buf = new char*[nElemNum]; if (ReadStrings(_sPath, _sDatasetName, buf)) { _vData.resize(nElemNum); for (size_t i = 0; i < nElemNum; ++i) _vData[i] = buf[i]; } for (size_t i = 0; i < nElemNum; ++i) delete[] buf[i]; delete[] buf; h5Datatype.close(); }

Error in IDASolve, residual function failed

I'm getting the same error for two different flowsheets ("Abschnitt_3.dflw" & "Abschnitt_4.dflw"). The Only difference is the Timepoint at wich it happens. The error occurred after I added the last Timedelay to each flowsheet (Abschnitt_3: "Zeitversatz 03 Nr 20 zu Nr 29"; Abschnitt_4: "Zeitversatz 03 Nr 1.15").
There are two more flowsheets ("Abschnitt_3_ohne_zeitversatz.dflw" & "Abschnitt_4_ohne_zeitversatz.dflw"). Here I left out the last timedelay respectively and they are working fine.

Materials.dmdb.zip
Abschnitt_3.dflw.zip
Abschnitt_4.dflw.zip
Abschnitt_3_ohne_zeitversatz.dflw.zip
Abschnitt_4_ohne_zeitversatz.dflw.zip

Error in IDACalcIC / Dyssol crash

Flowsheet "Abschnitt_2" produces the following problem:
Error! [IDA ERROR] in IDACalcIC: The residual function failed unrecoverably.

If I use only the second or third time delay "Zeitversatz 02 Nr 8" respectively "Zeitversatz 03 Nr 1.01" the simulation is running. However Dyssol keeps crashing during simulation, when they are both, the second and third timedelay defined for the flowsheet ("Abschnitt_2_ohne_zeitversatz"). Fault report in Linux-terminal:
terminate called after throwing an instance of 'std::bad_array_new_length'
what(): std::bad_array_new_length
Aborted (core dumped)

Materials.dmdb.zip
Abschnitt_2.dflw.zip
Abschnitt_2_ohne_zeitversatz.dflw.zip

config.ini issue

If config.ini is not installed properly, it will not be created

Store config.ini

Config is saved now when the program ends. That can lead to the loss of settings in case of crash or kill. Save all settings right after their update.

UI scaling

Problems with scaling in Phases Editor.

Extend state variables

CBaseUnit has now an interface AddStateVariable/GetStateVariable/SetStateVariable to keep track of time-dependent unit variables, in the case when their values calculated at some time point must be available for calulcations at latter time. The interface must be extended to also work with vectors, matrices and, possibly, other types.

CBaseUnit::Require(X)

A function to simplify constructions like

if (!IsPhaseDefined(EPhase::VAPOR))
	RaiseError("Gas phase not defined.");

Possible values for X:

  • Compound key
  • EPhase
  • EDistrTypes
  • ECompoundConstProperties
  • ECompoundTPProperties
  • EInteractionProperties

Interface of solvers

Replace direct access to variables in CreateBasicInfo() with function calls similar to units.

wrong mass flow with simple-shift time delay

The simple-shift time delay creates a wrong mass flow for the streams "Mischung Nr 8 Eingang Abschnitt2+Sieb Nr 22 45/x (2)" and "zerkleinertes Material Nr. 1.01 (2)". Calculation for the following streams seems to be correct ("Siloabzug Nr 4.1" and "Sieb Nr 22 45/x", "Ausgang Abschnitt 2 (Sieb Nr 22 0/45)"). Using norm-based time delays solves the problem.
simpleshift_timedelay
Materials.dmdb.zip
Abschnitt_2.dflw.zip

Let the holdups take values from external file

For our purposes we need a complex way to change a holdup. Let's assume that a large truck is coming each two minutes, putting into the system 40 Tonn of material during 4 seconds.

We would like to generate the text file with fields "Time, Load" etc and it to let it be read by the simulation.

BuildVersion.h is missing in repo

If checkout and try to build on Windows, it cannot find BuildVersion.h file. Needs to be generated on every build or added to the repo.

Segmentation fault after starting an empty simulation

If you do not add any units/streams, the program is crashing with segmentation fault. The program should show an error message, if the main containers in FlowSheet are empty, but without crash and not touching an unitialized memory.

There is an output of the ASAN, which can help to localize the issue.

;

AddressSanitizer:DEADLYSIGNAL

=================================================================
==3721585==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x7f4d6ac94795 bp 0x7fff33e528d0 sp 0x7fff33e52580 T0)
==3721585==The signal is caused by a WRITE memory access.
==3721585==Hint: address points to the zero page.
0 0x7f4d6ac94795 in CTopology::MinSpanningTree(std::vector<std::vector<unsigned long, std::allocator >, std::allocator<std::vector<unsigned long, std::allocator > > > const&) /Dyssol-open/SimulatorCore/Topology.cpp:263:13
1 0x7f4d6ac918da in CTopology::GetTearStreams(std::vector<std::vector<unsigned long, std::allocator >, std::allocator<std::vector<unsigned long, std::allocator > > > const&) const /Dyssol-open/SimulatorCore/Topology.cpp:328:20
2 0x7f4d6ac8fffb in CTopology::Analyse(std::vector<std::vector<unsigned long, std::allocator >, std::allocator<std::vector<unsigned long, std::allocator > > >&, std::vector<std::vector<std::pair<unsigned long, unsigned long>, std::allocator<std::pair<unsigned long, unsigned long> > >, std::allocator<std::vector<std::pair<unsigned long, unsigned long>, std::allocator<std::pair<unsigned long, unsigned long> > > > >&) const /Dyssol-open/SimulatorCore/Topology.cpp:43:26
3 0x7f4d6ac3a413 in CFlowsheet::DetermineCalculationSequence() /Dyssol-open/SimulatorCore/Flowsheet.cpp:231:23
4 0x7f4d6ac3df02 in CFlowsheet::Initializeabi:cxx11 /Dyssol-open/SimulatorCore/Flowsheet.cpp:460:3
5 0x76dfc4 in CSimulatorTab::StartSimulation() /Dyssol-open/GUIDialogs/SimulatorTab/SimulatorTab.cpp:79:43
6 0x774120 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (CSimulatorTab::)()>::call(void (CSimulatorTab::)(), CSimulatorTab*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:152:13
7 0x774058 in void QtPrivate::FunctionPointer<void (CSimulatorTab::)()>::call<QtPrivate::List<>, void>(void (CSimulatorTab::)(), CSimulatorTab*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:185:13
8 0x773f77 in QtPrivate::QSlotObject<void (CSimulatorTab::)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase, QObject*, void**, bool*) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:418:17
9 0x7f4d69d96545 (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2e4545)
10 0x7f4d6b08be31 in QAbstractButton::clicked(bool) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x24fe31)
11 0x7f4d6b08c799 (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x250799)
12 0x7f4d6b08e0ee (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x2520ee)
13 0x7f4d6b08e2c0 in QAbstractButton::mouseReleaseEvent(QMouseEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x2522c0)
14 0x7f4d6afdef9d in QWidget::event(QEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x1a2f9d)
15 0x7f4d6af9f15e in QApplicationPrivate::notify_helper(QObject*, QEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x16315e)
16 0x7f4d6afa604a in QApplication::notify(QObject*, QEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x16a04a)
17 0x7f4d69d5ff69 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2adf69)
18 0x7f4d6afa5075 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer&, bool, bool) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x169075)
19 0x7f4d6aff7000 (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x1bb000)
20 0x7f4d6affa32d (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x1be32d)
21 0x7f4d6af9f15e in QApplicationPrivate::notify_helper(QObject*, QEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x16315e)
22 0x7f4d69d5ff69 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2adf69)
23 0x7f4d6a139582 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) (/usr/lib/x86_64-linux-gnu/libQt5Gui.so.5+0x13d582)
24 0x7f4d6a10f64b in QWindowSystemInterface::sendWindowSystemEvents(QFlagsQEventLoop::ProcessEventsFlag) (/usr/lib/x86_64-linux-gnu/libQt5Gui.so.5+0x11364b)
25 0x7f4d62c257d9 (/usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5+0x697d9)
26 0x7f4d6878fe6a in g_main_context_dispatch (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x51e6a)
27 0x7f4d68790117 (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x52117)
28 0x7f4d687901ce in g_main_context_iteration (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x521ce)
29 0x7f4d69db74be in QEventDispatcherGlib::processEvents(QFlagsQEventLoop::ProcessEventsFlag) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x3054be)
30 0x7f4d69d5e92a in QEventLoop::exec(QFlagsQEventLoop::ProcessEventsFlag) (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2ac92a)
31 0x7f4d69d66b9f in QCoreApplication::exec() (/usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2b4b9f)
32 0x68f04c in main /Dyssol-open/DyssolMainWindow/main.cpp:35:16
33 0x7f4d690bbd09 in __libc_start_main csu/../csu/libc-start.c:308:16
34 0x589e59 in _start (/inst-clang-asan/bin/DyssolGUI+0x589e59)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /Dyssol-open/SimulatorCore/Topology.cpp:263:13 in CTopology::MinSpanningTree(std::vector<std::vector<unsigned long, std::allocator >, std::allocator<std::vector<unsigned long, std::allocator > > > const&)
==3721585==ABORTING`

Partial simultion of flowsheet

Allow to run only selected units form the flowsheet, using results of the previous runs as input data. This can simplify debugging and adjusting of large flowsheets.

Screen with adjustable deck number

It would be nice to have only one screen as selectable unit but with buttons or fields where you can add or remove decks. So then you have only one unittype but with customizable layout.

Plot bug

When creating multiple plots for an unit, changing the scale to logarithmic sometimes makes one or more plots simply disappear, and if the scale gets set back to standard, x and y axis limits are often changed from its initial values.

Mass flows of components

Add features to GUI and CLI to show/export mass streams of each particular component (in addition to mass fractions)

Enhanced plotting

  • Easier setting of limits in plots.
  • Keep plot config when changing plots.

Add caching

Implement caching for CTimeDependentValue

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.