3
_{A                 @   s@   d Z dd Zdd Zdd Zdd Zd	d
 Zdd Zdd ZdS )a  
*********************************************
***   Program for the computation of the  ***
***          radiative inhibition         ***         
*********************************************
This code is part of the LIFELINE program.

Copyright (C) 2020-2021 University of Liege (Belgium)
Enmanuelle Mossoux (STAR Institute)
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation, either version 3 of the License, or any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details.
You should have received a copy of the GNU General Public License along with this program.
If not, see <http://www.gnu.org/licenses/>.

Run: from radiative_inhibition.py import radiative_inhibition
     radiative_inhibition_comp(Mdot1, Mdot2, Per, mass_ratio, R1, R2, Teff_1, Teff_2, d, direct, mu, H_mass_frac, beta1, beta2, ipar)

# Parameters 
# ==========
Mdoti - The mass-loss rate [Msun/yr]
Per - Orbital period [days]
mass_ratio - M1/M2
Ri - Stellar radius [Rsun]
Teff_i - Effective temperature [K]
d - Separation [cm]
direct - Directory where to save the results
mu - Mean molecular weight. Default value: 0.62 (totally ionized gas)
H_mass_frac - Fractional mass abundance of H. Default value: 0.7381 (Sun)
betai - Parameter of the beta law of the wind velocity for each star. Default value: 1.
ipar - Index of the binary system

# Versions
# ========
v1 - 1/3/2019 - Application of radiative inhibition_models.py for a particular binary.
c             C   s&   dd l }|j|d ||  d  | S )N       )numpysqrt)ZcenterxZcenteryradiusxnp r   =/local/network/htdocs/Lifeline/codes3/radiative_inhibition.py	plot_star+   s    r
   c             C   s  dd l }||	|  d }d| |  d|  |d  }||	 | }dd|d  d|   d| |d   }d| d|d  | d|  |d  d d|d  d|    |d|  |d   }||||	   d }dd| d|   d| |  }d| |||	  |	d   d| | d|  | d d| d|    d| |  }d	| |	| d  }t||| | |  | |  }||| || ||   | |   }d| d|  |||	   |	|  d|   }d||
 d| |
| d| |  | d    }||j| S )
Nr   r   g       @g      ?      g      @g      ?g       )mathabsr   )M1Gamma1R1M2Gamma2R2grav	sound_velduchcudalpha1alpha2r   AcCzfactorK1ZdK1duK2ZdK2duZdAduZBcZdBduZdhduZomegacr   r   r	   vz1   s    (T T $,0r"   c             C   s    d| | d|  | |d   S )Ng       @g      ?r   g       r   )zMGammar   r   r   r   r	   uzD   s    r&   c	             C   s   dd l }	|t| d |	j |d   }
d|d | d   | | |  | d|d  |  | |t| | |
|  |   }|d S )Nr   g      @r   g      ?g       @)r   r   pi)r   urrrdMdotdsigma1r   deltarr   radgravityr   rho1eqr   r   r	   dv_ligne_centreI   s    Tr0   c             C   s  dd l }dd l}| \}}|j|d |d  }||d |j |d   }|	d |d  }|j||j| |j||j|  }d| | ||  |
 d|	d  |  |||  ||   || ||  |
  |d |  ||  | |||  t|||  |||   || |
  |   }|j||j| |j||j|  }d| | ||  ||  || ||  ||   || |  |||  |
  ||  || t|||  |||   || |
  |   }t|||  |||   dkrd| | ||  |
 d|	d  |  |||  ||   || ||  |
  |d |  ||  | }d| | ||  ||  || ||  ||   || |  |||  |
  ||  }|j|d |d  S )Nr   r   g      @g      ?g       @g        )r   r   r   r'   cossinr   )puthetarr(   uthetaturtr)   r*   thetatheta2r   r+   
deltathetar   rad1rad2grav2r-   irr   r   r   yvherer.   soundanglereq1eq2r   r   r	   dv_hors_ligne_centreO   s    (("hXrD   c       "      C   s	  dd l }dd l}| \}}|j|d |d  }||d |j |d   }|	d |d  }t|||  |||   | }|j||j| |j||j|  }||||   t|||  |||   || |
  |d   |d | |
  }t|||  |||   dkrd}d}|d |	d  d| |  |d d| d|    |
|d   d| |	d | ||  |||  |d |	d     |
|d    |||   |d| |   }|	d  |d |  d| | ||   |
|d   d| |	d | ||  |||  |d |	d     |
|d    d| |  || ||   |d| |   }d	| | ||  |
 d|	d  |  |||  ||   || ||  |
  |d |  ||  | |||  t|||  |||   || |
  |   }|j||j| |j||j|  }|| | t|||  |||   || |
  |d   |d | |
  }t|||  |||   dkrd}|d |	d  d| |  |d d| d|    || |d   d| |	d | ||  |||  |d |	d     || |d    ||  ||
  |d| |   }|	d  |d |  d| | ||   || |d   d| |	d | ||  |||  |d |	d     || |d    ||  || |
  |d| |   } d	| | ||  ||  || ||  ||   || |  |||  |
  ||  || t|||  |||   || |
  |   }!|j|s|j| s|j|s|j|r|j||j| |j||j|  }|d |	d  d| |  |d d| d|    |
|d   d| |	d | ||  |||  |d |	d     |
|d    |||   }|	d  |d |  d| | ||   |
|d   d| |	d | ||  |||  |d |	d     |
|d    d| |  || ||   }|d |	d  d| |  |d d| d|    || |d   d| |	d | ||  |||  |d |	d     || |d    ||  ||
  }|	d  |d |  d| | ||   || |d   d| |	d | ||  |||  |d |	d     || |d    ||  || |
  }d	| | ||  |
 d|	d  |  |||  ||   || ||  |
  |d |  ||  | }d	| | ||  ||  || ||  ||   || |  |||  |
  ||  }!|jd| | d|! |   d| | d|! |  gS )
Nr   r   g      @r   g        g       @g      @   g      ?)	r   r   r   r'   r   r1   r2   isnanarray)"r3   r4   r(   r5   r6   r)   r*   r7   r8   r   r+   r9   r   r:   r;   r<   r-   r=   r   r   r   r>   r?   r.   r@   Zconst2rA   Zconst1Zeq1xZeq1yrB   Zeq2yZeq2xrC   r   r   r	   jacb   s>     (P"(L"0(hXrH   c       t         s,  dd l }dd l}dd l}ddlm} dd lj}dd lj}dd l	}ddl
m}m} dd l}dd l}dd l}|j }|d}|d}|dd } |dd	 }!|d
d }"|d}#|d|d d }$|dd }%|d}&d| |" d|$  }'|j}(|jddddddddddddddddddddddddg})|jdddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0g}*|jd1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHg}+dIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\dBd]d\d^g},|j|)}-d_|(d`  |
da  | |db d`   }.|.dc|  }/|.|/ }0|| }|| d }|| }|| d }d`| |k }1xt|1D ]}2|2dkr|| }}|| }}|/|0 }0}/|	| }}	|| }}|3|4 }4}3de|jd|  |0 |  }5de|jd|  |/ |  }6|5}4|6}3|5dcdf| |
d   |  |6dcdf| |
d   |  g}7t|7d( dg |
d dh  t||gdi db dj|   dk r|5dcdf| |
d   |  }5|6dcdf| |
d   |  }6d_|# |( |dg  |d	 d`  }8d_|# |( |	dg  |d	 d`  }9|j|&| |$|  }:|"|8 dk |0dg |( |  |! |%  };|"|9 dk |/dg |( |  |! |%  }<||$|5 d_ |( |
d d`   }=|jt|-| }>|jt|*t|>dl t|>dl dl  |= }?|,t|>dl |?  }@|+t|>dl |?  }A||$|6 d_ |( |
d d`   }=|jt|-|	 }>|jt|*t|>dl t|>dl dl  |= }?|,t|>dl |?  }B|j|,}Bdcd||
dm|   d`  dc|B   dc|B ||
dm|   d`   }C||
dm|   dkrdcd|dm|  d`  dc|B   dc|B |dm|  d`   }Cdcddc|@   dc|@ d  }D|0dc|;  |/dc|<   }E|8|D |9|C  }Ft|
|0|;| |:}Gtdm| |0|;| |:}Hdcd_|/ dc|<  |G|H|G  d`  |H|0 dc|;    }I|dc|@|G|H|G  d`  |Fdc|@ |E     }Jd|  |0 dc|;  |:d`  }K|K |H }Lt|0|;||/|<|| |:|
|H|I|G|@|B}M|jd|& | |$ }N|M |L}O|
d }Pd|
 | |L |P }Q g}Rdng}S|Og}T|Og}Udng}V g}Wdng}Xxtt|Qd D ]}Y|O|P }O|
|O }Zdcd||O d`  dc|@   dc|@ ||O d`   }[|8d_|j |Od`   }\|9d_|( |Zd`   }]dn}^t|Z|krdcdc||Z d`  dc|B   dc|B ||Z d`   }^dk|'dc|@   |A |\|[ |]|^   |!|N|@   }_|  |/ dc|<  |Zd`  | |0 dc|;  |Od`   }`|t |5fdo |O|J|:|P|@|_|`fdp}a|aj |Rj  |Wj  |Sjdn |Xjdn |Tj|O |Uj|O |Vjdn qBW tt |T}Q|j|T}Tdn}b|(dq }c|(|c }d|Tdd  }Odcd||O d`  dc|@   dc|@ ||O d`   }[|8d_|( |Od`   }\dk|'dc|@   |A |\ |[ |!|N|@   }_| |0 dc|;  |Od`  }`x\tt|dD ]J}e|Rd  dn|Sd }f|Rd }g|b|c }bt!drt"t#|bds |(  dt  |Wj |j$|b |j%|b   |Xj |j%|b |j$|b   |j|
d` |Od`  d|O |
 |j$|b  }Z|j&t|Z|k d }?dcd||Z d`  dc|B   dc|B ||Z d`   }^|9d_|( |Zd`   }]t |?dk
rdn|^|?< dk|'dc|@   |A |] |^ |!|N|@   }h| |/ dc|<  |Zd`  }i|j'|
|O|j$|b  |Z }jdu}ky|xDtt|Qd D ].}Y|b|(d krl|j|Y |j(||
 k rl|Zdn }hdv fdwdxdy}l|fdkr|gdz |gdz fdf}mn |gdz |gdz f|fdz |fdz ff}m|t)|gdm |fdm g|m |f|g|O|Y |J|b|j|Y |:|P|c|@|_|Y |h|Y |i|Y |`|Y |Yft*|l|kd{d|id}}n|g |f|nj+d~krX|nj,d }k|nd d |nd d   |R|Yd < |S|Yd < |Yt|Qd` k r|R|Yd`  }g|S|Yd`  }f|Wj |j$|b |j%|b   |Xj |j%|b |j$|b   |Wd d` |Xd d`  |4d` kr8|Wd dk r,|(|j(|Xd  |Wd   }on|j(|Xd |Wd  }o|4|j$|o |Wd< |4|j%|o |Xd< q8W |j-|U|T|j$|b f}U|j-|V|T|j%|b f}VW n@ t.k
r   |Wd tt |U }W|Xd tt |U }XP Y nX 	qW |j|W}W|j|X}X|j|U}U|j|V}Vdn|W|j|U|U |V|V  |
| k|V|U ||
 k @ |Udnk@ < dn|X|j|U|U |V|V  |
| k|V|U ||
 k @ |Udnk@ < |j/| |j0j1dt"|2d  d t"| d r|j2dt"|2d  d t"| d nd  |j3t4|j|U|
 |j|V|
 |W|Xd}p|pj5|d t"|2d  d t"| d ddd |1dkr|j0j1dt"| d rt|j2dt"| d nd  |j3t4|j|U|
 |j|V|
 |W|Xd}p|pj5|d t"| d ddd ~pddl6m7}q |q|||4|
|1|2||d }rqRW |j }st!dt"|s| d  d t"|s| d  d  d S )Nr   )	constante)minimizeminimize_scalarRsunMsunGg     @@cg      Y@sigma_tg     @sigma_kmpmekbr   g       @g     p@g     @@g     L@g     @g     L@g     @g     j@g    YAg    CAg   ecBg    9Ag   @TAg  VxBg     jHAg    Ag  P`Bg    hAg   6Bg  ØBg    8|Ag   Bg  WHBg    חAg   vH7Bg  ļBg    *uAg   kDBg  聰vBg   9zAg   '\RBg  Bg;On?gV-?g rh?g)\(?gzG?gS㥻?g;On?g^I+?gGz?gx&1?gx&1?g=
ףp=?gQ?gI+?gX9v?g+η?g+?gʡE?g&1?gʡE?guV?gbX9ȶ?gbX9?gh|?5?gMb?g(\?g"~j?gy&1?gMbX?g(\?gV-?gK7?gHzG?g)\(?g'1Z?g%C?gS?gx&1?g#~j?g;On?grh|?gq=
ףp?gS?g1Zd?g{Gz?g9v?g      @r   r   g     @g      ?g     v@g@gGz?rE   g   mBgp=
v@gh㈵>    cAg      @g?        Zbounded)boundsmethodargsg     `f@zTheta: g     f@z on 180 degreeg?Zineqc                s(   | d d | d d   d  d  S )Nr   r   r   r   )r   )r(   r4   r   r	   <lambda>0  s    z+radiative_inhibition_comp.<locals>.<lambda>)typefung?maxiterd   )rW   rY   rH   constraintstoloptionsTg      I@r   Z	wind_starZ_paramz.h5)r   r>   uxuyz/winds/wind_starZwindt)formatZwind_star2_paramz/winds/wind_star2_param)plotsz/windszI have worked during g      N@z min or g      @z hours.g    ~~Ag    ~~Agyy?gAOb?gŃ̷?gyy?gAOb?)rV   rU   rg   rg   rg   rg   rg   rg   rg   rg   )8sysr   r   
constantesrI   matplotlib.pyplotpyplotmatplotlib.mlabmlab
matplotlibZscipy.optimizerJ   rK   osZpandastimer'   rG   uniqueranger   minmaxargminr   intmeanr&   r"   r0   r   appendlenprintstrroundr1   r2   wherearccosatanrD   rH   successr\   concatenateKeyboardInterruptchdirpathexistsremoveZ	DataFramedictZto_hdfZplots_windsrf   )ttype1type2Mdot1Mdot2Per
mass_ratior   r   ZTeff_1ZTeff_2r   directmuH_mass_fracbeta1beta2iparrh   r   r   rI   pltrm   rn   rJ   rK   ro   pdrp   time1rL   rM   r   	light_velrP   rQ   ZmhrR   rT   Zsigma_er'   Zabbott82_teffZabbott82_densZk_vecZ	alpha_vecZTuniqmass_sumr   r   Znbr_starZistarvinf2vinf1v1v2vlocalZL1ZL2r   r   r   Zrhomeanind0indr   k1r   ZK2cZK1cc1c2r   r   r   r*   r   ZzcZvcZVth1r)   r+   ZnurZur_vecZ
utheta_vecZrvecZx_vecZy_vecrb   rc   r=   r2r    ZfluxZflux2r!   r:   r-   Zsol1r7   r9   Znutheta_Zuthetaurr;   r<   r8   ZtoleZconsZbndsZsolangleZdf_xyzrf   nothingtime3r   )r(   r4   r	   radiative_inhibition_comp   s   

:::4
$






8>  $$ . .
@84,
"0002$






0( "",0(&
 b
"""



::
T*0
4*  r   N)__doc__r
   r"   r&   r0   rD   rH   r   r   r   r   r	   <module>'   s   '