https://doi.org/10.5281/zenodo.15000786
compare_les.py
from netCDF4 import Dataset
import matplotlib.pyplot as plt
import numpy as np
from scipy import stats
nc = Dataset("compare_les.nc","r")
nz = nc.dimensions["nz"].size
ny = nc.dimensions["ny"].size
nx = nc.dimensions["nx"].size
explicit_names = ["tend_explicit_u_x","tend_explicit_v_x","tend_explicit_w_x","tend_explicit_t_x",
"tend_explicit_u_y","tend_explicit_v_y","tend_explicit_w_y","tend_explicit_t_y",
"tend_explicit_u_z","tend_explicit_v_z","tend_explicit_w_z","tend_explicit_t_z"]
closure_notke_names = ["tend_closure_notke_u_x","tend_closure_notke_v_x","tend_closure_notke_w_x","tend_closure_notke_t_x",
"tend_closure_notke_u_y","tend_closure_notke_v_y","tend_closure_notke_w_y","tend_closure_notke_t_y",
"tend_closure_notke_u_z","tend_closure_notke_v_z","tend_closure_notke_w_z","tend_closure_notke_t_z"]
closure_names = ["tend_closure_u_x","tend_closure_v_x","tend_closure_w_x","tend_closure_t_x",
"tend_closure_u_y","tend_closure_v_y","tend_closure_w_y","tend_closure_t_y",
"tend_closure_u_z","tend_closure_v_z","tend_closure_w_z","tend_closure_t_z"]
tke_names = ["tke_x","tke_x","tke_x","tke_x",
"tke_y","tke_y","tke_y","tke_y",
"tke_z","tke_z","tke_z","tke_z"]
# print("Plotting")
# for i in range(len(explicit_names)) :
# explicit = nc.variables[explicit_names[i]][::2,::2,::2,0].flatten() +
# closure = nc.variables[closure_names [i]][::2,::2,::2,0].flatten()
# explicit = (explicit - np.min(explicit)) / (np.max(explicit) - np.min(explicit))
# closure = (closure - np.min(closure )) / (np.max(closure ) - np.min(closure ))
# # result = stats.linregress(explicit.flatten(), closure.flatten())
# # print(result)
# plt.scatter( explicit , closure , s=0.01 , c = "blue" , edgecolors="face" )
# # plt.xscale("log")
# # plt.yscale("log")
# plt.xlabel(explicit_names[i])
# plt.ylabel(closure_names [i])
# plt.show()
# plt.close()
print("Getting data")
explicit = nc.variables["tend_explicit_u_x"][::4,::4,::4,0].flatten() + \
nc.variables["tend_explicit_u_y"][::4,::4,::4,0].flatten() + \
nc.variables["tend_explicit_u_z"][::4,::4,::4,0].flatten()
closure = nc.variables["tend_closure_u_x" ][::4,::4,::4,0].flatten() + \
nc.variables["tend_closure_u_y" ][::4,::4,::4,0].flatten() + \
nc.variables["tend_closure_u_z" ][::4,::4,::4,0].flatten()
tol = 1.e-7
print("Computing non-trivial indices")
indices = range(len(explicit))
filtered_indices = list(filter( lambda i: np.abs(closure[i]) > tol , indices ))
print("Computing filter, abs, and log")
explicit = np.log(np.abs(explicit[filtered_indices]))
closure = np.log(np.abs(closure [filtered_indices]))
print("Linear regression")
result = stats.linregress(explicit.flatten(), closure.flatten())
print(result)
print("Plotting")
plt.scatter( explicit , closure , s=0.00001 , c = "blue" , edgecolors="face" )
plt.scatter( explicit , result.slope*explicit + result.intercept , s=0.00001 , c = "red" , edgecolors="face" )
# plt.xlim(-20,0)
plt.show()
plt.close()
print("Getting data")
explicit = nc.variables["tend_explicit_v_x"][::4,::4,::4,0].flatten() + \
nc.variables["tend_explicit_v_y"][::4,::4,::4,0].flatten() + \
nc.variables["tend_explicit_v_z"][::4,::4,::4,0].flatten()
closure = nc.variables["tend_closure_v_x" ][::4,::4,::4,0].flatten() + \
nc.variables["tend_closure_v_y" ][::4,::4,::4,0].flatten() + \
nc.variables["tend_closure_v_z" ][::4,::4,::4,0].flatten()
tol = 1.e-7
print("Computing non-trivial indices")
indices = range(len(explicit))
filtered_indices = list(filter( lambda i: np.abs(closure[i]) > tol , indices ))
print("Computing filter, abs, and log")
explicit = np.log(np.abs(explicit[filtered_indices]))
closure = np.log(np.abs(closure [filtered_indices]))
print("Plotting")
plt.scatter( explicit , closure , s=0.00001 , c = "blue" , edgecolors="face" )
plt.scatter( explicit , result.slope*explicit + result.intercept , s=0.00001 , c = "red" , edgecolors="face" )
# plt.xlim(-20,0)
plt.show()
plt.close()
print("Getting data")
explicit = nc.variables["tend_explicit_w_x"][::4,::4,::4,0].flatten() + \
nc.variables["tend_explicit_w_y"][::4,::4,::4,0].flatten() + \
nc.variables["tend_explicit_w_z"][::4,::4,::4,0].flatten()
closure = nc.variables["tend_closure_w_x" ][::4,::4,::4,0].flatten() + \
nc.variables["tend_closure_w_y" ][::4,::4,::4,0].flatten() + \
nc.variables["tend_closure_w_z" ][::4,::4,::4,0].flatten()
tol = 1.e-7
print("Computing non-trivial indices")
indices = range(len(explicit))
filtered_indices = list(filter( lambda i: np.abs(closure[i]) > tol , indices ))
print("Computing filter, abs, and log")
explicit = np.log(np.abs(explicit[filtered_indices]))
closure = np.log(np.abs(closure [filtered_indices]))
print("Plotting")
plt.scatter( explicit , closure , s=0.00001 , c = "blue" , edgecolors="face" )
plt.scatter( explicit , result.slope*explicit + result.intercept , s=0.00001 , c = "red" , edgecolors="face" )
# plt.xlim(-20,0)
plt.show()
plt.close()
print("Getting data")
explicit = nc.variables["tend_explicit_t_x"][::4,::4,::4,0].flatten() + \
nc.variables["tend_explicit_t_y"][::4,::4,::4,0].flatten() + \
nc.variables["tend_explicit_t_z"][::4,::4,::4,0].flatten()
closure = nc.variables["tend_closure_t_x" ][::4,::4,::4,0].flatten() + \
nc.variables["tend_closure_t_y" ][::4,::4,::4,0].flatten() + \
nc.variables["tend_closure_t_z" ][::4,::4,::4,0].flatten()
tol = 1.e-7
print("Computing non-trivial indices")
indices = range(len(explicit))
filtered_indices = list(filter( lambda i: np.abs(closure[i]) > tol , indices ))
print("Computing filter, abs, and log")
explicit = np.log(np.abs(explicit[filtered_indices]))
closure = np.log(np.abs(closure [filtered_indices]))
print("Plotting")
plt.scatter( explicit , closure , s=0.00001 , c = "blue" , edgecolors="face" )
plt.scatter( explicit , result.slope*explicit + result.intercept , s=0.00001 , c = "red" , edgecolors="face" )
# plt.xlim(-20,0)
plt.show()
# fig = plt.figure()
# ax = fig.add_subplot(projection='3d')
# ax.scatter( ( explicit_u_x.flatten() - np.min(explicit_u_x) ) / (np.max(explicit_u_x)-np.min(explicit_u_x)) ,
# ( tke_x .flatten() - np.min(tke_x ) ) / (np.max(tke_x )-np.min(tke_x )) ,
# ( closure_u_x .flatten() - np.min(closure_u_x ) ) / (np.max(closure_u_x )-np.min(closure_u_x )) ,
# s=0.01 )
# # ax.set_aspect("equal")
# ax.set_xscale("log")
# ax.set_zscale("log")
# ax.set_xlabel('Explicitly Calculated')
# ax.set_ylabel('TKE')
# ax.set_zlabel('LES Closure')
# plt.show()