B
    Ě^T0                 @   s   d dl Zd dlmZ d dlmZ d dlZd dl	m
Z
 dd ZdddZdd	 ZdddZdddZdddZdd ZejfddZdd Zdd Zdd ZdS )    N)t_star_funcc             C   sH   t j|t jtdtj t j |    t|d  dt j |     S )N      )cT0_weld	rhoc_weldnpsqrtpia_weldexp)tyqvd r   F/Users/vegardjervell/Documents/6_semester/matmod/matmod11V4/welding.pyT_func   s    r   Fc             C   s   ddt j |   }dt jtdtj t j |    }tj|d  tt|dd}tjtt||dd}tj||dd}tj||dd}|dkrt j	|t
|  S t j	|t
|  d S d S )N   r   r   r   )axesFi  )r   r   r   r   r	   r
   	tensordotoneslenr   r   )r   r   r   celciusa1a2Zexp_coreZpre_expr   r   r   T_func_vectorized   s    $ r   c        	         s   t jtjtjtjdd  t tjtjtj	t jdddd} t jdddd}t jddd	d}t jdd
dd}t jd
ddd}t jdddd}t 
dg}| ||||||g} fdd|D }||fS )N)stepi  r   r   g?   g      ?
   r      2   d   c                s   g | ]}t | d dqS )T)r   )r   ).0r   )	qvd_arrayt_liner   r   
<listcomp>/   s    z!get_Tt_curves.<locals>.<listcomp>)r   aranger   qvd_slider_minqvd_slider_maxqvd_slider_steplogspace
t_min_weld
t_max_weldt_points_weldarray)	y_vals1y_vals2y_vals3y_vals4y_vals5y_vals6y_vals7y_valstempsr   )r#   r$   r   get_Tt_curves!   s    r8   Tc          
      s  | d } t jdddd}t jdddd}t jddd	d}|d
krt ddd}t jdddd}t jdddd}t jdddd}dg}	|||||||	gnt ddd}|||gd}
|
t fddttD  }td  fdd|D }tj	ddgd x~t
|D ]p\}}d
}x`|D ]X}|d
kr`tj|t||| |tt|dd dd d}ntj|t||| |d q"W qW tjddd td |d
krtd tjd dd! tjd"dd! td# d S )$Ni  r   r   g?)r   r   g      ?r   r   Tr!   r   r    gffffff?c                s   g | ]}|t   qS r   )r   )r"   i)r6   r   r   r%   G   s    zplot_Tt_V1.<locals>.<listcomp>YlOrRd_rc                s   g | ]} |qS r   r   )r"   x)cmapr   r   r%   J   s          )figsizemm:)colorlabel	linestyleF)rC   zupper right   )locfontsizelogzTime [s])rH   u   Temperature [℃]zTemperature as a function of time at different distances from weld.
Distance increases linearly from one dotted line to the next by $\Delta y = \frac{h}{10}$,
where $h$ is the distance at the furthest of the dotted lines)r   r&   r*   r.   ranger   cmget_cmappltfigurezipplotr   strroundlegendxscaleyscalexlabelylabeltitle)r   ylogr/   r0   r1   r$   r2   r3   r4   r5   	max_colorcolor_range
color_listvalsrC   rD   r   r   )r=   r6   r   
plot_Tt_V14   sB    
$


$


r^   c          	      s  t | tj tj }tjtjtjtjdd }tjdddd}tjdddd}tjddd	d}|d
krtddd}tjdddd}tjdddd}	tjdddd}
tdg}|||||	|
|gntddd}|||gd}|tfddt	t
D  }td  fdd|D }tjddgd xt|D ]\}}t|||}tj||d d d|f |tt|d dd dd x6t|d d d	d |f D ]}tj|||d qW q<W tjddd td |d
krtd tjddd  tjd!dd  td" d S )#N)r   i  r   r   g?r   g      ?r   r   Tr9   r!   r   r    gffffff?c                s   g | ]}|t   qS r   )r   )r"   r:   )r6   r   r   r%   v   s    zplot_Tt_V2.<locals>.<listcomp>r;   c                s   g | ]} |qS r   r   )r"   r<   )r=   r   r   r%   y   s    r>   r?   )r@   rA   rB   )rC   rD   rE   )rC   zupper rightrF   )rG   rH   rI   zTime [s])rH   u   Temperature [℃]zTemperature as a function of time at different distances from weld.
Distance increases linearly between each pair of dotted lines by $\Delta y = \frac{h}{10}$,
where $h$ is the distance at the furthest of the two.)intr   r'   r)   r   r&   r(   r*   r.   rJ   r   rK   rL   rM   rN   rO   r   rP   rQ   rR   	transposerS   rT   rU   rV   rW   rX   )r   rY   	qvd_indexr#   r/   r0   r1   r$   r2   r3   r4   r5   rZ   r[   r\   r   rC   r7   tempr   )r=   r6   r   
plot_Tt_V2b   s@    
$
"


rc   c          
      s"  t | tj tj }d}|tfddttD  }t	d  fdd|D }t
jddgd |d	krxttD ]}	||	 }
t
j||
d d d
|f ||	 tt|	 d
 d
d dd x8t|
d d dd |f D ]}t
j||||	 d qW qW n|d d }d d xttD ]}	||	 }
t
j|d d |
d dd
|f ||	 dtt|	 d
 d d dd xBt|
d ddd |f D ]"}t
j|d d |||	 d qW q.W t
jddd t
d |d	krt
d t
jddd t
jddd t
d d S )Ngffffff?c                s   g | ]}|t   qS r   )r   )r"   r:   )r6   r   r   r%      s    zplot_Tt_V3.<locals>.<listcomp>r;   c                s   g | ]} |qS r   r   )r"   r<   )r=   r   r   r%      s    r>   r?   )r@   Tr   rA   rB   )rC   rD   rE   r   )rC      <   zy = zupper rightrF   )rG   rH   rI   zTime [s])rH   u   Temperature [℃]zTemperature as a function of time at different distances from weld.
Distance between lines is $\Delta y = \frac{h}{10}$ between each pair of dotted lines, where $h$ is the distance at the furthest of the two dotted lines.)r_   r   r'   r)   r   r.   rJ   r   rK   rL   rM   rN   rP   rQ   rR   r`   rS   rT   rU   rV   rW   rX   )r   Z	Tt_curvesr6   r$   rY   ra   rZ   r[   r\   r:   r7   rb   r   )r=   r6   r   
plot_Tt_V3   s8    $

 "$$"(


rf   c                s   | d } | t d tjt dt j     fdd} fdd}d}d}|}|| || }x@t||kr|| }x|d	kr|d
7 }qzW || || }qdW |S )Ni  g      r   c                s   t jt j  |   S )N)r   r   	Tsol_weld)r   )r   r   r   <lambda>   s    zfind_max_y.<locals>.<lambda>c                s     | d  S )Nr   r   )r   )r   r   r   rh      s    gư>g?r   gh㈵>)r   r   r   r   r	   r
   abs)r   nullfuncnullfunc_deritolZy_starty0r   r   )r   r   
find_max_y   s    $
rn   c                s   d  fdd}fdd}dd d  dt j  }td krTdS || || }d	}x*t||kr|| }|| || }qlW |S )
Ni  c                s   t |   S )N)r   )r   )Tr   r   r   r   rh      s    zfind_t.<locals>.<lambda>c                sh   d dt j |   d  dt j tdtj t j    t| d td  dt j |    S )Nr   r   r   g      )r   r   r   r   r	   r
   powerr   )r   )r   r   r   r   rh      s    g      ?r   r   gh㈵>)r   r   rn   ri   )r   r   ro   rj   rk   t0r   rl   r   )ro   r   r   r   find_t   s    rs   c       
         s   |d }t dt  d d d tj}t |}t ||d gf}t  fdd|D }t|||}t j	
||}dt| }t j	j|d}t d||}	|	S )	Ni  r   rq   r   c                s   g | ]}|k | k qS r   r   )r"   r   )t_endt_startr   r   r%      s    z&scheill_integrator.<locals>.<listcomp>z	ijk,i->jk)r   r*   log10r   weld_scheil_integrand_pointsdiffconcatenater.   r   mamasked_arrayr   MaskedArrayfilledeinsum)
rv   ru   Zy_listZqvd_listZt_listdtZt_maskr7   Z	integrandIr   )ru   rv   r   scheill_integrator   s    "
r   c                 s   t tjtjtj t jtjtjtj	d} t 
 fdd| D }t 
 fdd| D }t|||  }ddtj |tj   }| | fS )N)r   c                s   g | ]  fd dD qS )c                s    g | ]}t | tjd  dqS )r   )ro   )rs   r   Teq)r"   r   )r   r   r   r%     s    z,get_Xq_curves.<locals>.<listcomp>.<listcomp>r   )r"   )qvd_line)r   r   r%     s    z!get_Xq_curves.<locals>.<listcomp>c                s   g | ]  fd dD qS )c                s   g | ]}t | tjd qS ))ro   )rs   r   	Tmin_weld)r"   r   )r   r   r   r%     s    z,get_Xq_curves.<locals>.<listcomp>.<listcomp>r   )r"   )r   )r   r   r%     s    r   )r   linspacer   Xq_q_minXq_q_maxXq_q_pointsr&   Xq_y_minXq_y_max	Xq_y_stepr.   r   Xcn)r6   rv   ru   r   Xr   )r   r   get_Xq_curves	  s    r   c          	   C   s   t jddgd td}d}d}xtt| D ]z}|dkr|t j|| | ||| t|  tt|| dd d	d
 d}q0t j|| | ||| t|  dd |d7 }q0W t j	dd t j
ddd t jddd t jddd d S )Nr>   r?   )r@   r;   g333333?rd   r   rA   -)rC   rD   rE   z--)rC   rE   r      )rH   z/$\frac{q_0}{vd}$ $\left[\frac{kJ}{mm^2}\right]$rF   u   Fraction transformed [–]zpDegree of transformation completion as a function of welding effect per area,
for different distances from weld.)rM   rN   rK   rL   rJ   r   rP   rQ   rR   rS   rV   rW   rX   )r   r   r6   r=   max_collabel_counterr:   r   r   r   plot_Xq  s     
&r   )F)T)T)T)numpyr   matplotlib.pyplotpyplotrM   Zmatplotlib.cmrK   	constantsr   c_curvesr   r   r   r8   r^   rc   rf   rn   r   rs   r   r   r   r   r   r   r   <module>   s   

.
.
3