B
    }N_$                 @   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__ ../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)   sJ    

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
        g        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>   r?   Zkijr@   rA   rB   r   r   r   set_kijx   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>   r?   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>   r?   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
        g        N)r$   r<   r%   r   r&   r'   r(   r=   )r   r>   r?   r@   rA   
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   s@    

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>   r?   Zalpha_ijZalpha_jiZa_ijZa_jiZb_ijZb_jiZc_ijZc_jir@   rA   rH   rI   rJ   rK   rL   rM   rN   rO   r   r   r   set_hv_param   s>    
zcubic.set_hv_param)r   r   r   F)__name__
__module____qualname____doc__r   r;   rC   rD   rE   rG   rP   rQ   __classcell__r   r   )r   r   r	      s    
5
5r	   )
__future__r   ctypesnumpynpsysr   r   osr   r   r   r"   
thermopackr	   r   r   r   r   <module>   s   