U
    )iea$                     @   s`   d dl mZ d dlT d dlZd dlmZmZ d dlm	Z	 ddl
mZ ejZG dd	 d	ejZdS )
    )print_function)*N)platformexit)path   )thermoc                       sZ   e Zd ZdZ fddZddd	Zd
d Zdd Zdd Zdd Z	dd Z
dd Z  ZS )cubicz
    Interface to cubic
    c                    s   t t|   t| j| dd| _t| j| dd| _t| j| dd| _t| j| dd| _	t| j| dd| _
dS )	z=
        Initialize cubic specific function pointers
        
eoslibinitZ
init_cubic Zthermopack_getkijZthermopack_setkijandjiZthermopack_gethvparamZthermopack_sethvparamN)superr	   __init__getattrtpget_export_nameeoslibinit_init_cubic	s_get_kij	s_set_kijs_get_hv_params_set_hv_param)self	__class__ O/home/ubuntu/Home/Documents/9_semester/soret_model/pycThermopack/pyctp/cubic.pyr      s    zcubic.__init__vdWClassicDefaultFc                 C   s  t |d}tt|}t |d}	tt|}
t |d}tt|}t |d}tt|}t |d}tt|}|rtd}ntd}t t t t t tttttttg| j_d| j_| |||	||t	||||
|| t
t|dt|d| _dS )a  Initialize cubic model in thermopack

        Args:
            comps (str): Comma separated list of component names
            eos (str): Equation of state (SRK, PR, ...)
            mixing (str, optional): Mixture model. Defaults to "vdW".
            alpha (str, optional): Alpha model. Defaults to "Classic".
            parameter_reference (str, optional): Which parameters to use?. Defaults to "Default".
        asciir   r   N ,)c_char_pencode
c_len_typelenc_intPOINTERr   argtypesrestypebyrefmaxsplitnc)r   compseosmixingalphaparameter_referenceZvolume_shifteos_ceos_lenmixing_c
mixing_lenalpha_c	alpha_lencomp_string_ccomp_string_lenref_string_cref_string_lenZvol_shift_cr   r   r   init(   sN    
z
cubic.initc                 C   sZ   t |}t |}td}tt tt ttg| j_d| j_| t|t|t| |jS )zGet attractive energy interaction parameter

        Args:
            c1 (int): Component one
            c2 (int): Component two

        Returns:
            kij (float): i-j interaction parameter
                N)r%   c_doubler&   r   r'   r(   r)   value)r   c1c2c1_cc2_ckij_cr   r   r   get_kij^   s    

zcubic.get_kijc                 C   sX   t |}t |}t|}tt tt ttg| j_d| j_| t|t|t| dS )zSet attractive energy interaction parameter

        Args:
            c1 (int): Component one
            c2 (int): Component two
            kij (float): i-j interaction parameter
        N)r%   r>   r&   r   r'   r(   r)   )r   r@   rA   ZkijrB   rC   rD   r   r   r   set_kijw   s    
zcubic.set_kijc                 C   s   dS )zGet co-volume interaction

        Args:
            c1 (int): Component one
            c2 (int): Component two

        Returns:
            lij (float): i-j interaction parameter
        g      ?r   )r   r@   rA   r   r   r   get_lij   s    
zcubic.get_lijc                 C   s   t d dS )zSet co-volume interaction

        Args:
            c1 (int): Component one
            c2 (int): Component two
            lij ([type]): [description]
        zSetting lijN)print)r   r@   rA   Zlijr   r   r   set_lij   s    zcubic.set_lijc                 C   s  t |}t |}td}td}td}td}td}	td}
td}td}tt tt ttttttttttttttttg
| j_d| j_| t|t|t|t|t|t|t|	t|
t|t|
 |j|j|j|j|	j|
j|j|jfS )a  Get Huron-Vidal parameters

        Args:
            c1 (int): Component one
            c2 (int): Component two

        Returns:
            alpha_ij (float): alpha param i-j
            alpha_ji (float): alpha param j-i
            a_ij (float): a param i-j
            a_ji (float): a param j-i
            b_ij (float): b param i-j
            b_ji (float): b param j-i
            c_ij (float): c param i-j
            c_ji (float): c param j-i
        r=   N)r%   r>   r&   r   r'   r(   r)   r?   )r   r@   rA   rB   rC   
alpha_ij_c
alpha_ji_ca_ij_ca_ji_cb_ij_cb_ji_cc_ij_cc_ji_cr   r   r   get_hv_param   sD    

zcubic.get_hv_paramc                 C   s   t |}t |}t|}t|}t|}t|}t|}t|}t|	}t|
}tt tt ttttttttttttttttg
| j_d| j_| t|t|t|t|t|t|t|t|t|t|
 dS )a  Set Huron-Vidal parameters

        Args:
            c1 (int): Component one
            c2 (int): Component two
            alpha_ij (float): alpha param i-j
            alpha_ji (float): alpha param j-i
            a_ij (float): a param i-j
            a_ji (float): a param j-i
            b_ij (float): b param i-j
            b_ji (float): b param j-i
            c_ij (float): c param i-j
            c_ji (float): c param j-i
        N)r%   r>   r&   r   r'   r(   r)   )r   r@   rA   Zalpha_ijZalpha_jiZa_ijZa_jiZb_ijZb_jiZc_ijZc_jirB   rC   rJ   rK   rL   rM   rN   rO   rP   rQ   r   r   r   set_hv_param   sB    
zcubic.set_hv_param)r   r   r   F)__name__
__module____qualname____doc__r   r<   rE   rF   rG   rI   rR   rS   __classcell__r   r   r   r   r	      s       
6
5r	   )
__future__r   ctypesnumpynpsysr   r   osr   r   r   r#   
thermopackr	   r   r   r   r   <module>   s   