py4lesgo是基于python编写的用于后处理JHU的LESGO求解器输出数据的包。
安装方式
git clone https://github.com/Bowen-Du/py4lesgo.git
cd py4lesgo
python setup.py install
该程序定义class Params,其中包含filepath+"\output\lesgo_param.out"中的参数(需根据LES版本进行对应修改)。
from py4lesgo.Params import Params
filepath=r"..."
#x, y 分别是无量纲的风力机位置参数,充当参照物的作用, D是无量纲的风轮直径参数
p=Params(filepath,x,y,D)该程序定义了class Tavg, class Snap, class Snap_X, class Snap_Y, class Snap_Z, class Point,不同的class可以将数据载入到程序的工作空间。
| class | file name | 'uv' grid | 'w'grid |
|---|---|---|---|
| Tavg | veluv_avg.bin | ||
| Tavg | velw_avg.bin | ||
| Tavg | vort_avg.bin | ||
| Tavg | scalar_avg.bin | ||
| Tavg | scalar2_avg.bin | ||
| Tavg | vel2_avg.bin | ||
| Tavg | force_avg.bin | ||
| Tavg | pres_avg.bin | $\bar{p}^*s=\bar{p}+1/3\overline{\tau{kk}}$ | |
| Tavg | ps_uv_avg | $\overline{p_s^*u},\overline{p_s^v},\overline{p_s^w},\overline{p^_sp^_s}$ | |
| Tavg | c2_opt2.bin | ||
| Tavg | tau_avg.bin | ||
| Tavg | rs.bin | ||
| Tavg | scalar_rs.bin | ||
| Tavg | ps2_avg.bin | $\overline{p_s^{\prime} p_s^{\prime}},\overline{p_s^{\prime} u^\prime},\overline{p_s^{\prime} v^\prime},\overline{p_s^{*\prime} w^\prime}$ | |
| Tavg | ppSijp.bin | $\overline{p_s^{\prime} S_{11}^\prime},\overline{p_s^{\prime} S_{12}^\prime},\overline{p_s^{\prime} S_{13}^\prime},\overline{p_s^{\prime} S_{22}^\prime},\overline{p_s^{\prime} S_{23}^\prime},\overline{p_s^{\prime} S_{33}^\prime},$ | |
| Tavg | uipujpukp.bin | ||
| Tavg | uptaup.bin | ||
| Tavg | fipujp.bin | ||
| Snap | vel.<timestep>.bin | ||
| Snap | scalar.<timestep>.bin | ||
| Snap | pres.<timestep>.bin | $p^*s=p+1/3\tau{kk}$ | |
| Snap | vort.<timestep>.bin | ||
| Snap_X | vel.x-<xloc>.<timestep>.bin | ||
| Snap_X | scalar.x-<xloc>.<timestep>.bin | ||
| Snap_X | pre.x-<xloc>.<timestep>.bin | $p^*s=p+1/3\tau{kk}$ | |
| Snap_Y | vel.y-<yloc>.<timestep>.bin | ||
| Snap_Y | scalar.y-<yloc>.<timestep>.bin | ||
| Snap_Y | pre.y-<yloc>.<timestep>.bin | $p^*s=p+1/3\tau{kk}$ | |
| Snap_Z | vel.z-<zloc>.<timestep>.bin | ||
| Snap_Z | scalar.z-<zloc>.<timestep>.bin | ||
| Snap_Z | pre.z-<zloc>.<timestep>.bin | $p^*s=p+1/3\tau{kk}$ | |
| Point | vel.x-<xloc>.y-<yloc>.z-<zloc>.dat | ||
| Point | scalar.x-<xloc>.y-<yloc>.z-<zloc>.dat | ||
| Point | pre.x-<xloc>.y-<yloc>.z-<zloc>.dat | $p^*s=p+1/3\tau{kk}$ |
Notice:$\bar{}$ represents time-averaged.
from py4lesgo.LoadLESOutput import Tavg,Snap,Snap_X, Snap_Y, Snap_Z, Point
#p是Params的一个实例,coord用来控制读入数据的大小,filepath是代表数据的存储路径
tavg=Tavg(p, coord, filepath, Scalar=False, Budget=False, modify=True)
snap=Snap(p, coord, snap_time, filepath, Scalar=False)
snap_x=Snap_X(p, coord, snap_time, filepath, xloc, Scalar=False)
snap_y=Snap_Y(p, coord, snap_time, filepath, yloc, Scalar=False)
snap_z=Snap_Z(p, snap_time, filepath, zloc, Scalar=False)
point_xyz=Point(filepath, xloc, yloc, zloc, Scalar=False)
#Scalar用于控制是否读入标量数据,Budget用于控制是否读入计算Reynolds Stress Budget的时均统计量ps2_avg.bin,ppSijp.bin,uipujpukp.bin,uptaup.bin,fipujp.bin,modify用于控制对rs.bin中数据的修正,通过看LESGO程序的版本或者风力机附近u'w'的分布来确定MKE budget: $$ \begin{equation} \underbrace{\frac{\partial \bar{u}i\bar{u}i/2}{\partial t}}{Storage\approx0}=\underbrace{-\bar{u}j\frac{\partial \bar{u}i\bar{u}i/2}{\partial x_j}}{mc}\underbrace{-\frac{\partial \bar{p}^{*}\bar{u}j}{\partial x_j}}{pt}\underbrace{-\frac{\partial \overline{u^\prime_iu^\prime_j}\bar{u}i}{\partial x_j}}{tc}\underbrace{+\frac{\partial \bar{\tau }{ij}^d}{\partial x_j}}{df}\underbrace{+\overline{u^\prime_iu^\prime_j}\frac{\partial \bar{u}i}{\partial x_j}}{tp}\underbrace{-\bar{\tau }{ij}^d\frac{\partial \bar{u}i}{\partial x_j}}{dp}\underbrace{+\mathrm{g}\bar{u}3(\frac{\bar{\theta}-\langle{\bar{\theta}}\rangle}{\langle{\bar{\theta}}\rangle})}{\mathrm{g}a}\underbrace{+\frac{\bar{f}_i\bar{u}i}{\rho}}{wt}\underbrace{+F_P\bar{u}1}{fp} \end{equation} $$
基于LESGO输出数据计算上面MKE budget中的每一项(注意亚格子应力项)
取一长方体控制体$(x_1\sim x_2, y_1\sim y_2, z_1\sim z_2)$,对控制体内MKE budget中的不同项的体积分以及面积分的大小进行分析 $$ Term=\int_{z_2}^{z_1} \int_{y_2}^{y_1} term \ \mathrm{d}y \ \mathrm{d}z\ \mathsf{TERM} =\int_{z_2}^{z_1} \int_{y_2}^{y_1} \int_{x_2}^{x_1} t \ \mathrm{d}x\ \mathrm{d}y \ \mathrm{d}z\ term\text{ can be }mc,pt,tc,df,tp,dp,\mathrm{g}a,wt,fp,\text{ and } Term\text{ is the corresponding }Mc,Pt,Tc,Df,Tp,Dp,\mathrm{G}a,Wt,Fp.\ \mathsf{TERM}\text{ represent }MC,PT,TC,DF,TP,DP,\mathrm{G}A,WT,FP $$ 参考文献:Yang et al., Cortina et al.
利用平均速度场计算平均速度场的流管,通过对流管内部MKE budget中的不同项的流向变化规律进行分析
参考文献:West et al., Ge et al.
Reynolds stress budget: $$ \begin{align} \nonumber \frac{\partial \overline{{\widetilde{u}_i}^{'}{\widetilde{u}_j}^{'}}}{\partial t}=\underbrace{-\overline {{\widetilde u}}_k\frac{\partial \overline{{\widetilde{u}i}^{'}{ {\widetilde u}j^{'}}}}{\partial x_k}}{C{ij}}&\underbrace{-(\overline{{\widetilde{u}_j}^{'}{{\widetilde u}k}^{'}}\frac{\partial {\overline {\widetilde u}i}}{\partial x_k}+\overline{{\widetilde{u}i}^{'}{{\widetilde u}k}^{'}}\frac{\partial {\overline {\widetilde u}j}}{\partial x_k})}{P{ij}}\underbrace{+\mathrm{g}\frac{(\delta{i3}\overline{\widetilde{\theta}^{'}{\widetilde{u}j}^{'}}+\delta{j3}\overline{\widetilde{\theta}^{'}{\widetilde{u}i}^{'}})}{\theta_0}}{P{\theta}}\underbrace{+\overline{{{\widetilde{p}}^{'}}(\frac{\partial {\widetilde{u}i}^{'}}{\partial x_j}+\frac{\partial {\widetilde{u}j}^{'}}{\partial x_i})}}{\Phi{ij}}\ \nonumber &\underbrace{-\frac{\partial}{\partial x_k}(\overline{{{\widetilde{p}}^{'}}{{\widetilde{u}i}^{'}}\delta{jk}+{{\widetilde{p}}^{*'}}{{\widetilde{u}j}^{'}}\delta{ik}+{{\widetilde{u}i}^{'}}{{\widetilde{u}j}^{'}}{{\widetilde{u}k}^{'}}+\widetilde{u}i^{'}\tau^{d'}{jk}+\widetilde{u}j^{'}\tau^{d'}{ik}})}{D{ij}} \underbrace{+(\overline{\tau^{d'}{jk}\frac{\partial {\widetilde{u}i}^{'}}{\partial x_k}+\tau^{d'}{ik}\frac{\partial {\widetilde{u}j}^{'}}{\partial x_k}})}{-\epsilon{ij}}\ &\underbrace{-(\overline{\frac{{\widetilde{u}j}^{'}f_i^{'}}{\rho}+\frac{{\widetilde{u}i}^{'}f_j^{'}}{\rho}})}{Pt{ij}} \end{align} $$
基于LESGO输出数据计算Reynolds stress budget中的每一项(注意亚格子应力项,$\tau_{ij}^d$是亚格子应力的trace-free部分)
计算budget中的导数项
- uv-grid上物理量的处理
- w-grid 上物理量的处理
代码来源:FloATPy
class ExplicitDifferentiator
- ddx, ddy, ddz, d2dx2, d2dy2, d2dz2求给定数组(一维,二维或三维)的一阶以及二阶偏导数,可采用二阶,四阶或六阶精度中心差分格式,边界处可采用相同阶精度的单边差分格式
- gradient求给定数组(一维,二维或三维)的梯度ddx(一维),(ddx, ddy)(二维),(ddx, ddy, ddz)(三维)
- divergence求给定数组(一维,二维或三维)的散度
- curl求给定数组(二维或三维)的旋度
- laplacian求$\nabla^2$作用于给定数组(一维,二维或三维)的结果
可用来代替PartialInterp.py
- 计算尾流中心的函数
wakecenterzc与wakecenteryc以及尾流摆振强度的函数WakeMeandering。 - class
ABLProperties用来计算表征大气边界层状态的重要物理量($\langle\bar{u}\rangle,\langle\bar{\theta}\rangle,\langle\overline{w^\prime\theta^\prime}\rangle,\langle\overline{u^\prime w^\prime}\rangle,TI,I_u,I_v,I_w$ )以及参数$L, Ri_f, Ri_b, Ri_t$
- 数据输出为.vtk格式进行三维可视化(参考NREL的FLORIS)
设置plt.rcParams控制输出图片的格式,输出基本图片
- Tavg
- Snap
- Snap_X
- Snap_Y
- Snap_Z
- Point
class ABLProperties
- VerCutPlane给出$x-z$ 平面某一位置处的contourf
- HorCutPlane给出$x-y$ 平面某一位置处的contourf
- CrossCutPlane给出$y-z$ 平面某一位置处的contourf
- VerWindTurbine给出风力机在$x-z$ 平面的侧视图
- HorWindTurbine给出风力机在$x-y$ 平面的俯视图
- CrossWindTurbine给出风力机在$y-z$ 平面的风轮轮廓
class QuanFig
- casefig对比不同算例下计算域内流动的基本特征,风廓线,位温廓线,湍流剪切应力,总湍流强度,不同方向的湍流强度分量等
- Profiles画出风力机下游不同位置处(x)某一物理量随位置坐标(y or z)的变化规律
- VelSelfSim对风力机下游不同位置处(x)速度廓线的自相似特性进行验证(参考文献:Bastankhah et al.)