a
    fQb{6                     @   s   d dl Zd dlZd dlmZ ej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 ZdddZdd Zd dl Zd dlZd dl Zd dlZdd ZdS )    N)functionc                 C   sj   t | d |d |tj }|d | d  |d | d   }|j|j| d j  | d j tj }||fS Nr      )nplinspaceu	kilometer	magnitude)coord1coord2ZnPointsxmy r   W/scratch/m18/ac9890/paper2/Production_Models_correctedTIme/NoArc_NoEro/ModelGeometry.pyinterpolateTracer   s     &r   c                 C   s   | S Nr   )Listr   r   r   
fuseInList   s    r   c                 C   s0   g }d}| D ]}||k r"| | |d }q|S r   )append)ListIZ	maxAmountListFcounterir   r   r   
limitArray   s    

r   c                 C   s>   g }g }| D ](}|d g}|d g}|| }|| }q||fS r   r   )listsfListxfListyr   ZfauxXZfauxYr   r   r   fuseList   s    


r   c                 C   sJ   g }g }| D ]4}t |d |d D ]\}}||g }||g }q"q||fS r   zip)r   r   r   r   jkr   r   r   	fuseListM$   s    
r#   c                 C   s`   d}d}|d }|d }t ||D ](\}}| d |kr"| d |kr"|d }q"|dkrXd}||fS NFr   r   Tr   ZnumTupler   Zansr   ListXListYr   r!   r   r   r   
isRepeated/   s    
r(   c                 C   sX   d}d}|d }|d }t ||D ],\}}| d |kr"| d |kr"|d }d}q"||fS r$   r   r%   r   r   r   isInList;   s    r)   c                 C   s   g }g }| d }| d }d}t ||D ]\\}}|dkrL|| || n.t||f||gd dkrz|| || |d }q&||fS )Nr   r   F)r    r   r)   )r   ZlistFxZlistFyr&   r'   r   r   r!   r   r   r   
rmRepeatedF   s    



r*   c                 C   s"   g }| D ]}| t| q|S r   )r   GEOnd)ZlistIr   r   r   r   r   ListToNdW   s    r-   c                 C   s   |t j }t|| t j }t|| t j }dt j }| |d t j  |f}	| |d t j  |f}
| |d t j  | || f}| |d t j  | || f}tj|	|
||g}|S )Nd      )	r   degreer   cosr   sinr+   shapesPolygon)x0y0widthdipAngle	dipLengthangledx1dy1r   v1v2v3v4weakr   r   r   generateWeakzone]   s    

rB   Fc           =   	   C   s   |t j }t|| }t|| }t|| }t|| }| ||  |f}| |||   |f}| |||   || f}| ||  || f}tj||||g}d}|d }|| }| |||   ||  }g }td|d D ]b}||f}|||  |f}|||  || f}||| f}|	tj||||g |||  }q| |||   |f} | |||   ||  || f}!| |||   ||  || | f}"| |||   |||   || | f}#| |||   ||  || f}$tj| |!|"|#|$g}%|%|B }&t
|| |!|"||g}'dt j }(|	})|	t j }	|
t j }*d}+| |||   ||(|	   |f},| |||   ||(|	 |*   |f}-| |||   ||(|	 |*   || f}.| |||   ||(|	   || f}/tj|,|-|.|/g}0|)dkr| |||   ||(  |f}1| |||   ||(|	   |f}2| |||   ||(|	   || f}3| |||   ||(  || f}4tj|1|2|3|4g}5|5}+t
|1|2|3|4g}6d}7dt j }8|dkr
| ||  |f}9| ||8  |f}:| ||8  || f};| ||  || f}<tj|9|:|;|<g}7|%|g|+|0|'|6|7|fS )N   r   r/         T)r   r0   r   r1   r2   r+   r3   r4   ranger   r   r   )=r5   r6   Z
Lthicknessr8   r9   	maxLengthZendOff0ZendOfforientationZExLenZBarcTZbStripr:   r;   r<   dx2dy2ZF1ZF2ZF3ZF4Zsubducting2nsZlenRatioZconPLenZxCerosegr   Zvx1Zvx2Zvx3Zvx4D1D2ZD3ZD4ZD5Zsubducting1
subductingZSlabTracersZexDZExlenwlenZarcLZwe1Zwe2Zwe3Zwe4ZweakkZsa1Zsa2Zsa3Zsa4ZarcA
ArcTracersZbStripLZbuDZbs1Zbs2Zbs3bs4r   r   r   SubLayerCreatoro   sr    
 $( 


 $($
 $ 

rS   c           1      C   s  |t j }t|| }t|| }t|| }t|| }| |f}||||   |t||||   |  |
   |f}||||   |t||||   |  |
   || f}| || f}tj||||g}t	||||g}|}|dt j
 k r||||   }||||   |t||||   |  |
   |f}||||   ||  ||	  |f}||||   ||| | |   ||  ||	  |||  f}||||   |t||||   |  |
   |||  f}tj||||g}t	||||g}dt j
 }|}|d ||  |f} |d ||  |||  f}!|d ||d   |||  f}"|}#|#d dt j
 kr|#d |||  f}#n|d |f}tj|| |!|#g}$t	|| |!|#g}%|d }||||   ||  ||	  |f}&||||   ||	  |f}'||||   ||| | |   ||	  |||  f}(||||   ||| | |   ||  ||	  |||  f})tj|&|'|(|)g}*|||  }|| | | }+|	|+ }	||||   ||  ||	  |f},||||   ||	  |f}-||||   ||| | |   ||	  |||  f}.||||   ||| | |   ||  ||	  |||  f}/tj|,|-|.|/g}0|||*|0|||$|%fS )Nr   g      i@r/   r   g      Yg       @)r   r0   r   r1   r2   absoluter+   r3   r4   r   r   )1X0r5   r6   	thicknessdecoupr8   r9   rG   rH   ZoffsLpropTpropr:   r;   r<   rI   rJ   f1f2Zf3f4Zover1ZTracersCratonZ
overridingp1p2Zp3Zp4rA   ZTracersWeakZtransLengthtr1tr2Ztr3Ztr5Ztr4ZtransitZTracersTransitZde1Zde2Zde3Zde4Zdecou1offsetLZDe1ZDe2ZDe3ZDe4Zdecou2r   r   r   OverCreatorL   s\    
6:6$@>
 $8@$8@rb   c           6      C   sl  dt j }|t j }t|| }t|| }|dkrR| jd | }| jd }n| jd | }| jd }|t j }|t j }|t j }|t j }g }g }g }g }g }g }g }|| }d}dt j }dt j }d}td|D ] }|| } t	||| |||||| ||	| |
| || }!|
|!d d  |
|!d d  |
|!d d |!d d B  |
|!d  |	| dkr|
|!d  || dkr|
|!d  |
|!d	  |!d
 }"|!d }#|dkr|"}$|#}%d}nt|$|"g}$t|%|#g}%|| }|| }q|t j }g }&g }'g }(g })g }*|d | }+d},dt j }-|| | | }.d}td|D ]}/t||||, |+||||||-ddd}0|&
|0d  |'
|0d  |(
|0d  |(
|0d
  |)
|0d	  |0d }"|0d }1|0d }2|dkr|"}*|2}3|1}4d}n$t|*|"g}*t|3|2g}3t|4|1g}4|,|+ },|-|. }-qV||||   }5|||g|&|'||(|||5g|$|*|%|3||)|4|fS )Ng      >@r   r   g        Fr/   T         rC   gUUUUUU?g      ?)rX   rY      )r   r   r0   r   r1   r2   maxCoordminCoordrF   rS   r   r#   rb   )6Modelr6   rV   r8   r9   rG   rH   ZSLayersZOLayersZExLensZBarcTsZbStripsrW   offsetr:   r;   r<   r5   rU   rO   ZsubductingDZsubductingFarcZbstopsectionsZweaakratioZlayZeRatZeOff0startr   ZeOffZsubductingDataZauxTZauxAT	SPTracersrQ   ZsPZwPdecZ
transition	OPTracersZratio2ZdlayZoffset0Lra   r!   ZovedataZtransitTZcratonTZCratTracersZTransitTracersxlimitr   r   r   SubductionCreator   s    








.



$
rs   )F)UWGeodynamicsr+   numpyr   
underworldr   fnUnitRegistryr   r   r   r   r   r#   r(   r)   r*   r-   rB   rS   rb   rs   r   r   r   r   <module>   s(   	

K>