Skip to main content
  • Home
  • Development
  • Documentation
  • Donate
  • Operational login
  • Browse the archive

swh logo
SoftwareHeritage
Software
Heritage
Archive
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

https://doi.org/10.5281/zenodo.15000786
10 March 2025, 15:25:21 UTC
  • Code
  • Branches (0)
  • Releases (1)
  • Visits
    • Branches
    • Releases
      • 1
      • 1
    • b2c6029
    • /
    • portUrb-main
    • /
    • build
    • /
    • analyze.py
    Raw File Download

    To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
    Select below a type of object currently browsed in order to display its associated SWHID and permalink.

    • content
    • directory
    • snapshot
    • release
    origin badgecontent badge Iframe embedding
    swh:1:cnt:7a49ccf95f342b7751561893a934fa6058a585cc
    origin badgedirectory badge Iframe embedding
    swh:1:dir:e9b312c3296a416b9b8460b25a8bce119dd0b8fd
    origin badgesnapshot badge
    swh:1:snp:e2ca4a5032dde68a40a6c8f117ef3b3f9d86183b
    origin badgerelease badge
    swh:1:rel:b2d825bae760daa434828ca40859bd2388e17db4

    This interface enables to generate software citations, provided that the root directory of browsed objects contains a citation.cff or codemeta.json file.
    Select below a type of object currently browsed in order to generate citations for them.

    • content
    • directory
    • snapshot
    • release
    Generate software citation in BibTex format (requires biblatex-software package)
    Generating citation ...
    Generate software citation in BibTex format (requires biblatex-software package)
    Generating citation ...
    Generate software citation in BibTex format (requires biblatex-software package)
    Generating citation ...
    Generate software citation in BibTex format (requires biblatex-software package)
    Generating citation ...
    analyze.py
    from netCDF4 import Dataset
    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.axes_grid1 import make_axes_locatable
    from cmap import Colormap
    
    def get_ind(a,v) :
        return np.argmin(np.abs(a-v))
    
    
    def plot_group_1() :
      #######################################
      ## 5 MW blades versus disk, dx=2m
      #######################################
      print("*** 5 MW Disk and blades wake comparison ***")
      D = 63*2
      H = 90
      bld = Dataset("run_01_00000010.nc","r")
      dsk = Dataset("run_02_00000010.nc","r")
      x = np.array(bld["x"][:]/D-2.5)
      y = np.array(bld["y"][:]/D-1)
      z = np.array(bld["z"][:])
      k = get_ind(z,H)
      X,Y = np.meshgrid(x,y)
      var = np.array(dsk["avg_u"][k,:,:])-np.array(bld["avg_u"][k,:,:])
      mn = np.min(var)
      mx = np.max(var)
      mn = -max(abs(mn),abs(mx))
      mx =  max(abs(mn),abs(mx))
      fig = plt.figure(figsize=(6,6))
      ax  = fig.gca()
      CS = ax.contourf(X,Y,var,levels=np.arange(mn,mx,(mx-mn)/100),cmap=Colormap('cmasher:fusion_r').to_mpl(),extend="both")
      ax.axis('scaled')
      ax.set_xlabel("x (turb diams)")
      ax.set_ylabel("y (turb diams)")
      ax.margins(x=0)
      divider = make_axes_locatable(plt.gca())
      cax = divider.append_axes("bottom", size="10%", pad=0.5)
      cbar = plt.colorbar(CS,orientation="horizontal",cax=cax)
      cbar.ax.tick_params(rotation=35)
      ax.margins(x=0)
      plt.margins(x=0)
      plt.tight_layout()
      plt.savefig("5mw_disk_vs_blades_contour_tavg_11.4mps.png",dpi=600)
      plt.show()
      plt.close()
    
    
    def plot_group_2() :
      #######################################
      ## 22 MW blades versus disk, dx=2m
      #######################################
      print("*** 22 MW Disk and blades wake comparison ***")
      D = 141.60905*2
      H = 167.193
      bld = Dataset("run_03_00000010.nc","r")
      dsk = Dataset("run_04_00000010.nc","r")
      x = np.array(bld["x"][:]/D-2.5)
      y = np.array(bld["y"][:]/D-1)
      z = np.array(bld["z"][:])
      k = get_ind(z,H)
      X,Y = np.meshgrid(x,y)
      var = np.array(dsk["avg_u"][k,:,:])-np.array(bld["avg_u"][k,:,:])
      mn = np.min(var)
      mx = np.max(var)
      mn = -max(abs(mn),abs(mx))
      mx =  max(abs(mn),abs(mx))
      fig = plt.figure(figsize=(6,6))
      ax  = fig.gca()
      CS = ax.contourf(X,Y,var,levels=np.arange(mn,mx,(mx-mn)/100),cmap=Colormap('cmasher:fusion_r').to_mpl(),extend="both")
      ax.axis('scaled')
      ax.set_xlabel("x (turb diams)")
      ax.set_ylabel("y (turb diams)")
      ax.margins(x=0)
      divider = make_axes_locatable(plt.gca())
      cax = divider.append_axes("bottom", size="10%", pad=0.5)
      cbar = plt.colorbar(CS,orientation="horizontal",cax=cax)
      cbar.ax.tick_params(rotation=35)
      ax.margins(x=0)
      plt.margins(x=0)
      plt.tight_layout()
      plt.savefig("22mw_disk_vs_blades_contour_tavg_11.4mps.png",dpi=600)
      plt.show()
      plt.close()
    
    
    def plot_group_3() :
      ###########################################
      ## 22 MW blended grid spacing comparison
      ###########################################
      print("*** 22 MW blended grid spacing comparison ***")
      files =  ["run_03_00000010.nc",
                "run_06_00000010.nc",
                "run_07_00000010.nc",
                "run_08_00000010.nc",
                "run_09_00000010.nc"]
      D = 141.60905*2
      H = 167.193
      for d in [0,4,10] :
        fig = plt.figure(figsize=(6,3))
        ax  = fig.gca()
        print(f"D={d}")
        for f in range(len(files)) :
          nc = Dataset(files[f],"r")
          x = np.array(nc["x"][:]/D-2.5)
          y = np.array(nc["y"][:]/D-1)
          z = np.array(nc["z"][:])
          dx = int(nc["x"][1]-nc["x"][0])
          k = get_ind(z,H)
          i = get_ind(x,d)
          u = np.array(nc["avg_u"][k,:,i])
          u2 = u if (f==0) else u2
          print(f"dx={dx}, reldiff={np.abs(np.mean(u)-np.mean(u2))/np.mean(u2):.3e}")
          ax.plot(y,u,label=f"dx={dx}")
        ax.grid(True)
        ax.set_ylim(8.25,13.5)
        ax.set_xlabel("y-location (turbine diameters)")
        ax.set_ylabel("u-velocity (m/s)")
        ax.margins(x=0)
        fig.tight_layout()
        plt.tight_layout()
        plt.legend()
        plt.savefig(f"22mw_blended_comparison_dx-{dx}_D-{d}.png",dpi=600)
        plt.show()
        plt.close()
    
    
    def plot_group_4() :
      ##########################################
      ## 22 MW blades versus disk, 4m/s, dx=2m
      ##########################################
      print("*** 22 MW Disk and blades 4 m/s comparison ***")
      D = 141.60905*2
      H = 167.193
      bld = Dataset("run_10_00000010.nc","r")
      dsk = Dataset("run_11_00000010.nc","r")
      x = np.array(bld["x"][:]/D-2.5)
      y = np.array(bld["y"][:]/D-1)
      z = np.array(bld["z"][:])
      k = get_ind(z,H)
      X,Y = np.meshgrid(x,y)
      var = np.array(dsk["avg_u"][k,:,:])-np.array(bld["avg_u"][k,:,:])
      mn = np.min(var)
      mx = np.max(var)
      mn = -max(abs(mn),abs(mx))
      mx =  max(abs(mn),abs(mx))
      fig = plt.figure(figsize=(6,6))
      ax  = fig.gca()
      CS = ax.contourf(X,Y,var,levels=np.arange(mn,mx,(mx-mn)/100),cmap=Colormap('cmasher:fusion_r').to_mpl(),extend="both")
      ax.axis('scaled')
      ax.set_xlabel("x (turb diams)")
      ax.set_ylabel("y (turb diams)")
      ax.margins(x=0)
      divider = make_axes_locatable(plt.gca())
      cax = divider.append_axes("bottom", size="10%", pad=0.5)
      cbar = plt.colorbar(CS,orientation="horizontal",cax=cax)
      cbar.ax.tick_params(rotation=35)
      ax.margins(x=0)
      plt.margins(x=0)
      plt.tight_layout()
      plt.savefig("22mw_disk_vs_blades_contour_tavg_4mps.png",dpi=600)
      plt.show()
      plt.close()
      bld = Dataset("run_12_00000010.nc","r")
      dsk = Dataset("run_13_00000010.nc","r")
      x = np.array(bld["x"][:]/D-2.5)
      y = np.array(bld["y"][:]/D-1)
      z = np.array(bld["z"][:])
      k = get_ind(z,H)
      X,Y = np.meshgrid(x,y)
      var = np.array(dsk["avg_u"][k,:,:])-np.array(bld["avg_u"][k,:,:])
      mn = np.min(var)
      mx = np.max(var)
      mn = -max(abs(mn),abs(mx))
      mx =  max(abs(mn),abs(mx))
      fig = plt.figure(figsize=(6,6))
      ax  = fig.gca()
      CS = ax.contourf(X,Y,var,levels=np.arange(mn,mx,(mx-mn)/100),cmap=Colormap('cmasher:fusion_r').to_mpl(),extend="both")
      ax.axis('scaled')
      ax.set_xlabel("x (turb diams)")
      ax.set_ylabel("y (turb diams)")
      ax.margins(x=0)
      divider = make_axes_locatable(plt.gca())
      cax = divider.append_axes("bottom", size="10%", pad=0.5)
      cbar = plt.colorbar(CS,orientation="horizontal",cax=cax)
      cbar.ax.tick_params(rotation=35)
      ax.margins(x=0)
      plt.margins(x=0)
      plt.tight_layout()
      plt.savefig("22mw_disk_vs_blades_contour_tavg_4mps.png",dpi=600)
      plt.show()
      plt.close()
    
    
    def plot_group_5() :
      ##########################################
      ## 22 MW blades, immersed versus not
      ##########################################
      print("*** 22 MW blades immersed vs not immersed comparison ***")
      D = 141.60905*2
      H = 167.193
      immN = Dataset("run_14_00000010.nc","r")
      immY = Dataset("run_03_00000010.nc","r")
      x = np.array(immN["x"][:]/D-2.5)
      y = np.array(immN["y"][:]/D-1)
      z = np.array(immN["z"][:])
      k = get_ind(z,H)
      X,Y = np.meshgrid(x,y)
      var = np.array(immN["avg_u"][k,:,:])-np.array(immY["avg_u"][k,:,:])
      mn = -2.5
      mx =  2.5
      fig = plt.figure(figsize=(6,6))
      ax  = fig.gca()
      CS = ax.contourf(X,Y,var,levels=np.arange(mn,mx,(mx-mn)/100),cmap=Colormap('cmasher:fusion_r').to_mpl(),extend="both")
      ax.axis('scaled')
      ax.set_xlabel("x (turb diams)")
      ax.set_ylabel("y (turb diams)")
      ax.margins(x=0)
      divider = make_axes_locatable(plt.gca())
      cax = divider.append_axes("bottom", size="10%", pad=0.5)
      cbar = plt.colorbar(CS,orientation="horizontal",cax=cax)
      cbar.ax.tick_params(rotation=35)
      ax.margins(x=0)
      plt.margins(x=0)
      plt.tight_layout()
      plt.savefig("22mw_imm_versus_no_blades_contour_tavg.png",dpi=600)
      plt.show()
      plt.close()
    
    
    def plot_group_6() :
      ##########################################
      ## 22 MW disk, immersed versus not
      ##########################################
      print("*** 22 MW disk immersed vs not immersed comparison ***")
      D = 141.60905*2
      H = 167.193
      immN = Dataset("run_16_00000010.nc","r")
      immY = Dataset("run_04_00000010.nc","r")
      x = np.array(immN["x"][:]/D-2.5)
      y = np.array(immN["y"][:]/D-1)
      z = np.array(immN["z"][:])
      k = get_ind(z,H)
      X,Y = np.meshgrid(x,y)
      var = np.array(immN["avg_u"][k,:,:])-np.array(immY["avg_u"][k,:,:])
      mn = -2.0
      mx =  2.0
      fig = plt.figure(figsize=(6,6))
      ax  = fig.gca()
      CS = ax.contourf(X,Y,var,levels=np.arange(mn,mx,(mx-mn)/100),cmap=Colormap('cmasher:fusion_r').to_mpl(),extend="both")
      ax.axis('scaled')
      ax.set_xlabel("x (turb diams)")
      ax.set_ylabel("y (turb diams)")
      ax.margins(x=0)
      divider = make_axes_locatable(plt.gca())
      cax = divider.append_axes("bottom", size="10%", pad=0.5)
      cbar = plt.colorbar(CS,orientation="horizontal",cax=cax)
      cbar.ax.tick_params(rotation=35)
      ax.margins(x=0)
      plt.margins(x=0)
      plt.tight_layout()
      plt.savefig("22mw_imm_versus_no_disk_contour_tavg.png",dpi=600)
      plt.show()
      plt.close()
    
    
    def plot_group_7() :
      ##########################################
      ## 22 MW disk, Yaw angle
      ##########################################
      print("*** 22 MW yaw angle comparison ***")
      D = 141.60905*2
      H = 167.193
      yaw00 = Dataset("run_18_00000010.nc","r")
      yaw15 = Dataset("run_19_00000010.nc","r")
      yaw30 = Dataset("run_20_00000010.nc","r")
      x = np.array(yaw00["x"][:]/D-2.5)
      y = np.array(yaw00["y"][:]/D-2)
      z = np.array(yaw00["z"][:])
      k = get_ind(z,H)
      X,Y = np.meshgrid(x,y)
    
      u = np.array(yaw00["avg_u"][k,:,:])
      v = np.array(yaw00["avg_v"][k,:,:])
      w = np.array(yaw00["avg_w"][k,:,:])
      var = np.sqrt(u*u+v*v+w*w)
      mn = 7
      mx = 14
      fig = plt.figure(figsize=(6,6))
      ax  = fig.gca()
      CS = ax.contourf(X,Y,var,levels=np.arange(mn,mx,(mx-mn)/100),cmap=Colormap('cmasher:fusion_r').to_mpl(),extend="both")
      dudy = np.abs(var-np.roll(var,(-1,0),axis=(0,1)))
      x1 = 1
      x2 = 2
      y1 = y[get_ind(y,0)+np.argmax(dudy[get_ind(y,0):,get_ind(x,x1)])]
      y2 = y[get_ind(y,0)+np.argmax(dudy[get_ind(y,0):,get_ind(x,x2)])]
      ty1 = y1
      ty2 = y2
      print(f"Top: yaw00_slope: {(y2-y1)/(x2-x1)};    yaw00_theta: {np.atan2(y2-y1,x2-x1)/np.pi*180}")
      ax.plot([x1,x2],[y1,y2],color="black")
      x1 = 1
      x2 = 2
      y1 = y[np.argmax(dudy[:get_ind(y,0),get_ind(x,x1)])]
      y2 = y[np.argmax(dudy[:get_ind(y,0),get_ind(x,x2)])]
      by1 = y1
      by2 = y2
      print(f"Bot: yaw00_slope: {(y2-y1)/(x2-x1)};    yaw00_theta: {np.atan2(y2-y1,x2-x1)/np.pi*180}")
      ax.plot([x1,x2],[y1,y2],color="black",linestyle=":",linewidth=2)
      y1 = (by1+ty1)/2
      y2 = (by2+ty2)/2
      print(f"Cen: yaw00_slope: {(y2-y1)/(x2-x1)};    yaw00_theta: {np.atan2(y2-y1,x2-x1)/np.pi*180}")
      ax.plot([x1,x2],[y1,y2],color="black",linestyle="--")
      ax.axis('scaled')
      ax.set_xlabel("x (turb diams)")
      ax.set_ylabel("y (turb diams)")
      ax.margins(x=0)
      divider = make_axes_locatable(plt.gca())
      cax = divider.append_axes("bottom", size="10%", pad=0.5)
      cbar = plt.colorbar(CS,orientation="horizontal",cax=cax)
      cbar.ax.tick_params(rotation=35)
      ax.margins(x=0)
      plt.margins(x=0)
      plt.tight_layout()
      plt.savefig("22mw_yaw00_tavg.png",dpi=600)
      plt.show()
      plt.close()
    
      u = np.array(yaw15["avg_u"][k,:,:])
      v = np.array(yaw15["avg_v"][k,:,:])
      w = np.array(yaw15["avg_w"][k,:,:])
      var = np.sqrt(u*u+v*v+w*w)
      mn = 7
      mx = 14
      fig = plt.figure(figsize=(6,6))
      ax  = fig.gca()
      CS = ax.contourf(X,Y,var,levels=np.arange(mn,mx,(mx-mn)/100),cmap=Colormap('cmasher:fusion_r').to_mpl(),extend="both")
      dudy = np.abs(var-np.roll(var,(-1,0),axis=(0,1)))
      x1 = 1
      x2 = 2
      y1 = y[get_ind(y,0)+np.argmax(dudy[get_ind(y,0):,get_ind(x,x1)])]
      y2 = y[get_ind(y,0)+np.argmax(dudy[get_ind(y,0):,get_ind(x,x2)])]
      ty1 = y1
      ty2 = y2
      print(f"Top: yaw15_slope: {(y2-y1)/(x2-x1)};    yaw15_theta: {np.atan2(y2-y1,x2-x1)/np.pi*180}")
      ax.plot([x1,x2],[y1,y2],color="black")
      x1 = 1
      x2 = 2
      y1 = y[np.argmax(dudy[:get_ind(y,0),get_ind(x,x1)])]
      y2 = y[np.argmax(dudy[:get_ind(y,0),get_ind(x,x2)])]
      by1 = y1
      by2 = y2
      print(f"Bot: yaw15_slope: {(y2-y1)/(x2-x1)};    yaw15_theta: {np.atan2(y2-y1,x2-x1)/np.pi*180}")
      ax.plot([x1,x2],[y1,y2],color="black",linestyle=":",linewidth=2)
      y1 = (by1+ty1)/2
      y2 = (by2+ty2)/2
      print(f"Cen: yaw15_slope: {(y2-y1)/(x2-x1)};    yaw15_theta: {np.atan2(y2-y1,x2-x1)/np.pi*180}")
      ax.plot([x1,x2],[y1,y2],color="black",linestyle="--")
      ax.axis('scaled')
      ax.set_xlabel("x (turb diams)")
      ax.set_ylabel("y (turb diams)")
      ax.margins(x=0)
      divider = make_axes_locatable(plt.gca())
      cax = divider.append_axes("bottom", size="10%", pad=0.5)
      cbar = plt.colorbar(CS,orientation="horizontal",cax=cax)
      cbar.ax.tick_params(rotation=35)
      ax.margins(x=0)
      plt.margins(x=0)
      plt.tight_layout()
      plt.savefig("22mw_yaw15_tavg.png",dpi=600)
      plt.show()
      plt.close()
    
      u = np.array(yaw30["avg_u"][k,:,:])
      v = np.array(yaw30["avg_v"][k,:,:])
      w = np.array(yaw30["avg_w"][k,:,:])
      var = np.sqrt(u*u+v*v+w*w)
      mn = 7
      mx = 14
      fig = plt.figure(figsize=(6,6))
      ax  = fig.gca()
      CS = ax.contourf(X,Y,var,levels=np.arange(mn,mx,(mx-mn)/100),cmap=Colormap('cmasher:fusion_r').to_mpl(),extend="both")
      dudy = np.abs(var-np.roll(var,(-1,0),axis=(0,1)))
      x1 = 1
      x2 = 2
      y1 = y[get_ind(y,0)+np.argmax(dudy[get_ind(y,0):,get_ind(x,x1)])]
      y2 = y[get_ind(y,0)+np.argmax(dudy[get_ind(y,0):,get_ind(x,x2)])]
      ty1 = y1
      ty2 = y2
      print(f"Top: yaw30_slope: {(y2-y1)/(x2-x1)};    yaw30_theta: {np.atan2(y2-y1,x2-x1)/np.pi*180}")
      ax.plot([x1,x2],[y1,y2],color="black")
      x1 = 1
      x2 = 2
      y1 = y[np.argmax(dudy[:get_ind(y,0),get_ind(x,x1)])]
      y2 = y[np.argmax(dudy[:get_ind(y,0),get_ind(x,x2)])]
      by1 = y1
      by2 = y2
      print(f"Bot: yaw30_slope: {(y2-y1)/(x2-x1)};    yaw30_theta: {np.atan2(y2-y1,x2-x1)/np.pi*180}")
      ax.plot([x1,x2],[y1,y2],color="black",linestyle=":",linewidth=2)
      y1 = (by1+ty1)/2
      y2 = (by2+ty2)/2
      print(f"Cen: yaw30_slope: {(y2-y1)/(x2-x1)};    yaw30_theta: {np.atan2(y2-y1,x2-x1)/np.pi*180}")
      ax.plot([x1,x2],[y1,y2],color="black",linestyle="--")
      ax.axis('scaled')
      ax.set_xlabel("x (turb diams)")
      ax.set_ylabel("y (turb diams)")
      ax.margins(x=0)
      divider = make_axes_locatable(plt.gca())
      cax = divider.append_axes("bottom", size="10%", pad=0.5)
      cbar = plt.colorbar(CS,orientation="horizontal",cax=cax)
      cbar.ax.tick_params(rotation=35)
      ax.margins(x=0)
      plt.margins(x=0)
      plt.tight_layout()
      plt.savefig("22mw_yaw30_tavg.png",dpi=600)
      plt.show()
      plt.close()
    
      var00 = (np.array(yaw00["avg_up_up"][k,:,:]) + np.array(yaw00["avg_vp_vp"][k,:,:]) + np.array(yaw00["avg_wp_wp"][k,:,:]))/2
      var15 = (np.array(yaw15["avg_up_up"][k,:,:]) + np.array(yaw15["avg_vp_vp"][k,:,:]) + np.array(yaw15["avg_wp_wp"][k,:,:]))/2
      var30 = (np.array(yaw30["avg_up_up"][k,:,:]) + np.array(yaw30["avg_vp_vp"][k,:,:]) + np.array(yaw30["avg_wp_wp"][k,:,:]))/2
      mn = min(np.min(var00),np.min(var15),np.min(var30))
      mx = min(np.max(var00),np.max(var15),np.max(var30))
      fig = plt.figure(figsize=(6,6))
      ax  = fig.gca()
      CS = ax.contourf(X,Y,var00,levels=np.arange(mn,mx,(mx-mn)/100),cmap=Colormap('cmasher:fusion_r').to_mpl(),extend="both")
      ax.axis('scaled')
      ax.set_xlabel("x (turb diams)")
      ax.set_ylabel("y (turb diams)")
      ax.margins(x=0)
      divider = make_axes_locatable(plt.gca())
      cax = divider.append_axes("bottom", size="10%", pad=0.5)
      cbar = plt.colorbar(CS,orientation="horizontal",cax=cax)
      cbar.ax.tick_params(rotation=35)
      ax.margins(x=0)
      plt.margins(x=0)
      plt.tight_layout()
      plt.savefig("22mw_yaw00_restke_tavg.png",dpi=600)
      plt.show()
      plt.close()
      fig = plt.figure(figsize=(6,6))
      ax  = fig.gca()
      CS = ax.contourf(X,Y,var15,levels=np.arange(mn,mx,(mx-mn)/100),cmap=Colormap('cmasher:fusion_r').to_mpl(),extend="both")
      ax.axis('scaled')
      ax.set_xlabel("x (turb diams)")
      ax.set_ylabel("y (turb diams)")
      ax.margins(x=0)
      divider = make_axes_locatable(plt.gca())
      cax = divider.append_axes("bottom", size="10%", pad=0.5)
      cbar = plt.colorbar(CS,orientation="horizontal",cax=cax)
      cbar.ax.tick_params(rotation=35)
      ax.margins(x=0)
      plt.margins(x=0)
      plt.tight_layout()
      plt.savefig("22mw_yaw15_restke_tavg.png",dpi=600)
      plt.show()
      plt.close()
      fig = plt.figure(figsize=(6,6))
      ax  = fig.gca()
      CS = ax.contourf(X,Y,var30,levels=np.arange(mn,mx,(mx-mn)/100),cmap=Colormap('cmasher:fusion_r').to_mpl(),extend="both")
      ax.axis('scaled')
      ax.set_xlabel("x (turb diams)")
      ax.set_ylabel("y (turb diams)")
      ax.margins(x=0)
      divider = make_axes_locatable(plt.gca())
      cax = divider.append_axes("bottom", size="10%", pad=0.5)
      cbar = plt.colorbar(CS,orientation="horizontal",cax=cax)
      cbar.ax.tick_params(rotation=35)
      ax.margins(x=0)
      plt.margins(x=0)
      plt.tight_layout()
      plt.savefig("22mw_yaw30_restke_tavg.png",dpi=600)
      plt.show()
      plt.close()
    
    
    plot_group_1()
    plot_group_2()
    plot_group_3()
    plot_group_4()
    plot_group_5()
    plot_group_6()
    plot_group_7()
    
    

    back to top

    Software Heritage — Copyright (C) 2015–2025, The Software Heritage developers. License: GNU AGPLv3+.
    The source code of Software Heritage itself is available on our development forge.
    The source code files archived by Software Heritage are available under their own copyright and licenses.
    Terms of use: Archive access, API— Content policy— Contact— JavaScript license information— Web API