Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open fixes 240117 #177

Merged
merged 3 commits into from
Feb 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 48 additions & 13 deletions Documentation/003_models/unit_screen.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,25 +11,53 @@ Screen unit is designed for classification of input material into two fractions
:align: center


In Dyssol, 4 models are available to describe the screen grade efficiency:
There are several models available to describe the screen grade efficiency:

- Plitt's model
- Molerus & Hoffmann model
- Probability model
- Teipel / Hennig model
- :ref:`sec.units.screen.plitt`
- :ref:`sec.units.screen.molerus_hoffmann`
- :ref:`sec.units.screen.probability`
- :ref:`sec.units.screen.teipel_hennig`

In the following figure, several grade efficiency curves for different parameters of separations sharpness are shown.

.. note:: This figure only applies to the Plitt's model and Molerus & Hoffmann model.

.. image:: ../static/images/003_models/splitter-alpha.png
:width: 500px
:alt: splitter
:alt: splitter-alpha
:align: center

|

.. _label-screenPlitt:
The output mass flows are calculated as follows:

.. math::

\dot{m}_{out,c} = \dot{m}_{in}\sum\limits_{i}G(x_i)w_{in,i}

.. math::

\dot{m}_{out,f} = \dot{m}_{in}\left(1-\sum\limits_{i}G(x_i)w_{in,i}\right)


.. note:: Notations:

+------------------------------+------------------+-----------------------------------------------------------------------------------------------------------------------------+
| Symbol | Units | Description |
+==============================+==================+=============================================================================================================================+
| :math:`\dot{m}_{out,c}` | [kg/s] | Mass flow at the coarse output |
+------------------------------+------------------+-----------------------------------------------------------------------------------------------------------------------------+
| :math:`\dot{m}_{out,f}` | [kg/s] | Mass flow at the fine output |
+------------------------------+------------------+-----------------------------------------------------------------------------------------------------------------------------+
| :math:`\dot{m}_{in}` | [kg/s] | Feed mass flow |
+------------------------------+------------------+-----------------------------------------------------------------------------------------------------------------------------+
| :math:`G(x_i)` | [kg/kg] | Grade efficiency: mass fraction of material of size class :math:`i` in the feed that leaves the screen in the coarse stream |
+------------------------------+------------------+-----------------------------------------------------------------------------------------------------------------------------+
| :math:`w_{in,i}` | [kg/kg] | Mass fraction of material of size class :math:`i` in the feed |
+------------------------------+------------------+-----------------------------------------------------------------------------------------------------------------------------+


.. _sec.units.screen.plitt:

Plitt's model
^^^^^^^^^^^^^
Expand All @@ -43,9 +71,9 @@ This model is described using the following equation:

.. note:: Notations applied in the models:

:math:`G(x_i)` – grade efficiency: mass fraction of material within the size class :math:`i` in the feed (:math:`\dot{m}_{i,input}`) that leaves the screen in the coarse stream (:math:`\dot{m}_{i,coarse}`)
:math:`G(x_i)` – grade efficiency

:math:`x_{cut}` – cut size of the classification model in meter
:math:`x_{cut}` – cut size of the classification model

:math:`\alpha` – sharpness of separation

Expand Down Expand Up @@ -73,6 +101,8 @@ This model is described using the following equation:

|

.. _sec.units.screen.molerus_hoffmann:

Molerus & Hoffmann model
^^^^^^^^^^^^^^^^^^^^^^^^

Expand All @@ -85,7 +115,7 @@ This model is described using the following equation:

.. note:: Notations applied in the models:

:math:`G(x_i)` – grade efficiency: mass fraction of material within the size class :math:`i` in the feed that leaves the screen in the coarse stream
:math:`G(x_i)` – grade efficiency

:math:`x_{cut}` – cut size of the classification model

Expand Down Expand Up @@ -115,6 +145,8 @@ This model is described using the following equation:

|

.. _sec.units.screen.probability:

Probability model
^^^^^^^^^^^^^^^^^

Expand All @@ -127,7 +159,7 @@ This model is described using the following equation:

.. note:: Notations applied in this model:

:math:`G(x_i)` – grade efficiency: mass fraction of material within the size class :math:`i` in the feed that leaves the screen in the coarse stream
:math:`G(x_i)` – grade efficiency

:math:`x_i` – size of a particle

Expand Down Expand Up @@ -155,23 +187,26 @@ This model is described using the following equation:


.. seealso::

Radichkov, R.; Müller, T.; Kienle, A.; Heinrich, S.; Peglow, M.; Mörl, L.: A numerical bifurcation analysis of continuous fluidized bed spray granulation with external product classification, Chemical Engineering and Processing 45, 2006, pp. 826–837.

|

.. _sec.units.screen.teipel_hennig:

Teipel / Hennig model
^^^^^^^^^^^^^^^^^^^^^

This model is described using the following equation:

.. math::

G(x_i) = \left( 1- \left( 1 + 3 \cdot \left( \dfrac{x_i}{x_{cut}} \right)^{\left(\dfrac{x_i}{x_{cut}} + \alpha \right)\cdot \beta} \right)^{-1/2} \right) \cdot (1 - a) + a
G(x_i) = \left( 1- \left( 1 + 3 \cdot \left( \dfrac{x_i}{x_{cut}} \right)^{\left(\dfrac{x_i}{x_{cut}} + \alpha \right)\cdot \beta} \right)^{-1/2}\right) \cdot (1 - a) + a


.. note:: Notations applied in the models:

:math:`G(x_i)` – grade efficiency: mass fraction of material within the size class :math:`i` in the feed that leaves the screen in the coarse stream
:math:`G(x_i)` – grade efficiency

:math:`x_{cut}` – cut size of the classification model

Expand Down
2 changes: 1 addition & 1 deletion Documentation/004_development/models_development.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1494,7 +1494,7 @@ Now you need the following steps:

``THoldupToCoarse`` – to transform holdup into the output of coarse material. All elements NOT on diagonal are zero. The value :math:`1-G(x_i)` of classe :math:`i` locates at position :math:`(i,i)`.

Here also fractions of mass streams of coarse and fines outlets must be calculated according to the grade efficiency :math:`G(x_i)`. The :ref:`screen unit of Plitt's model <label-screenPlitt>` can be used as a reference.
Here also fractions of mass streams of coarse and fines outlets must be calculated according to the grade efficiency :math:`G(x_i)`. The screen unit of :ref:`sec.units.screen.plitt` can be used as a reference.

- Copy the holdup to the output streams: copy all parameters of the holdup into the both outlet streams using function ``CopyFromHoldup`` and set their new mass flows, calculated by the :abbr:`DAE (Differential-algebraic equation)` solver in ``_pVars[2]``. This calculated mass must be previously scaled according to the grade efficiency :math:`G(x_i)`.

Expand Down
5 changes: 3 additions & 2 deletions DyssolInstallers/Documentation/build_docs.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@ if ($env:PROCESSOR_ARCHITEW6432 -eq "AMD64") {
exit $lastexitcode
}

# remove old install directory
Remove-Item -Recurse -Force $install_path -ErrorAction Ignore
# remove old build and install directory
Remove-Item -Recurse -Force $build_path\doc -ErrorAction Ignore
Remove-Item -Recurse -Force $install_path\share\Dyssol\docs -ErrorAction Ignore

# create build and install directories
if (!(Test-Path $build_path)) {
Expand Down
6 changes: 4 additions & 2 deletions ModelsAPI/BaseStream.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1605,7 +1605,8 @@ void CBaseStream::SaveToFile(CH5Handler& _h5File, const std::string& _path)
m_grid.SaveToFile(_h5File, _h5File.CreateGroup(_path, StrConst::H5GroupDistrGrid));

// overall properties
_h5File.WriteData(_path, StrConst::Stream_H5OverallKeys, E2I(MapKeys(m_overall)));
// NOTE: template argument deduction for E2I does not work here for msvc 19.24 and lower, therefore - explcicite argument
_h5File.WriteData(_path, StrConst::Stream_H5OverallKeys, E2I<EOverall>(MapKeys(m_overall)));
const std::string groupOveralls = _h5File.CreateGroup(_path, StrConst::Stream_H5GroupOveralls);
size_t iOverall = 0;
for (auto& [type, param] : m_overall)
Expand All @@ -1615,7 +1616,8 @@ void CBaseStream::SaveToFile(CH5Handler& _h5File, const std::string& _path)
}

// phases
_h5File.WriteData(_path, StrConst::Stream_H5PhaseKeys, E2I(MapKeys(m_phases)));
// NOTE: template argument deduction for E2I does not work here for msvc 19.24 and lower, therefore - explcicite argument
_h5File.WriteData(_path, StrConst::Stream_H5PhaseKeys, E2I<EPhase>(MapKeys(m_phases)));
const std::string groupPhases = _h5File.CreateGroup(_path, StrConst::Stream_H5GroupPhases);
size_t iPhase = 0;
for (auto& [state, phase] : m_phases)
Expand Down
3 changes: 2 additions & 1 deletion ModelsAPI/MultidimensionalGrid.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -448,7 +448,8 @@ void CMultidimensionalGrid::SaveToFile(const CH5Handler& _h5File, const std::str
// number of grid dimensions
_h5File.WriteAttribute(_path, StrConst::DGrid_H5AttrGridsNum, static_cast<int>(m_grids.size()));
// grid types for all dimensions
_h5File.WriteData(_path, StrConst::DGrid_H5GridType, E2I(GetGridsTypes()));
// NOTE: template argument deduction for E2I does not work here for msvc 19.24 and lower, therefore - explcicite argument
_h5File.WriteData(_path, StrConst::DGrid_H5GridType, E2I<EGridEntry>(GetGridsTypes()));
// save each grid dimension
for (size_t i = 0; i < m_grids.size(); ++i)
switch (m_grids[i]->GridType())
Expand Down
Loading