a
    _b                     @   s   d dl mZ d dlmZ d dlmZ d dlmZ d dl	Z
d dlmZ d dlmZmZmZ d dlZG dd	 d	ZG d
d dZdS )    )	saftvrmie)CarnahanStarling)
KineticGas)eos_differentialsN)root)	BoltzmannAvogadrogas_constantc                   @   s>   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd ZdS )
Kempers_HSNc                 C   s0   || _ t | _| j| t||dd| _d S )NT)sigmaBHcompsr   eosinitr   kin)selfr   r    r   A/Users/vegardjervell/Documents/master/model/kempers_V2/kempers.py__init__   s    
zKempers_HS.__init__c                    s  | j jd| 
dd d}|| }|
 }|  }|||\}|||\}	|
|	|d }
|
dkrtdd D S |||\t	
||||
|j|
|
dd	\} |j|
|
dd
\}|  }|||\}||
}|||\	t	
||||
|j|
|
dd	\}|j|
|dd
\} 	
fdd}t|}|jsdt d t
 d t| }t| dd |jD |_|jS )N      Nr   c                 S   s   g | ]
}t jqS r   npnan).0_r   r   r   
<listcomp>       z(Kempers_HS.get_Soret.<locals>.<listcomp>TZdsdndvdnc                    sv  t 
}t| 
d
   |d< d d  d d    d  d d d d     }d d d 	d    d d d 	d d     }tt
d D ]}tt
D ]}|| d|f  d ||f   
|  d
|   | |  7 }|| d|f  d ||f   
|  d
|   |  7 }qq|| |d d< |S Nr   r   r   Z
zeros_likesumrangelen)ST_listeqsrealZHSijS
ST_list_HSZS_HSTdmudx_Tpdmudx_Tp_HSr$   Zdvdn_HSmuZmu_HSxr   r   eq_set,   s    
DDHLz$Kempers_HS.get_Soret.<locals>.eq_set)Kempers eq. set did not converge for
T = 
x = 
rho = c                 S   s   g | ]
}t jqS r   r   r   r6   r   r   r   r    D   r!   )r   alpha_T0real_eospressure_tvZinternal_energy_tvZtwo_phase_uvflashr   arraychemical_potential_tveddmudx_TPentropyspecific_volumeHS_eosguess_phaser   successstrwarningswarnr6   )r   r2   rhor6   nTVnr   puphaser   Zp_HSZphase_HSr7   solmsgr   r/   r   	get_Soret   sL     

zKempers_HS.get_Soretc                 C   sD   | j d | j d | j d | j jdd | j d | j S )NFZsilent)r   model_control_chainmodel_control_a3model_control_a2redefine_critical_parametersmodel_control_a1r   r   r   r   rE   H   s    zKempers_HS.HS_eosc                 C   sD   | j d | j d | j d | j d | j jdd | j S )NTFrU   )r   rZ   rX   rW   rV   rY   r[   r   r   r   r=   S   s    zKempers_HS.real_eosc                 C   s   t ttfS N)NotImplementedErrorr4   ZdmudT_np_HSr   r2   rK   r6   r   r   r   get_HS_values^   s    zKempers_HS.get_HS_valuesc                 C   s   t tttfS r\   )r]   r3   ZdmudT_npr$   r^   r   r   r   get_real_valuesb   s    zKempers_HS.get_real_values)N)	__name__
__module____qualname__r   rT   rE   r=   r_   r`   r   r   r   r   r
   
   s   
6r
   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )	Kempers89c                 C   s*   || _ t | _| j| t|| _d S r\   r   )r   r   r   r   r   r   g   s    
zKempers89.__init__c                 C   s<   | j |  | j |  | j |  | j |  d S r\   )r   rV   rW   rX   rZ   )r   valr   r   r   set_HSm   s    zKempers89.set_HSc                    s  | j jd| dd}d}|| }| }| j}|||\}	||	}
|||\t||||
|j|	|
dd\} |j	|	|
dd\} fdd}t
||}|js
d	t d
 t d t| }t| dd |jD |_|jS )Nr   r   r   Tr"   r#   c                    s   t }t| d   |d< d d  d d    d  d d d d     }ttd D ]^}ttD ]L}|| d|f  d ||f   |  d|   | |  7 }qqv||d d< |S r%   r&   )r*   r+   r,   r-   r.   r0   r2   r3   r$   r5   r6   r   r   r7      s    
DLz#Kempers89.get_Soret.<locals>.eq_setr8   r9   r:   c                 S   s   g | ]
}t jqS r   r   r;   r   r   r   r       r!   z'Kempers89.get_Soret.<locals>.<listcomp>)r   soretr   r>   rF   r@   rA   rB   rC   rD   r   rG   rH   rI   rJ   r6   )r   r2   rK   r6   r1   rL   rM   rN   r   rO   rQ   r   r7   rR   rS   r   rg   r   rT   s   s8    

zKempers89.get_SoretN)ra   rb   rc   r   rf   rT   r   r   r   r   rd   f   s   rd   )pyctpr   Zcpp.hs_eos.carnahanstarlingr   pykingasr   
integratorr   rA   numpyr   scipy.optimizer   Zscipy.constantsr   r   r	   RrI   r
   rd   r   r   r   r   <module>   s   \