@@ -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