| svZeroDSolver
    | 
Valve (tanh) block. More...
#include <ValveTanh.h>
| Public Types | |
| enum | ParamId { RMAX = 0 , RMIN = 1 , STEEPNESS = 2 } | 
| Local IDs of the parameters.  More... | |
| Public Member Functions | |
| ValveTanh (int id, Model *model) | |
| Construct a new ValveTanh object. | |
| void | setup_dofs (DOFHandler &dofhandler) | 
| Set up the degrees of freedom (DOF) of the block. | |
| void | update_constant (SparseSystem &system, std::vector< double > ¶meters) | 
| Update the constant contributions of the element in a sparse system. | |
| void | update_solution (SparseSystem &system, std::vector< double > ¶meters, const Eigen::Matrix< double, Eigen::Dynamic, 1 > &y, const Eigen::Matrix< double, Eigen::Dynamic, 1 > &dy) | 
| Update the solution-dependent contributions of the element in a sparse system. | |
|  Public Member Functions inherited from Block | |
| Block (int id, Model *model, BlockType block_type, BlockClass block_class, std::vector< std::pair< std::string, InputParameter > > input_params) | |
| Construct a new Block object. | |
| ~Block () | |
| Destroy the Block object. | |
| Block (const Block &)=delete | |
| Copy the Block object. | |
| std::string | get_name () | 
| Get the name of the block. | |
| void | update_vessel_type (VesselType type) | 
| Update vessel type of the block. | |
| void | setup_params_ (const std::vector< int > ¶m_ids) | 
| Setup parameter IDs for the block. | |
| void | setup_dofs_ (DOFHandler &dofhandler, int num_equations, const std::list< std::string > &internal_var_names) | 
| Set up the degrees of freedom (DOF) of the block. | |
| virtual void | setup_model_dependent_params () | 
| Setup parameters that depend on the model. | |
| virtual void | setup_initial_state_dependent_params (State initial_state, std::vector< double > ¶meters) | 
| Setup parameters that depend on the initial state. | |
| virtual void | update_time (SparseSystem &system, std::vector< double > ¶meters) | 
| Update the time-dependent contributions of the element in a sparse system. | |
| virtual void | post_solve (Eigen::Matrix< double, Eigen::Dynamic, 1 > &y) | 
| Modify the solution after solving it. | |
| virtual void | update_gradient (Eigen::SparseMatrix< double > &jacobian, Eigen::Matrix< double, Eigen::Dynamic, 1 > &residual, Eigen::Matrix< double, Eigen::Dynamic, 1 > &alpha, std::vector< double > &y, std::vector< double > &dy) | 
| Set the gradient of the block contributions with respect to the parameters. | |
| virtual TripletsContributions | get_num_triplets () | 
| Get number of triplets of element. | |
| Public Attributes | |
| TripletsContributions | num_triplets {5, 0, 3} | 
| Number of triplets of element. | |
|  Public Attributes inherited from Block | |
| const int | id | 
| Global ID of the block. | |
| const Model * | model | 
| The model to which the block belongs. | |
| const BlockType | block_type | 
| Type of this block. | |
| const BlockClass | block_class | 
| Class of this block. | |
| VesselType | vessel_type = VesselType::neither | 
| Vessel type of this block. | |
| const std::vector< std::pair< std::string, InputParameter > > | input_params | 
| Map from name to input parameter. | |
| std::vector< Node * > | inlet_nodes | 
| Inlet nodes. | |
| std::vector< Node * > | outlet_nodes | 
| Outlet nodes. | |
| bool | steady = false | 
| Toggle steady behavior. | |
| bool | input_params_list = false | 
| Are input parameters given as a list? | |
| std::vector< int > | global_param_ids | 
| Global IDs for the block parameters. | |
| std::vector< int > | global_var_ids | 
| Global variable indices of the local element contributions. | |
| std::vector< int > | global_eqn_ids | 
| Global equation indices of the local element contributions. | |
| TripletsContributions | num_triplets | 
| Number of triplets of element. | |
Valve (tanh) block.
Models the pressure drop across a diode-like valve, which is implemented as a non-linear hyperbolic-tangent resistor. See [6] (equations 16 and 22).
![\[\begin{circuitikz} \draw
node[left] {$Q_{in}$} [-latex] (0,0) -- (0.8,0);
\draw (1,0) node[anchor=south]{$P_{in}$}
to [D, l=$R_v$, *-*] (3,0)
node[anchor=south]{$P_{out}$};
\end{circuitikz}
\]](form_121.png)
![\[P_{in}-P_{out}-Q_{in}\left[R_{min} +
(R_{max}-R_{min})\frac{1}{2}\left[1+tanh\{k(P_{out}-P{in})\}\right]\right]=0
\]](form_122.png)
![\[Q_{in}-Q_{out}=0
\]](form_123.png)
![\[\mathbf{y}^{e}=\left[\begin{array}{llll}P_{in} & Q_{in} &
P_{out} & Q_{out}\end{array}\right]^{T} \]](form_124.png)
![\[\mathbf{E}^{e}=\left[\begin{array}{cccc}
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0
\end{array}\right]
\]](form_125.png)
![\[\mathbf{F}^{e}=\left[\begin{array}{cccc}
1 & -(R_{max}+R_{min})/2.0 & -1 & 0 \\
0 &      1                 &  0 & -1
\end{array}\right]
\]](form_126.png)
![\[\mathbf{c}^{e}=\left[\begin{array}{c}
-\frac{1}{2}Q_{in}(R_{max}-R_{min})tanh\{k(P_{out}-P_{in})\} \\
0
\end{array}\right]
\]](form_127.png)
![\[\left(\frac{\partial\mathbf{c}}{\partial\mathbf{y}}\right)^{e} =
\left[\begin{array}{cccc}
A & B & C & 0 \\
0 & 0 & 0 & 0 \end{array}\right] \]](form_128.png)
where,
![\[A = \frac{1}{2} k Q_{in}
(R_{max}-R_{min})\left[1-tanh^2\{k(P_{out}-P_{in})\}\right] \\
\]](form_129.png)
![\[B = -\frac{1}{2}(R_{max}-R_{min})tanh\{k(P_{out}-P_{in})\} \\
\]](form_130.png)
![\[C = -\frac{1}{2} k Q_{in}
(R_{max}-R_{min})\left[1-tanh^2\{k(P_{out}-P_{in})\}\right] \]](form_131.png)
![\[\left(\frac{\partial\mathbf{c}}{\partial\dot{\mathbf{y}}}\right)^{e} =
\left[\begin{array}{cccc}
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0
\end{array}\right]
\]](form_132.png)
Parameter sequence for constructing this block
0 Rmax: Maximum (closed) valve resistance1 Rmin: Minimum (open) valve resistance2 Steepness: Steepness of sigmoid function3 upstream_block: Name of block connected upstream4 downstream_block: Name of block connected downstream"valves": [
    {
        "type": "ValveTanh",
        "name": "valve",
        "params": {
            "Rmax": 100000.0,
            "Rmin": 100.0,
            "Steepness": 100.0,
            "upstream_block": "upstream_vessel",
            "downstream_block": "downstream_vessel"
        }
    }
]
This block has no internal variables.
| enum ValveTanh::ParamId | 
Local IDs of the parameters.
| 
 | inline | 
Construct a new ValveTanh object.
| id | Global ID of the block | 
| model | The model to which the block belongs | 
| 
 | virtual | 
Set up the degrees of freedom (DOF) of the block.
Set global_var_ids and global_eqn_ids of the element based on the number of equations and the number of internal variables of the element.
| dofhandler | Degree-of-freedom handler to register variables and equations at | 
Reimplemented from Block.
| 
 | virtual | 
Update the constant contributions of the element in a sparse system.
| system | System to update contributions at | 
| parameters | Parameters of the model | 
Reimplemented from Block.
| 
 | virtual | 
Update the solution-dependent contributions of the element in a sparse system.
| system | System to update contributions at | 
| parameters | Parameters of the model | 
| y | Current solution | 
| dy | Current derivate of the solution | 
Reimplemented from Block.
| TripletsContributions ValveTanh::num_triplets {5, 0, 3} | 
Number of triplets of element.
Number of triplets that the element contributes to the global system (relevant for sparse memory reservation)