In [1]:
cd D:\Dropbox\ucla\research\perry\github-desktop\spardesign2
Before starting, we have created a path called "sandia_blade".
In [2]:
ls
Inside the path "sandia_blade", there is (1) a blade definition file "blade_definition.csv", and (2) a path "airfoils" that contains nondimensional airfoil coordinates.
In [3]:
ls sandia_blade
In [4]:
import scripts.blade as bl
b = bl.Blade(name='Sandia blade SNL100-00', blade_path='sandia_blade')
This creates a blade name "Sandia blade SNL100-00", and looks in the path "sandia_blade" for the blade definition file "blade_definition.csv". It also creates a new folder for each blade station (station paths), located inside the path "sandia_blade".
In [5]:
ls sandia_blade
If our blade definition file was named something else, we could have called:
b = bl.Blade(name='Sandia blade SNL100-00', blade_path='sandia_blade', defn_filename='some_file.csv')
Next, we'll copy all the airfoil coordinates from "sandia_blade/airfoils" into the appropriate station path.
In [6]:
b.copy_all_airfoil_coords()
Next, we can plot the (dimensional) airfoils at each blade station.
In [7]:
for station in b.list_of_stations:
station.read_airfoil_coords()
station.plot_airfoil_coords(show_flag=True, savefig_flag=True)
# show_flag : bool, show plots on the screen
# save_fig_flag : bool (default is True), save airfoil plots to each station path
Now, let's explore all the blade definition data that we've imported into the variable b.
We can see how many blade stations there are:
In [8]:
b.number_of_stations
Out[8]:
Each of the blade stations can be accessed from the list b.list_of_stations
In [9]:
b.list_of_stations
Out[9]:
This may look like nonsense, but each item in the list is a Python object. Notice that there are 34 items in the list above.
We can access individual blade station objects by specifying an index:
In [10]:
b.list_of_stations[25]
Out[10]:
There are many attributes for each blade station.
We can access the station number:
In [11]:
b.list_of_stations[25].station_num
Out[11]:
Notice that the index of list_of_stations is one off from the attribute .station_num. This is because Python lists start indexing at zero.
We can also access the station path:
In [12]:
b.list_of_stations[25].station_path
Out[12]:
The attributes for each blade station are organized into three categories:
1. coordinates : `<station>.coords` (where the station is located)
2. airfoil properties : `<station>.airfoil` (external airfoil dimensions)
3. structure properties : `<station>.structure` (internal structure dimensions)
In [13]:
print b.list_of_stations[25].coords
In [14]:
print (b.list_of_stations[25].coords.x1, b.list_of_stations[25].coords.x2, b.list_of_stations[25].coords.x3)
Here, x1 is the spanwise coordinate, x2 is the edgewise coordinate, and x3 is the flapwise coordinate.
In [15]:
print b.list_of_stations[25].airfoil
We can access individual attributes, like the airfoil name, pitch axis fraction, chord length, and twist:
In [16]:
b.list_of_stations[25].airfoil.name
Out[16]:
In [17]:
b.list_of_stations[25].airfoil.pitch_axis
Out[17]:
In [18]:
b.list_of_stations[25].airfoil.chord
Out[18]:
In [19]:
b.list_of_stations[25].airfoil.twist
Out[19]:
We can also access the path of the nondimensional airfoil coordinates:
In [20]:
b.list_of_stations[25].airfoil.path
Out[20]:
In [21]:
print b.list_of_stations[25].structure
We can access individual dimensions, too.
For example, we can access the spar cap height:
In [22]:
b.list_of_stations[25].structure.spar_cap.height
Out[22]:
Or, we can access the height of the uniaxial GFRP layer in the trailing edge reinforcement:
In [23]:
b.list_of_stations[25].structure.TE_reinforcement.height_uniax
Out[23]:
In [24]:
b.plot_chord_schedule()
We can also plot the twist vs. span:
In [25]:
b.plot_twist_schedule()
In [25]: