Compute the wavenumber spectra

import sys, os, shutil, io
import numpy as np
from functools import partial
import matplotlib.pyplot as plt
import pandas as pd 
df_27_C  = pd.read_csv('../results/neutral_CGrid_E_spectra_Z027.csv')
df_90_C  = pd.read_csv('../results/neutral_CGrid_E_spectra_Z090.csv')
df_153_C = pd.read_csv('../results/neutral_CGrid_E_spectra_Z153.csv')

df_35_D  = pd.read_csv('../results/neutral_DGrid_E_spectra_Z035.csv')
df_27_D  = pd.read_csv('../results/neutral_DGrid_E_spectra_Z027.csv')
df_90_D  = pd.read_csv('../results/neutral_DGrid_E_spectra_Z090.csv')
df_153_D = pd.read_csv('../results/neutral_DGrid_E_spectra_Z153.csv')
df_315_D = pd.read_csv('../results/neutral_DGrid_E_spectra_Z315.csv')
ustar_C=0.208411
zi_C = 352.066531

ustar_D= 0.203669
zi_D= 337.048425

a1d = 0.5
ah = 0.54 * (55/18) * a1d

Wavenumber spectra (C grid)

# Run the driver
fig, axs = plt.subplots(1,3,figsize=(8*3,6), dpi=125, sharey=True)
fsize = 18
s=12
dfs_C = [df_27_C,df_90_C,df_153_C]
zs = [27,90,153]
fact = [0.0075,0.005,0.003]
for axiter, ax in enumerate(axs):
    plt.sca(ax)
    df_C = dfs_C[axiter]
    normz = zs[axiter]/zi_C
    strz = f"{normz:.2f}"
    ax.set_title('z = '+str(zs[axiter])+'m ($z/z_i$ = ' + strz + ')',fontsize=fsize)
    Escaling_C =  2 * np.pi / (zi_C * ustar_C**2 * ah) 
    kscaling_C = zi_C

    plt.xticks(fontsize=fsize)  # Set x tick label font size
    plt.yticks(fontsize=fsize)  # Set y tick label font size

    msize = 5
    plt.loglog(kscaling_C * df_C['kmag'],fact[axiter]*df_C['kmag']**(-5/3),c='tab:gray',ls='-',label='$k^{-5/3}$')

    plt.loglog(kscaling_C * df_C['kmag'],Escaling_C * df_C['energy'],c='tab:blue',label='Energy spectra\nAMR-Wind, C Grid',marker='o',markersize=msize,ls='-')
    plt.loglog(kscaling_C * df_C['kmag'],Escaling_C * df_C['horiz'],c='tab:red',label='Horizontal spectra\nAMR-Wind, C Grid',marker='D',markersize=msize,ls='-.')
    plt.loglog(kscaling_C * df_C['kmag'],Escaling_C * df_C['vertical'],c='tab:green',label='Vertical spectra\nAMR-Wind, C Grid',marker='s',markersize=msize,ls='--')

    plt.ylabel("$\\alpha_h^{-1} E(\kappa_h)2\pi/z_i u_*^2$",fontsize =fsize)
    plt.xlabel("$\kappa_h z_i$",fontsize=fsize)
    if axiter == 2:
        plt.legend(loc=4,fontsize=fsize-4,bbox_to_anchor=(1.5,0.55))

    ax.set_xlim(1,500)
    ax.set_ylim(0.001,3)
plt.savefig("./figures/ABL_wavenumber_spectra_C_grid.png")
../../../../_images/a63674bbeb4ab72899ab05783c1eafd1f0bf35b4ee48646abdc3df4ff7a9206e.png

Energy, horizontal and vertical spectra (C and D grid)

# Run the driver
fig, axs = plt.subplots(1,3,figsize=(8*3,6), dpi=125, sharey=True)

fsize = 18
s=12
dfs_C = [df_27_C,df_90_C,df_153_C]
dfs_D = [df_27_D,df_90_D,df_153_D]
zs = [27,90,153]
fact = [0.0075,0.005,0.003]
for axiter, ax in enumerate(axs):
    plt.sca(ax)
    df_C = dfs_C[axiter]
    df_D = dfs_D[axiter]
    normz_C = zs[axiter]/zi_C
    normz = zs[axiter]/zi_D
    strz = f"{normz:.2f}"
    ax.set_title('z = '+str(zs[axiter])+'m ($z/z_i$ = ' + strz + ')',fontsize=fsize)
    Escaling_C =  2 * np.pi / (zi_C * ustar_C**2 * ah) 
    Escaling_D =  2 * np.pi / (zi_D * ustar_D**2 * ah) 
    kscaling_C = zi_C
    kscaling_D = zi_D

    plt.xticks(fontsize=fsize)  # Set x tick label font size
    plt.yticks(fontsize=fsize)  # Set y tick label font size

    msize = 4
    plt.loglog(kscaling_C * df_C['kmag'],fact[axiter]*df_C['kmag']**(-5/3),c='tab:gray',ls='-',label='$k^{-5/3}$')

    plt.loglog(kscaling_C * df_C['kmag'],Escaling_C * df_C['energy'],c='tab:blue',label='Energy spectra \nAMR-Wind, C Grid',ls='-')
    plt.loglog(kscaling_D * df_D['kmag'],Escaling_D * df_D['energy'],c='tab:orange',label='Energy spectra\nAMR-Wind, D Grid',ls='-')

    plt.loglog(kscaling_C * df_C['kmag'],Escaling_C * df_C['horiz'],c='tab:blue',label='Horizontal spectra \nAMR-Wind, C Grid',ls='-.')
    plt.loglog(kscaling_D * df_D['kmag'],Escaling_D * df_D['horiz'],c='tab:orange',label='Horizontal spectra\nAMR-Wind, D Grid',ls='-.')

    plt.loglog(kscaling_C * df_C['kmag'],2 * Escaling_C * df_C['vertical'],c='tab:blue',label='Vertical spectra\nAMR-Wind, C Grid',ls='--')
    plt.loglog(kscaling_D * df_D['kmag'],2 * Escaling_D * df_D['vertical'],c='tab:orange',label='Vertical spectra\nAMR-Wind, D Grid',ls='--')

    plt.ylabel("$\\alpha_h^{-1} E(\kappa_h)2\pi/z_i u_*^2$",fontsize =fsize)
    plt.xlabel("$\kappa_h z_i$",fontsize=fsize)
    if axiter == 2:
        plt.legend(loc=4,fontsize=fsize-4,bbox_to_anchor=(1.5,0.45))

    ax.set_xlim(1,500)
    ax.set_ylim(0.001,3)
plt.savefig("./figures/ABL_wavenumber_spectra_C_D_grids.png")
../../../../_images/d49e65fd054bc5636cf7179fd218a4aa010266178ef33bd5c762461f4c3b6d04.png

Comparisons with Berg et. al. (2020), D grid

#Load Berg Spectra
berg_D_0p1_horiz     = pd.read_csv('../results/horiz_spectra_D_berg_0p1.csv')
berg_D_0p1_vertical  = pd.read_csv('../results/vertical_spectra_D_berg_0p1.csv')

berg_D_0p5_horiz     = pd.read_csv('../results/horiz_spectra_D_berg_0p5.csv')
berg_D_0p5_vertical  = pd.read_csv('../results/vertical_spectra_D_berg_0p5.csv')

berg_D_0p9_horiz     = pd.read_csv('../results/horiz_spectra_D_berg_0p9.csv')
berg_D_0p9_vertical  = pd.read_csv('../results/vertical_spectra_D_berg_0p9.csv')
# Run the driver
fig, axs = plt.subplots(1,3,figsize=(8*3,6), dpi=125, sharey=True)

fsize = 18
s=12
dfs_D = [df_35_D,df_153_D,df_315_D]
dfs_berg_horiz = [berg_D_0p1_horiz,berg_D_0p5_horiz,berg_D_0p9_horiz]
dfs_berg_vertical = [berg_D_0p1_vertical,berg_D_0p5_vertical,berg_D_0p9_vertical]
berg_zizh = [0.1,0.5,0.9]
zs = [35,153,315]
fact = [0.0075,0.002,0.001]
for axiter, ax in enumerate(axs):
    plt.sca(ax)
    df_D = dfs_D[axiter]
    df_berg_horiz = dfs_berg_horiz[axiter]
    df_berg_vertical = dfs_berg_vertical[axiter]
    normz = zs[axiter]/zi_D
    strz = f"{normz:.2f}"
    ax.set_title('z = '+str(zs[axiter])+'m ($z/z_i$ = ' + strz + ')',fontsize=fsize)
    Escaling_D =  2 * np.pi / (zi_D * ustar_D**2 * ah) 
    kscaling_D = zi_D
    plt.xticks(fontsize=fsize)  # Set x tick label font size
    plt.yticks(fontsize=fsize)  # Set y tick label font size

    msize = 4
    plt.loglog(kscaling_D * df_D['kmag'],fact[axiter]*df_D['kmag']**(-5/3),c='tab:gray',ls='-',label='$k^{-5/3}$')
    plt.loglog(kscaling_D * df_D['kmag'],Escaling_D * df_D['horiz'],c='tab:orange',label='Horizontal spectra, AMR-Wind, D Grid',ls='-')
    plt.loglog(kscaling_D * df_D['kmag'],2 * Escaling_D * df_D['vertical'],c='tab:orange',label='Vertical spectra, AMR-Wind, D Grid',ls='--')

    plt.loglog(df_berg_horiz['X'],df_berg_horiz['Y'],c='k',label='Horizontal spectra, Berg et. al. (2020)\n D Grid, $z/z_i=$' + str(berg_zizh[axiter]),ls='-')
    plt.loglog(df_berg_vertical['X'],df_berg_vertical['Y'],c='k',label='Vertical spectra, Berg et. al. (2020)\n D Grid, $z/z_i=$' + str(berg_zizh[axiter]),ls='--')

    plt.ylabel("$\\alpha_h^{-1} E(\kappa_h)2\pi/z_i u_*^2$",fontsize =fsize)
    plt.xlabel("$\kappa_h z_i$",fontsize=fsize)
    plt.legend(loc=3,fontsize=fsize-8)
    ax.set_xlim(1,500)
    ax.set_ylim(0.001,3)
plt.savefig("./figures/ABL_wavenumber_spectra_D_grid.png")
../../../../_images/394eadfa32c2c25b0fa85ce9763d937103bc584afeb9e50af6b9842dafea865b.png