Skip to content

Commit dd6ff34

Browse files
committed
TL: wip
1 parent 070eed6 commit dd6ff34

File tree

2 files changed

+53
-26
lines changed

2 files changed

+53
-26
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
*.pdf
22
demos/*.png
3+
34
problems/test_*
45
problems/run_*
6+
problems/runInit_*
57

68
scripts/*.sh
79
scripts/run_*
810
scripts/init_*
11+
scripts/runInit_*

pySDC/playgrounds/dedalus/problems/rbc.py

Lines changed: 50 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,7 @@ def __init__(self, folder):
419419
fileNames = glob.glob(f"{self.folder}/*.h5")
420420
fileNames.sort(key=lambda f: int(f.split("_s")[-1].split(".h5")[0]))
421421

422+
assert len(fileNames) != 0, f"no file to read in ({folder})"
422423
assert len(fileNames) == 1, "cannot read fields splitted in several files"
423424
self.fileName = fileNames[0]
424425

@@ -564,7 +565,7 @@ def getTimeSeries(self, which=["ke"], batchSize=None):
564565

565566

566567
if which == "all":
567-
which = ["ke", "NuV", "NuT", "NuB"]
568+
which = ["ke", "keH", "keV", "NuV", "NuT", "NuB"]
568569
else:
569570
which = list(which)
570571

@@ -602,11 +603,22 @@ def getTimeSeries(self, which=["ke"], batchSize=None):
602603
nuB = - mDzB @ b.mean(axis=avgAxes)[..., None]
603604
series["NuB"].append(nuB.ravel())
604605

606+
u **= 2
605607
if "ke" in which:
606-
u **= 2
607608
ke = mIz @ u.sum(axis=1).mean(axis=avgAxes)[..., None]
609+
ke /= 2
608610
series["ke"].append(ke.ravel())
609611

612+
if "keH" in which:
613+
keH = mIz @ u[:, :2].sum(axis=1).mean(axis=avgAxes)[..., None]
614+
keH /= 2
615+
series["keH"].append(keH.ravel())
616+
617+
if "keV" in which:
618+
keV = mIz @ u[:,-1:].sum(axis=1).mean(axis=avgAxes)[..., None]
619+
keV /= 2
620+
series["keV"].append(keV.ravel())
621+
610622
for key, val in series.items():
611623
series[key] = np.array(val).ravel()
612624

@@ -729,12 +741,12 @@ def getBoundaryLayers(self, which=["uRMS", "bRMS"], profiles=None,
729741

730742
return deltas
731743

732-
def getSpectrum(self, which=["uv", "uh"], zVal="all",
744+
def getSpectrum(self, which=["uV", "uH"], zVal="all",
733745
start=0, stop=None, step=1, batchSize=None):
734746
if stop is None:
735747
stop = self.nFields
736748
if which == "all":
737-
which = ["uv", "uh", "b"]
749+
which = ["u", "uV", "uH", "b", "p"]
738750
else:
739751
which = list(which)
740752

@@ -752,22 +764,29 @@ def getSpectrum(self, which=["uv", "uh"], zVal="all",
752764

753765
bSize = len(r)
754766

767+
if set(which).intersection(["u", "uV", "uH"]):
768+
u = self.readFields("velocity", r.start, r.stop, r.step)
769+
755770
for name in which:
756771

757-
# read fields
758-
if name in ["uv", "uh"]:
759-
u = self.readFields("velocity", r.start, r.stop, r.step)
760-
if name == "uv":
772+
# define fields with shape (nT,nComp,nX[,nY],nZ)
773+
if name in ["u", "uV", "uH"]:
774+
if name == "uV":
761775
field = u[:, -1:]
762-
if name == "uh":
776+
if name == "uH":
763777
field = u[:, :-1]
764-
if name == "b":
778+
if name == "u":
779+
field = u
780+
elif name == "b":
765781
field = self.readFields("buoyancy", r.start, r.stop, r.step)[:, None, ...]
766782
if self.dim == 3:
767783
field -= field.mean(axis=(2, 3))[:, :, None, None, :]
768784
else:
769785
field -= field.mean(axis=2)[:, :, None, :]
770-
# field.shape = (nT,nVar,nX[,nY],nZ)
786+
elif name == "p":
787+
field = self.readFields("pressure", r.start, r.stop, r.step)[:, None, ...]
788+
else:
789+
raise NotImplementedError(f"{name} in which ...")
771790

772791
if zVal != "all":
773792
field = (mPz @ field[..., None])[..., 0]
@@ -778,14 +797,14 @@ def getSpectrum(self, which=["uv", "uh"], zVal="all",
778797
print(f" -- computing 1D mean spectrum for {name}[{start},{stop},{step}] ...")
779798
var = field[:, 0]
780799

781-
# RFFT over nX --> (nT, nKx, nZ)
800+
# RFFT over nX --> (nT, nK, nZ)
782801
s = np.fft.rfft(var, axis=-2)
783802
s *= np.conj(s)
784803

785804
# scaling
786805
s /= self.nX**2
787806

788-
# ignore last frequency (zero amplitude)
807+
# ignore last frequency (zero amplitu00de)
789808
s = s[:, :-1]
790809

791810
# 3D case
@@ -835,7 +854,7 @@ def getSpectrum(self, which=["uv", "uh"], zVal="all",
835854
# scaling
836855
s /= 2*(nX*nY)**2
837856

838-
# integral or mean over nZ --> (nT, Kx)
857+
# integral or mean over nZ --> (nT, nK)
839858
if zVal == "all":
840859
s = (mIz @ s.real[..., None])[..., 0, 0]
841860
else:
@@ -1100,26 +1119,25 @@ def fun(coeffs):
11001119
import matplotlib.pyplot as plt
11011120

11021121
# dirName = "run_3D_A4_M0.5_R1_Ra1e6"
1103-
dirName = "run_3D_A4_M1_R1_Ra2e5"
1122+
dirName = "run_3D_A4_M0.5_R1_Ra1e5"
11041123
# dirName = "run_M4_R2"
11051124
# dirName = "test_M4_R2"
11061125
OutputFiles.VERBOSE = True
11071126
output = OutputFiles(dirName)
11081127

11091128
if True:
1110-
series = output.getTimeSeries(which=["NuV", "NuT", "NuB"])
1129+
series = output.getTimeSeries(which=["ke", "keH", "keV", "NuV"])
11111130

11121131
plt.figure("series")
11131132
for name, values in series.items():
11141133
plt.plot(output.times, values, label=name)
11151134
plt.legend()
11161135

1117-
start = 20
1136+
start = 60
11181137

1119-
if False:
1138+
if True:
11201139
which = ["bRMS"]
11211140

1122-
11231141
Nu = series["NuV"][start:].mean()
11241142

11251143
profiles = output.getProfiles(
@@ -1163,20 +1181,26 @@ def fun(coeffs):
11631181

11641182
if True:
11651183
spectrum = output.getSpectrum(
1166-
which=["uh"], zVal="all", start=start, batchSize=None)
1184+
which=["uH"],
1185+
zVal="all", start=start, batchSize=None)
11671186
kappa = output.kappa
11681187

1169-
check = checkDNS(spectrum["uh"], kappa)
1170-
print(f"DNS : {check['DNS']}")
1188+
check = checkDNS(spectrum["uH"], kappa)
11711189
a, b, c = check["coeffs"]
1190+
print(f"DNS : {check['DNS']} ({a=})")
11721191
kTail = check["kTail"]
11731192
sTail = check["sTail"]
11741193

11751194
plt.figure("spectrum")
11761195
for name, vals in spectrum.items():
11771196
plt.loglog(kappa[1:], vals[1:], label=name)
1178-
plt.loglog(kTail, sTail, '.', c="black")
1179-
kTL = np.log(kTail)
1180-
plt.loglog(kTail, np.exp(a*kTL**2 + b*kTL + c), c="gray")
1197+
1198+
# plt.loglog(kTail, sTail, '.', c="black")
1199+
# kTL = np.log(kTail)
1200+
# plt.loglog(kTail, np.exp(a*kTL**2 + b*kTL + c), c="gray")
1201+
11811202
plt.loglog(kappa[1:], kappa[1:]**(-5/3), '--k')
1182-
plt.legend()
1203+
plt.text(10, 0.1, r"$\kappa^{-5/3}$", fontsize=16)
1204+
plt.legend(); plt.grid(True)
1205+
plt.ylabel("spectrum"); plt.xlabel(r"wavenumber $\kappa$")
1206+
plt.tight_layout()

0 commit comments

Comments
 (0)