a
    a9b                     @   s   d dl mZmZmZmZ d dlmZ d dlZd dl	Z	edddZ
e
jd Zdd	d
e   ZZZdd Zdd Ze
jdeeeZdZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd,d#d$Zd%d& Z d dl!m"Z# d'd( Z$d-d*d+Z%dS ).    )
KineticGaserfspacebcolorssuppress_stdout)	BoltzmannNzAR,C1Zmie)	potentialr   r   i,     g      @c                 C   s   t jdt| ttS N   )kin
cpp_kingasZtheta_integrandTgb)r r   f/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/pykingas/mie_unittests.py<lambda>       r   c                 C   s   t jdt| tt|S r
   )r   r   thetar   r   r   )ZR_minNr   r   r   r      r   r   g-q=c                  C   s  t tdt dt ddd} t | }t | }t| D ],\}}t|||< tj	dt
|tt||< q:t t|d }tdt|d D ]}t| |d  }t| | }t| |d  }| |d  | |  }	| | | |d   }
d||	|
 |  |	|
 d |   t |	d|	|
   ||d < qtt |r>d|fS t|dk rTd|fS tt |rld	|fS t|dk rd
|fS tt|dd | |dd  dkrdt|dd | |dd  fS dS d S )Ng     @@g     p@2   r	   r   d   r   e   f   g   gMbP?h   r   )nparrayr   sigma
empty_like	enumeratefuncr   r   Ztheta_integrand_dblderivativer   r   r   emptylenrangepoweranyisnanabs)Zr_gridZ	integrandZanalytic_d2tdr2ir   Zd2tdr2Zt_1t0t1h1h2r   r   r   theta_dblderiv   s2    

B*$r1   c                  C   s  t dddt } t | }t| D ]0\}}tjdtt	|}tj
dtt	|||< q$tt |srtt |rzd|fS tt |rd|fS t|d |d  tkrd	t|d |d  fS t|d t jd
  tkrdt|d t jd
  fS t ddd}t|D ]2\}}tjdt|t}tj
dt|t||< q
tt |rVd|fS tt |rnd|fS t|d |d  dkrdt|d |d  fS t|d t jd
  dkrdt|d t jd
  fS dS d S )Nr         r   n   o   r   p   r	   q   h㈵>   r   s   ư>t   Hz>u   r   )r   linspacer!   r"   r#   r   r   get_Rr   r   r   r)   r*   isinfr+   FLTEPSpir   )b_listZt_listr,   biRg_listgir   r   r   	theta_lim3   s4    
rK   c                  C   sr  t dddt } t | }t| D ]\}}tjdtt	|||< q$t
t |rZd|fS t
t |rpd|fS t|d |d  tkrd	|d |d  fS t|d tkrd
|d fS t ddd}t|D ]\}}tjdt|t||< qt
t |rd|fS t
t |rd|fS t|d |d  dkrLd|d |d  fS t|d dkrjd|d fS dS d S )Nr   r2   r3   r   x   y   r   r6   z   {   r9   
   |   }   r?   ~   r=      r   )r   rA   r!   r"   r#   r   r   chir   r   r)   r*   rC   r+   rD   r   )rF   Zchi_listr,   rG   rI   rJ   r   r   r   chi_limT   s0    
rV   c                 C   s$   | t | }| t | }||fS N)r   cossin)r   txyr   r   r   rt_to_xys   s    r]   c                 C   s,   t | d |d  }t | | }||fS Nr	   )r   sqrtarccos)r[   r\   r   rZ   r   r   r   xy_to_rtx   s    ra   c                 C   s   t t | d S r^   )r   r_   sumZvecr   r   r   vec_len}   s    rd   c                 C   s   | t |  S rW   )rd   rc   r   r   r   normalize_vec   s    re   c                 C   s2   t jd| |t j tt j dt|d   S )Nr         ?r	   )r   r   r   m0r   prodmole_weightsrd   )r   rZ   r   r   r   r   total_energy   s    rj   c                 C   s"   t jd| |t j tt j S r
   )r   r   r   rg   r   rh   ri   )r   rZ   r   r   r   potential_energy   s    rk      c                 C   s  |t dt |  tj t tj  }|t }|t }t d| g}|}|}t	||\}}|}|g}	|g}
t
|g}t|||g}tjd||tj t tj }| tt ||g }|}dt|d   }d}||krt |	| |
| g}t	|d |d \}}t |t|dk r~|d t|| dt|d  k r~t
|| dt k r~|dt| t |t|  }||| 7 }t	|d |d \}}t|||d kr|d9 }q|||  }t|t d|d t||   }dtt
|  }|	|d  |
|d  |t t |d  |t||| tjd||tj t tj }| tt | }|}|d7 }|dkrt ||dk rؐqqt |	t t |
t fS )	Nr	   r   r   gg?rf   g{Gz?i   )r   r_   r   r   rg   rh   ri   r!   r    ra   rd   rj   r   Zpotential_derivative_rre   dotrk   r+   appendrb   )r   r   r   Zy0r[   r\   Zr0rZ   r   Zx_listZy_listrI   ZE_listFZF_vecadtr,   posr   r   r   get_path   sX    (
"
  
$"rs   c                 C   s   t | d |d gt | d |d g }t | d |d gt | d |d g }t t ||t|t|  }|d dk r| }|S )Nr   r   r   r6   )r   r    r`   rm   rd   )r[   r\   Zg_inZg_outrU   r   r   r   get_chi_from_path   s    ,,"rt   c            
   	   C   s   dg} dg}d}d}|D ]j}| D ]T}t t||\}}t||}tjdt||t }	t||	 dkr d}||	 } qvq |du r qq|du rd|fS d	S )
Ng      ?g?Fr   r   gQ?T   r   )rs   r   rt   r   r   rU   r!   r+   )
rI   rF   failedrvalrG   rJ   r[   r\   Zchi_pathZchi_predr   r   r   	collision   s$    
rx   Fc              	   C   s   t tttg}|rtd d}|D ]n}tdtjv  | \}}W d   n1 sR0    Y  |dkr | rrt|| ttj	 d|tj
   qq |dkrttj dtj
  |S )aU  
        Submodule for testing functions used in computing collision integrals
        Each test in 'tests' must accept two arguments: 'do_plot' and 'do_print' and return two values
        The first is the exit status of the test (0 for successfull, !0 otherwise)
        The second value is some information about the test that failed
    z-Plotting of mie unittests is not implemented!r   z-silentNz%Mie unittests failed with exit code :zMie unittests were successful!)r1   rK   rV   rx   printr   sysargvr   FAILZENDCZOKGREEN)Zdo_printZdo_plottestsr   rZ   vr   r   r   	run_tests   s    (
r   )rl   )FF)&Zpykingasr   r   r   r   Zscipy.constantsr   Znumpyr   rz   r   Zsigma_ijr!   r   r   r   r$   r   r   rB   rH   rD   r1   rK   rV   r]   ra   rd   re   rj   rk   rs   rt   Zmatplotlib.pyplotZpyplotZpltrx   r   r   r   r   r   <module>   s0   
!
6