a
    Îò‹a›1  ã                   @   s`  e d ƒ dZe ded  ƒ ddlZe ddd ddlZe ddd ddlZe ddd dd	lmZ e ddd dd
lm	Z	m
Z
 e ddd ddlmZ ddlmZ ddlmZ dd„ Zdd„ Zd#dd„Zd$dd„Zdd„ Zd%dd„Zd&dd„Zedkr\ddlmZ e dƒ e ded  ƒ edd edƒ g d ¢Zd!aeD ]Ze eƒ ed"ed q@dS )'ÚStartingé   ú-é   é    Nú#Ú )Úend)Údatetime)ÚAvogadroÚ	Boltzmann)Úget_cmap)Ú	Normalizec                 C   s¤   t j t j t¡¡d }|d|  7 }|d u r0d}|d u r<d}|dksL|dkrŒ|| d¡d d t|ƒ dd¡ d	 t|ƒ dd¡ d
 7 }n|| dd¡d
 7 }|S )Nú/zoutput/saft_validation/r   ú,r   Ú_e_Ú.Ú_Ú_s_z.csv)ÚosÚpathÚdirnameÚabspathÚ__file__ÚsplitÚstrÚreplace)ÚnameÚcompsÚeÚsÚ	file_path© r!   úB/Users/vegardjervell/Documents/9_semester/soret_model/test_saft.pyÚget_file_path   s    @r#   c                 C   s2   t j | ¡r.td| ƒ tdƒ}|dkr.tdƒ d S )NzThis operation will overwrite zY to confirmÚYr   )r   r   ÚisfileÚprintÚinputÚexit)Úout_pathÚconfirmr!   r!   r"   Úcheck_overwrite#   s
    
r+   c           
      C   s  |d u rd}n|}|d u r d}n|}zL|   d|d |d | |d | |d |d ¡ | jdd |  dg¡}W nœ   dd|  }dd|  }	zbt| ||	||d d	 |   d|d |d | |d | |d |d ¡ | jdd |  dg¡}W n   td
ƒ‚Y n0 Y n0 d S )Nr   r   é   é   é   F©Úsilentç      à?)Úe_inÚs_inÚlevelzCould not redefine)Úset_pure_fluid_paramÚredefine_critical_parametersÚcriticalÚ
ValueError)
ÚeosZstart_paramsr2   r3   r4   r   r   ÚverifyZnew_sZnew_er!   r!   r"   r6   *   s(    00r6   c                 C   sº  dg}t d| ddƒ}t|ƒ t ¡ }| | ¡ | d¡\}}}}	}
|t }t|||||	|
g||d |d u rpd}|d u r|d}||9 }||9 }||9 }z| dg¡\}}aW n   Y n0 |j	dt dgd| d\}}t
 |¡}t
j|td}tt|ƒƒD ]N}| || || dg¡||< | || || dg|| ¡d }t| ||< qú|| }||d  | }||d  }t d	| ||ƒ}t |¡t |¡t |¡t |¡d
œ}t |¡}| |¡ d S )Nr   Úphase_envelope)r2   r3   g{®Gáz„?)Zminimum_temperature)Údtyper   r-   Úphase_envelope_)Úred_rhoÚred_pÚred_TÚ
pred_phase)r#   r+   Ú	saftvrmieÚinitÚget_pure_fluid_paramr   r6   r7   Úp_cZget_envelope_twophaseÚnpÚ
zeros_likeÚintÚrangeÚlenZguess_phaseZspecific_volumer
   ÚpdÚSeriesÚ	DataFrameÚto_csv)r   r   r   Úcompositionr)   r9   ÚmÚsigmaÚ	eps_div_kÚlaÚlrÚepsÚT_cr   ÚTÚpÚrhoÚphaseÚiZVmr@   r?   r>   ÚdataÚout_dfr!   r!   r"   r;   D   sJ    

"ý
r;   c           .      C   sˆ  dg}t d| ddƒ}tj |¡}t|ƒ t ¡ }| | ¡ tjddd}| 	d¡\}}}}	}
|t
 }t g d¢¡}t g d¢¡}g d¢}td	ƒ}td
ƒ}tt|ƒt|ƒd}tt|ƒt|ƒd}d gt|ƒt|ƒ  }t t|ƒt|ƒftj¡}t |tj¡}t |tj¡}tjdddd\}}|\}}t|ƒD ]p\}}t|ƒD ]Z\}}|| }|| } | t
 }!| d||| |	|
¡ |jdd z| dg¡\}"}#}$W n4   td|d|dd tjtjtj  }"}#}$Y n0 t|# }%|"|  }&|$|d  |! }'|%|d  }(|&|||f< |(|||f< |'|||f< |j|(|'|| |||ƒƒt|ƒdd\})|j|(|&|| |||ƒƒt|ƒdd\}*|dkr‚|)||< |dkrB|*|t|ƒ| < qBq0d}+d},d}-| d¡ |  d¡ | d¡ t !¡  tj"|dd|  d |  d  d! t #| ¡ t $d"|  ¡ tjddd#d$d%\}}t|ƒD ]f\}}|d& j||d d …|f |, |||ƒƒ|d' |d( j||d d …|f |+ |||ƒƒ|d' q,|d& j%d|  d  d) |d&  d*¡ |d(  d+¡ |d(   d,|  d  ¡ t|ƒD ]V\}}|d- j||| |, |||ƒƒ|d' |d. j||| |+ |||ƒƒ|d' qæ|d- j%d,|  d  d) |d.   d|  d  ¡ t #| ¡ t $d/|  ¡ d S )0Nr   Zcritical_params_zdata/NIST_SAFT.xlsxzSAT-EOS)Ú
sheet_name)r   gš™™™™™ñ?gffffffö?çš™™™™™ù?çffffffþ?ç       @)r   g333333ó?g      ø?g333333û?ra   çš™™™™™@)Úor   ÚvÚ1Ú2ú|ÚviridisÚrainbow)ÚvminÚvmaxr,   Úall)ÚsharexFr/   z$Critical calculation failed for e = ú, s = r   )Úsepr-   )ÚmarkerÚcolorÚlabelÚ	linestyler   gË¡E¶óýô?gtF”ö_À?gÓMbX9Ô?z$p^*_c$z
$\rho^*_c$z$T^*_c$z$\epsilon / \epsilon_{z}$      $\sigma / \sigma_{z}$)ÚhandlesÚncolÚtitleZTesting_critical_ÚcolÚrow)rm   Úsharey)r   r   )rq   rr   )r   r   )rv   z$\Delta p_c^*$z$\Delta T_c^*$z$\sigma / \sigma_{)r   r   )r   r   ZCritical_deviation_)&r#   r   r   r   r+   rB   rC   rK   Ú
read_excelrD   r   rF   Úarrayr   r   ÚminÚmaxrJ   ÚfullÚnanÚ	full_likeÚpltÚsubplotsÚ	enumerater5   r6   r7   r&   r
   Úplotr   Ú
set_ylabelÚ
set_xlabelÚtight_layoutÚ	figlegendÚsuptitleÚsavefigÚlegend).r   rO   r)   Úoutdirr9   ÚdfrP   ÚsigrR   rS   rT   rU   Ús_listÚe_listÚmarkersÚcmapZcmap_sÚnormZnorm_sÚhandsZT_c_listZ
rho_c_listZp_c_listÚfigÚaxsÚax1Úax2Úsir   Úeir   rQ   Zeps_i_div_kZeps_irV   ZV_crE   Zrho_cZred_TcZred_pcZ	red_rho_cÚpeÚpsZTc_repZpc_repZ	rho_c_repr!   r!   r"   Útest_criticaly   s    
((




 
.2&*
r   c              	      s4  d}|d u rd}| d u rd} t dd| |ƒ}t ¡ ‰ ˆ  |¡ ˆ  d¡\}}}}}ˆ  dd||dd¡ ˆ  dd|| | | dd¡ ˆ jdd	 |}	|	t }
|}d}||	 }ˆ  |¡\}}}t 	d
d¡}t 
‡ fdd„|D ƒ¡}t t |d ¡t |d ¡t |d ¡t |¡t |¡dœ¡}| |¡ td|ƒ d S )NzAR,KRr   Úbinary_phase_envelope_ÚARr   é   r,   Fr/   gR¸…ëQÈ?c                    s"   g | ]}ˆ   |d | g¡d ‘qS )r   r,   )r7   )Ú.0Úx©r9   r!   r"   Ú
<listcomp>ù   ó    z"binary_mixture.<locals>.<listcomp>r   )Úbubble_lineÚdew_lineÚpressureÚ	crit_compÚ	crit_presz	Saved to )r#   rB   rC   rD   r5   r6   r   Zget_binary_pxyrF   Úlinspacer{   rK   rM   rL   rN   r&   )r   r   r   r)   rP   Zsig_ArZeps_Ar_div_krS   rT   rR   rU   rŽ   r@   rW   ZLLEZLL1VZLL2VZx1_listZpc_listr   r!   r£   r"   Úbinary_mixtureÝ   s8    
ü
r¬   c           &   	      sž  dg‰t tˆƒd ƒdkr$tdƒ‚ntˆƒt|  d¡ƒkrBtdƒ‚|d u rNd}|d u rZd}d}td| ||ƒ}tj |¡}t	 	¡ ‰ˆ 
| ¡ t|  d¡ƒdkr€|dks°|dkr4ˆ d¡}|\}}}	}}ˆ d|d	 ||d  ||d  |d
 |d ¡ ˆ ¡  ˆ d¡}
|
\}}}}}d||  }t |	| ¡}nJˆ d¡}|\}}}	}}ˆ d¡}
|
\}}}}}d||  }t |	| ¡}n’|dks”|dkrúˆ d¡}|\}}}	}}ˆ d|d	 ||d  ||d  |d
 |d ¡ ˆjdd || }|	| }nˆ d¡}|\}}}}}tdƒ tjdddd}||d dk|d dk@  }|d  ¡ }|jd	 ‰tdƒ td|ˆ|  ƒ ‡fdd„t|ƒD ƒ}i }t|ƒD ]&}ˆ| }||d |k d }||d |k d }||t  |d
  }|| ‰ ||d
  }d‰|ˆ t }t ‡ ‡‡‡fdd„|D ƒ¡}t | ¡ ¡}|| }t | ¡ ¡| }t | ¡ ¡} |d
 |  }!||d
  |t  }"|d
 | |t  }#|!|t|ƒd < |"|t|ƒd < |#|t|ƒd  < q˜t td!d„ | ¡ D ƒƒ¡}$|$  |¡ td"|ƒ t!|d# d$ƒ€}%|% "|d% t# $¡  %d&¡ d' t| ƒ d( tˆƒ d) t|ƒ d* t|ƒ d+ t|ƒ d, t|ˆ|  ƒ d- ¡ W d   ƒ n1 sˆ0    Y  td.ƒ d S )/Nr   g»½×Ùß|Û=zComposition must sum to 1r   z*Composition and comps must be same length!é   Úrho_p_r,   r   r-   r.   r1   Fr/   zFinished setting up EOSzdata/VLE_data.xlsxZpvT)r^   ÚskiprowsÚregionZliquidz (0 = outlier; 
1 = confirmed)rW   zFinished fetching dataz,Lowest number of data points being used is :c                    s   g | ]}ˆ | ‘qS r!   r!   )r¡   r[   )ÚT_valsr!   r"   r¤   V  r¥   zrho_p.<locals>.<listcomp>u   ÏrX   c              	      s,   g | ]$‰ ˆ  ˆˆ‡ fd d„ˆD ƒ¡d ‘qS )c                    s   g | ]}|ˆ  ‘qS r!   r!   )r¡   Úxi©ZNir!   r"   r¤   d  r¥   z$rho_p.<locals>.<listcomp>.<listcomp>r   )Zpressure_tv)r¡   )rW   ÚVrO   r9   r³   r"   r¤   d  r¥   z,rhoz,p_dataz,p_calcc                 S   s   g | ]\}}|t  |¡f‘qS r!   )rK   rL   )r¡   Úkrd   r!   r!   r"   r¤   s  r¥   zSaved run to :z	/meta.txtÚaz time : z%d/%m/%Y %H:%M:%Sz	
comps = z, x = z, e = rn   z, N_T_vals = z, minimum data points = z

zUpdated meta file)&ÚabsÚsumr8   rJ   r   r#   r   r   r   rB   rC   rD   r5   r6   rF   Úsqrtr&   rK   rz   Úvalue_countsÚaxesrI   r   r
   r{   ÚargsortÚtolistÚsortr   rM   ÚdictÚitemsrN   ÚopenÚwriter	   ÚnowÚstrftime)&r   r   r   ÚN_T_valsr)   rŒ   Zparams1r   Zsigma1Z
eps1_div_kZparams2Zsigma2Z
eps2_div_krQ   rR   Úparamsr   Zliq_dfZT_val_countsÚusing_T_valsZout_dictr[   r@   r>   r?   Zp_datarY   ÚNZpred_pZsorted_indsÚsorted_pÚsorted_p_dataÚ
sorted_rhoZsorted_red_rhoZsorted_red_p_dataZsorted_red_pr]   Úfiler!   )rW   r±   r´   rO   r9   r"   Úrho_p  sÈ    


0



0




ÿÿÿÿþþþþþþýýü&rÍ   Ú__main__)rB   z#|r1   )r   )r   gÍÌÌÌÌÌô?r_   r`   rb   g     jø@rŸ   )NNr   )NN)NN)NN) r&   Ú	n_importsÚpandasrK   ÚnumpyrF   r   r	   Úscipy.constantsr
   r   Úmatplotlib.pyplotÚpyplotr   Úmatplotlib.cmr   Úmatplotlib.colorsr   r#   r+   r6   r;   r   r¬   rÍ   Ú__name__ZpyctprB   r(   r   rE   r   r!   r!   r!   r"   Ú<module>   sB   

5d
'
}

