Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

Turbulence-Resolving Integral Simulations (TRIS) applies a moment-of-momentum integral approach, derived from Navier-Stokes, to run the time evolution of the integrated velocity and pressure fields. The Python code here provides an animation of a chosen field depending on the user input.

71 views
unlisted
ubuntu2204
o

�m6g	.�@s�ddlZddlmZddlmZddlZddlZdZ	ej
Z
ejZejZGdd�d�Z
Gdd�d�Zdd	�Zd
d�Zdd
�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�ZdS)�N)�cmg�����|�=c@s6eZdZdZdejdejddfdd�Zdd�ZdS)	�Mshz9Base grid class containing physical and wavenumber grids.��@cCs||_||_||_||_|||_|||_t�d||j|�|_t�d||j|�|_	tj
|j|j	dd�\|_|_tj
|j|_tj
|j|_dtj
||_dtj
||_||_|dd|_d|jtj�|�|_t�d|j|j�|_tj
|j|jdd�\|_|_dS)Nr�ij)�indexingr�)�Lx�Lz�nx�nz�dx�fz�np�linspace�x�z�meshgrid�X�Z�pi�kx_max�kz_max�dkx�dkz�nkx�nkz�fft�fftfreq�kx�kz�KX�KZ)�selfr	r
rr�r$�3/home/user/S002211202200903X-Figure-1/periodic2d.py�__init__s$

 zMsh.__init__cCst�|j|jf�S�N)r�onesrr�r#r$r$r%�one&szMsh.oneN)�__name__�
__module__�__qualname__�__doc__rrr&r*r$r$r$r%rsrc@s"eZdZdZdKdd�ZdLd	d
�Zdd�Zd
d�Zdd�ZdMdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Zd<d=�Zd>d?�ZdNdAdB�Z dCdD�Z!dEdF�Z"dGdH�Z#dOdIdJ�Z$dS)P�VarzBase solution variable class.N�var�None�o�kcCs�||_||_||_||_||_t�|�|j|jfkr!|�	|�dSt�|�|j
|jfkr3|�|�dS|�	t�
|j|jf��|�tj
|j
|jftd��d|_d|_dS)N��dtypeF)�msh�name�ls�mrk�clrr�shaperr�setvalrr�sethat�zeros�complex�hasval�hashat)r#r6�val�hatr7r8r9r:r$r$r%r&,s
zVar.__init__cCs~t|j|j|j|j|j�}|jrt�|j	�|_	d|_|j
r)tj|jtd�|_d|_
|r.||_|r3||_|r8||_|r=||_|S)NTr4)
r/r6r7r8r9r:r@r�arrayrBrArCr?)r#r7r8r9r:�newr$r$r%�copy=s zVar.copycCst�|�|_d|_d|_dS�NTF)rrDrBr@rA)r#�	val_arrayr$r$r%r<Os
z
Var.setvalcCs tj|td�|_d|_d|_dS)Nr4TF)rrDr?rCrAr@)r#�	hat_arrayr$r$r%r=Ts
z
Var.sethatcCs:t�|t�|jj|jjf��|_d|_d|_|�	�dSrG)
rrDr(r6rrrBr@rAr)r#�constr$r$r%�set_constantYs"zVar.set_constant��?cCsF|tj�|jj|jj�}|�t�||jj|jjf��|��dSr')	r�random�randnr6rrr<�reshaper)r#�sigma�randnsr$r$r%rN_sz	Var.randncCsB|js|jrtj�|j�|jj|jj|_	d|_dSt
d��dS)NTz+Called fft for variable with hasval = False)rAr@rr�rfftnrBr6rrrC�	Exceptionr)r$r$r%rd� 
�zVar.fftcCsB|js|jrtj�|j�|jj|jj|_	d|_dSt
d��dS)NTz,Called ifft for variable with hashat = False)r@rArr�irfftnrCr6rrrBrSr)r$r$r%�ifftmrTzVar.ifftcCs<|jr
t|j||jd�S|jrt|j||jd�Std��)N�rC�rBz+Called smult with neither hashat nor hasval)rAr/r6rCr@rBrS)r#�scalarr$r$r%�smultvs
z	Var.smultcCs�|jr|jrt|j|j|jd�S|jr3|jr3t|j�}|��|��|�|j|j�|��|Std|j�td|j�td|j�td|j�t	d��)NrX�self.hashat = �self.hasval = �other.hashat = �other.hasval = z*mult called with neither hashat nor hasval)
r@r/r6rBrArVr<r�printrS)r#�otherrEr$r$r%�mult~s
zVar.multcCs`|jrt|jt�t�|j��d�S|jr,|��t|jt�t�|j��d�}|�	�|St
d��)NrXz*sqrt called with neither hashat nor hasval)r@r/r6r�sqrt�absrBrArVrrS)r#rEr$r$r%rb�szVar.sqrtcCsx|jrt|j|t�|jj|jjf�d�}|��|�|�S|j	r8t|j|t�|jj|jjf�d�}|�|�St
d��)NrXz*sadd called with neither hashat nor hasval)rAr/r6rr(rrr�addr@rS)r#rYrEr$r$r%�sadd�s$
$
zVar.saddcCs||jr|jrt|j|j|jd�S|jr"|jr"t|j|j|jd�Std|j�td|j�td|j�td|j�td��)NrWrXr[r\r]r^z)add called with neither hashat nor hasval)rAr/r6rCr@rBr_rS�r#r`r$r$r%rd�szVar.addcC�\|jst�d�|��t|j|jd|j|j|j	�}d|jj
|j|_d|_|��|S)NzHad to call fft within diff_x�_dx��?T)
rA�warnings�warnrr/r6r7r8r9r:r!rC�filter_kxmax�r#�derivr$r$r%�diff_x��
z
Var.diff_xcCrg)NzHad to call fft within diff_z�_fzriT)
rArjrkrr/r6r7r8r9r:r"rC�filter_kzmaxrmr$r$r%�diff_z�rpz
Var.diff_zcCsj|jst�d�|��t|j|jd|j|j|j	�}|jj
d|jjd|j|_d|_|�
�|S)NzHad to call fft within lapl�_laplrT)rArjrkrr/r6r7r8r9r:r!r"rC�
filter_max)r#�laplr$r$r%�	laplacian�s
"z
Var.laplaciancCs<|jjd|jjd}|jt�|d||�|_dS�Nr)r6r!r"rCr�exp)r#�nu�dt�k2r$r$r%�viscous_damp�s$zVar.viscous_dampcCs�|jrZ|jrZtj�|j�|jj|jj}tj	�
|j|�tkr/t
dttj	�
|j|����tj�|j�|jj|jj}tj	�
|j|�tkrXt
dttj	�
|j|����dSt
dt|j�dt|j���)NzCheck zero: zCheck failed: hashat = z; hasval = )rAr@rrrUrCr6rr�linalg�normrB�	check_tolrS�strrR)r#rBrCr$r$r%�check�s���z	Var.checkcCsl|jj|jjkrR|jj|jjkrR|jd|jjd�d|jj�f|jd|jjd�dd�f<|j|jj|jjdd�d|jj�f|j|jjdd�dd�f<dS|jj|jjkr�|jj|jjkr�tj|jj|jjftd�|_|jd|jjd�dd�f|jd|jjd�d|jj�f<|j|jjdd�dd�f|j|jj|jjdd�d|jj�f<dStd��)Nrr4zNot implemented yet: cp_hat())r6rrrCrr>r?rSrfr$r$r%�cp_hat�s  �( �  �,�z
Var.cp_hatcCsFd}d|jt�|jj�||k<d|jt�|jj�||k<d|_dS)N��&�.>�F)rCrrcr6r!r"r@)r#�kx_cut�kz_cut�k_tolr$r$r%�filter�s
z
Var.filtercCs|�|jj|jj�dSr'�r�r6rrr)r$r$r%ru�szVar.filter_maxcCs|�|jjd|jj�dSrxr�r)r$r$r%rl��zVar.filter_kxmaxcCs|�d|jj|jj�dSrxr�r)r$r$r%rr�r�zVar.filter_kzmaxcCs(|�d|jjdd|jjd�dS)Nr�r�r)r$r$r%�filter_third�s(zVar.filter_thirdcCs |�|jjd|jjd�dSrxr�r)r$r$r%�filter_half� zVar.filter_halfcCs |�|jjd|jjd�dS)Nr)r�r6rr r)r$r$r%�
filter_allr�zVar.filter_allcCs,|jrt�|jd�S|jrt�|j�SdS)N�rr)rAr�realrCr@�meanrBr)r$r$r%r�	s
�zVar.meancCs6|jr|��}d|d<t�|�S|jrt�|j�SdS)N�r�)rA�spectrumr�sumr@r0rB�r#r�r$r$r%r0s
�zVar.var�dcCsL|jr
|js
|��tj|j|dd�\}}|dd�t�|�d}||fS)NT)�bins�density�����r)rAr@rVr�	histogramrB�diff)r#�nbins�pdf�edgesr�r$r$r%r�s
zVar.pdfcCs|js|��t�|j�dSrx)rArrrcrCr)r$r$r%r�szVar.spectrumcC�|��}tj|dd�S)Nr��axis�r�rr�r�r$r$r%�
spectrum_x#�zVar.spectrum_xcCr�)Nrr�r�r�r$r$r%�
spectrum_z'r�zVar.spectrum_zcCsL|jr
|js
|��t�|j�t�|j�t�|j�f}td|d|�dS)Nzmin/mean/max of z is:)	rAr@rVr�minrBr��maxr_)r#r7�reportr$r$r%r�+s"z
Var.report)NNr0r1r2r3)NNNN)rL)r�)r0)%r+r,r-r.r&rFr<r=rKrNrrVrZrarbrerdrorsrwr}r�r�r�rurlrrr�r�r�r�r0r�r�r�r�r�r$r$r$r%r/)sF


		



r/cCsp|jst�d�|��|jst�d�|��t|j�}|�d|jj|jd|jj	|j�|�
�|S)Nz"Had to call fft within vorticity()ri)rArjrkrr/r6r=r!rCr"ru)�u�w�vortr$r$r%�	vorticity1s


*r�cCsn|js|��||}|jj}|jj}||||d}t|j�}|�|jt�	d||��|�
�|S)N�>��N}a+�࿩rArr6r!r"r/r=rCrryru��f�ell�ell2rr r|�gr$r$r%�filter_Gauss=s
r�cCsr|js|��||}|jj}|jj}||||d}t|j�}|�|jdt�	d||��|�
�|S)Nr�rr�r�r�r$r$r%�filter_Gauss_highpassIs
"r�cCsB|js|��d}t|j|jd�}d|jt�|jj�||k<|S)Nr�rWr�)rArr/r6rCrrcr")r�r�r�r�r�r$r$r%�filter_highpassUsr�cCs�|js|��|js|��|j}|j}|j}||||d}|||}|||}|||}d||dk<d||dk<d||dk<t|�}	t|�}
|	�d||j||j�|
�d||j||j�|	��|
��|	|
fS)Nr�r�rL)	rArr6r!r"r/r=rCru)�f_x�f_zr6rr r|�Pxx�Pxz�Pzz�r_x�r_zr$r$r%�
projection]s*r�cCsd|jr|jrt||�S|jr|jrt||�Std|j�td|j�td|j�td|j�td��)Nz
f_x.hashat = z
f_x.hasval = z
f_z.hashat = z
f_z.hasval = z)Called div with neither hashat nor hasval)rA�div_hatr@�div_valr_rS�r�r�r$r$r%�divus

r�cCs.|jr|jr|��|��t||�Std��)Nz Called div_val with hasval=False)r@rr�rSr�r$r$r%r��s

r�cCsV|jr'|jr'|j}|j}|j}t|d||jd||jd�}|��|Std��)NrirWz Called div_hat with hashat=False)rAr6r!r"r/rCrurS)r�r�r6rr r�r$r$r%r��s$r�c
Cs�t|j�}t|j�}|��|��t�|jd|jd�d}|j|}|j|}|||}	|�|	|�|�|	|�|��|��|��|��||fS)Nrr�)	r/r6rVrrbrBr<rr�)
r�r��u_avg�pwr�fxr�u_mag�e_x�e_z�frictionr$r$r%r��s



r�)�numpyr�matplotlib.pyplot�pyplot�plt�
matplotlibrrj�
subprocessr�r�cos�sinrr/r�r�r�r�r�r�r�r�r�r$r$r$r%�<module>s,